76 lines
2.1 KiB
Go
76 lines
2.1 KiB
Go
package storage
|
|
|
|
import (
|
|
"goalfymax-admin/internal/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type UserProjectQuotaFilter struct {
|
|
UserID string
|
|
Enabled *bool
|
|
Page int
|
|
Size int
|
|
}
|
|
|
|
type UserProjectQuotaStorage interface {
|
|
Create(q *models.UserProjectQuota) error
|
|
Update(q *models.UserProjectQuota) error
|
|
Delete(id uint) error
|
|
GetByID(id uint) (*models.UserProjectQuota, error)
|
|
GetByUserID(userID string) (*models.UserProjectQuota, error)
|
|
List(filter UserProjectQuotaFilter) ([]models.UserProjectQuota, int64, error)
|
|
}
|
|
|
|
type userProjectQuotaStorage struct{ db *gorm.DB }
|
|
|
|
func NewUserProjectQuotaStorage() UserProjectQuotaStorage { return &userProjectQuotaStorage{db: DB} }
|
|
|
|
func (s *userProjectQuotaStorage) Create(q *models.UserProjectQuota) error {
|
|
return s.db.Create(q).Error
|
|
}
|
|
func (s *userProjectQuotaStorage) Update(q *models.UserProjectQuota) error { return s.db.Save(q).Error }
|
|
func (s *userProjectQuotaStorage) Delete(id uint) error {
|
|
return s.db.Delete(&models.UserProjectQuota{}, id).Error
|
|
}
|
|
func (s *userProjectQuotaStorage) GetByID(id uint) (*models.UserProjectQuota, error) {
|
|
var out models.UserProjectQuota
|
|
if err := s.db.First(&out, id).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &out, nil
|
|
}
|
|
func (s *userProjectQuotaStorage) GetByUserID(userID string) (*models.UserProjectQuota, error) {
|
|
var out models.UserProjectQuota
|
|
if err := s.db.Where("user_id = ?", userID).First(&out).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &out, nil
|
|
}
|
|
func (s *userProjectQuotaStorage) List(filter UserProjectQuotaFilter) ([]models.UserProjectQuota, int64, error) {
|
|
var (
|
|
items []models.UserProjectQuota
|
|
total int64
|
|
)
|
|
q := s.db.Model(&models.UserProjectQuota{})
|
|
if filter.UserID != "" {
|
|
q = q.Where("user_id LIKE ?", "%"+filter.UserID+"%")
|
|
}
|
|
if filter.Enabled != nil {
|
|
q = q.Where("enabled = ?", *filter.Enabled)
|
|
}
|
|
if err := q.Count(&total).Error; err != nil {
|
|
return nil, 0, err
|
|
}
|
|
page, size := filter.Page, filter.Size
|
|
if page <= 0 {
|
|
page = 1
|
|
}
|
|
if size <= 0 || size > 200 {
|
|
size = 20
|
|
}
|
|
if err := q.Order("id DESC").Offset((page - 1) * size).Limit(size).Find(&items).Error; err != nil {
|
|
return nil, 0, err
|
|
}
|
|
return items, total, nil
|
|
}
|