kv-netflix/backend/internal/database/database.go
vndangkhoa 69308bf696 v3.9.2: Fix Android TV OOM crash + backend Content-Type headers
- Backend: Add Content-Type: application/json to all JSON API endpoints
- Android TV: Reduce HomeViewModel memory usage (load 4 categories only, limit 15 items each)
- Android TV: Prevent OOM kill on TV devices with limited RAM
- Updated APK, docker-compose, health endpoint to v3.9.2
2026-03-01 11:34:51 +07:00

85 lines
2 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
}