Better integration of sqlite3 database
This commit is contained in:
@ -1,61 +1,78 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import List, Optional
|
||||
from sqlalchemy import Column, Integer, String, Date, ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
from app.database import Base # Ensure this imports correctly
|
||||
|
||||
class ContactPerson(BaseModel):
|
||||
id: Optional[int] = None
|
||||
firstname: str
|
||||
lastname: str
|
||||
phone_number: str
|
||||
email: str
|
||||
|
||||
class Address(BaseModel):
|
||||
id: Optional[int] = None
|
||||
street: str
|
||||
city: str
|
||||
zipcode: str
|
||||
country: str
|
||||
# SQLAlchemy ORM models
|
||||
class Shipment(Base):
|
||||
__tablename__ = "shipments"
|
||||
|
||||
class Proposal(BaseModel):
|
||||
id: Optional[int] = None
|
||||
number: str
|
||||
shipment_id = Column(String, primary_key=True, index=True)
|
||||
shipment_name = Column(String, index=True)
|
||||
shipment_date = Column(Date)
|
||||
shipment_status = Column(String)
|
||||
comments = Column(String, nullable=True)
|
||||
contact_person_id = Column(Integer, ForeignKey("contact_persons.id"))
|
||||
return_address_id = Column(Integer, ForeignKey("addresses.id"))
|
||||
proposal_id = Column(Integer, ForeignKey("proposals.id"))
|
||||
|
||||
class Dewar(BaseModel):
|
||||
id: Optional[str] = None
|
||||
dewar_name: str
|
||||
tracking_number: Optional[str] = None
|
||||
number_of_pucks: int
|
||||
number_of_samples: int
|
||||
return_address: List[Address]
|
||||
contact_person: List[ContactPerson]
|
||||
status: str
|
||||
ready_date: Optional[str] = None
|
||||
shipping_date: Optional[str] = None
|
||||
arrival_date: Optional[str] = None
|
||||
returning_date: Optional[str] = None
|
||||
qrcode: str
|
||||
contact_person = relationship("ContactPerson", back_populates="shipments")
|
||||
return_address = relationship("Address", back_populates="shipments")
|
||||
proposal = relationship("Proposal", back_populates="shipments")
|
||||
dewars = relationship("Dewar", back_populates="shipment")
|
||||
|
||||
class Shipment(BaseModel):
|
||||
shipment_id: Optional[str] = None
|
||||
shipment_name: str
|
||||
shipment_date: str
|
||||
shipment_status: str
|
||||
contact_person: List[ContactPerson]
|
||||
proposal_number: List[Proposal]
|
||||
return_address: List[Address]
|
||||
comments: Optional[str] = None
|
||||
dewars: List[Dewar]
|
||||
|
||||
def get_number_of_dewars(self) -> int:
|
||||
return len(self.dewars)
|
||||
class ContactPerson(Base):
|
||||
__tablename__ = "contact_persons"
|
||||
|
||||
def get_shipment_contact_persons(self) -> List[ContactPerson]:
|
||||
return self.contact_person
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
firstname = Column(String)
|
||||
lastname = Column(String)
|
||||
phone_number = Column(String)
|
||||
email = Column(String)
|
||||
|
||||
def get_shipment_return_addresses(self) -> List[Address]:
|
||||
return self.return_address
|
||||
shipments = relationship("Shipment", back_populates="contact_person")
|
||||
|
||||
def get_proposals(self) -> List[Proposal]:
|
||||
return self.proposal_number
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
class Address(Base):
|
||||
__tablename__ = "addresses"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
street = Column(String)
|
||||
city = Column(String)
|
||||
zipcode = Column(String)
|
||||
country = Column(String)
|
||||
|
||||
shipments = relationship("Shipment", back_populates="return_address")
|
||||
|
||||
|
||||
class Dewar(Base):
|
||||
__tablename__ = "dewars"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
dewar_name = Column(String)
|
||||
tracking_number = Column(String)
|
||||
number_of_pucks = Column(Integer)
|
||||
number_of_samples = Column(Integer)
|
||||
status = Column(String)
|
||||
ready_date = Column(Date, nullable=True)
|
||||
shipping_date = Column(Date, nullable=True)
|
||||
arrival_date = Column(Date, nullable=True)
|
||||
returning_date = Column(Date, nullable=True)
|
||||
qrcode = Column(String)
|
||||
shipment_id = Column(String, ForeignKey("shipments.shipment_id"))
|
||||
return_address_id = Column(Integer, ForeignKey("addresses.id")) # Added
|
||||
contact_person_id = Column(Integer, ForeignKey("contact_persons.id")) # Added
|
||||
|
||||
shipment = relationship("Shipment", back_populates="dewars")
|
||||
return_address = relationship("Address") # Defines relationship with Address
|
||||
contact_person = relationship("ContactPerson") # Defines relationship with ContactPerson
|
||||
|
||||
|
||||
class Proposal(Base):
|
||||
__tablename__ = "proposals"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
number = Column(String)
|
||||
|
||||
shipments = relationship("Shipment", back_populates="proposal")
|
||||
|
Reference in New Issue
Block a user