Line data Source code
1 : // Package controller はエンドポイント処理を担当します。
2 : package controller
3 :
4 : import (
5 : "net/http"
6 : "strconv"
7 :
8 : "github.com/gin-gonic/gin"
9 :
10 : resp "resume/internal/adapter/http/dto/response"
11 : "resume/internal/adapter/http/handlerutil"
12 : "resume/internal/shared/apperr"
13 : "resume/internal/usecase/user"
14 : )
15 :
16 : // UserHandler はユーザー情報用のハンドラです。
17 : type UserHandler struct {
18 : uc user.Usecase
19 : }
20 :
21 : // NewUserHandler は UserHandler の新しいインスタンスを生成して返します。
22 : // ユーザー情報の HTTP リクエストを処理するためのハンドラを初期化します。
23 0 : func NewUserHandler(uc user.Usecase) *UserHandler {
24 0 : return &UserHandler{uc: uc}
25 0 : }
26 :
27 : // GetByID は GET /api/users/:id を処理します。
28 0 : func (h *UserHandler) GetByID(c *gin.Context) {
29 0 : idStr := c.Param("id")
30 0 : id64, err := strconv.ParseUint(idStr, 10, 64)
31 0 : if err != nil {
32 0 : handlerutil.WriteError(c,
33 0 : apperr.New(apperr.CodeBadRequest, "invalid user id", map[string]any{
34 0 : "param": idStr,
35 0 : }))
36 0 : return
37 0 : }
38 :
39 0 : out, err := h.uc.GetByID(c.Request.Context(), user.GetUserInput{ID: id64})
40 0 : if err != nil {
41 0 : handlerutil.WriteError(c, err) // usecase側がapperr返却する想定
42 0 : return
43 0 : }
44 :
45 0 : c.JSON(
46 0 : http.StatusOK,
47 0 : resp.FromUsecase(
48 0 : out.ID,
49 0 : out.DisplayName,
50 0 : out.Email,
51 0 : ),
52 0 : )
53 : }
|