## CI 修复 (P0/P1) P0 — 编译阻塞: - interfaces.go: postUseCase ISP 接口移除不用的 Create/Update/Delete P1 — 必须修复: - ST1000: 为 13 个包添加包注释 (common/config/model/service/...) - ST1005: redis_store.go 全部错误消息改为小写开头 - errcheck (19处): defer Close()→闭包忽略, notifier.Create→_=, r.Run→检查error - errorlint (9处): switch-on-error→errors.Is 链, ==→errors.Is - ST1020/ST1022: 导出符号注释以符号名开头 P2 — 安全评审: - gosec (12处): G203/G301/G304/G306 添加 nolint 注释并附理由 P3 — 清理: - unused: 移除 hasUnicode/energyStore/current/energyAdminUseCase - gofumpt + goimports 全量格式化 (35+ 文件)
75 lines
1.9 KiB
Go
75 lines
1.9 KiB
Go
// Package repository 提供基于 GORM 的数据访问层实现。
|
|
package repository
|
|
|
|
import (
|
|
"time"
|
|
|
|
"metazone.cc/mce/internal/model"
|
|
"metazone.cc/mce/internal/service"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// AnnouncementRepo 公告数据访问
|
|
type AnnouncementRepo struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewAnnouncementRepo 构造函数
|
|
func NewAnnouncementRepo(db *gorm.DB) *AnnouncementRepo {
|
|
return &AnnouncementRepo{db: db}
|
|
}
|
|
|
|
// WithTx 基于事务创建新实例
|
|
func (r *AnnouncementRepo) WithTx(tx *gorm.DB) service.AnnouncementStore {
|
|
return &AnnouncementRepo{db: tx}
|
|
}
|
|
|
|
// Create 创建公告
|
|
func (r *AnnouncementRepo) Create(a *model.Announcement) error {
|
|
return r.db.Create(a).Error
|
|
}
|
|
|
|
// Update 更新公告
|
|
func (r *AnnouncementRepo) Update(a *model.Announcement) error {
|
|
return r.db.Save(a).Error
|
|
}
|
|
|
|
// Delete 删除公告
|
|
func (r *AnnouncementRepo) Delete(id uint) error {
|
|
return r.db.Delete(&model.Announcement{}, id).Error
|
|
}
|
|
|
|
// FindByID 按 ID 查询
|
|
func (r *AnnouncementRepo) FindByID(id uint) (*model.Announcement, error) {
|
|
var a model.Announcement
|
|
err := r.db.First(&a, id).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &a, nil
|
|
}
|
|
|
|
// List 分页查询全部公告(管理后台用)
|
|
func (r *AnnouncementRepo) List(offset, limit int) ([]model.Announcement, int64, error) {
|
|
var total int64
|
|
if err := r.db.Model(&model.Announcement{}).Count(&total).Error; err != nil {
|
|
return nil, 0, err
|
|
}
|
|
var list []model.Announcement
|
|
err := r.db.Order("sort ASC, created_at DESC").Offset(offset).Limit(limit).Find(&list).Error
|
|
return list, total, err
|
|
}
|
|
|
|
// ListActive 查询当前生效中的公告(前台用,按 sort 排序)
|
|
func (r *AnnouncementRepo) ListActive() ([]model.Announcement, error) {
|
|
now := time.Now()
|
|
var list []model.Announcement
|
|
err := r.db.Where("is_active = true").
|
|
Where("start_at IS NULL OR start_at <= ?", now).
|
|
Where("end_at IS NULL OR end_at >= ?", now).
|
|
Order("sort ASC, created_at DESC").
|
|
Find(&list).Error
|
|
return list, err
|
|
}
|