spark-server/internal/module/admin/model/complaints.go

59 lines
1.8 KiB
Go

package model
import (
"context"
"time"
friendentity "spark-server/internal/module/friend/entity"
"spark-server/internal/pkg/errs"
)
func (m *Repo) ListComplaints(ctx context.Context, limit int) ([]ComplaintRow, error) {
db, err := m.session(ctx)
if err != nil {
return nil, err
}
type scanRow struct {
ID int64 `gorm:"column:id"`
UserID int64 `gorm:"column:user_id"`
TargetID int64 `gorm:"column:target_id"`
Reason int `gorm:"column:reason"`
Detail string `gorm:"column:detail"`
CreatedAt time.Time `gorm:"column:created_at"`
Email string `gorm:"column:email"`
TargetMail string `gorm:"column:target_email"`
}
var rows []scanRow
err = db.Raw(`
SELECT r.id, r.user_id, r.target_id, r.reason, r.detail, r.created_at,
COALESCE(e.email,'') AS email, COALESCE(te.email,'') AS target_email
FROM friend_reports r
LEFT JOIN user_emails e ON e.user_id = r.user_id
LEFT JOIN user_emails te ON te.user_id = r.target_id
ORDER BY r.id DESC
LIMIT ?`, limit).Scan(&rows).Error
if err != nil {
return nil, mapDBErr(err)
}
out := make([]ComplaintRow, 0, len(rows))
for _, r := range rows {
out = append(out, ComplaintRow{
ID: r.ID, UserID: r.UserID, TargetID: r.TargetID, Reason: r.Reason,
Detail: r.Detail, CreatedAt: r.CreatedAt, Email: r.Email, TargetMail: r.TargetMail,
})
}
return out, nil
}
func (m *Repo) InsertComplaint(ctx context.Context, r *friendentity.Report) error {
if r == nil || r.UserID <= 0 || r.TargetID <= 0 {
return errs.ErrInvalidArgument
}
db, err := m.session(ctx)
if err != nil {
return err
}
return mapDBErr(db.Exec(`INSERT INTO friend_reports (id, user_id, target_id, reason, detail, created_at) VALUES (?,?,?,?,?,?)`,
r.ID, r.UserID, r.TargetID, int(r.Reason), r.Detail, r.CreatedAt).Error)
}