|
7 | 7 | from pkg.db import get_session
|
8 | 8 | from pkg.utils import get_current_user_uid
|
9 | 9 |
|
10 |
| -from .schemas import BookCategoryCreateSchema, BookCategoryResponseSchema |
11 |
| -from .service import BookCategoryService |
| 10 | +from .schemas import ( |
| 11 | + BookCategoryCreateSchema, |
| 12 | + BookCategoryResponseSchema, |
| 13 | + BookGenreCreateSchema, |
| 14 | + BookGenreResponseSchema, |
| 15 | +) |
| 16 | +from .service import BookCategoryService, BookGenreService |
12 | 17 |
|
13 | 18 | book_category_router = APIRouter()
|
| 19 | +book_genre_router = APIRouter() |
14 | 20 |
|
15 | 21 | book_category_service = BookCategoryService()
|
| 22 | +book_genre_service = BookGenreService() |
16 | 23 |
|
17 | 24 |
|
18 | 25 | @book_category_router.post("/create", status_code=status.HTTP_201_CREATED)
|
@@ -62,7 +69,7 @@ async def update_book_category(
|
62 | 69 | content={"message": "Book category not found"},
|
63 | 70 | )
|
64 | 71 |
|
65 |
| - if book_category.created_by != user_uid: |
| 72 | + if str(book_category.created_by) != user_uid: |
66 | 73 | return JSONResponse(
|
67 | 74 | status_code=status.HTTP_403_FORBIDDEN,
|
68 | 75 | content={"message": "You are not allowed to update this book category"},
|
@@ -99,3 +106,87 @@ async def list_book_categories(session: AsyncSession = Depends(get_session)):
|
99 | 106 | ],
|
100 | 107 | },
|
101 | 108 | )
|
| 109 | + |
| 110 | + |
| 111 | +@book_genre_router.post("/create", status_code=status.HTTP_201_CREATED) |
| 112 | +async def create_book_genre( |
| 113 | + genre_data: BookGenreCreateSchema, |
| 114 | + session: AsyncSession = Depends(get_session), |
| 115 | + user_uid: str = Depends(get_current_user_uid), |
| 116 | +): |
| 117 | + book_genre = await book_genre_service.get_book_genre_by_genre( |
| 118 | + genre_data.genre, session |
| 119 | + ) |
| 120 | + if book_genre: |
| 121 | + return JSONResponse( |
| 122 | + status_code=status.HTTP_400_BAD_REQUEST, |
| 123 | + content={"message": "Book genre already exists"}, |
| 124 | + ) |
| 125 | + |
| 126 | + book_genre = await book_genre_service.create_book_genre( |
| 127 | + user_uid, genre_data, session |
| 128 | + ) |
| 129 | + |
| 130 | + return JSONResponse( |
| 131 | + status_code=status.HTTP_201_CREATED, |
| 132 | + content={ |
| 133 | + "message": "Book genre created successfully", |
| 134 | + "book_genre": BookGenreResponseSchema( |
| 135 | + **json.loads(book_genre.model_dump_json()) |
| 136 | + ).model_dump(), |
| 137 | + }, |
| 138 | + ) |
| 139 | + |
| 140 | + |
| 141 | +@book_genre_router.patch("/update/{genre_uid}", status_code=status.HTTP_200_OK) |
| 142 | +async def update_book_genre( |
| 143 | + genre_uid: str, |
| 144 | + genre_data: BookGenreCreateSchema, |
| 145 | + session: AsyncSession = Depends(get_session), |
| 146 | + user_uid: str = Depends(get_current_user_uid), |
| 147 | +): |
| 148 | + book_genre = await book_genre_service.get_book_genre_by_uid(genre_uid, session) |
| 149 | + |
| 150 | + if not book_genre: |
| 151 | + return JSONResponse( |
| 152 | + status_code=status.HTTP_404_NOT_FOUND, |
| 153 | + content={"message": "Book genre not found"}, |
| 154 | + ) |
| 155 | + |
| 156 | + if str(book_genre.created_by) != user_uid: |
| 157 | + return JSONResponse( |
| 158 | + status_code=status.HTTP_403_FORBIDDEN, |
| 159 | + content={"message": "You are not allowed to update this book genre"}, |
| 160 | + ) |
| 161 | + |
| 162 | + book_genre = await book_genre_service.update_book_genre( |
| 163 | + book_genre, genre_data.model_dump(), session |
| 164 | + ) |
| 165 | + |
| 166 | + return JSONResponse( |
| 167 | + status_code=status.HTTP_200_OK, |
| 168 | + content={ |
| 169 | + "message": "Book genre updated successfully", |
| 170 | + "book_genre": BookGenreResponseSchema( |
| 171 | + **json.loads(book_genre.model_dump_json()) |
| 172 | + ).model_dump(), |
| 173 | + }, |
| 174 | + ) |
| 175 | + |
| 176 | + |
| 177 | +@book_genre_router.get("/list", status_code=status.HTTP_200_OK) |
| 178 | +async def list_book_genres(session: AsyncSession = Depends(get_session)): |
| 179 | + book_genres = await book_genre_service.list_book_genres(session) |
| 180 | + |
| 181 | + return JSONResponse( |
| 182 | + status_code=status.HTTP_200_OK, |
| 183 | + content={ |
| 184 | + "message": "List of book genres", |
| 185 | + "book_genres": [ |
| 186 | + BookGenreResponseSchema( |
| 187 | + **json.loads(book_genre.model_dump_json()) |
| 188 | + ).model_dump() |
| 189 | + for book_genre in book_genres |
| 190 | + ], |
| 191 | + }, |
| 192 | + ) |
0 commit comments