80 lines
3.3 KiB
Go
80 lines
3.3 KiB
Go
package models
|
|
|
|
import "time"
|
|
|
|
type Party struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
Name string `gorm:"not null" json:"name"`
|
|
Code string `gorm:"uniqueIndex;not null" json:"code"`
|
|
TelegramID int64 `json:"telegram_id,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
Participants []Participant `gorm:"foreignKey:PartyID" json:"participants,omitempty"`
|
|
History []HistoryItem `gorm:"foreignKey:PartyID" json:"history,omitempty"`
|
|
}
|
|
|
|
type Participant struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
PartyID string `gorm:"not null;index" json:"party_id"`
|
|
Name string `gorm:"not null" json:"name"`
|
|
ColorBg string `json:"color_bg"`
|
|
ColorText string `json:"color_text"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
Tracks []Track `gorm:"foreignKey:ParticipantID" json:"tracks,omitempty"`
|
|
}
|
|
|
|
type Track struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
ParticipantID string `gorm:"not null;index" json:"participant_id"`
|
|
Title string `gorm:"not null" json:"title"`
|
|
Position int `json:"position"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type HistoryItem struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
PartyID string `gorm:"not null;index" json:"party_id"`
|
|
Title string `json:"title"`
|
|
Artist string `json:"artist"`
|
|
ImgURL string `json:"img_url"`
|
|
OwnerName string `json:"owner_name"`
|
|
OwnerColorBg string `json:"owner_color_bg"`
|
|
OwnerColorText string `json:"owner_color_text"`
|
|
PlayedAt time.Time `json:"played_at"`
|
|
}
|
|
|
|
type User struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
Username string `gorm:"uniqueIndex;not null" json:"username"`
|
|
Email string `gorm:"uniqueIndex;not null" json:"email"`
|
|
PasswordHash string `gorm:"not null" json:"-"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type Playlist struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
UserID string `gorm:"not null;index" json:"user_id"`
|
|
Name string `gorm:"not null" json:"name"`
|
|
IsPublic bool `gorm:"default:false" json:"is_public"`
|
|
Tags string `gorm:"default:''" json:"-"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
Tracks []PlaylistTrack `gorm:"foreignKey:PlaylistID" json:"tracks,omitempty"`
|
|
}
|
|
|
|
type PlaylistTrack struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
PlaylistID string `gorm:"not null;index" json:"playlist_id"`
|
|
Title string `gorm:"not null" json:"title"`
|
|
Position int `json:"position"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type UserVersion struct {
|
|
ID string `gorm:"primaryKey;type:varchar(36)" json:"id"`
|
|
UserID string `gorm:"not null;index:idx_user_version_track,unique" json:"user_id"`
|
|
TrackTitle string `gorm:"not null;index:idx_user_version_track,unique" json:"track_title"`
|
|
VersionTitle string `gorm:"not null" json:"version_title"`
|
|
VersionArtist string `gorm:"not null" json:"version_artist"`
|
|
VersionDuration string `gorm:"not null" json:"version_duration"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|