package flightdata import ( "time" "gorm.io/gorm" facilitydomain "wucher/internal/domain/facility" filemanager "wucher/internal/domain/file_manager" hospitaldomain "wucher/internal/domain/hospital" icaodomain "wucher/internal/domain/icao" missiondomain "wucher/internal/domain/mission" userdomain "wucher/internal/domain/user" "wucher/internal/shared/pkg/uuidv7" ) type FlightData struct { ID []byte `gorm:"type:binary(16);primaryKey;column:id"` MissionID []byte `gorm:"type:binary(16);index;not null;column:mission_id"` CoPilotID []byte `gorm:"type:binary(16);index;column:co_pilot_id"` FromICAOID []byte `gorm:"type:binary(16);index;column:from_icao_id"` FromHospitalID []byte `gorm:"type:binary(16);index;column:from_hospital_id"` ToICAOID []byte `gorm:"type:binary(16);index;column:to_icao_id"` ToHospitalID []byte `gorm:"type:binary(16);index;column:to_hospital_id"` FlightTakeOff time.Time `gorm:"column:take_off"` FlightLanding time.Time `gorm:"column:landing"` FlightDuration time.Duration `gorm:"column:duration"` FlightType string `gorm:"type:varchar(255);column:flight_type"` FlightRED time.Duration `gorm:"column:red"` MaxN1 float64 `gorm:"column:max_n1"` MaxN2 float64 `gorm:"column:max_n2"` PaxCount int `gorm:"column:pax_count"` TicketNo string `gorm:"type:varchar(255);column:ticket_no"` Engine string `gorm:"type:varchar(255);column:engine"` LandingCount int `gorm:"column:landing_count"` RotorBrakeCycle int `gorm:"column:rotor_brake_cycle"` HookReleases int `gorm:"column:hook_releases"` DeliveryNoteNumber string `gorm:"type:varchar(255);column:delivery_note_number"` CustomerName string `gorm:"type:varchar(255);column:customer_name"` FlightPlanDistance float64 `gorm:"column:flight_plan_distance"` FlightPlanTime time.Duration `gorm:"column:flight_plan_time"` FlightPlanTrueCourse float64 `gorm:"column:flight_plan_true_course"` FuelBeforeFlight float64 `gorm:"column:fuel_before_flight"` FuelUpload float64 `gorm:"column:fuel_upload"` FuelAfterFlight float64 `gorm:"column:fuel_after_flight"` FuelPlanning float64 `gorm:"column:fuel_planning"` FlightPositioning bool `gorm:"type:boolean;not null;default:false;column:flight_position"` OtherInformation string `gorm:"type:text;column:other_information"` Status string `gorm:"type:varchar(20);not null;default:on_progress;column:status"` Mission *missiondomain.Mission `gorm:"foreignKey:MissionID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` TypeOfFlight *TypeOfFlight `gorm:"foreignKey:FlightDataID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` CoPilot *userdomain.User `gorm:"foreignKey:CoPilotID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` FromICAO *icaodomain.ICAO `gorm:"foreignKey:FromICAOID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` FromHospital *hospitaldomain.Hospital `gorm:"foreignKey:FromHospitalID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` ToICAO *icaodomain.ICAO `gorm:"foreignKey:ToICAOID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` ToHospital *hospitaldomain.Hospital `gorm:"foreignKey:ToHospitalID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` Attachments []filemanager.Attachment `gorm:"-"` CreatedAt time.Time `gorm:"column:created_at"` CreatedBy []byte `gorm:"type:binary(16);column:created_by"` UpdatedAt time.Time `gorm:"column:updated_at"` UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"` DeletedAt *time.Time `gorm:"index;column:deleted_at"` DeletedBy []byte `gorm:"type:binary(16);column:deleted_by"` } func (FlightData) TableName() string { return "flight_data" } func (f *FlightData) BeforeCreate(_ *gorm.DB) error { if len(f.ID) == 0 { f.ID = uuidv7.MustBytes() } return nil } type TypeOfFlight struct { ID []byte `gorm:"type:binary(16);primaryKey;column:id"` FlightDataID []byte `gorm:"type:binary(16);index;not null;column:flight_data_id"` Category string `gorm:"type:enum('ZNO', 'ANO', 'ZTZ', 'ZSP');not null;column:category"` Quantity int `gorm:"not null;column:quantity"` DurationTime time.Duration `gorm:"not null;column:duration"` FlightData *FlightData `gorm:"foreignKey:FlightDataID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` } type HESLOFlight struct { ID []byte `gorm:"type:binary(16);primaryKey;column:id"` FlightDataID []byte `gorm:"type:binary(16);index;not null;column:flight_data_id"` ROT int `gorm:"not null;column:rot"` FacilityFuelTruckID []byte `gorm:"type:binary(16);column:fuel_truck_id"` LoggingSlingID []byte `gorm:"type:binary(16);column:logging_sling_id"` CreatedAt time.Time `gorm:"column:created_at"` FlightData *FlightData `gorm:"foreignKey:FlightDataID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` FacilityFuelTruck *facilitydomain.Facility `gorm:"foreignKey:FacilityFuelTruckID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` LoggingSling *facilitydomain.Facility `gorm:"foreignKey:LoggingSlingID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` } func (HESLOFlight) TableName() string { return "heslo_flights" } type HESLOSling struct { ID []byte `gorm:"type:binary(16);primaryKey;column:id"` FacilitySlingID []byte `gorm:"type:binary(16);column:facility_sling_id"` HESLOFlightID []byte `gorm:"type:binary(16);index;not null;column:heslo_flight_id"` CreatedAt time.Time `gorm:"column:created_at"` HESLOFlight *HESLOFlight `gorm:"foreignKey:HESLOFlightID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` FacilitySling *facilitydomain.Facility `gorm:"foreignKey:FacilitySlingID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` } func (HESLOSling) TableName() string { return "heslo_slings" } type LoggingSling struct { ID []byte `gorm:"type:binary(16);primaryKey;column:id"` FlightDataID []byte `gorm:"type:binary(16);index;not null;column:flight_data_id"` FacilitySlingID []byte `gorm:"type:binary(16);index;column:facility_sling_id"` CreatedAt time.Time `gorm:"column:created_at"` FacilitySling *facilitydomain.Facility `gorm:"foreignKey:FacilitySlingID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` FlightData *FlightData `gorm:"foreignKey:FlightDataID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` } func (LoggingSling) TableName() string { return "logging_slings" } type HECFlight struct { ID []byte `gorm:"type:binary(16);primaryKey;column:id"` FlightDataID []byte `gorm:"type:binary(16);index;not null;column:flight_data_id"` ROT int `gorm:"not null;column:rot"` HECCycle int `gorm:"not null;column:hec_cycle"` EquipmentID []byte `gorm:"type:binary(16);column:equipment_id"` CreatedAt time.Time `gorm:"column:created_at"` FlightData *FlightData `gorm:"foreignKey:FlightDataID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` Equipment *facilitydomain.Facility `gorm:"foreignKey:EquipmentID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` } func (HECFlight) TableName() string { return "hec_flights" } type HECSling struct { ID []byte `gorm:"type:binary(16);primaryKey;column:id"` FlightDataID []byte `gorm:"type:binary(16);index;not null;column:flight_data_id"` HECSlingID []byte `gorm:"type:binary(16);column:hec_sling_id"` CreatedAt time.Time `gorm:"column:created_at"` FlightData *FlightData `gorm:"foreignKey:FlightDataID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` HECSling *facilitydomain.Facility `gorm:"foreignKey:HECSlingID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"` } func (HECSling) TableName() string { return "hec_slings" } type HECLoads struct { ID []byte `gorm:"type:binary(16);primaryKey;column:id"` FlightDataID []byte `gorm:"type:binary(16);index;not null;column:flight_data_id"` LoadCategory string `gorm:"type:varchar(20);not null;column:load_category"` Quantity int `gorm:"not null;column:quantity"` CreatedAt time.Time `gorm:"column:created_at"` FlightData *FlightData `gorm:"foreignKey:FlightDataID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` } func (HECLoads) TableName() string { return "hec_loads" } type SPODetails struct { HESLO SPOHESLODetails Logging SPOLoggingDetails HEC SPOHECDetails } type SPOHESLODetails struct { Flights []SPOHESLOFlight Slings []SPOHESLOSling } type SPOHESLOFlight struct { ID []byte ROT int FuelTruckID []byte FuelTruckName string LoggingSlingID []byte LoggingSlingName string } type SPOHESLOSling struct { ID []byte HESLOFlightID []byte SlingID []byte SlingName string } type SPOLoggingDetails struct { Slings []SPOLoggingSling } type SPOLoggingSling struct { ID []byte SlingID []byte SlingName string } type SPOHECDetails struct { Flights []SPOHECFlight Slings []SPOHECSling Loads []SPOHECLoad } type SPOHECFlight struct { ID []byte ROT int HECCycle int EquipmentID []byte EquipmentName string } type SPOHECSling struct { ID []byte SlingID []byte SlingName string } type SPOHECLoad struct { ID []byte LoadCategory string Quantity int } // SPO upsert input types (write path) type SPOUpsertData struct { HESLO *SPOHESLOUpsert Logging *SPOLoggingUpsert HEC *SPOHECUpsert } type SPOHESLOUpsert struct { Flights []SPOHESLOFlightUpsert } type SPOHESLOFlightUpsert struct { ROT int FuelTruckID []byte LoggingSlingID []byte Slings []SPOHESLOSlingUpsert } type SPOHESLOSlingUpsert struct { SlingID []byte } type SPOLoggingUpsert struct { Slings []SPOLoggingSlingUpsert } type SPOLoggingSlingUpsert struct { SlingID []byte } type SPOHECUpsert struct { Flights []SPOHECFlightUpsert Slings []SPOHECSlingUpsert Loads []SPOHECLoadUpsert } type SPOHECFlightUpsert struct { ROT int HECCycle int EquipmentID []byte } type SPOHECSlingUpsert struct { SlingID []byte } type SPOHECLoadUpsert struct { LoadCategory string Quantity int }