feat: now GetUser returnes all the image info
All checks were successful
Build and Deploy Go App / build (push) Successful in 5m36s
Build and Deploy Go App / deploy (push) Successful in 27s

This commit is contained in:
Iron_Felix 2025-11-25 04:15:46 +03:00
parent 673ce48fac
commit 3aafab36c2
6 changed files with 63 additions and 33 deletions

View file

@ -552,11 +552,8 @@ components:
format: int64 format: int64
description: Unique user ID (primary key) description: Unique user ID (primary key)
example: 1 example: 1
avatar_id: image:
type: integer $ref: '#/components/schemas/Image'
format: int64
description: ID of the user avatar (references images table)
example: null
mail: mail:
type: string type: string
format: email format: email

View file

@ -124,9 +124,6 @@ type TitleStatus string
// User defines model for User. // User defines model for User.
type User struct { type User struct {
// AvatarId ID of the user avatar (references images table)
AvatarId *int64 `json:"avatar_id,omitempty"`
// CreationDate Timestamp when the user was created // CreationDate Timestamp when the user was created
CreationDate *time.Time `json:"creation_date,omitempty"` CreationDate *time.Time `json:"creation_date,omitempty"`
@ -134,7 +131,8 @@ type User struct {
DispName *string `json:"disp_name,omitempty"` DispName *string `json:"disp_name,omitempty"`
// Id Unique user ID (primary key) // Id Unique user ID (primary key)
Id *int64 `json:"id,omitempty"` Id *int64 `json:"id,omitempty"`
Image *Image `json:"image,omitempty"`
// Mail User email // Mail User email
Mail *openapi_types.Email `json:"mail,omitempty"` Mail *openapi_types.Email `json:"mail,omitempty"`

View file

@ -5,11 +5,8 @@ properties:
format: int64 format: int64
description: Unique user ID (primary key) description: Unique user ID (primary key)
example: 1 example: 1
avatar_id: image:
type: integer $ref: '../schemas/Image.yaml'
format: int64
description: ID of the user avatar (references images table)
example: null
mail: mail:
type: string type: string
format: email format: email

View file

@ -27,16 +27,25 @@ import (
// return int32(i), err // return int32(i), err
// } // }
func mapUser(u sqlc.GetUserByIDRow) oapi.User { func mapUser(u sqlc.GetUserByIDRow) (oapi.User, error) {
i := oapi.Image{
Id: u.AvatarID,
ImagePath: u.ImagePath,
}
s, err := sql2StorageType(u.StorageType)
if err != nil {
return oapi.User{}, fmt.Errorf("mapUser, storage type: %v", err)
}
i.StorageType = s
return oapi.User{ return oapi.User{
AvatarId: u.AvatarID, Image: &i,
CreationDate: &u.CreationDate, CreationDate: &u.CreationDate,
DispName: u.DispName, DispName: u.DispName,
Id: &u.ID, Id: &u.ID,
Mail: StringToEmail(u.Mail), Mail: StringToEmail(u.Mail),
Nickname: u.Nickname, Nickname: u.Nickname,
UserDesc: u.UserDesc, UserDesc: u.UserDesc,
} }, nil
} }
func (s Server) GetUsersUserId(ctx context.Context, req oapi.GetUsersUserIdRequestObject) (oapi.GetUsersUserIdResponseObject, error) { func (s Server) GetUsersUserId(ctx context.Context, req oapi.GetUsersUserIdRequestObject) (oapi.GetUsersUserIdResponseObject, error) {
@ -44,14 +53,19 @@ func (s Server) GetUsersUserId(ctx context.Context, req oapi.GetUsersUserIdReque
if err != nil { if err != nil {
return oapi.GetUsersUserId404Response{}, nil return oapi.GetUsersUserId404Response{}, nil
} }
user, err := s.db.GetUserByID(context.TODO(), int64(userID)) _user, err := s.db.GetUserByID(context.TODO(), int64(userID))
if err != nil { if err != nil {
if err == pgx.ErrNoRows { if err == pgx.ErrNoRows {
return oapi.GetUsersUserId404Response{}, nil return oapi.GetUsersUserId404Response{}, nil
} }
return nil, err return nil, err
} }
return oapi.GetUsersUserId200JSONResponse(mapUser(user)), nil user, err := mapUser(_user)
if err != nil {
log.Errorf("%v", err)
return oapi.GetUsersUserId500Response{}, err
}
return oapi.GetUsersUserId200JSONResponse(user), nil
} }
func sqlDate2oapi(p_date pgtype.Timestamptz) *time.Time { func sqlDate2oapi(p_date pgtype.Timestamptz) *time.Time {
@ -327,7 +341,7 @@ func (s Server) UpdateUser(ctx context.Context, request oapi.UpdateUserRequestOb
} }
oapi_user := oapi.User{ // maybe its possible to make one sqlc type and use one map func iinstead of this shit oapi_user := oapi.User{ // maybe its possible to make one sqlc type and use one map func iinstead of this shit
AvatarId: user.AvatarID, // AvatarId: user.AvatarID,
CreationDate: &user.CreationDate, CreationDate: &user.CreationDate,
DispName: user.DispName, DispName: user.DispName,
Id: &user.ID, Id: &user.ID,

View file

@ -9,9 +9,19 @@ VALUES ($1, $2)
RETURNING id, storage_type, image_path; RETURNING id, storage_type, image_path;
-- name: GetUserByID :one -- name: GetUserByID :one
SELECT id, avatar_id, mail, nickname, disp_name, user_desc, creation_date SELECT
FROM users t.id as id,
WHERE id = $1; t.avatar_id as avatar_id,
t.mail as mail,
t.nickname as nickname,
t.disp_name as disp_name,
t.user_desc as user_desc,
t.creation_date as creation_date,
i.storage_type as storage_type,
i.image_path as image_path
FROM users as t
LEFT JOIN images as i ON (t.avatar_id = i.id)
WHERE id = sqlc.arg('id')::bigint;
-- name: GetStudioByID :one -- name: GetStudioByID :one

View file

@ -224,19 +224,31 @@ func (q *Queries) GetTitleTags(ctx context.Context, titleID int64) ([]json.RawMe
} }
const getUserByID = `-- name: GetUserByID :one const getUserByID = `-- name: GetUserByID :one
SELECT id, avatar_id, mail, nickname, disp_name, user_desc, creation_date SELECT
FROM users t.id as id,
WHERE id = $1 t.avatar_id as avatar_id,
t.mail as mail,
t.nickname as nickname,
t.disp_name as disp_name,
t.user_desc as user_desc,
t.creation_date as creation_date,
i.storage_type as storage_type,
i.image_path as image_path
FROM users as t
LEFT JOIN images as i ON (t.avatar_id = i.id)
WHERE id = $1::bigint
` `
type GetUserByIDRow struct { type GetUserByIDRow struct {
ID int64 `json:"id"` ID int64 `json:"id"`
AvatarID *int64 `json:"avatar_id"` AvatarID *int64 `json:"avatar_id"`
Mail *string `json:"mail"` Mail *string `json:"mail"`
Nickname string `json:"nickname"` Nickname string `json:"nickname"`
DispName *string `json:"disp_name"` DispName *string `json:"disp_name"`
UserDesc *string `json:"user_desc"` UserDesc *string `json:"user_desc"`
CreationDate time.Time `json:"creation_date"` CreationDate time.Time `json:"creation_date"`
StorageType *StorageTypeT `json:"storage_type"`
ImagePath *string `json:"image_path"`
} }
func (q *Queries) GetUserByID(ctx context.Context, id int64) (GetUserByIDRow, error) { func (q *Queries) GetUserByID(ctx context.Context, id int64) (GetUserByIDRow, error) {
@ -250,6 +262,8 @@ func (q *Queries) GetUserByID(ctx context.Context, id int64) (GetUserByIDRow, er
&i.DispName, &i.DispName,
&i.UserDesc, &i.UserDesc,
&i.CreationDate, &i.CreationDate,
&i.StorageType,
&i.ImagePath,
) )
return i, err return i, err
} }