package api import ( "database/sql" "net/http" "atlas9.dev/c/core" "atlas9.dev/c/core/dbi" "atlas9.dev/c/demo/bots" "atlas9.dev/c/demo/lib" ) type BotsImpl struct { DB *sql.DB Guard lib.Guard Store dbi.Factory[bots.BotStore] } func (b *BotsImpl) Save(w http.ResponseWriter, r *http.Request) { var req Bots_SaveReq if read(w, r, &req) { return } if check(w, r, b.Guard, bots.Cap_Bots_Write, req.Bot.Tenant, "") { return } ctx := r.Context() err := dbi.ReadWrite(ctx, b.DB, func(tx dbi.DBI) error { return b.Store(tx).Save(ctx, &req.Bot) }) write(ctx, w, err, Bots_SaveRes{Bot: req.Bot}) } func (b *BotsImpl) Get(w http.ResponseWriter, r *http.Request) { var req Bots_GetReq if read(w, r, &req) { return } if check(w, r, b.Guard, bots.Cap_Bots_Read, req.Tenant, "") { return } ctx := r.Context() var bot bots.Bot err := dbi.ReadOnly(ctx, b.DB, func(tx dbi.DBI) error { return b.Store(tx).Get(ctx, req.Tenant, req.ID, &bot) }) write(ctx, w, err, Bots_GetRes{Bot: bot}) } func (b *BotsImpl) List(w http.ResponseWriter, r *http.Request) { var req Bots_ListReq if read(w, r, &req) { return } if check(w, r, b.Guard, bots.Cap_Bots_Read, req.Tenant, "") { return } ctx := r.Context() var page core.Page[bots.Bot] err := dbi.ReadOnly(ctx, b.DB, func(tx dbi.DBI) error { return b.Store(tx).List(ctx, req.Tenant, req.Page, &page) }) var res Bots_ListRes res.Page.Cursor = page.Cursor res.Page.Items = page.Items write(ctx, w, err, res) } func (b *BotsImpl) Delete(w http.ResponseWriter, r *http.Request) { var req Bots_DeleteReq if read(w, r, &req) { return } if check(w, r, b.Guard, bots.Cap_Bots_Write, req.Tenant, "") { return } ctx := r.Context() err := dbi.ReadWrite(ctx, b.DB, func(tx dbi.DBI) error { return b.Store(tx).Delete(ctx, req.Tenant, req.ID) }) write(ctx, w, err, Bots_DeleteRes{}) }