diff --git a/routers/controllers/share.go b/routers/controllers/share.go index 3aa549ca..9899d98b 100644 --- a/routers/controllers/share.go +++ b/routers/controllers/share.go @@ -72,6 +72,16 @@ func DeleteShare(c *gin.Context) { c.JSON(200, serializer.Response{}) } +func BatchDeleteShare(c *gin.Context) { + service := ParametersFromContext[*share.BatchDeleteShareService](c, share.BatchDeleteParamCtx{}) + err := service.Delete(c) + if err != nil { + c.JSON(200, serializer.Err(c, err)) + } + + c.JSON(200, serializer.Response{}) +} + func ShareRedirect(c *gin.Context) { service := ParametersFromContext[*share.ShortLinkRedirectService](c, share.ShortLinkRedirectParamCtx{}) c.Redirect(http.StatusFound, service.RedirectTo(c)) diff --git a/routers/router.go b/routers/router.go index 8b357d82..70f345ea 100644 --- a/routers/router.go +++ b/routers/router.go @@ -38,7 +38,6 @@ func InitRouter(dep dependency.Dep) *gin.Engine { l.Info("Current running mode: Slave.") return initSlaveRouter(dep) - } func newGinEngine(dep dependency.Dep) *gin.Engine { @@ -842,6 +841,12 @@ func initMasterRouter(dep dependency.Dep) *gin.Engine { middleware.HashID(hashid.ShareID), controllers.DeleteShare, ) + share.DELETE("", + middleware.LoginRequired(), + middleware.RequiredScopes(types.ScopeSharesWrite), + controllers.FromJSON[sharesvc.BatchDeleteShareService](sharesvc.BatchDeleteParamCtx{}), + controllers.BatchDeleteShare, + ) //// 获取README文本文件内容 //share.GET("readme/:id", // middleware.CheckShareUnlocked(), diff --git a/service/share/manage.go b/service/share/manage.go index b8ad4d1d..e9049f1b 100644 --- a/service/share/manage.go +++ b/service/share/manage.go @@ -27,8 +27,35 @@ type ( ShowReadMe bool `json:"show_readme"` } ShareCreateParamCtx struct{} + + BatchDeleteShareService struct { + ShareIDs []string `json:"ids" binding:"required"` + } + BatchDeleteParamCtx struct{} ) +func (s *BatchDeleteShareService) Delete(c *gin.Context) error { + dep := dependency.FromContext(c) + shareClient := dep.ShareClient() + + var shareIDs []int + + for _, v := range s.ShareIDs { + share, err := shareClient.GetByHashID(c, v) + if err != nil { + return err + } + + shareIDs = append(shareIDs, share.ID) + } + + if err := shareClient.DeleteBatch(c, shareIDs); err != nil { + return serializer.NewError(serializer.CodeDBError, "Failed to delete shares", err) + } + + return nil +} + // Upsert 创建或更新分享 func (service *ShareCreateService) Upsert(c *gin.Context, existed int) (string, error) { dep := dependency.FromContext(c)