package models import ( "time" "gorm.io/gorm" ) type DoormileClient struct { ID uint64 `gorm:"primaryKey;autoIncrement" json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` // Core identity FirstName string `gorm:"size:100;not null" json:"first_name"` LastName string `gorm:"size:100" json:"last_name"` Phone string `gorm:"uniqueIndex;size:20;not null" json:"phone"` // Location Address string `gorm:"type:text" json:"address"` City string `gorm:"size:100" json:"city"` State string `gorm:"size:100" json:"state"` Neighbourhood string `gorm:"size:100" json:"neighbourhood"` Pincode string `gorm:"size:20" json:"pincode"` // GPS survey data SurveyLat float64 `gorm:"column:surveylat" json:"survey_lat"` SurveyLong float64 `gorm:"column:surveylong" json:"survey_long"` SurveyAddress string `gorm:"type:text" json:"survey_address"` SurveyZone string `gorm:"size:100" json:"survey_zone"` SurveyPincode string `gorm:"size:20" json:"survey_pincode"` // Business profile (both consent levels) BusinessType string `gorm:"size:50" json:"business_type"` Status string `gorm:"size:50;default:'newClient'" json:"status"` ShippingFrequency string `gorm:"size:50" json:"shipping_frequency"` LogisticsSegment string `gorm:"size:50" json:"logistics_segment"` TransitFrom string `gorm:"size:100" json:"transit_from"` TransitTo string `gorm:"size:100" json:"transit_to"` // Full-consent-only fields (zeroed for basicOnly) ParcelVolume float64 `json:"parcel_volume"` ActiveContracts int `json:"active_contracts"` LogisticsProvider string `gorm:"size:100" json:"logistics_provider"` ProviderEfficiency string `gorm:"size:100" json:"provider_efficiency"` Notes string `gorm:"type:text" json:"notes"` // Consent & registration tracking DataConsent string `gorm:"size:20;default:'full'" json:"data_consent"` RegistrationSource string `gorm:"size:50" json:"registration_source"` RegisteredByID uint64 `json:"registered_by_id"` } func (DoormileClient) TableName() string { return "doormile_clients" } type DoormileAuth struct { ID uint64 `gorm:"primaryKey;autoIncrement" json:"id"` ClientID *uint64 `gorm:"default:null" json:"client_id"` Client DoormileClient `gorm:"foreignKey:ClientID" json:"client"` Email string `gorm:"uniqueIndex;size:255;not null" json:"email"` PasswordHash string `gorm:"not null" json:"-"` Role string `gorm:"default:'user'" json:"role"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (DoormileAuth) TableName() string { return "doormile_auth" }