Add folder validation to CreateMediaItem handler
- Check library has folders before creating media items - Return HTTP 400 with clear error message if no folders - Proper error code (400) instead of generic 500 - Improved user feedback for invalid operations - Inject LibraryService into MediaHandler Fixes: TestCollectionsBulkOperations HTTP 500 errors Related: Service layer validation commit
This commit is contained in:
+4
-1
@@ -92,6 +92,9 @@ func main() {
|
|||||||
// Create sync queue processor
|
// Create sync queue processor
|
||||||
queueProcessor := sync.NewSyncQueueProcessor(queries)
|
queueProcessor := sync.NewSyncQueueProcessor(queries)
|
||||||
|
|
||||||
|
// Create library service
|
||||||
|
libraryService := services.NewLibraryService(queries)
|
||||||
|
|
||||||
// Create worker for background tasks
|
// Create worker for background tasks
|
||||||
worker := services.NewWorker(3)
|
worker := services.NewWorker(3)
|
||||||
|
|
||||||
@@ -107,7 +110,7 @@ func main() {
|
|||||||
|
|
||||||
// NEW: Create refactored handlers
|
// NEW: Create refactored handlers
|
||||||
collectionHandler := handlers.NewCollectionHandler(queries, connManager)
|
collectionHandler := handlers.NewCollectionHandler(queries, connManager)
|
||||||
mediaHandler := handlers.NewMediaHandler(queries, worker)
|
mediaHandler := handlers.NewMediaHandler(queries, libraryService, worker)
|
||||||
searchHandler := handlers.NewSearchHandler(queries)
|
searchHandler := handlers.NewSearchHandler(queries)
|
||||||
matchingHandler := handlers.NewMatchingHandler(queries, connManager)
|
matchingHandler := handlers.NewMatchingHandler(queries, connManager)
|
||||||
|
|
||||||
|
|||||||
@@ -84,13 +84,15 @@ type UpdateMediaHighlightRequest struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MediaHandler struct {
|
type MediaHandler struct {
|
||||||
db *database.Queries
|
db *database.Queries
|
||||||
worker *services.Worker
|
worker *services.Worker
|
||||||
|
libraryService *services.LibraryService
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMediaHandler(db *database.Queries, worker ...*services.Worker) *MediaHandler {
|
func NewMediaHandler(db *database.Queries, libraryService *services.LibraryService, worker ...*services.Worker) *MediaHandler {
|
||||||
mh := &MediaHandler{
|
mh := &MediaHandler{
|
||||||
db: db,
|
db: db,
|
||||||
|
libraryService: libraryService,
|
||||||
}
|
}
|
||||||
if len(worker) > 0 && worker[0] != nil {
|
if len(worker) > 0 && worker[0] != nil {
|
||||||
mh.worker = worker[0]
|
mh.worker = worker[0]
|
||||||
@@ -913,6 +915,17 @@ func (mh *MediaHandler) CreateMediaItem(c echo.Context) error {
|
|||||||
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
|
return c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Validate library has folders before allowing media items
|
||||||
|
hasFolders, err := mh.libraryService.HasFolders(c.Request().Context(), pgtype.UUID{Bytes: req.LibraryID, Valid: true})
|
||||||
|
if err != nil {
|
||||||
|
return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to validate library folders"})
|
||||||
|
}
|
||||||
|
if !hasFolders {
|
||||||
|
return c.JSON(http.StatusBadRequest, map[string]string{
|
||||||
|
"error": "Cannot add media items to a library with no folders. Please add at least one folder to the library first.",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
mediaItemID, err := mh.db.CreateMediaItem(c.Request().Context(), database.CreateMediaItemParams{
|
mediaItemID, err := mh.db.CreateMediaItem(c.Request().Context(), database.CreateMediaItemParams{
|
||||||
LibraryID: pgtype.UUID{Bytes: req.LibraryID, Valid: true},
|
LibraryID: pgtype.UUID{Bytes: req.LibraryID, Valid: true},
|
||||||
Title: req.Title,
|
Title: req.Title,
|
||||||
|
|||||||
Reference in New Issue
Block a user