- Tags déclaratifs (max 10, 30 chars) via track_tags + tags - Genres normalisés (max 3) via track_genres + taxonomy - GET /api/v1/discover/genre/:genre, tag/:tag (browse chrono) - POST/DELETE follow genre/tag - Section feed "Nouvelles sorties dans vos genres" - Track update: SyncTrackTags, SyncTrackGenres via discover service - Frontend: discoverService, FeedPage by_genres, DiscoverPage - Migration 126_tags_genres_discover - MSW handlers for discover
28 lines
893 B
Go
28 lines
893 B
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// Genre v0.10.1 F352: Taxonomie fixe des genres musicaux
|
|
type Genre struct {
|
|
Slug string `gorm:"size:50;primaryKey" json:"slug" db:"slug"`
|
|
Name string `gorm:"size:100;not null" json:"name" db:"name"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
}
|
|
|
|
// TableName for Genre
|
|
func (Genre) TableName() string { return "genres" }
|
|
|
|
// TrackGenre v0.10.1: liaison track <-> genre (max 3 par track)
|
|
type TrackGenre struct {
|
|
TrackID uuid.UUID `gorm:"type:uuid;primaryKey" json:"track_id" db:"track_id"`
|
|
GenreSlug string `gorm:"size:50;primaryKey" json:"genre_slug" db:"genre_slug"`
|
|
Position int `gorm:"default:0" json:"position" db:"position"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
}
|
|
|
|
// TableName for TrackGenre
|
|
func (TrackGenre) TableName() string { return "track_genres" }
|