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.
This commit is contained in:
@@ -23,7 +23,7 @@ func NewPGRepository(db *pgxpool.Pool) *PGRepository {
|
|||||||
|
|
||||||
func (r *PGRepository) List(ctx context.Context) ([]User, error) {
|
func (r *PGRepository) List(ctx context.Context) ([]User, error) {
|
||||||
rows, err := r.db.Query(ctx, `
|
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
|
from users u
|
||||||
join roles r on r.id = u.role_id
|
join roles r on r.id = u.role_id
|
||||||
where u.deleted_at is null
|
where u.deleted_at is null
|
||||||
@@ -49,12 +49,19 @@ func (r *PGRepository) Create(ctx context.Context, input CreateRequest, password
|
|||||||
const query = `
|
const query = `
|
||||||
insert into users (id, role_id, username, display_name, email, password_hash)
|
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)
|
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}
|
item := User{RoleName: input.Role}
|
||||||
err := r.db.QueryRow(ctx, query, uuid.New(), input.Role, input.Username, input.DisplayName, input.Email, passwordHash).
|
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
|
return item, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user