/
PetrovSA
/
python-dev-course
Обзор
Документация
Войти
/
PetrovSA
/
python-dev-course
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Part 8 - FastAPI/BooksAPI_UI_Start/app/crud/book.py
49 строк
2 KB
PetrovSerega
Initial commit
08 май 2026, 17:14
08 май 2026, 17:14
9e45db8
Код
Авторство
О чём код?
# app/crud/book.py from sqlalchemy import select from sqlalchemy.orm import Session from fastapi import HTTPException from app.models.book import Book from app.schemas.book import BookCreate, BookUpdate from app.models.user import User def get_books(db: Session, author: str = None): query = select(Book) if author: query = query.where(Book.author == author) return db.scalars(query).all() def get_book_by_id(db: Session, book_id: int): book = db.get(Book, book_id) if not book: raise HTTPException(status_code=404, detail="Книга не найдена") return book def create_book(db: Session, book: BookCreate, owner_id: int): new_book = Book(**book.model_dump(), owner_id=owner_id) db.add(new_book) db.commit() db.refresh(new_book) return new_book def update_book(db: Session, book_id: int, book_data: BookUpdate, current_user: User): book = get_book_by_id(db, book_id) if book.owner_id != current_user.id: raise HTTPException(status_code=403, detail="Недостаточно прав") for key, value in book_data.model_dump(exclude_unset=True).items(): setattr(book, key, value) db.commit() db.refresh(book) return book def delete_book(db: Session, book_id: int, current_user: User): book = get_book_by_id(db, book_id) if book.owner_id != current_user.id: raise HTTPException(status_code=403, detail="Недостаточно прав") db.delete(book) db.commit() return {"message": "Книга удалена"}