Many to many relationship between user and announcement tables implemented, book endpoint changed accordingly

This commit is contained in:
2024-08-13 15:48:13 +03:00
parent c0229d6727
commit af9aa243bf
5 changed files with 121 additions and 19 deletions

View File

@ -98,7 +98,7 @@ async def put_in_db(name: Annotated[str, Form()], category: Annotated[str, Form(
# создаем объект Announcement
temp_ancmt = orm_models.Announcement(user_id=current_user.id, name=name, category=category, best_by=bestBy,
address=address, longtitude=longtitude, latitude=latitude, description=description, metro=metro,
trashId=trashId, src=uploaded_name, booked_by=0)
trashId=trashId, src=uploaded_name, booked_counter=0)
try:
db.add(temp_ancmt) # добавляем в бд
await db.commit() # сохраняем изменения
@ -139,19 +139,28 @@ async def change_book_status(data: pydantic_schemas.Book, current_user: Annotate
if not announcement_to_change:
raise HTTPException(status_code=404, detail="Item not found")
# Проверяем, что объявление бронирует не владелец
if announcement_to_change.booked_by.Comparator.contains(current_user.id):
if current_user.id == announcement_to_change.user_id:
raise HTTPException(status_code=403, detail="A user can't book his announcement")
else:
# Инкрементируем поле booked_counter на 1
announcement_to_change.booked_counter += 1
# вставляем индекс забронировавшего пользователя в поле booked_by
await db.execute(mytable.insert(), data=[1,2,3])
announcement_to_change.booked_by
# фиксируем изменения в бд
await db.commit()
await db.refresh(announcement_to_change)
return {"Success": True}
# ищем пару с заданными id объявления и пользователя
query = await db.execute(select(orm_models.AnnouncementUser).where(
orm_models.AnnouncementUser.announcement_id == announcement_to_change.id).where(
orm_models.AnnouncementUser.booking_user_id == current_user.id))
pair_found = query.scalars().first()
# если не найдена
if not pair_found:
# создаем новый объект таблицы AnnouncementUser
new_pair = orm_models.AnnouncementUser(announcement_to_change.id, current_user.id)
# Инкрементируем поле booked_counter на 1
announcement_to_change.booked_counter += 1
# вставляем индекс забронировавшего пользователя в поле booked_by
db.add(new_pair)
# фиксируем изменения в бд
await db.commit()
await db.refresh(announcement_to_change)
return {"Success": True}
raise HTTPException(status_code=403, detail="The announcement is already booked by this user")
# reginstration