veza/veza-backend-api/internal/models/genre.go
senke 6690e334a1 feat(v0.10.1): Tags & Genres discover - F351-F355
- 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
2026-03-09 01:52:56 +01:00

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" }