fix: scan timestamptz into time.Time in admin service

pgx v5 uses binary protocol for timestamptz and cannot scan it
directly into *string. Scan into time.Time and format as RFC3339.
Fixes /admin/users internal server error and broken grant search.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
emil
2026-05-01 17:06:34 +03:00
co-authored by Claude Sonnet 4.6
parent 2dba7f7cd2
commit e2e8afd07a
+7 -2
View File
@@ -3,6 +3,7 @@ package admin
import ( import (
"context" "context"
"fmt" "fmt"
"time"
"github.com/jackc/pgx/v5/pgxpool" "github.com/jackc/pgx/v5/pgxpool"
@@ -123,10 +124,12 @@ func (s *Service) ListTransactions(ctx context.Context, limit, offset int, txTyp
var txs []AdminTransaction var txs []AdminTransaction
for rows.Next() { for rows.Next() {
var t AdminTransaction var t AdminTransaction
var createdAt time.Time
if err := rows.Scan(&t.ID, &t.UserID, &t.UserEmail, &t.PartnerID, if err := rows.Scan(&t.ID, &t.UserID, &t.UserEmail, &t.PartnerID,
&t.Amount, &t.Type, &t.Description, &t.CreatedAt); err != nil { &t.Amount, &t.Type, &t.Description, &createdAt); err != nil {
return nil, 0, fmt.Errorf("service.ListTransactions: scan: %w", err) return nil, 0, fmt.Errorf("service.ListTransactions: scan: %w", err)
} }
t.CreatedAt = createdAt.UTC().Format(time.RFC3339)
txs = append(txs, t) txs = append(txs, t)
} }
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
@@ -189,9 +192,11 @@ func (s *Service) ListStudents(ctx context.Context, search string, limit, offset
var students []Student var students []Student
for rows.Next() { for rows.Next() {
var st Student var st Student
if err := rows.Scan(&st.ID, &st.Email, &st.Name, &st.StudentID, &st.Balance, &st.CreatedAt); err != nil { var createdAt time.Time
if err := rows.Scan(&st.ID, &st.Email, &st.Name, &st.StudentID, &st.Balance, &createdAt); err != nil {
return nil, 0, fmt.Errorf("service.ListStudents: scan: %w", err) return nil, 0, fmt.Errorf("service.ListStudents: scan: %w", err)
} }
st.CreatedAt = createdAt.UTC().Format(time.RFC3339)
students = append(students, st) students = append(students, st)
} }
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {