whole app

This commit is contained in:
2025-08-20 14:26:51 +02:00
commit a2a18bad24
16 changed files with 2101 additions and 0 deletions

143
models.py Normal file
View File

@@ -0,0 +1,143 @@
from datetime import datetime, date
from sqlalchemy import ForeignKey, String, Integer, DateTime, Boolean, Date
from sqlalchemy.sql import func
from sqlalchemy.orm import (DeclarativeBase, Mapped,
mapped_column, relationship)
from typing import Optional
class Base(DeclarativeBase):
pass
class Collaborator(Base):
__tablename__ = "collaborator"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(50))
email: Mapped[str] = mapped_column(String(30))
phone: Mapped[int] = mapped_column(Integer)
team_id: Mapped[Optional[int]] = mapped_column(ForeignKey("team.id"))
team: Mapped["Team"] = relationship(back_populates="collaborator")
customers: Mapped[Optional[list["Customer"]]] = relationship()
contracts: Mapped[Optional[list["Contract"]]] = relationship()
events: Mapped[Optional[list["Event"]]] = relationship()
def __repr__(self):
return (f"Collaborator: (id={self.id!r}, "
f"name={self.name!r}, "
f"email={self.email!r}, "
f"phone={self.phone!r}, "
f"team_id={self.team_id!r}, "
f"customers={self.customers!r}, "
f"contracts={self.contracts!r}, "
f"events={self.events!r})"
)
class Credentials(Base):
__tablename__ = "credentials"
id: Mapped[int] = mapped_column(primary_key=True)
collaborator_id: Mapped[int] = mapped_column(ForeignKey("collaborator.id"))
password_hash: Mapped[str] = mapped_column(String(200))
class Team(Base):
__tablename__ = "team"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(10))
collaborator: Mapped[list["Collaborator"]] = relationship(
back_populates="team")
class Customer(Base):
__tablename__ = "customer"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(30))
email: Mapped[str] = mapped_column(String(20))
phone: Mapped[int] = mapped_column(Integer)
company: Mapped[str] = mapped_column(String(40))
creation_date: Mapped[date] = mapped_column(Date,
server_default=func.now())
last_update: Mapped[Optional[datetime]] = mapped_column(DateTime)
commercial_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("collaborator.id"))
def __repr__(self):
return (f"Customer: (id={self.id!r}, "
f"name={self.name!r}, "
f"email={self.email!r}, "
f"phone={self.phone!r}, "
f"company={self.company!r}, "
f"creation_date={self.creation_date!r}, "
f"last_update={self.last_update!r}, "
f"commercial_id={self.commercial_id!r})"
)
class Contract(Base):
__tablename__ = "contract"
id: Mapped[int] = mapped_column(primary_key=True)
signed: Mapped[bool] = mapped_column(Boolean, default=False)
creation_date: Mapped[date] = mapped_column(Date,
server_default=func.now())
amount: Mapped[int] = mapped_column(Integer)
customer_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("customer.id"))
commercial_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("collaborator.id"))
event_id: Mapped[Optional[int]] = mapped_column(ForeignKey("event.id"))
def __repr__(self):
return (f"Contract: (id={self.id!r}, "
f"creation_date={self.creation_date!r}, "
f"amount={self.amount!r}, "
f"customer_id={self.customer_id!r}, "
f"commercial_id={self.commercial_id!r}, "
f"event_id={self.event_id!r}, "
f"signed={self.signed!r}, "
)
class Event(Base):
__tablename__ = "event"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(200))
contract_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("contract.id"))
customer_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("customer.id"))
customer_contact: Mapped[str] = mapped_column(String(30))
date_start: Mapped[str] = mapped_column(String(30))
date_end: Mapped[Optional[str]] = mapped_column(String(30))
location: Mapped[Optional[str]] = mapped_column(String(100))
attendees: Mapped[Optional[set["Attendee"]]] = relationship(
back_populates="event")
support_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("collaborator.id"))
def __repr__(self):
return (f"Event: (id={self.id!r}, "
f"name={self.name!r}, "
f"contract_id={self.contract_id!r}, "
f"customer_id={self.customer_id!r}, "
f"customer_contact={self.customer_contact!r}, "
f"support_id={self.support_id!r}, "
f"date_start={self.date_start!r}, "
f"date_end={self.date_end!r}, "
f"location={self.location!r}, "
f"attendees={self.attendees!r}"
)
class Attendee(Base):
__tablename__ = "attendee"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(50))
event_id: Mapped[Optional[int]] = mapped_column(ForeignKey("event.id"))
event: Mapped[Optional[set["Event"]]] = relationship(
back_populates="attendees")