40 lines
1000 B
Go
40 lines
1000 B
Go
package domain
|
|
|
|
import "gorm.io/gorm"
|
|
|
|
type SoftwareRepository interface {
|
|
List() ([]Software, error)
|
|
GetByName(name string) (*Software, error)
|
|
UpdateOrCreate(software *Software) error
|
|
}
|
|
|
|
type softwareRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func (r *softwareRepository) GetByName(name string) (*Software, error) {
|
|
var software Software
|
|
if err := r.db.Preload("Releases").Where("name = ?", name).First(&software).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &software, nil
|
|
}
|
|
|
|
func (r *softwareRepository) List() ([]Software, error) {
|
|
var softwares []Software
|
|
if err := r.db.Preload("Releases").Find(&softwares).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return softwares, nil
|
|
}
|
|
|
|
func (r *softwareRepository) UpdateOrCreate(software *Software) error {
|
|
var existing Software
|
|
if err := r.db.Where("name = ?", software.Name).First(&existing).Error; err == nil {
|
|
software.ID = existing.ID
|
|
return r.db.Model(&existing).Updates(software).Error
|
|
} else {
|
|
return r.db.Create(software).Error
|
|
}
|
|
}
|