package repository import ( "context" "fmt" "github.com/jackc/pgx/v5/pgxpool" "gogs.fxtmmsk.ru/foxtime/photoplaces/backend/internal/models" ) type ModerationLogRepo struct { pool *pgxpool.Pool } func NewModerationLogRepo(pool *pgxpool.Pool) *ModerationLogRepo { return &ModerationLogRepo{pool: pool} } func (r *ModerationLogRepo) Create(ctx context.Context, entry *models.ModerationLog) error { err := r.pool.QueryRow(ctx, `INSERT INTO moderation_log (moderator_id, target_type, target_id, action, old_status, new_status, comment) VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id, created_at`, entry.ModeratorID, entry.TargetType, entry.TargetID, entry.Action, entry.OldStatus, entry.NewStatus, entry.Comment, ).Scan(&entry.ID, &entry.CreatedAt) if err != nil { return fmt.Errorf("create moderation log: %w", err) } return nil } func (r *ModerationLogRepo) ListByTarget(ctx context.Context, targetType, targetID string) ([]*models.ModerationLog, error) { rows, err := r.pool.Query(ctx, `SELECT id, moderator_id, target_type, target_id, action, old_status, new_status, comment, created_at FROM moderation_log WHERE target_type = $1 AND target_id = $2 ORDER BY created_at DESC`, targetType, targetID) if err != nil { return nil, fmt.Errorf("list moderation log: %w", err) } defer rows.Close() var entries []*models.ModerationLog for rows.Next() { var e models.ModerationLog if err := rows.Scan(&e.ID, &e.ModeratorID, &e.TargetType, &e.TargetID, &e.Action, &e.OldStatus, &e.NewStatus, &e.Comment, &e.CreatedAt); err != nil { return nil, err } entries = append(entries, &e) } return entries, nil }