144 lines
5.4 KiB
Go
144 lines
5.4 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// RoyaltyRecord enregistrement d'une royalty dans la base de données
|
|
type RoyaltyRecord struct {
|
|
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey"`
|
|
ContentID uuid.UUID `json:"content_id" gorm:"type:uuid;not null;index"`
|
|
CreatorID uuid.UUID `json:"creator_id" gorm:"type:uuid;not null;index"`
|
|
Period string `json:"period" gorm:"not null;index"`
|
|
Plays int64 `json:"plays" gorm:"not null"`
|
|
Revenue float64 `json:"revenue" gorm:"not null"`
|
|
RoyaltyAmount float64 `json:"royalty_amount" gorm:"not null"`
|
|
RoyaltyRate float64 `json:"royalty_rate" gorm:"not null"`
|
|
Status string `json:"status" gorm:"not null;default:'calculated'"`
|
|
CalculatedAt time.Time `json:"calculated_at" gorm:"not null"`
|
|
PaidAt *time.Time `json:"paid_at,omitempty"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
|
|
// RoyaltyPayout paiement de royalties dans la base de données
|
|
type RoyaltyPayout struct {
|
|
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey"`
|
|
PayoutID string `json:"payout_id" gorm:"uniqueIndex;not null"`
|
|
CreatorID uuid.UUID `json:"creator_id" gorm:"type:uuid;not null;index"`
|
|
Amount float64 `json:"amount" gorm:"not null"`
|
|
Currency string `json:"currency" gorm:"not null;default:'EUR'"`
|
|
Period string `json:"period" gorm:"not null;index"`
|
|
Status string `json:"status" gorm:"not null;default:'pending'"`
|
|
PaymentMethod string `json:"payment_method" gorm:"not null"`
|
|
TransactionID string `json:"transaction_id,omitempty"`
|
|
ProcessedAt time.Time `json:"processed_at" gorm:"not null"`
|
|
EstimatedArrival time.Time `json:"estimated_arrival" gorm:"not null"`
|
|
Notes string `json:"notes,omitempty"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
|
|
// RoyaltyRate taux de royalty par type de contenu
|
|
type RoyaltyRate struct {
|
|
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey"`
|
|
ContentType string `json:"content_type" gorm:"uniqueIndex;not null"`
|
|
Rate float64 `json:"rate" gorm:"not null"`
|
|
Description string `json:"description,omitempty"`
|
|
IsActive bool `json:"is_active" gorm:"not null;default:true"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
|
|
// CreatorRoyaltyRate taux de royalty personnalisé par créateur
|
|
type CreatorRoyaltyRate struct {
|
|
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey"`
|
|
CreatorID uuid.UUID `json:"creator_id" gorm:"type:uuid;not null;uniqueIndex"`
|
|
Rate float64 `json:"rate" gorm:"not null"`
|
|
Reason string `json:"reason,omitempty"`
|
|
IsActive bool `json:"is_active" gorm:"not null;default:true"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
|
|
// RoyaltyConfig configuration des royalties
|
|
type RoyaltyConfig struct {
|
|
ID uuid.UUID `json:"id" gorm:"type:uuid;primaryKey"`
|
|
PlatformFeeRate float64 `json:"platform_fee_rate" gorm:"not null;default:0.15"`
|
|
MinimumPayoutAmount float64 `json:"minimum_payout_amount" gorm:"not null;default:50.0"`
|
|
PayoutSchedule string `json:"payout_schedule" gorm:"not null;default:'monthly'"`
|
|
ProcessingDelay int `json:"processing_delay" gorm:"not null;default:3"`
|
|
Currency string `json:"currency" gorm:"not null;default:'EUR'"`
|
|
IsActive bool `json:"is_active" gorm:"not null;default:true"`
|
|
CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"`
|
|
}
|
|
|
|
// TableName spécifie le nom de la table pour RoyaltyRecord
|
|
func (RoyaltyRecord) TableName() string {
|
|
return "royalty_records"
|
|
}
|
|
|
|
// TableName spécifie le nom de la table pour RoyaltyPayout
|
|
func (RoyaltyPayout) TableName() string {
|
|
return "royalty_payouts"
|
|
}
|
|
|
|
// TableName spécifie le nom de la table pour RoyaltyRate
|
|
func (RoyaltyRate) TableName() string {
|
|
return "royalty_rates"
|
|
}
|
|
|
|
// TableName spécifie le nom de la table pour CreatorRoyaltyRate
|
|
func (CreatorRoyaltyRate) TableName() string {
|
|
return "creator_royalty_rates"
|
|
}
|
|
|
|
// TableName spécifie le nom de la table pour RoyaltyConfig
|
|
func (RoyaltyConfig) TableName() string {
|
|
return "royalty_config"
|
|
}
|
|
|
|
// BeforeCreate hook GORM pour générer UUID si non défini
|
|
func (m *RoyaltyRecord) BeforeCreate(tx *gorm.DB) error {
|
|
if m.ID == uuid.Nil {
|
|
m.ID = uuid.New()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// BeforeCreate hook GORM pour générer UUID si non défini
|
|
func (m *RoyaltyPayout) BeforeCreate(tx *gorm.DB) error {
|
|
if m.ID == uuid.Nil {
|
|
m.ID = uuid.New()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// BeforeCreate hook GORM pour générer UUID si non défini
|
|
func (m *RoyaltyRate) BeforeCreate(tx *gorm.DB) error {
|
|
if m.ID == uuid.Nil {
|
|
m.ID = uuid.New()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// BeforeCreate hook GORM pour générer UUID si non défini
|
|
func (m *CreatorRoyaltyRate) BeforeCreate(tx *gorm.DB) error {
|
|
if m.ID == uuid.Nil {
|
|
m.ID = uuid.New()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// BeforeCreate hook GORM pour générer UUID si non défini
|
|
func (m *RoyaltyConfig) BeforeCreate(tx *gorm.DB) error {
|
|
if m.ID == uuid.Nil {
|
|
m.ID = uuid.New()
|
|
}
|
|
return nil
|
|
}
|