diff --git a/cmds/serve.go b/cmds/serve.go index 707c3f4..f901b53 100644 --- a/cmds/serve.go +++ b/cmds/serve.go @@ -104,8 +104,11 @@ var serveCmd = &cobra.Command{ apiGroup := backend.NewGroup("/api"). Use(midHandlers.CheckRefreshToken). Use(midHandlers.CheckAccessToken) - apiGroup.GET("/images", apis.GetImages) + apiGroup.DELETE("/alias/:id", apis.DeleteAlias) + apiGroup.DELETE("/image/:id", apis.DeleteImage) apiGroup.GET("/aliases", apis.GetAliases) + apiGroup.GET("/images", apis.GetImages) + apiGroup.POST("/image", apis.PostImage) apiGroup.PUT("/image/:id/aliases", apis.PutImageAliases) authGroup := backend.NewGroup("/auth") 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 }