85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
package database
|
|
|
|
import (
|
|
"log"
|
|
|
|
"streamflow-backend/internal/models"
|
|
|
|
"github.com/glebarez/sqlite"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
func InitDB(dsn string) {
|
|
var err error
|
|
DB, err = gorm.Open(sqlite.Open(dsn), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Info),
|
|
})
|
|
if err != nil {
|
|
log.Fatal("Failed to connect to database:", err)
|
|
}
|
|
|
|
log.Println("Database connection established")
|
|
|
|
// Auto-migrate schema
|
|
err = DB.AutoMigrate(&models.Video{})
|
|
if err != nil {
|
|
log.Fatal("Failed to migrate database:", err)
|
|
}
|
|
}
|
|
|
|
type VideoRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewVideoRepository(db *gorm.DB) *VideoRepository {
|
|
return &VideoRepository{db: db}
|
|
}
|
|
|
|
func (r *VideoRepository) Create(video *models.Video) error {
|
|
return r.db.Create(video).Error
|
|
}
|
|
|
|
func (r *VideoRepository) GetByID(id uint) (*models.Video, error) {
|
|
var video models.Video
|
|
err := r.db.First(&video, id).Error
|
|
return &video, err
|
|
}
|
|
|
|
func (r *VideoRepository) GetBySourceURL(url string) (*models.Video, error) {
|
|
var video models.Video
|
|
err := r.db.Where("source_url = ?", url).First(&video).Error
|
|
return &video, err
|
|
}
|
|
|
|
func (r *VideoRepository) Search(query string, limit int) ([]models.Video, error) {
|
|
var videos []models.Video
|
|
err := r.db.Where("title LIKE ?", "%"+query+"%").Limit(limit).Find(&videos).Error
|
|
return videos, err
|
|
}
|
|
|
|
func (r *VideoRepository) GetAll(skip int, limit int) ([]models.Video, error) {
|
|
var videos []models.Video
|
|
err := r.db.Offset(skip).Limit(limit).Find(&videos).Error
|
|
return videos, err
|
|
}
|
|
|
|
func (r *VideoRepository) Update(id uint, updates map[string]interface{}) (*models.Video, error) {
|
|
var video models.Video
|
|
result := r.db.First(&video, id)
|
|
if result.Error != nil {
|
|
return nil, result.Error
|
|
}
|
|
|
|
err := r.db.Model(&video).Updates(updates).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &video, nil
|
|
}
|
|
|
|
func (r *VideoRepository) Delete(id uint) error {
|
|
return r.db.Delete(&models.Video{}, id).Error
|
|
}
|