// models/event.go package models import ( "time" ) type EventType string const ( EventTypeRace EventType = "race" EventTypeTraining EventType = "training" EventTypeSocial EventType = "social" EventTypeWorkshop EventType = "workshop" ) type Event struct { ID uint `gorm:"primaryKey" json:"id"` Title string `gorm:"size:255;not null" json:"title" validate:"required,min=5,max=255"` Description string `gorm:"type:text;not null" json:"description" validate:"required,min=10"` Date time.Time `gorm:"not null" json:"date" validate:"required"` Location string `gorm:"size:255;not null" json:"location" validate:"required,max=255"` Type EventType `gorm:"size:50;not null" json:"type" validate:"required,oneof=race training social workshop"` Distance string `gorm:"size:50" json:"distance" validate:"max=50"` ParticipantsCount int `gorm:"default:0" json:"participants_count"` MaxParticipants int `gorm:"default:0" json:"max_participants" validate:"min=0"` RegistrationOpen bool `gorm:"default:true" json:"registration_open"` Image string `gorm:"size:500" json:"image" validate:"max=500"` CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"` // Связи Registrations []EventRegistration `gorm:"foreignKey:EventID" json:"registrations,omitempty"` } type EventRegistration struct { ID uint `gorm:"primaryKey" json:"id"` UserID uint `gorm:"not null" json:"user_id"` EventID uint `gorm:"not null" json:"event_id"` Status string `gorm:"size:50;default:pending" json:"status" validate:"oneof=pending confirmed cancelled completed"` Notes string `gorm:"type:text" json:"notes" validate:"max=500"` ResultTime string `gorm:"size:20" json:"result_time" validate:"max=20"` CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"` // Связи User User `gorm:"foreignKey:UserID" json:"user,omitempty"` Event *Event `gorm:"foreignKey:EventID" json:"event,omitempty"` }