moderation.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package repository
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/jackc/pgx/v5/pgxpool"
  6. "gogs.fxtmmsk.ru/foxtime/photoplaces/backend/internal/models"
  7. )
  8. type ModerationLogRepo struct {
  9. pool *pgxpool.Pool
  10. }
  11. func NewModerationLogRepo(pool *pgxpool.Pool) *ModerationLogRepo {
  12. return &ModerationLogRepo{pool: pool}
  13. }
  14. func (r *ModerationLogRepo) Create(ctx context.Context, entry *models.ModerationLog) error {
  15. err := r.pool.QueryRow(ctx,
  16. `INSERT INTO moderation_log (moderator_id, target_type, target_id, action, old_status, new_status, comment)
  17. VALUES ($1, $2, $3, $4, $5, $6, $7)
  18. RETURNING id, created_at`,
  19. entry.ModeratorID, entry.TargetType, entry.TargetID,
  20. entry.Action, entry.OldStatus, entry.NewStatus, entry.Comment,
  21. ).Scan(&entry.ID, &entry.CreatedAt)
  22. if err != nil {
  23. return fmt.Errorf("create moderation log: %w", err)
  24. }
  25. return nil
  26. }
  27. func (r *ModerationLogRepo) ListByTarget(ctx context.Context, targetType, targetID string) ([]*models.ModerationLog, error) {
  28. rows, err := r.pool.Query(ctx,
  29. `SELECT id, moderator_id, target_type, target_id, action,
  30. old_status, new_status, comment, created_at
  31. FROM moderation_log
  32. WHERE target_type = $1 AND target_id = $2
  33. ORDER BY created_at DESC`, targetType, targetID)
  34. if err != nil {
  35. return nil, fmt.Errorf("list moderation log: %w", err)
  36. }
  37. defer rows.Close()
  38. var entries []*models.ModerationLog
  39. for rows.Next() {
  40. var e models.ModerationLog
  41. if err := rows.Scan(&e.ID, &e.ModeratorID, &e.TargetType, &e.TargetID, &e.Action,
  42. &e.OldStatus, &e.NewStatus, &e.Comment, &e.CreatedAt); err != nil {
  43. return nil, err
  44. }
  45. entries = append(entries, &e)
  46. }
  47. return entries, nil
  48. }