veza/veza-backend-api/internal/models/queue_session.go

56 lines
1.7 KiB
Go

package models
import (
"time"
"github.com/google/uuid"
"gorm.io/gorm"
)
// QueueSession represents a shared collaborative queue (v0.203 Lot D1)
type QueueSession struct {
ID uuid.UUID `gorm:"type:uuid;primaryKey" json:"id"`
ShareToken string `gorm:"type:varchar(32);uniqueIndex;not null" json:"share_token"`
CreatorID uuid.UUID `gorm:"type:uuid;not null;index" json:"creator_id"`
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
Creator User `gorm:"foreignKey:CreatorID" json:"-"`
Items []SharedQueueItem `gorm:"foreignKey:SessionID;constraint:OnDelete:CASCADE" json:"items,omitempty"`
}
// TableName defines the table name for GORM
func (QueueSession) TableName() string {
return "queue_sessions"
}
// BeforeCreate GORM hook to generate UUID if not set
func (qs *QueueSession) BeforeCreate(tx *gorm.DB) error {
if qs.ID == uuid.Nil {
qs.ID = uuid.New()
}
return nil
}
// SharedQueueItem represents a track in a shared queue session
type SharedQueueItem struct {
ID uuid.UUID `gorm:"type:uuid;primaryKey" json:"id"`
SessionID uuid.UUID `gorm:"type:uuid;not null;index" json:"session_id"`
TrackID uuid.UUID `gorm:"type:uuid;not null" json:"track_id"`
Position int `gorm:"not null" json:"position"`
AddedAt time.Time `gorm:"autoCreateTime" json:"added_at"`
Track Track `gorm:"foreignKey:TrackID" json:"track,omitempty"`
}
// TableName defines the table name for GORM
func (SharedQueueItem) TableName() string {
return "shared_queue_items"
}
// BeforeCreate GORM hook to generate UUID if not set
func (qi *SharedQueueItem) BeforeCreate(tx *gorm.DB) error {
if qi.ID == uuid.Nil {
qi.ID = uuid.New()
}
return nil
}