Files
kandev/apps/backend/internal/gitlab/controller_watch_reset.go
T
2026-07-21 23:24:22 +01:00

118 lines
3.4 KiB
Go

package gitlab
import (
"net/http"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
func (c *Controller) httpPreviewResetReviewWatch(ctx *gin.Context) {
id := ctx.Param("id")
if !c.requireReviewWatchInWorkspace(ctx, id) {
return
}
n, err := c.service.PreviewResetReviewWatch(ctx.Request.Context(), id)
if err != nil {
c.writeWatchResetError(ctx, "preview reset review watch", err)
return
}
ctx.JSON(http.StatusOK, gin.H{"taskCount": n})
}
func (c *Controller) httpResetReviewWatch(ctx *gin.Context) {
id := ctx.Param("id")
if !c.requireReviewWatchInWorkspace(ctx, id) {
return
}
n, err := c.service.ResetReviewWatch(ctx.Request.Context(), id)
if err != nil {
c.writeWatchResetError(ctx, "reset review watch", err)
return
}
ctx.JSON(http.StatusOK, gin.H{"tasksDeleted": n})
}
func (c *Controller) httpPreviewResetIssueWatch(ctx *gin.Context) {
id := ctx.Param("id")
if !c.requireIssueWatchInWorkspace(ctx, id) {
return
}
n, err := c.service.PreviewResetIssueWatch(ctx.Request.Context(), id)
if err != nil {
c.writeWatchResetError(ctx, "preview reset issue watch", err)
return
}
ctx.JSON(http.StatusOK, gin.H{"taskCount": n})
}
func (c *Controller) httpResetIssueWatch(ctx *gin.Context) {
id := ctx.Param("id")
if !c.requireIssueWatchInWorkspace(ctx, id) {
return
}
n, err := c.service.ResetIssueWatch(ctx.Request.Context(), id)
if err != nil {
c.writeWatchResetError(ctx, "reset issue watch", err)
return
}
ctx.JSON(http.StatusOK, gin.H{"tasksDeleted": n})
}
func (c *Controller) requireReviewWatchInWorkspace(ctx *gin.Context, id string) bool {
watch, err := c.service.GetReviewWatch(ctx.Request.Context(), id)
if err != nil {
c.writeWatchResetError(ctx, "load review watch", err)
return false
}
if watch == nil || watch.WorkspaceID != c.workspaceID(ctx) {
ctx.JSON(http.StatusNotFound, gin.H{responseErrorKey: "review watch not found"})
return false
}
return true
}
func (c *Controller) requireIssueWatchInWorkspace(ctx *gin.Context, id string) bool {
watch, err := c.service.GetIssueWatch(ctx.Request.Context(), id)
if err != nil {
c.writeWatchResetError(ctx, "load issue watch", err)
return false
}
if watch == nil || watch.WorkspaceID != c.workspaceID(ctx) {
ctx.JSON(http.StatusNotFound, gin.H{responseErrorKey: "issue watch not found"})
return false
}
return true
}
func (c *Controller) requireReviewWatchDeleteInWorkspace(ctx *gin.Context, id string) bool {
watch, err := c.service.GetReviewWatchIncludingDeleting(ctx.Request.Context(), id)
if err != nil {
c.writeWatchResetError(ctx, "load review watch", err)
return false
}
if watch == nil || watch.WorkspaceID != c.workspaceID(ctx) {
ctx.JSON(http.StatusNotFound, gin.H{responseErrorKey: "review watch not found"})
return false
}
return true
}
func (c *Controller) requireIssueWatchDeleteInWorkspace(ctx *gin.Context, id string) bool {
watch, err := c.service.GetIssueWatchIncludingDeleting(ctx.Request.Context(), id)
if err != nil {
c.writeWatchResetError(ctx, "load issue watch", err)
return false
}
if watch == nil || watch.WorkspaceID != c.workspaceID(ctx) {
ctx.JSON(http.StatusNotFound, gin.H{responseErrorKey: "issue watch not found"})
return false
}
return true
}
func (c *Controller) writeWatchResetError(ctx *gin.Context, op string, err error) {
c.logger.Error(op, zap.Error(err))
ctx.JSON(http.StatusInternalServerError, gin.H{responseErrorKey: op + " failed"})
}