diff --git a/cmd/server/main.go b/cmd/server/main.go index 0848c60..e2b8fd6 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -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) diff --git a/internal/handlers/media.go b/internal/handlers/media.go index 9cbe148..63c7f61 100644 --- a/internal/handlers/media.go +++ b/internal/handlers/media.go @@ -84,13 +84,15 @@ type UpdateMediaHighlightRequest struct { } type MediaHandler struct { - db *database.Queries - worker *services.Worker + 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, + 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,