From a197fb5bb6412a534f7d1e367fdd6dca82483e01 Mon Sep 17 00:00:00 2001 From: nessi Date: Mon, 16 Mar 2026 06:37:23 +0100 Subject: [PATCH] fix: cast username and email to text in user repository queries Add explicit ::text casts to username and email columns in List and Create queries to ensure proper type handling when scanning values from PostgreSQL. Update Create query to return role_id and role_name, adjusting Scan to match all returned fields. --- backend/internal/user/repository.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/internal/user/repository.go b/backend/internal/user/repository.go index 65baa9f..fffbe9e 100644 --- a/backend/internal/user/repository.go +++ b/backend/internal/user/repository.go @@ -23,7 +23,7 @@ func NewPGRepository(db *pgxpool.Pool) *PGRepository { func (r *PGRepository) List(ctx context.Context) ([]User, error) { rows, err := r.db.Query(ctx, ` - select u.id, r.id, r.name, u.username, u.display_name, coalesce(u.email, ''), u.is_active + select u.id, r.id, r.name, u.username::text, u.display_name, coalesce(u.email::text, ''), u.is_active from users u join roles r on r.id = u.role_id where u.deleted_at is null @@ -49,12 +49,19 @@ func (r *PGRepository) Create(ctx context.Context, input CreateRequest, password const query = ` insert into users (id, role_id, username, display_name, email, password_hash) values ($1, (select id from roles where name = $2), $3, $4, nullif($5, ''), $6) - returning id, username, display_name, coalesce(email, ''), is_active + returning + id, + (select id from roles where name = $2), + $2, + username::text, + display_name, + coalesce(email::text, ''), + is_active ` item := User{RoleName: input.Role} err := r.db.QueryRow(ctx, query, uuid.New(), input.Role, input.Username, input.DisplayName, input.Email, passwordHash). - Scan(&item.ID, &item.Username, &item.DisplayName, &item.Email, &item.IsActive) + Scan(&item.ID, &item.RoleID, &item.RoleName, &item.Username, &item.DisplayName, &item.Email, &item.IsActive) return item, err }