96 lines
2.3 KiB
V
96 lines
2.3 KiB
V
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
|
|
status: models.active_status
|
|
}
|
|
|
|
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")
|
|
} |