diff --git a/server/api/dev.go b/server/api/dev.go index 9c81f21..6647d54 100644 --- a/server/api/dev.go +++ b/server/api/dev.go @@ -1,7 +1,10 @@ package api import ( + "log/slog" + "nysoure/server/dao" "nysoure/server/middleware" + "time" "nysoure/server/search" @@ -20,10 +23,40 @@ func rebuildSearchIndex(c fiber.Ctx) error { }) } +func updateResourceReleaseDate(c fiber.Ctx) error { + type Request struct { + ResourceID uint `json:"resource_id"` + ReleaseDate string `json:"release_date"` + } + var req Request + if err := c.Bind().JSON(req); err != nil { + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "error": "Invalid request body: " + err.Error(), + }) + } + date, err := time.Parse("2006-01-02", req.ReleaseDate) + if err != nil { + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "error": "Invalid date format: " + err.Error(), + }) + } + err = dao.UpdateResourceReleaseDate(req.ResourceID, date) + if err != nil { + slog.Error("Failed to update release date", "error", err) + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "error": "Failed to update release date", + }) + } + return c.JSON(fiber.Map{ + "message": "Release date updated successfully", + }) +} + func AddDevAPI(router fiber.Router) { devGroup := router.Group("/dev") devGroup.Use(middleware.DevMiddleware()) { devGroup.Post("/rebuild_search_index", rebuildSearchIndex) + devGroup.Post("/update_resource_release_date", updateResourceReleaseDate) } } diff --git a/server/dao/resource.go b/server/dao/resource.go index 660415a..ec77ce2 100644 --- a/server/dao/resource.go +++ b/server/dao/resource.go @@ -704,3 +704,14 @@ func GetResourceOwnerID(resourceID uint) (uint, error) { } return uid, nil } + +func UpdateResourceReleaseDate(resourceID uint, releaseDate time.Time) error { + result := db.Model(&model.Resource{}).Where("id = ?", resourceID).Update("release_date", releaseDate) + if result.Error != nil { + return result.Error + } + if result.RowsAffected == 0 { + return model.NewNotFoundError("Resource not found") + } + return nil +} diff --git a/server/service/resource.go b/server/service/resource.go index c6dfeeb..f917953 100644 --- a/server/service/resource.go +++ b/server/service/resource.go @@ -30,7 +30,7 @@ type ResourceParams struct { Title string `json:"title" binding:"required"` AlternativeTitles []string `json:"alternative_titles"` Links []model.Link `json:"links"` - ReleaseDate *time.Time `json:"release_date"` + ReleaseDate string `json:"release_date"` Tags []uint `json:"tags"` Article string `json:"article"` Images []uint `json:"images"` @@ -102,12 +102,20 @@ func CreateResource(uid uint, params *ResourceParams) (uint, error) { ImageID: imageID, } } + var date *time.Time + if params.ReleaseDate != "" { + parsedDate, err := time.Parse("2006-01-02", params.ReleaseDate) + if err != nil { + return 0, model.NewRequestError("Invalid release date format, expected YYYY-MM-DD") + } + date = &parsedDate + } r := model.Resource{ Title: params.Title, AlternativeTitles: params.AlternativeTitles, Article: params.Article, Links: params.Links, - ReleaseDate: params.ReleaseDate, + ReleaseDate: date, Images: images, Tags: tags, UserID: uid, @@ -531,11 +539,20 @@ func UpdateResource(uid, rid uint, params *ResourceParams) error { } } + var date *time.Time + if params.ReleaseDate != "" { + parsedDate, err := time.Parse("2006-01-02", params.ReleaseDate) + if err != nil { + return model.NewRequestError("Invalid release date format, expected YYYY-MM-DD") + } + date = &parsedDate + } + r.Title = params.Title r.AlternativeTitles = params.AlternativeTitles r.Article = params.Article r.Links = params.Links - r.ReleaseDate = params.ReleaseDate + r.ReleaseDate = date r.Gallery = gallery r.GalleryNsfw = nsfw r.Characters = characters