Line data Source code
1 : // Package request は、HTTP リクエストから受け取るデータ転送オブジェクト (DTO) を定義します。
2 : // このパッケージでは、主に controller 層で Gin の Bind 機能によって入力を構造体にマッピングし、
3 : // validation・正規化を行うための型を提供します。
4 : package request
5 :
6 : import (
7 : "strings"
8 :
9 : vo "resume/internal/usecase/valueobject"
10 : )
11 :
12 : // PatchProfileRequest は、プロフィール情報(氏名・生年月日・性別など)の
13 : // 更新リクエストを表す構造体です。
14 : //
15 : // PATCH /fl/profile/personal のリクエストボディに対応し、
16 : // JSON → DTO へのバインド時に Gin の binding タグによって
17 : // 必須項目やオプショナル項目のバリデーションを行います。
18 : //
19 : // - `BirthDate` / `GenderID` / `Initial` は省略可能です。
20 : // JSON にフィールドが存在しない場合は Set=false となり、ユースケース層で「更新しない」と判断されます。
21 : // JSON に null が指定された場合は Set=true, Value=nil となり、「値をクリアする」として扱われます。
22 : //
23 : // Normalize メソッドによって、入力値の前後スペース除去などの軽微な正規化を行います。
24 : type PatchProfileRequest struct {
25 : FamilyName string `json:"family_name" binding:"required"`
26 : GivenName string `json:"given_name" binding:"required"`
27 : FamilyNameKana string `json:"family_name_kana" binding:"required"`
28 : GivenNameKana string `json:"given_name_kana" binding:"required"`
29 : BirthDate vo.PatchValue[string] `json:"birth_date" binding:"omitempty"`
30 : GenderID vo.PatchValue[uint8] `json:"gender_id" binding:"omitempty"`
31 : Initial vo.PatchValue[string] `json:"initial" binding:"omitempty"`
32 : }
33 :
34 : // Normalize はハンドラ層で Bind 後に呼ぶ
35 0 : func (r *PatchProfileRequest) Normalize() {
36 0 : trim := func(p *string) {
37 0 : if p == nil {
38 0 : return
39 0 : }
40 0 : s := strings.TrimSpace(*p)
41 0 : if s == "" {
42 0 : *p = ""
43 0 : } else {
44 0 : *p = s
45 0 : }
46 : }
47 :
48 0 : trim(&r.FamilyName)
49 0 : trim(&r.GivenName)
50 0 : trim(&r.FamilyNameKana)
51 0 : trim(&r.GivenNameKana)
52 :
53 : //trim(r.BirthDate)
54 : //trim(r.GenderID)
55 : //trim(r.Initial)
56 : }
|