159 lines
7.7 KiB
Go
159 lines
7.7 KiB
Go
package base
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
filemanager "wucher/internal/domain/file_manager"
|
|
"wucher/internal/shared/pkg/uuidv7"
|
|
)
|
|
|
|
const (
|
|
CategoryKeyRegular = "regular"
|
|
CategoryKeyHEMS = "hems"
|
|
ShiftTimeTypeFixed = "FIXED"
|
|
ShiftTimeTypeBMCT = "BMCT"
|
|
ShiftTimeTypeECET = "ECET"
|
|
BaseContactRoleHEMSEDC = "hems_edc"
|
|
BaseContactRoleMedPax = "med_pax"
|
|
BaseContactRoleResponsiblePilot = "responsible_pilot"
|
|
)
|
|
|
|
func NormalizeCategoryType(raw string) (string, bool) {
|
|
switch strings.ToLower(strings.TrimSpace(raw)) {
|
|
case "", CategoryKeyRegular, "base":
|
|
return CategoryKeyRegular, true
|
|
case CategoryKeyHEMS, "hems-base", "hems_base":
|
|
return CategoryKeyHEMS, true
|
|
default:
|
|
return "", false
|
|
}
|
|
}
|
|
|
|
type BaseCategory struct {
|
|
ID []byte `gorm:"type:binary(16);primaryKey;column:id"`
|
|
Key string `gorm:"type:varchar(64);not null;uniqueIndex;column:key"`
|
|
Name string `gorm:"type:varchar(150);not null;column:name"`
|
|
CreatedAt time.Time `gorm:"column:created_at"`
|
|
UpdatedAt time.Time `gorm:"column:updated_at"`
|
|
}
|
|
|
|
func (BaseCategory) TableName() string { return "base_categories" }
|
|
|
|
func (c *BaseCategory) BeforeCreate(tx *gorm.DB) error {
|
|
if len(c.ID) == 0 {
|
|
c.ID = uuidv7.MustBytes()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type Base struct {
|
|
ID []byte `gorm:"type:binary(16);primaryKey;column:id"`
|
|
BaseName string `gorm:"type:varchar(150);not null;column:base"`
|
|
BaseCategoryID []byte `gorm:"type:binary(16);index;column:base_category_id"`
|
|
FotoAttachmentID []byte `gorm:"type:binary(16);index;column:foto_attachment_id"`
|
|
BaseAbbreviation string `gorm:"type:varchar(64);column:base_abbreviation"`
|
|
Address string `gorm:"type:varchar(255);column:address"`
|
|
Latitude float64 `gorm:"type:decimal(10,7);not null;default:0;column:latitude"`
|
|
Longitude float64 `gorm:"type:decimal(10,7);not null;default:0;column:longitude"`
|
|
LandlineNumber string `gorm:"type:varchar(64);column:landline_number"`
|
|
MobileNumber string `gorm:"type:varchar(64);column:mobile_number"`
|
|
Email string `gorm:"type:varchar(191);column:email"`
|
|
SortKey *int `gorm:"column:sortkey"`
|
|
SMSAlert bool `gorm:"type:tinyint(1);not null;default:0;column:sms_alert"`
|
|
Checklist bool `gorm:"type:tinyint(1);not null;default:0;column:checklist"`
|
|
LegTime string `gorm:"type:varchar(64);column:leg_time"`
|
|
DefaultStartTimeType string `gorm:"type:varchar(16);not null;default:'FIXED';column:default_start_time_type"`
|
|
DefaultEndTimeType string `gorm:"type:varchar(16);not null;default:'FIXED';column:default_end_time_type"`
|
|
DefaultShiftStart string `gorm:"type:time;column:default_shift_start"`
|
|
DefaultShiftEnd string `gorm:"type:time;column:default_shift_end"`
|
|
UTC string `gorm:"type:varchar(100);not null;default:'0';column:utc"`
|
|
Dry bool `gorm:"type:tinyint(1);not null;default:0;column:dry"`
|
|
ControlCenter bool `gorm:"type:tinyint(1);not null;default:0;column:control_center"`
|
|
DUL bool `gorm:"type:tinyint(1);not null;default:0;column:dul"`
|
|
Notes string `gorm:"type:text;column:notes"`
|
|
IsActive bool `gorm:"type:tinyint(1);index;not null;default:1;column:is_active"`
|
|
HEMSEDCContactIDs [][]byte `gorm:"-:all"`
|
|
MedPaxContactIDs [][]byte `gorm:"-:all"`
|
|
ResponsiblePilotContactIDs [][]byte `gorm:"-:all"`
|
|
HEMSEDCs []BaseContactPerson `gorm:"-:all"`
|
|
MedPax []BaseContactPerson `gorm:"-:all"`
|
|
ResponsiblePilots []BaseContactPerson `gorm:"-:all"`
|
|
OperationalShiftTimes []BaseOperationalShiftTime `gorm:"foreignKey:BaseID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
|
|
BaseCategory BaseCategory `gorm:"foreignKey:BaseCategoryID;references:ID"`
|
|
FotoAttachment *filemanager.Attachment `gorm:"foreignKey:FotoAttachmentID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
|
|
|
|
CreatedAt time.Time
|
|
CreatedBy []byte `gorm:"type:binary(16);column:created_by"`
|
|
UpdatedAt time.Time
|
|
UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"`
|
|
DeletedAt *time.Time `gorm:"column:deleted_at"`
|
|
DeletedBy []byte `gorm:"type:binary(16);column:deleted_by"`
|
|
}
|
|
|
|
func (Base) TableName() string { return "bases" }
|
|
|
|
type BaseOperationalShiftTime struct {
|
|
ID []byte `gorm:"type:binary(16);primaryKey;column:id"`
|
|
BaseID []byte `gorm:"type:binary(16);not null;index:idx_base_operational_shift_times_base_date,priority:1;column:base_id"`
|
|
DateStart *time.Time `gorm:"type:date;index:idx_base_operational_shift_times_base_date,priority:2;column:date_start"`
|
|
DateEnd *time.Time `gorm:"type:date;index:idx_base_operational_shift_times_base_date,priority:3;column:date_end"`
|
|
StartTimeType string `gorm:"type:varchar(16);not null;default:'FIXED';column:start_time_type"`
|
|
EndTimeType string `gorm:"type:varchar(16);not null;default:'FIXED';column:end_time_type"`
|
|
ShiftStart string `gorm:"type:time;column:shift_start"`
|
|
ShiftEnd string `gorm:"type:time;column:shift_end"`
|
|
|
|
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:"column:deleted_at;index"`
|
|
DeletedBy []byte `gorm:"type:binary(16);column:deleted_by"`
|
|
|
|
Base *Base `gorm:"foreignKey:BaseID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
|
|
}
|
|
|
|
func (BaseOperationalShiftTime) TableName() string { return "base_operational_shift_times" }
|
|
|
|
func (b *BaseOperationalShiftTime) BeforeCreate(tx *gorm.DB) error {
|
|
if len(b.ID) == 0 {
|
|
b.ID = uuidv7.MustBytes()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type BaseContactRole struct {
|
|
ID []byte `gorm:"type:binary(16);primaryKey;column:id"`
|
|
BaseID []byte `gorm:"type:binary(16);not null;index;column:base_id"`
|
|
ContactID []byte `gorm:"type:binary(16);not null;index;column:contact_id"`
|
|
RoleCode string `gorm:"type:varchar(64);not null;index;column:role_code"`
|
|
CreatedBy []byte `gorm:"type:binary(16);column:created_by"`
|
|
UpdatedBy []byte `gorm:"type:binary(16);column:updated_by"`
|
|
CreatedAt time.Time `gorm:"column:created_at"`
|
|
UpdatedAt time.Time `gorm:"column:updated_at"`
|
|
}
|
|
|
|
type BaseContactPerson struct {
|
|
ContactID []byte
|
|
FirstName string
|
|
LastName string
|
|
}
|
|
|
|
func (BaseContactRole) TableName() string { return "base_contact_roles" }
|
|
|
|
func (r *BaseContactRole) BeforeCreate(tx *gorm.DB) error {
|
|
if len(r.ID) == 0 {
|
|
r.ID = uuidv7.MustBytes()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (b *Base) BeforeCreate(tx *gorm.DB) error {
|
|
if len(b.ID) == 0 {
|
|
b.ID = uuidv7.MustBytes()
|
|
}
|
|
return nil
|
|
}
|