|
2 | 2 | from fastapi import APIRouter, Depends, HTTPException
|
3 | 3 |
|
4 | 4 | from ...database import DatabaseManager
|
5 |
| -from ...datamodel import Gallery, GalleryConfig, Response, Run, Session |
| 5 | +from ...datamodel import Gallery, Response |
6 | 6 | from ..deps import get_db
|
| 7 | +from ...gallery.builder import create_default_gallery |
7 | 8 |
|
8 | 9 | router = APIRouter()
|
9 | 10 |
|
| 11 | + |
10 | 12 |
|
11 |
| -@router.post("/") |
12 |
| -async def create_gallery_entry( |
13 |
| - gallery_data: GalleryConfig, user_id: str, db: DatabaseManager = Depends(get_db) |
| 13 | +@router.put("/{gallery_id}") |
| 14 | +async def update_gallery_entry( |
| 15 | + gallery_id: int, |
| 16 | + gallery_data: Gallery, |
| 17 | + user_id: str, |
| 18 | + db: DatabaseManager = Depends(get_db) |
14 | 19 | ) -> Response:
|
15 |
| - # First validate that user owns all runs |
16 |
| - for run in gallery_data.runs: |
17 |
| - run_result = db.get(Run, filters={"id": run.id}) |
18 |
| - if not run_result.status or not run_result.data: |
19 |
| - raise HTTPException(status_code=404, detail=f"Run {run.id} not found") |
20 |
| - |
21 |
| - # Get associated session to check ownership |
22 |
| - session_result = db.get(Session, filters={"id": run_result.data[0].session_id}) |
23 |
| - if not session_result.status or not session_result.data or session_result.data[0].user_id != user_id: |
24 |
| - raise HTTPException(status_code=403, detail=f"Not authorized to add run {run.id} to gallery") |
25 |
| - |
26 |
| - # Create gallery entry |
27 |
| - gallery = Gallery(user_id=user_id, config=gallery_data) |
28 |
| - result = db.upsert(gallery) |
29 |
| - return result |
30 |
| - |
31 |
| - |
32 |
| -@router.get("/{gallery_id}") |
33 |
| -async def get_gallery_entry(gallery_id: int, user_id: str, db: DatabaseManager = Depends(get_db)) -> Response: |
| 20 | + # Check ownership first |
34 | 21 | result = db.get(Gallery, filters={"id": gallery_id})
|
35 | 22 | if not result.status or not result.data:
|
36 | 23 | raise HTTPException(status_code=404, detail="Gallery entry not found")
|
| 24 | + |
| 25 | + if result.data[0].user_id != user_id: |
| 26 | + raise HTTPException( |
| 27 | + status_code=403, |
| 28 | + detail="Not authorized to update this gallery entry" |
| 29 | + ) |
| 30 | + |
| 31 | + # Update if authorized |
| 32 | + gallery_data.id = gallery_id # Ensure ID matches |
| 33 | + gallery_data.user_id = user_id # Ensure user_id matches |
| 34 | + return db.upsert(gallery_data) |
37 | 35 |
|
38 |
| - gallery = result.data[0] |
39 |
| - if gallery.config["visibility"] != "public" and gallery.user_id != user_id: |
40 |
| - raise HTTPException(status_code=403, detail="Not authorized to view this gallery entry") |
41 | 36 |
|
42 |
| - return result |
| 37 | + |
| 38 | +@router.post("/") |
| 39 | +async def create_gallery_entry(gallery_data: Gallery, db: DatabaseManager = Depends(get_db)) -> Response: |
| 40 | + response = db.upsert(gallery_data) |
| 41 | + if not response.status: |
| 42 | + raise HTTPException(status_code=400, detail=response.message) |
| 43 | + return response |
43 | 44 |
|
44 | 45 |
|
45 | 46 | @router.get("/")
|
46 | 47 | async def list_gallery_entries(user_id: str, db: DatabaseManager = Depends(get_db)) -> Response:
|
47 | 48 | result = db.get(Gallery, filters={"user_id": user_id})
|
| 49 | + if not result.data or len(result.data) == 0: |
| 50 | + # create a default gallery entry |
| 51 | + gallery_config = create_default_gallery() |
| 52 | + default_gallery = Gallery(user_id=user_id, config=gallery_config.model_dump()) |
| 53 | + db.upsert(default_gallery) |
| 54 | + result = db.get(Gallery, filters={"user_id": user_id}) |
| 55 | + |
48 | 56 | return result
|
49 | 57 |
|
50 | 58 |
|
51 |
| -@router.delete("/{gallery_id}") |
52 |
| -async def delete_gallery_entry(gallery_id: int, user_id: str, db: DatabaseManager = Depends(get_db)) -> Response: |
53 |
| - # Check ownership first |
54 |
| - result = db.get(Gallery, filters={"id": gallery_id}) |
| 59 | +@router.get("/{gallery_id}") |
| 60 | +async def get_gallery_entry(gallery_id: int, user_id: str, db: DatabaseManager = Depends(get_db)) -> Response: |
| 61 | + result = db.get(Gallery, filters={"id": gallery_id, "user_id": user_id}) |
55 | 62 | if not result.status or not result.data:
|
56 | 63 | raise HTTPException(status_code=404, detail="Gallery entry not found")
|
57 | 64 |
|
58 |
| - if result.data[0].user_id != user_id: |
59 |
| - raise HTTPException(status_code=403, detail="Not authorized to delete this gallery entry") |
| 65 | + return Response(status=result.status, data=result.data[0], message=result.message) |
60 | 66 |
|
| 67 | + |
| 68 | + |
| 69 | +@router.delete("/{gallery_id}") |
| 70 | +async def delete_gallery_entry(gallery_id: int, user_id: str, db: DatabaseManager = Depends(get_db)) -> Response: |
| 71 | + # Check ownership first |
| 72 | + result = db.get(Gallery, filters={"id": gallery_id, "user_id": user_id}) |
| 73 | + |
| 74 | + if not result.status or not result.data: |
| 75 | + raise HTTPException(status_code=404, detail="Gallery entry not found") |
| 76 | + response = db.delete(Gallery, filters={"id": gallery_id}) |
61 | 77 | # Delete if authorized
|
62 |
| - return db.delete(Gallery, filters={"id": gallery_id}) |
| 78 | + return response |
| 79 | + |
0 commit comments