forked from polka_billy/porridger
Many to many relationship between user and announcement tables implemented, book endpoint changed accordingly
This commit is contained in:
33
back/api.py
33
back/api.py
@ -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
|
||||
|
Reference in New Issue
Block a user