65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
from sqlalchemy.ext.declarative import declarative_base
|
||
from sqlalchemy import Column, Integer, String, BigInteger, ForeignKey, Boolean
|
||
from sqlalchemy.dialects.postgresql import UUID
|
||
from sqlalchemy.orm import relationship, backref
|
||
|
||
import uuid
|
||
|
||
from db.base import Base
|
||
from datetime import date
|
||
|
||
|
||
class User(Base):
|
||
__tablename__ = "user"
|
||
|
||
id = Column(BigInteger, primary_key=True)
|
||
name = Column(String(64))
|
||
username = Column(String(32))
|
||
|
||
owns_funds = relationship("Fund", backref="owner", lazy="dynamic")
|
||
fund_members = relationship("FundMember", backref="user", lazy="dynamic")
|
||
group_members = relationship("GroupMember", backref="user", lazy="dynamic")
|
||
|
||
|
||
class Group(Base):
|
||
__tablename__ = "group"
|
||
|
||
id = Column(BigInteger, primary_key=True)
|
||
|
||
funds = relationship("Fund", backref="group", lazy="dynamic")
|
||
|
||
group_members = relationship("GroupMember", backref="group", lazy="dynamic")
|
||
|
||
|
||
class GroupMember(Base):
|
||
__tablename__ = "groupmember"
|
||
|
||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||
user_id = Column(BigInteger, ForeignKey("user.id"))
|
||
group_id = Column(BigInteger, ForeignKey("group.id"))
|
||
|
||
|
||
class Fund(Base):
|
||
__tablename__ = "fund"
|
||
|
||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||
name = Column(
|
||
String(40), default="Сбор {date}".format(date=date.today().strftime("%d.%m"))
|
||
)
|
||
description = Column(String(120), default=None)
|
||
owner_id = Column(BigInteger, ForeignKey("user.id"))
|
||
group_id = Column(BigInteger, ForeignKey("group.id"))
|
||
amount = Column(Integer)
|
||
active = Column(Boolean, default=True)
|
||
|
||
members = relationship("FundMember", backref="fund", lazy="dynamic")
|
||
|
||
|
||
class FundMember(Base):
|
||
__tablename__ = "fundmember"
|
||
|
||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||
user_id = Column(BigInteger, ForeignKey("user.id"))
|
||
fund_id = Column(UUID(as_uuid=True), ForeignKey("fund.id"))
|
||
contributed = Column(Boolean, default=False)
|