feat: migrate watchlist module to modular domain pattern
This commit is contained in:
95
internal/watchlist/handler/handler.go
Normal file
95
internal/watchlist/handler/handler.go
Normal file
@@ -0,0 +1,95 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"mal/internal/domain"
|
||||
"mal/internal/server"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type WatchlistHandler struct {
|
||||
svc domain.WatchlistService
|
||||
}
|
||||
|
||||
func NewWatchlistHandler(svc domain.WatchlistService) *WatchlistHandler {
|
||||
return &WatchlistHandler{svc: svc}
|
||||
}
|
||||
|
||||
func (h *WatchlistHandler) Register(r *gin.Engine) {
|
||||
r.POST("/api/watchlist", h.HandleUpdateWatchlist)
|
||||
r.DELETE("/api/watchlist/:id", h.HandleDeleteWatchlist)
|
||||
r.DELETE("/api/continue-watching/:id", h.HandleDeleteContinueWatching)
|
||||
r.GET("/watchlist", h.HandleGetWatchlist)
|
||||
}
|
||||
|
||||
func (h *WatchlistHandler) HandleUpdateWatchlist(c *gin.Context) {
|
||||
userID := "" // TODO: get from auth context
|
||||
animeID, _ := strconv.ParseInt(c.PostForm("anime_id"), 10, 64)
|
||||
status := c.PostForm("status")
|
||||
|
||||
if animeID <= 0 || status == "" {
|
||||
c.Status(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
err := h.svc.UpdateEntry(c.Request.Context(), userID, animeID, status)
|
||||
if err != nil {
|
||||
c.Status(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
c.Status(http.StatusOK)
|
||||
}
|
||||
|
||||
func (h *WatchlistHandler) HandleDeleteWatchlist(c *gin.Context) {
|
||||
userID := "" // TODO: get from auth context
|
||||
animeID, _ := strconv.ParseInt(c.Param("id"), 10, 64)
|
||||
|
||||
if animeID <= 0 {
|
||||
c.Status(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
err := h.svc.RemoveEntry(c.Request.Context(), userID, animeID)
|
||||
if err != nil {
|
||||
c.Status(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
c.Status(http.StatusOK)
|
||||
}
|
||||
|
||||
func (h *WatchlistHandler) HandleDeleteContinueWatching(c *gin.Context) {
|
||||
userID := "" // TODO: get from auth context
|
||||
animeID, _ := strconv.ParseInt(c.Param("id"), 10, 64)
|
||||
|
||||
if animeID <= 0 {
|
||||
c.Status(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
err := h.svc.DeleteContinueWatching(c.Request.Context(), userID, animeID)
|
||||
if err != nil {
|
||||
c.Status(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
c.Status(http.StatusOK)
|
||||
}
|
||||
|
||||
func (h *WatchlistHandler) HandleGetWatchlist(c *gin.Context) {
|
||||
userID := "" // TODO: get from auth context
|
||||
entries, err := h.svc.GetWatchlist(c.Request.Context(), userID)
|
||||
if err != nil {
|
||||
c.Status(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
c.HTML(http.StatusOK, "watchlist.gohtml", gin.H{
|
||||
"Entries": entries,
|
||||
"CurrentPath": "/watchlist",
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user