Add dev update resource api.

This commit is contained in:
2025-12-07 19:14:14 +08:00
parent 6cabff8f8d
commit a3de195eca
3 changed files with 64 additions and 3 deletions

View File

@@ -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)
}
}

View File

@@ -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
}

View File

@@ -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