module controllers import repository import veb import models import json import utils pub struct IntegrationControllers { pub mut: repo repository.Repo } @['/:quizID'; get] fn (mut c IntegrationControllers) get(mut ctx veb.Context,quizID i64) veb.Result { account_id := utils.jwt_auth(mut ctx) if account_id == ""{ return ctx.request_error("empty jwt") } integration := c.repo.get_integration_by_id(quizID) or { return ctx.server_error('Error getting integration: $err') } return ctx.json(integration) } @['/:quizID'; post] fn (mut c IntegrationControllers) create(mut ctx veb.Context,quizID i64) veb.Result { account_id := utils.jwt_auth(mut ctx) if account_id==""{ return ctx.request_error("empty jwt") } req := json.decode(models.TelegramIntegrationCreateReq,ctx.req.data)or { return ctx.request_error('Failed parse request body: $err') } mut integration := models.TelegramIntegration{ account_id: account_id quiz_id: quizID bot_token: req.bot_token repeatable: false bot_name: '' deleted: false } if integration.account_id == "" || integration.bot_token == "" || integration.quiz_id==0{ return ctx.request_error('Missing required fields') } id := c.repo.create_integration(integration) or { return ctx.server_error('Failed create integration: $err') } integration.id = id return ctx.json(integration) } @['/:quizID'; patch] fn (mut c IntegrationControllers) update(mut ctx veb.Context,quizID int) veb.Result { account_id := utils.jwt_auth(mut ctx) if account_id == ""{ return ctx.request_error("empty jwt") } req := json.decode(models.TelegramIntegrationUpdateReq,ctx.req.data)or { return ctx.request_error('Failed parse request body: $err') } if req.id== 0 || req.bot_token == ""{ return ctx.request_error('Missing required fields') } c.repo.update_bot_token(req.id,req.bot_token) or { return ctx.server_error('Failed update integration: $err') } return ctx.ok("OK") } @['/:quizID'; delete] fn (mut c IntegrationControllers) delete(mut ctx veb.Context,quizID i64) veb.Result { account_id := utils.jwt_auth(mut ctx) if account_id==""{ return ctx.request_error("empty jwt") } if quizID == 0{ return ctx.request_error('quizID dont be 0') } c.repo.soft_delete_integration(quizID)or { return ctx.server_error('Failed soft delete integration: $err') } return ctx.ok("OK") }