forked from polka_billy/porridger
Many to many relationship between user and announcement tables implemented, book endpoint changed accordingly
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
from sqlalchemy import Column, Integer, String, Boolean, Float, Date, ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy import Column, Integer, String, Boolean, Float, Date, ForeignKey, ForeignKeyConstraint
|
||||
from sqlalchemy.orm import relationship, mapped_column, composite, Mapped
|
||||
from sqlalchemy.dialects import postgresql
|
||||
import dataclasses
|
||||
|
||||
from .db import Base, engine
|
||||
|
||||
@ -18,7 +19,7 @@ class User(Base):#класс пользователя
|
||||
num_of_ratings = Column(Integer, default=0) # количество оценок (т.е. то, сколько раз другие пользователи оценили текущего)
|
||||
reg_date = Column(Date) # дата регистрации
|
||||
|
||||
announcements = relationship("Announcement", back_populates="user", lazy='selectin')
|
||||
announcements = relationship("Announcement", secondary="announcementuser", back_populates="user", lazy='selectin')
|
||||
trashboxes_chosen = relationship("Trashbox", back_populates="user", lazy='selectin')
|
||||
|
||||
class Announcement(Base): #класс объявления
|
||||
@ -36,11 +37,35 @@ class Announcement(Base): #класс объявления
|
||||
src = Column(String, nullable=True) #изображение продукта в объявлении
|
||||
metro = Column(String) #ближайщее метро от адреса нахождения продукта
|
||||
trashId = Column(Integer, nullable=True)
|
||||
booked_by = postgresql.ARRAY(Integer, dimensions=2) #массив с id пользователей, забронировавших объявление
|
||||
booked_counter = Column(Integer) #количество забронировавших (0 - никто не забронировал)
|
||||
booked_by = Column(Integer, nullable=True) # id пользователя, забронировавшего объявление
|
||||
booked_counter = Column(Integer, nullable=True) #количество забронировавших (0 - никто не забронировал)
|
||||
obsolete = Column(Boolean, default=False) # состояние объявления (по-умолчанию считаем его актуальным)
|
||||
|
||||
user = relationship("User", back_populates="announcements")
|
||||
user = relationship("User", secondary="announcementuser", back_populates="announcements")
|
||||
|
||||
# Класс пары, хранящей id объявления и id забронировавшего юзера
|
||||
@dataclasses.dataclass
|
||||
class UserAnouncementPair:
|
||||
announcement_id: int
|
||||
booking_user_id: int
|
||||
|
||||
class AnnouncementUser(Base):
|
||||
__tablename__ = "announcementuser"
|
||||
|
||||
def __init__(self, an_id, b_u_id):
|
||||
self.announcement_id = an_id
|
||||
self.booking_user_id = b_u_id
|
||||
|
||||
announcement_id = Column(Integer, ForeignKey("announcements.id"), primary_key=True) # id забронированного объявления
|
||||
booking_user_id = Column(Integer, ForeignKey("users.id"), primary_key=True) # id пользователя, забронировавшего объявление
|
||||
|
||||
|
||||
|
||||
# class Ratings(Base):
|
||||
# __tablename__ = "ratings"
|
||||
|
||||
# rated_user_id = Column(Integer, primary_key=True) # id пользователя, оставившего оценку
|
||||
# rating_value = Column(Integer, primary_key=True) # оценка
|
||||
|
||||
|
||||
class Trashbox(Base): #класс мусорных баков
|
||||
|
Reference in New Issue
Block a user