81 lines
1.2 KiB
Go
81 lines
1.2 KiB
Go
package store
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"gorm.io/datatypes"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var models = []any{
|
|
&Player{},
|
|
&QuizCategory{},
|
|
&QuizEntry{},
|
|
&QuizTurn{},
|
|
}
|
|
|
|
type Player struct {
|
|
gorm.Model
|
|
|
|
Name string
|
|
|
|
UserEmail string `gorm:"index"`
|
|
UserProvider string `gorm:"index"`
|
|
|
|
Score int
|
|
|
|
PlayedAt time.Time
|
|
|
|
SelectedEntry *uint
|
|
SelectedTurn *uint
|
|
SelectedAt time.Time
|
|
SelectedAnswer *int
|
|
}
|
|
|
|
type QuizTurn struct {
|
|
gorm.Model
|
|
|
|
StartedAt time.Time `gorm:"index"`
|
|
EndedAt time.Time `gorm:"index"`
|
|
|
|
Entries []*QuizEntry `gorm:"many2many:quiz_turn_entries;"`
|
|
}
|
|
|
|
type QuizCategory struct {
|
|
gorm.Model
|
|
|
|
Name string `gorm:"index"`
|
|
Theme string `gorm:"index"`
|
|
Description string
|
|
}
|
|
|
|
type QuizEntry struct {
|
|
gorm.Model
|
|
|
|
Category *QuizCategory
|
|
CategoryID uint
|
|
|
|
Provider string `gorm:"index"`
|
|
ProviderID string `gorm:"index"`
|
|
|
|
Question string
|
|
Propositions datatypes.JSONSlice[string]
|
|
Answer string
|
|
Level uint `gorm:"index"`
|
|
Anecdote string
|
|
}
|
|
|
|
func DifficultyLevel(level uint) string {
|
|
switch level {
|
|
case 0:
|
|
return "Débutant"
|
|
case 1:
|
|
return "Confirmé"
|
|
case 2:
|
|
return "Expert"
|
|
default:
|
|
return fmt.Sprintf("Hors catégorie (%d)", level)
|
|
}
|
|
}
|