Files
omnex/control-plane/api/internal/demos/store.go
T
Nuxgrid 4b3a5720a3
ci-api / test (push) Has been cancelled
feat: add details demo
2026-07-28 14:44:48 +02:00

83 lines
1.8 KiB
Go

package demos
import (
"errors"
"gorm.io/gorm"
)
// Store : persistance des démos.
type Store interface {
Create(d Demo) (Demo, error)
Get(id string) (Demo, bool)
List() ([]Demo, error)
ListByUsername(username string) ([]Demo, error)
Update(d Demo) (Demo, error)
CountActive() (int, error)
GetDemoByUsername(username string) (Demo, error)
}
// GormStore : Store adossé à PostgreSQL via GORM.
type GormStore struct{ db *gorm.DB }
func NewGormStore(db *gorm.DB) *GormStore { return &GormStore{db: db} }
func (s *GormStore) Create(d Demo) (Demo, error) {
if err := s.db.Create(&d).Error; err != nil {
return Demo{}, err
}
return d, nil
}
func (s *GormStore) Get(id string) (Demo, bool) {
var d Demo
err := s.db.Where("id = ?", id).First(&d).Error
if errors.Is(err, gorm.ErrRecordNotFound) || err != nil {
return Demo{}, false
}
return d, true
}
func (s *GormStore) List() ([]Demo, error) {
var out []Demo
if err := s.db.Order("created_at DESC").Find(&out).Error; err != nil {
return nil, err
}
return out, nil
}
func (s *GormStore) ListByUsername(username string) ([]Demo, error) {
var out []Demo
if err := s.db.Where("username = ?", username).Order("created_at DESC").Find(&out).Error; err != nil {
return nil, err
}
return out, nil
}
func (s *GormStore) Update(d Demo) (Demo, error) {
if err := s.db.Save(&d).Error; err != nil {
return Demo{}, err
}
return d, nil
}
// CountActive compte les démos occupant de la capacité.
func (s *GormStore) CountActive() (int, error) {
var n int64
err := s.db.Model(&Demo{}).
Where("status IN ?", []Status{StatusPending, StatusProvisioning, StatusReady, StatusExpiring}).
Count(&n).Error
return int(n), err
}
func (s *GormStore) GetDemoByUsername(username string) (Demo, error) {
var demo Demo
err := s.db.
Where("username = ?", username).
First(&demo).
Error
return demo, err
}