tercul-backend/internal/models/analytics.go
Damir Mukimov fa336cacf3
wip
2025-09-01 00:43:59 +02:00

68 lines
2.2 KiB
Go

package models
// WorkStats represents statistics for a work
type WorkStats struct {
BaseModel
Views int64 `gorm:"default:0"`
Likes int64 `gorm:"default:0"`
Comments int64 `gorm:"default:0"`
Bookmarks int64 `gorm:"default:0"`
Shares int64 `gorm:"default:0"`
WorkID uint `gorm:"uniqueIndex;index"`
Work *Work `gorm:"foreignKey:WorkID"`
}
// TranslationStats represents statistics for a translation
type TranslationStats struct {
BaseModel
Views int64 `gorm:"default:0"`
Likes int64 `gorm:"default:0"`
Comments int64 `gorm:"default:0"`
Shares int64 `gorm:"default:0"`
TranslationID uint `gorm:"uniqueIndex;index"`
Translation *Translation `gorm:"foreignKey:TranslationID"`
}
// UserStats represents statistics for a user
type UserStats struct {
BaseModel
Activity int64 `gorm:"default:0"` // General activity score
Works int64 `gorm:"default:0"` // Number of works created
Translations int64 `gorm:"default:0"` // Number of translations created
Comments int64 `gorm:"default:0"` // Number of comments posted
Likes int64 `gorm:"default:0"` // Number of likes given
Bookmarks int64 `gorm:"default:0"` // Number of bookmarks created
UserID uint `gorm:"uniqueIndex;index"`
User *User `gorm:"foreignKey:UserID"`
}
// BookStats represents statistics for a book
type BookStats struct {
BaseModel
Sales int64 `gorm:"default:0"`
Views int64 `gorm:"default:0"`
Likes int64 `gorm:"default:0"`
BookID uint `gorm:"uniqueIndex;index"`
Book *Book `gorm:"foreignKey:BookID"`
}
// CollectionStats represents statistics for a collection
type CollectionStats struct {
BaseModel
Items int64 `gorm:"default:0"` // Number of works in the collection
Views int64 `gorm:"default:0"`
Likes int64 `gorm:"default:0"`
CollectionID uint `gorm:"uniqueIndex;index"`
Collection *Collection `gorm:"foreignKey:CollectionID"`
}
// MediaStats represents statistics for media
type MediaStats struct {
BaseModel
Views int64 `gorm:"default:0"`
Downloads int64 `gorm:"default:0"`
Shares int64 `gorm:"default:0"`
MediaID uint `gorm:"uniqueIndex;index"`
Media interface{} `gorm:"-"` // This would be a pointer to a Media type if it existed
}