59 lines
1.8 KiB
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)
|
|
}
|