feat: implemented /users/{id} api route

This commit is contained in:
nihonium 2025-10-26 02:34:45 +03:00
parent 71e2661fb9
commit 948e036e8c
Signed by: nihonium
GPG key ID: 0251623741027CFC
10 changed files with 381 additions and 982 deletions

View file

@ -0,0 +1,51 @@
package handlers
import (
"context"
oapi "nyanimedb/api"
sqlc "nyanimedb/sql"
"strconv"
"github.com/jackc/pgx/v5"
"github.com/oapi-codegen/runtime/types"
)
type Server struct {
db *sqlc.Queries
}
func NewServer(db *sqlc.Queries) Server {
return Server{db: db}
}
func parseInt64(s string) (int32, error) {
i, err := strconv.ParseInt(s, 10, 64)
return int32(i), err
}
func mapUser(u sqlc.GetUserByIDRow) oapi.User {
return oapi.User{
AvatarId: u.AvatarID,
CreationDate: u.CreationDate,
DispName: u.DispName,
Id: &u.ID,
Mail: (*types.Email)(u.Mail),
Nickname: u.Nickname,
UserDesc: u.UserDesc,
}
}
func (s Server) GetUsersUserId(ctx context.Context, req oapi.GetUsersUserIdRequestObject) (oapi.GetUsersUserIdResponseObject, error) {
userID, err := parseInt64(req.UserId)
if err != nil {
return oapi.GetUsersUserId404Response{}, nil
}
user, err := s.db.GetUserByID(context.TODO(), int64(userID))
if err != nil {
if err == pgx.ErrNoRows {
return oapi.GetUsersUserId404Response{}, nil
}
return nil, err
}
return oapi.GetUsersUserId200JSONResponse(mapUser(user)), nil
}