package model import "time" type Sex bool const ( SexMale Sex = false SexFemale Sex = true ) type User struct { ID uint64 `gorm:"primaryKey"` Name string Surname string Fathersname string Age uint8 Sex Sex Birthday time.Time Cards []Card `gorm:"foreignKey:UserID"` // just for compatibility Flights []Flight `gorm:"many2many:user_flights;joinForeignKey:UserID;joinReferences:FlightID"` } func (User) TableName() string { return "users" } type Card struct { ID uint64 `gorm:"primaryKey"` Prefix string Number uint64 Bonusprogramm string // User has multiple cards -> each card has registered flights to it Flights []Flight `gorm:"many2many:card_flights;joinForeignKey:CardID;joinReferences:FlightID"` UserID uint64 User User `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"` } func (Card) TableName() string { return "cards" } type Flight struct { ID uint64 `gorm:"primaryKey"` Number string From string To string Departure time.Time Arrival time.Time Users []User `gorm:"many2many:user_flights;joinForeignKey:FlightID;joinReferences:UserID"` Cards []Card `gorm:"many2many:card_flights;joinForeignKey:FlightID;joinReferences:CardID"` } func (Flight) TableName() string { return "flights" }