package auth import "time" // PilotProfile stores role-specific data for role=pilot. type PilotProfile struct { UserID []byte `gorm:"type:binary(16);primaryKey;column:user_id"` PilotCategory string `gorm:"type:varchar(16);not null;index;column:pilot_category"` ShortName string `gorm:"type:varchar(120);column:short_name"` LicenseNo string `gorm:"type:varchar(120);index;column:license_no"` LicenseIssuedAt *time.Time `gorm:"column:license_issued_at"` LicenseExpiredAt *time.Time `gorm:"column:license_expired_at"` TechnicianLicenseNo string `gorm:"type:varchar(120);column:technician_license_no"` HasIFRQualification bool `gorm:"not null;default:false;column:has_ifr_qualification"` IsChiefPilot bool `gorm:"not null;default:false;column:is_chief_pilot"` IsDUL bool `gorm:"not null;default:false;column:is_dul"` TotalFlightMinutes int `gorm:"not null;default:0;column:total_flight_minutes"` ResponsiblePilotMinutes int `gorm:"not null;default:0;column:responsible_pilot_minutes"` SecondPilotMinutes int `gorm:"not null;default:0;column:second_pilot_minutes"` DoubleCommandMinutes int `gorm:"not null;default:0;column:double_command_minutes"` FlightInstructorMinutes int `gorm:"not null;default:0;column:flight_instructor_minutes"` NightFlightMinutes int `gorm:"not null;default:0;column:night_flight_minutes"` IFRFlightMinutes int `gorm:"not null;default:0;column:ifr_flight_minutes"` Location string `gorm:"type:varchar(255);column:location"` Postcode string `gorm:"type:varchar(32);column:postcode"` StreetLine string `gorm:"type:varchar(255);column:street_line"` Note string `gorm:"type:text;column:note"` WeightKG *float64 `gorm:"type:decimal(8,2);column:weight_kg"` PhotoFileID string `gorm:"type:varchar(255);column:photo_file_id"` CreatedAt time.Time CreatedBy []byte `gorm:"type:binary(16);column:created_by"` UpdatedAt time.Time UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"` User User `gorm:"foreignKey:UserID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` } func (PilotProfile) TableName() string { return "pilot_profiles" } // DoctorProfile stores role-specific data for role=doctor. type DoctorProfile struct { UserID []byte `gorm:"type:binary(16);primaryKey;column:user_id"` ShortName string `gorm:"type:varchar(120);column:short_name"` Specialization string `gorm:"type:varchar(120);column:specialization"` SubSpecialization string `gorm:"type:varchar(120);column:sub_specialization"` IsChiefPhysician bool `gorm:"not null;default:false;column:is_chief_physician"` Location string `gorm:"type:varchar(255);column:location"` Postcode string `gorm:"type:varchar(32);column:postcode"` StreetLine string `gorm:"type:varchar(255);column:street_line"` Note string `gorm:"type:text;column:note"` PhotoFileID string `gorm:"type:varchar(255);column:photo_file_id"` CreatedAt time.Time CreatedBy []byte `gorm:"type:binary(16);column:created_by"` UpdatedAt time.Time UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"` User User `gorm:"foreignKey:UserID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` } func (DoctorProfile) TableName() string { return "doctor_profiles" } // AirRescuerProfile stores role-specific data for role=air_rescuer. type AirRescuerProfile struct { UserID []byte `gorm:"type:binary(16);primaryKey;column:user_id"` ShortName string `gorm:"type:varchar(120);column:short_name"` ResponsibleFlightRescuer bool `gorm:"not null;default:false;column:responsible_flight_rescuer"` Location string `gorm:"type:varchar(255);column:location"` Postcode string `gorm:"type:varchar(32);column:postcode"` StreetLine string `gorm:"type:varchar(255);column:street_line"` Note string `gorm:"type:text;column:note"` PhotoFileID string `gorm:"type:varchar(255);column:photo_file_id"` CreatedAt time.Time CreatedBy []byte `gorm:"type:binary(16);column:created_by"` UpdatedAt time.Time UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"` User User `gorm:"foreignKey:UserID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` } func (AirRescuerProfile) TableName() string { return "air_rescuer_profiles" } // TechnicianProfile stores role-specific data for role=technician. type TechnicianProfile struct { UserID []byte `gorm:"type:binary(16);primaryKey;column:user_id"` ShortName string `gorm:"type:varchar(120);column:short_name"` LicenseNo string `gorm:"type:varchar(120);index;column:license_no"` IsChiefTechnician bool `gorm:"not null;default:false;column:is_chief_technician"` IsResponsibleComplaints bool `gorm:"not null;default:false;column:is_responsible_complaints"` Location string `gorm:"type:varchar(255);column:location"` Postcode string `gorm:"type:varchar(32);column:postcode"` StreetLine string `gorm:"type:varchar(255);column:street_line"` Note string `gorm:"type:text;column:note"` PhotoFileID string `gorm:"type:varchar(255);column:photo_file_id"` CreatedAt time.Time CreatedBy []byte `gorm:"type:binary(16);column:created_by"` UpdatedAt time.Time UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"` User User `gorm:"foreignKey:UserID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` } func (TechnicianProfile) TableName() string { return "technician_profiles" } // FlightAssistantProfile stores role-specific data for role=flight_assistant. type FlightAssistantProfile struct { UserID []byte `gorm:"type:binary(16);primaryKey;column:user_id"` ShortName string `gorm:"type:varchar(120);column:short_name"` Location string `gorm:"type:varchar(255);column:location"` Postcode string `gorm:"type:varchar(32);column:postcode"` StreetLine string `gorm:"type:varchar(255);column:street_line"` Note string `gorm:"type:text;column:note"` PhotoFileID string `gorm:"type:varchar(255);column:photo_file_id"` CreatedAt time.Time CreatedBy []byte `gorm:"type:binary(16);column:created_by"` UpdatedAt time.Time UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"` User User `gorm:"foreignKey:UserID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` } func (FlightAssistantProfile) TableName() string { return "flight_assistant_profiles" } // StaffProfile stores role-specific data for role=staff. type StaffProfile struct { UserID []byte `gorm:"type:binary(16);primaryKey;column:user_id"` ShortName string `gorm:"type:varchar(120);column:short_name"` RoleLabel string `gorm:"type:varchar(120);column:role_label"` Location string `gorm:"type:varchar(255);column:location"` Postcode string `gorm:"type:varchar(32);column:postcode"` StreetLine string `gorm:"type:varchar(255);column:street_line"` Note string `gorm:"type:text;column:note"` PhotoFileID string `gorm:"type:varchar(255);column:photo_file_id"` CreatedAt time.Time CreatedBy []byte `gorm:"type:binary(16);column:created_by"` UpdatedAt time.Time UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"` User User `gorm:"foreignKey:UserID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` } func (StaffProfile) TableName() string { return "staff_profiles" }