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
|
||||
queueProcessor := sync.NewSyncQueueProcessor(queries)
|
||||
|
||||
// Create library service
|
||||
libraryService := services.NewLibraryService(queries)
|
||||
|
||||
// Create worker for background tasks
|
||||
worker := services.NewWorker(3)
|
||||
|
||||
@@ -107,7 +110,7 @@ func main() {
|
||||
|
||||
// NEW: Create refactored handlers
|
||||
collectionHandler := handlers.NewCollectionHandler(queries, connManager)
|
||||
mediaHandler := handlers.NewMediaHandler(queries, worker)
|
||||
mediaHandler := handlers.NewMediaHandler(queries, libraryService, worker)
|
||||
searchHandler := handlers.NewSearchHandler(queries)
|
||||
matchingHandler := handlers.NewMatchingHandler(queries, connManager)
|
||||
|
||||
|
||||
@@ -86,11 +86,13 @@ type UpdateMediaHighlightRequest struct {
|
||||
type MediaHandler struct {
|
||||
db *database.Queries
|
||||
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{
|
||||
db: db,
|
||||
libraryService: libraryService,
|
||||
}
|
||||
if len(worker) > 0 && worker[0] != nil {
|
||||
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()})
|
||||
}
|
||||
|
||||
// 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{
|
||||
LibraryID: pgtype.UUID{Bytes: req.LibraryID, Valid: true},
|
||||
Title: req.Title,
|
||||
|
||||
Reference in New Issue
Block a user