new columns booked_by and booked_counter added, deleted unused migrations

This commit is contained in:
2024-08-09 15:32:32 +03:00
parent 56b72c8a62
commit c0229d6727
7 changed files with 76 additions and 66 deletions

View File

@ -139,11 +139,15 @@ 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 current_user.id == announcement_to_change.user_id:
if announcement_to_change.booked_by.Comparator.contains(current_user.id):
raise HTTPException(status_code=403, detail="A user can't book his announcement")
else:
# Инкрементируем поле booked_by на 1
announcement_to_change.booked_by += 1
# Инкрементируем поле 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)

View File

@ -1,9 +1,9 @@
from sqlalchemy import Column, Integer, String, Boolean, Float, Date, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.dialects import postgresql
from .db import Base, engine
class User(Base):#класс пользователя
__tablename__ = "users"
@ -36,8 +36,8 @@ class Announcement(Base): #класс объявления
src = Column(String, nullable=True) #изображение продукта в объявлении
metro = Column(String) #ближайщее метро от адреса нахождения продукта
trashId = Column(Integer, nullable=True)
booked_by = Column(Integer) #количество забронировавших (0 - никто не забронировал)
# state = Column(Enum(State), default=State.published) # состояние объявления (опубликовано, забронировано, устарело)
booked_by = postgresql.ARRAY(Integer, dimensions=2) #массив с id пользователей, забронировавших объявление
booked_counter = Column(Integer) #количество забронировавших (0 - никто не забронировал)
obsolete = Column(Boolean, default=False) # состояние объявления (по-умолчанию считаем его актуальным)
user = relationship("User", back_populates="announcements")