From 5e7ee7cb011978658ab0857bca796f9a781fc664 Mon Sep 17 00:00:00 2001 From: Yi-Ting Shih Date: Sun, 7 Dec 2025 22:26:55 +0800 Subject: [PATCH] Feat: add delete endpoints --- handlers/api/deleteAlias.go | 24 ++++++++++++++++++- handlers/api/deleteImage.go | 24 ++++++++++++++++++- implements/bunDatabase.go | 46 +++++++++++++++++++++++++++++++++++++ interfaces/database.go | 10 ++++++++ 4 files changed, 102 insertions(+), 2 deletions(-) diff --git a/handlers/api/deleteAlias.go b/handlers/api/deleteAlias.go index 8cd61ec..137797c 100644 --- a/handlers/api/deleteAlias.go +++ b/handlers/api/deleteAlias.go @@ -2,7 +2,9 @@ package api import ( "net/http" + "strconv" + "gitea.konchin.com/go2025/backend/middlewares" "gitea.konchin.com/go2025/backend/utils" "github.com/uptrace/bunrouter" ) @@ -19,6 +21,26 @@ import ( func (self *Handlers) DeleteAlias( w http.ResponseWriter, req bunrouter.Request, ) error { - // TODO + ctx := req.Context() + + rawAliasId := req.Param("id") + aliasId, err := strconv.ParseInt(rawAliasId, 10, 64) + if err != nil { + return middlewares.HTTPError{ + StatusCode: http.StatusBadRequest, + Message: "failed to parse aliasId", + OriginError: err, + } + } + + err = self.db.DeleteAlias(ctx, aliasId) + if err != nil { + return middlewares.HTTPError{ + StatusCode: http.StatusInternalServerError, + Message: "failed to delete alias", + OriginError: err, + } + } + return utils.Success(w) } diff --git a/handlers/api/deleteImage.go b/handlers/api/deleteImage.go index 816ccb7..41d5a4f 100644 --- a/handlers/api/deleteImage.go +++ b/handlers/api/deleteImage.go @@ -2,7 +2,9 @@ package api import ( "net/http" + "strconv" + "gitea.konchin.com/go2025/backend/middlewares" "gitea.konchin.com/go2025/backend/utils" "github.com/uptrace/bunrouter" ) @@ -19,6 +21,26 @@ import ( func (self *Handlers) DeleteImage( w http.ResponseWriter, req bunrouter.Request, ) error { - // TODO + ctx := req.Context() + + rawImageId := req.Param("id") + imageId, err := strconv.ParseInt(rawImageId, 10, 64) + if err != nil { + return middlewares.HTTPError{ + StatusCode: http.StatusBadRequest, + Message: "failed to parse imageId", + OriginError: err, + } + } + + err = self.db.DeleteImage(ctx, imageId) + if err != nil { + return middlewares.HTTPError{ + StatusCode: http.StatusInternalServerError, + Message: "failed to delete image", + OriginError: err, + } + } + return utils.Success(w) } diff --git a/implements/bunDatabase.go b/implements/bunDatabase.go index 9a8944e..ea87285 100644 --- a/implements/bunDatabase.go +++ b/implements/bunDatabase.go @@ -212,3 +212,49 @@ func (self *BunDatabase) InsertImage( Exec(ctx) return err } + +func (self *BunDatabase) DeleteImage( + ctx context.Context, + imageId int64, +) error { + return self.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error { + _, err := self.db.NewDelete(). + Model((*models.Image)(nil)). + Where("id = ?", imageId). + Exec(ctx) + if err != nil { + return err + } + _, err = self.db.NewDelete(). + Model((*models.AliasImage)(nil)). + Where("image_id = ?", imageId). + Exec(ctx) + if err != nil { + return err + } + return nil + }) +} + +func (self *BunDatabase) DeleteAlias( + ctx context.Context, + aliasId int64, +) error { + return self.db.RunInTx(ctx, nil, func(ctx context.Context, tx bun.Tx) error { + _, err := self.db.NewDelete(). + Model((*models.Alias)(nil)). + Where("id = ?", aliasId). + Exec(ctx) + if err != nil { + return err + } + _, err = self.db.NewDelete(). + Model((*models.AliasImage)(nil)). + Where("alias_id = ?", aliasId). + Exec(ctx) + if err != nil { + return err + } + return nil + }) +} diff --git a/interfaces/database.go b/interfaces/database.go index 84c14c9..b159ba7 100644 --- a/interfaces/database.go +++ b/interfaces/database.go @@ -47,4 +47,14 @@ type Database interface { ctx context.Context, image *models.Image, ) error + + DeleteImage( + ctx context.Context, + imageId int64, + ) error + + DeleteAlias( + ctx context.Context, + aliasId int64, + ) error }