init push
This commit is contained in:
77
internal/domain/easa_release/model.go
Normal file
77
internal/domain/easa_release/model.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package easarelease
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
complaint "wucher/internal/domain/complaint"
|
||||
flightdomain "wucher/internal/domain/flight"
|
||||
helicopter "wucher/internal/domain/helicopter"
|
||||
"wucher/internal/shared/pkg/uuidv7"
|
||||
)
|
||||
|
||||
type EASARelease struct {
|
||||
ID []byte `gorm:"type:binary(16);primaryKey;column:id"`
|
||||
HelicopterID []byte `gorm:"type:binary(16);not null;index;column:helicopter_id"`
|
||||
|
||||
// ComplaintID scopes the release to the specific complaint it closes (optional).
|
||||
// When set, the release is fetched via get-by-complaint and closes that complaint.
|
||||
// When NULL the release is standalone (aircraft cleared with no open defect).
|
||||
ComplaintID []byte `gorm:"type:binary(16);index;column:complaint_id"`
|
||||
|
||||
// FlightID — optional flight context. Retained for the standalone (no-complaint)
|
||||
// sign-off gate, which is still flight-scoped. Not required for complaint releases.
|
||||
FlightID []byte `gorm:"type:binary(16);index;column:flight_id"`
|
||||
|
||||
EASADate *time.Time `gorm:"type:date;column:easa_date"`
|
||||
EASAACHours *string `gorm:"type:varchar(20);column:easa_ac_hours"`
|
||||
EASALocation *string `gorm:"type:varchar(255);column:easa_location"`
|
||||
EASAWONo *string `gorm:"type:varchar(100);column:easa_wo_no"`
|
||||
EASAMaintManualRevAirframe *string `gorm:"type:varchar(100);column:easa_maint_manual_rev_airframe"`
|
||||
EASAMaintManualRevEngine *string `gorm:"type:varchar(100);column:easa_maint_manual_rev_engine"`
|
||||
EASASignerID *string `gorm:"type:varchar(100);column:easa_signer_id"`
|
||||
EASAPermitNo *string `gorm:"type:varchar(100);column:easa_permit_no"`
|
||||
|
||||
SignedAt *time.Time `gorm:"type:datetime(3);column:signed_at"`
|
||||
SignedBy []byte `gorm:"type:binary(16);column:signed_by"`
|
||||
|
||||
Helicopter *helicopter.Helicopter `gorm:"foreignKey:HelicopterID;references:ID"`
|
||||
Flight *flightdomain.Flight `gorm:"foreignKey:FlightID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
|
||||
Complaint *complaint.Complaint `gorm:"foreignKey:ComplaintID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
|
||||
|
||||
CreatedAt time.Time `gorm:"type:datetime(3);column:created_at"`
|
||||
CreatedBy []byte `gorm:"type:binary(16);column:created_by"`
|
||||
UpdatedAt time.Time `gorm:"type:datetime(3);column:updated_at"`
|
||||
UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"`
|
||||
DeletedAt *time.Time `gorm:"type:datetime(3);index;column:deleted_at"`
|
||||
DeletedBy []byte `gorm:"type:binary(16);column:deleted_by"`
|
||||
}
|
||||
|
||||
func (EASARelease) TableName() string { return "easa_releases" }
|
||||
|
||||
func (e *EASARelease) BeforeCreate(_ *gorm.DB) error {
|
||||
if len(e.ID) == 0 {
|
||||
e.ID = uuidv7.MustBytes()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *EASARelease) IsSigned() bool { return e != nil && e.SignedAt != nil }
|
||||
|
||||
func (e *EASARelease) IsActive() bool { return e.IsSigned() }
|
||||
|
||||
// MissingSignFields reports which mandatory fields are still empty for signing.
|
||||
// Only the signer is required — it is auto-filled from the duty pilot. The other
|
||||
// document fields (date, A/C hours, location, WO no, manual revisions) are
|
||||
// adjustable free text and optional, so a release can be signed without them.
|
||||
func (e *EASARelease) MissingSignFields() []string {
|
||||
if e == nil {
|
||||
return []string{"easa_signer_id"}
|
||||
}
|
||||
var missing []string
|
||||
if e.EASASignerID == nil || *e.EASASignerID == "" {
|
||||
missing = append(missing, "easa_signer_id")
|
||||
}
|
||||
return missing
|
||||
}
|
||||
Reference in New Issue
Block a user