Refactor beamtime relationships in models and related APIs
Updated relationships for beamtime in models to support many-to-many associations with pucks, samples, and dewars. Refactored API endpoints to accommodate these changes, ensuring accurate assignment and retrieval of data. Improved sample data generation logic and incremented the application version for the new updates.
This commit is contained in:
@ -9,6 +9,7 @@ from sqlalchemy import (
|
||||
Boolean,
|
||||
func,
|
||||
Enum,
|
||||
Table,
|
||||
)
|
||||
from sqlalchemy.orm import relationship
|
||||
from .database import Base
|
||||
@ -16,6 +17,26 @@ from datetime import datetime
|
||||
import enum
|
||||
|
||||
|
||||
dewar_beamtime_association = Table(
|
||||
"dewar_beamtime_association",
|
||||
Base.metadata,
|
||||
Column("dewar_id", Integer, ForeignKey("dewars.id")),
|
||||
Column("beamtime_id", Integer, ForeignKey("beamtimes.id")),
|
||||
)
|
||||
puck_beamtime_association = Table(
|
||||
"puck_beamtime_association",
|
||||
Base.metadata,
|
||||
Column("puck_id", Integer, ForeignKey("pucks.id")),
|
||||
Column("beamtime_id", Integer, ForeignKey("beamtimes.id")),
|
||||
)
|
||||
sample_beamtime_association = Table(
|
||||
"sample_beamtime_association",
|
||||
Base.metadata,
|
||||
Column("sample_id", Integer, ForeignKey("samples.id")),
|
||||
Column("beamtime_id", Integer, ForeignKey("beamtimes.id")),
|
||||
)
|
||||
|
||||
|
||||
class Shipment(Base):
|
||||
__tablename__ = "shipments"
|
||||
|
||||
@ -120,8 +141,9 @@ class Dewar(Base):
|
||||
beamline_location = None
|
||||
local_contact_id = Column(Integer, ForeignKey("local_contacts.id"), nullable=True)
|
||||
local_contact = relationship("LocalContact")
|
||||
beamtime = relationship("Beamtime", back_populates="dewars")
|
||||
beamtime_id = Column(Integer, ForeignKey("beamtimes.id"), nullable=True)
|
||||
beamtimes = relationship(
|
||||
"Beamtime", secondary=dewar_beamtime_association, back_populates="dewars"
|
||||
)
|
||||
|
||||
@property
|
||||
def number_of_pucks(self) -> int:
|
||||
@ -155,9 +177,8 @@ class Puck(Base):
|
||||
dewar = relationship("Dewar", back_populates="pucks")
|
||||
samples = relationship("Sample", back_populates="puck")
|
||||
events = relationship("PuckEvent", back_populates="puck")
|
||||
beamtime_id = Column(Integer, ForeignKey("beamtimes.id"), nullable=True)
|
||||
beamtime = relationship(
|
||||
"Beamtime", back_populates="pucks", foreign_keys=[beamtime_id]
|
||||
beamtimes = relationship(
|
||||
"Beamtime", secondary=puck_beamtime_association, back_populates="pucks"
|
||||
)
|
||||
|
||||
|
||||
@ -178,8 +199,9 @@ class Sample(Base):
|
||||
puck = relationship("Puck", back_populates="samples")
|
||||
events = relationship("SampleEvent", back_populates="sample", lazy="joined")
|
||||
images = relationship("Image", back_populates="sample", lazy="joined")
|
||||
beamtime_id = Column(Integer, ForeignKey("beamtimes.id"), nullable=True)
|
||||
beamtime = relationship("Beamtime", back_populates="samples")
|
||||
beamtimes = relationship(
|
||||
"Beamtime", secondary=sample_beamtime_association, back_populates="samples"
|
||||
)
|
||||
|
||||
@property
|
||||
def mount_count(self) -> int:
|
||||
@ -262,9 +284,15 @@ class Beamtime(Base):
|
||||
local_contact_id = Column(Integer, ForeignKey("local_contacts.id"), nullable=False)
|
||||
|
||||
local_contact = relationship("LocalContact")
|
||||
dewars = relationship("Dewar", back_populates="beamtime")
|
||||
pucks = relationship("Puck", back_populates="beamtime")
|
||||
samples = relationship("Sample", back_populates="beamtime")
|
||||
dewars = relationship(
|
||||
"Dewar", secondary=dewar_beamtime_association, back_populates="beamtimes"
|
||||
)
|
||||
pucks = relationship(
|
||||
"Puck", secondary=puck_beamtime_association, back_populates="beamtimes"
|
||||
)
|
||||
samples = relationship(
|
||||
"Sample", secondary=sample_beamtime_association, back_populates="beamtimes"
|
||||
)
|
||||
|
||||
|
||||
class Image(Base):
|
||||
|
Reference in New Issue
Block a user