init push
This commit is contained in:
128
internal/domain/helicopter/model.go
Normal file
128
internal/domain/helicopter/model.go
Normal file
@@ -0,0 +1,128 @@
|
||||
package helicopter
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
filemanager "wucher/internal/domain/file_manager"
|
||||
"wucher/internal/shared/pkg/uuidv7"
|
||||
)
|
||||
|
||||
const (
|
||||
StatusAvailable = "available"
|
||||
StatusBooked = "booked"
|
||||
StatusAOG = "aog"
|
||||
StatusMCF = "mcf"
|
||||
)
|
||||
|
||||
const (
|
||||
AOGSourceUnknown = ""
|
||||
AOGSourceManual = "manual"
|
||||
AOGSourceAuto = "auto"
|
||||
AOGSourceComplaint = "complaint"
|
||||
)
|
||||
|
||||
// StatusRank is the display order for fleet and hold/defect listings — most critical
|
||||
// first: MCF, then AOG, then Booked, then Available (any unknown status sorts last).
|
||||
func StatusRank(status string) int {
|
||||
switch status {
|
||||
case StatusMCF:
|
||||
return 0
|
||||
case StatusAOG:
|
||||
return 1
|
||||
case StatusBooked:
|
||||
return 2
|
||||
case StatusAvailable:
|
||||
return 3
|
||||
default:
|
||||
return 4
|
||||
}
|
||||
}
|
||||
|
||||
func IsValidStatus(s string) bool {
|
||||
switch s {
|
||||
case StatusAvailable, StatusBooked, StatusAOG, StatusMCF:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
type StatusInput struct {
|
||||
IsBook bool
|
||||
IsMCF bool
|
||||
ComplaintGrounded bool
|
||||
}
|
||||
|
||||
func (h *Helicopter) DeriveStatus(in StatusInput) string {
|
||||
switch {
|
||||
case in.IsMCF:
|
||||
return StatusMCF
|
||||
case h.AirOnGround || in.ComplaintGrounded:
|
||||
return StatusAOG
|
||||
case in.IsBook:
|
||||
return StatusBooked
|
||||
default:
|
||||
return StatusAvailable
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Helicopter) EnforceAOGInactive() {
|
||||
if h.AirOnGround {
|
||||
h.IsActive = false
|
||||
}
|
||||
}
|
||||
|
||||
func (h *Helicopter) EnforceMCFInactive(mcf bool) {
|
||||
if mcf {
|
||||
h.IsActive = false
|
||||
}
|
||||
}
|
||||
|
||||
type SortKeyPatch struct {
|
||||
Set bool
|
||||
Value *int
|
||||
}
|
||||
|
||||
type Helicopter struct {
|
||||
ID []byte `gorm:"type:binary(16);primaryKey;column:id"`
|
||||
Designation string `gorm:"type:varchar(100);not null;column:designation"`
|
||||
Identifier string `gorm:"type:varchar(100);uniqueIndex;not null;column:identifier"`
|
||||
ReportSequence int `gorm:"not null;default:0;column:report_sequence"`
|
||||
Type string `gorm:"type:varchar(100);not null;column:type"`
|
||||
SortKey *int `gorm:"column:sortkey"`
|
||||
Engine1 string `gorm:"type:varchar(100);column:engine_1"`
|
||||
Engine2 string `gorm:"type:varchar(100);column:engine_2"`
|
||||
Consumption float64 `gorm:"type:decimal(10,2);not null;default:0;column:consumption_lt_min"`
|
||||
NR1 bool `gorm:"type:tinyint(1);not null;default:0;column:nr1"`
|
||||
NR2 bool `gorm:"type:tinyint(1);not null;default:0;column:nr2"`
|
||||
LH bool `gorm:"type:tinyint(1);not null;default:0;column:lh"`
|
||||
RH bool `gorm:"type:tinyint(1);not null;default:0;column:rh"`
|
||||
MGB bool `gorm:"type:tinyint(1);not null;default:0;column:mgb"`
|
||||
IGB bool `gorm:"type:tinyint(1);not null;default:0;column:igb"`
|
||||
TGB bool `gorm:"type:tinyint(1);not null;default:0;column:tgb"`
|
||||
UTCOffset int `gorm:"not null;default:0;column:utc_offset"`
|
||||
FotoAttachmentID []byte `gorm:"type:binary(16);index;column:foto_attachment_id"`
|
||||
Dry bool `gorm:"type:tinyint(1);not null;default:0;column:dry"`
|
||||
AirOnGround bool `gorm:"type:tinyint(1);not null;default:0;column:air_on_ground"`
|
||||
AOGReason string `gorm:"type:text;column:aog_reason"`
|
||||
AOGSource string `gorm:"type:varchar(16);not null;default:'';column:aog_source"`
|
||||
Note string `gorm:"type:text;column:note"`
|
||||
IsActive bool `gorm:"type:tinyint(1);index;not null;default:1;column:is_active"`
|
||||
CreatedBy []byte `gorm:"type:binary(16);column:created_by"`
|
||||
UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"`
|
||||
DeletedAt *time.Time `gorm:"column:deleted_at"`
|
||||
CreatedByName string `gorm:"->;column:created_by_name"`
|
||||
UpdatedByName string `gorm:"->;column:updated_by_name"`
|
||||
FotoAttachment *filemanager.Attachment `gorm:"foreignKey:FotoAttachmentID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
func (Helicopter) TableName() string { return "helicopters" }
|
||||
|
||||
func (h *Helicopter) BeforeCreate(tx *gorm.DB) error {
|
||||
if len(h.ID) == 0 {
|
||||
h.ID = uuidv7.MustBytes()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user