mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-28 05:46:36 +08:00
943818f7d4
将 OpenFlare 与平台业务的数据访问从 model 与 apps 直连迁入 repository, model 仅保留实体与无 IO 规则;补充 code-check 架构守卫与开发规范。
70 lines
2.1 KiB
Go
70 lines
2.1 KiB
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package repository
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
db "github.com/Rain-kl/Wavelet/internal/infra/persistence"
|
|
"github.com/Rain-kl/Wavelet/internal/model"
|
|
)
|
|
|
|
// PushHistoryListFilter filters push history pagination queries.
|
|
type PushHistoryListFilter struct {
|
|
EventKey string
|
|
Status string
|
|
Page int
|
|
PageSize int
|
|
}
|
|
|
|
// ListPushHistories returns paginated push history records.
|
|
func ListPushHistories(ctx context.Context, filter PushHistoryListFilter) (int64, []model.PushHistory, error) {
|
|
query := db.DB(ctx).Model(&model.PushHistory{}).Order("created_at DESC")
|
|
if filter.EventKey != "" {
|
|
query = query.Where("event_key = ?", filter.EventKey)
|
|
}
|
|
if filter.Status != "" {
|
|
query = query.Where("status = ?", filter.Status)
|
|
}
|
|
|
|
var total int64
|
|
if err := query.Count(&total).Error; err != nil {
|
|
return 0, nil, err
|
|
}
|
|
|
|
var results []model.PushHistory
|
|
offset := (filter.Page - 1) * filter.PageSize
|
|
if err := query.Offset(offset).Limit(filter.PageSize).Find(&results).Error; err != nil {
|
|
return 0, nil, err
|
|
}
|
|
|
|
return total, results, nil
|
|
}
|
|
|
|
// CreatePushHistory persists a push history audit record.
|
|
func CreatePushHistory(ctx context.Context, history *model.PushHistory) error {
|
|
return db.DB(ctx).Create(history).Error
|
|
}
|
|
|
|
// CountPushHistoriesCreatedBefore returns how many push history rows were created before cutoff.
|
|
func CountPushHistoriesCreatedBefore(ctx context.Context, cutoff time.Time) (int64, error) {
|
|
var count int64
|
|
err := db.DB(ctx).Model(&model.PushHistory{}).Where("created_at < ?", cutoff).Count(&count).Error
|
|
return count, err
|
|
}
|
|
|
|
// DeletePushHistoriesCreatedBefore deletes push history rows created before cutoff.
|
|
func DeletePushHistoriesCreatedBefore(ctx context.Context, cutoff time.Time) (int64, error) {
|
|
result := db.DB(ctx).Where("created_at < ?", cutoff).Delete(&model.PushHistory{})
|
|
return result.RowsAffected, result.Error
|
|
}
|
|
|
|
// PushHistoryQuery returns a scoped query builder for push histories.
|
|
func PushHistoryQuery(ctx context.Context) *gorm.DB {
|
|
return db.DB(ctx).Model(&model.PushHistory{})
|
|
}
|