124 lines
4.1 KiB
Go
124 lines
4.1 KiB
Go
|
|
package repository
|
||
|
|
|
||
|
|
import (
|
||
|
|
"carrot_bbs/internal/model"
|
||
|
|
|
||
|
|
"gorm.io/gorm"
|
||
|
|
)
|
||
|
|
|
||
|
|
type UserProfileAuditRepository interface {
|
||
|
|
Create(audit *model.UserProfileAudit) error
|
||
|
|
GetByID(id string) (*model.UserProfileAudit, error)
|
||
|
|
GetByUserID(userID string, contentType model.UserProfileContentType) (*model.UserProfileAudit, error)
|
||
|
|
GetPendingByUserID(userID string, contentType model.UserProfileContentType) (*model.UserProfileAudit, error)
|
||
|
|
Update(audit *model.UserProfileAudit) error
|
||
|
|
Delete(id string) error
|
||
|
|
GetPendingList(contentType model.UserProfileContentType, page, pageSize int) ([]*model.UserProfileAudit, int64, error)
|
||
|
|
CountPending(contentType model.UserProfileContentType) (int64, error)
|
||
|
|
CountPendingAll() (int64, int64, int64, error)
|
||
|
|
}
|
||
|
|
|
||
|
|
type userProfileAuditRepository struct {
|
||
|
|
db *gorm.DB
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewUserProfileAuditRepository(db *gorm.DB) UserProfileAuditRepository {
|
||
|
|
return &userProfileAuditRepository{db: db}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *userProfileAuditRepository) Create(audit *model.UserProfileAudit) error {
|
||
|
|
return r.db.Create(audit).Error
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *userProfileAuditRepository) GetByID(id string) (*model.UserProfileAudit, error) {
|
||
|
|
var audit model.UserProfileAudit
|
||
|
|
err := r.db.Preload("User").First(&audit, "id = ?", id).Error
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &audit, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *userProfileAuditRepository) GetByUserID(userID string, contentType model.UserProfileContentType) (*model.UserProfileAudit, error) {
|
||
|
|
var audit model.UserProfileAudit
|
||
|
|
err := r.db.Where("user_id = ? AND content_type = ?", userID, contentType).
|
||
|
|
Order("created_at DESC").
|
||
|
|
First(&audit).Error
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &audit, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *userProfileAuditRepository) GetPendingByUserID(userID string, contentType model.UserProfileContentType) (*model.UserProfileAudit, error) {
|
||
|
|
var audit model.UserProfileAudit
|
||
|
|
err := r.db.Where("user_id = ? AND content_type = ? AND status = ?", userID, contentType, model.UserProfileAuditStatusPending).
|
||
|
|
Order("created_at DESC").
|
||
|
|
First(&audit).Error
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
return &audit, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *userProfileAuditRepository) Update(audit *model.UserProfileAudit) error {
|
||
|
|
return r.db.Save(audit).Error
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *userProfileAuditRepository) Delete(id string) error {
|
||
|
|
return r.db.Delete(&model.UserProfileAudit{}, "id = ?", id).Error
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *userProfileAuditRepository) GetPendingList(contentType model.UserProfileContentType, page, pageSize int) ([]*model.UserProfileAudit, int64, error) {
|
||
|
|
var audits []*model.UserProfileAudit
|
||
|
|
var total int64
|
||
|
|
|
||
|
|
query := r.db.Model(&model.UserProfileAudit{}).Where("status = ?", model.UserProfileAuditStatusPending)
|
||
|
|
if contentType != "" {
|
||
|
|
query = query.Where("content_type = ?", contentType)
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := query.Count(&total).Error; err != nil {
|
||
|
|
return nil, 0, err
|
||
|
|
}
|
||
|
|
|
||
|
|
offset := (page - 1) * pageSize
|
||
|
|
if err := query.Preload("User").Order("created_at DESC").Offset(offset).Limit(pageSize).Find(&audits).Error; err != nil {
|
||
|
|
return nil, 0, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return audits, total, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *userProfileAuditRepository) CountPending(contentType model.UserProfileContentType) (int64, error) {
|
||
|
|
var count int64
|
||
|
|
err := r.db.Model(&model.UserProfileAudit{}).
|
||
|
|
Where("content_type = ? AND status = ?", contentType, model.UserProfileAuditStatusPending).
|
||
|
|
Count(&count).Error
|
||
|
|
return count, err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (r *userProfileAuditRepository) CountPendingAll() (int64, int64, int64, error) {
|
||
|
|
var avatarCount, coverCount, bioCount int64
|
||
|
|
|
||
|
|
if err := r.db.Model(&model.UserProfileAudit{}).
|
||
|
|
Where("content_type = ? AND status = ?", model.UserProfileContentTypeAvatar, model.UserProfileAuditStatusPending).
|
||
|
|
Count(&avatarCount).Error; err != nil {
|
||
|
|
return 0, 0, 0, err
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := r.db.Model(&model.UserProfileAudit{}).
|
||
|
|
Where("content_type = ? AND status = ?", model.UserProfileContentTypeCover, model.UserProfileAuditStatusPending).
|
||
|
|
Count(&coverCount).Error; err != nil {
|
||
|
|
return 0, 0, 0, err
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := r.db.Model(&model.UserProfileAudit{}).
|
||
|
|
Where("content_type = ? AND status = ?", model.UserProfileContentTypeBio, model.UserProfileAuditStatusPending).
|
||
|
|
Count(&bioCount).Error; err != nil {
|
||
|
|
return 0, 0, 0, err
|
||
|
|
}
|
||
|
|
|
||
|
|
return avatarCount, coverCount, bioCount, nil
|
||
|
|
}
|