init push
This commit is contained in:
158
internal/domain/base/model.go
Normal file
158
internal/domain/base/model.go
Normal file
@@ -0,0 +1,158 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user