feat():learning后台管理项目初始化

This commit is contained in:
yuj
2025-12-04 16:23:46 +08:00
parent 39886d50d2
commit 88e048f4d1
154 changed files with 28966 additions and 6 deletions

View File

@@ -0,0 +1,75 @@
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
}