Files
teletypegames/domain/repository.release.go
T
2026-01-28 19:05:40 +01:00

50 lines
1.5 KiB
Go

package domain
import "gorm.io/gorm"
type ReleaseRepositoryInterface interface {
Create(release *Release) error
CreateIfNotExist(release *Release) error
FindLatestBySoftwareID(software_id uint) (*Release, error)
FindBySoftwareIDAndVersion(software_id uint, version string) (*Release, error)
ListBySoftwareID(software_id uint) []Release
}
type ReleaseRepository struct {
db *gorm.DB
}
func (r *ReleaseRepository) Create(release *Release) error {
return r.db.Create(release).Error
}
func (r *ReleaseRepository) CreateIfNotExist(release *Release) error {
var existing Release
err := r.db.Where("software_id = ? AND version = ?", release.SoftwareID, release.Version).First(&existing).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
return r.db.Create(release).Error
}
return err
}
return nil
}
func (r *ReleaseRepository) FindLatestBySoftwareID(software_id uint) (*Release, error) {
var release Release
err := r.db.Where("software_id = ?", software_id).Order("created_at desc").First(&release).Error
return &release, err
}
func (r *ReleaseRepository) FindBySoftwareIDAndVersion(software_id uint, version string) (*Release, error) {
var release Release
err := r.db.Where("software_id = ? AND version = ?", software_id, version).First(&release).Error
return &release, err
}
func (r *ReleaseRepository) ListBySoftwareID(software_id uint) []Release {
var releases []Release
r.db.Where("software_id = ?", software_id).Find(&releases)
return releases
}