Line data Source code
1 : // Package controller は メタ情報(国・住所用途・性別など)に関する
2 : // 参照系エンドポイントを提供します。
3 : package controller
4 :
5 : import (
6 : "log/slog"
7 : "net/http"
8 :
9 : "github.com/gin-gonic/gin"
10 :
11 : "resume/internal/adapter/http/handlerutil"
12 : "resume/internal/adapter/http/middleware"
13 : ucmeta "resume/internal/usecase/meta"
14 : )
15 :
16 : // MetaHandler は、メタ情報(国、住所用途、性別など)を提供する
17 : // HTTP エンドポイントのハンドラです。
18 : type MetaHandler struct {
19 : uc ucmeta.Usecase
20 : }
21 :
22 : // NewMetaHandler は、メタ情報ユースケースを注入した新しい MetaHandler を生成します。
23 : func NewMetaHandler(
24 : uc ucmeta.Usecase,
25 0 : ) *MetaHandler {
26 0 : return &MetaHandler{
27 0 : uc: uc,
28 0 : }
29 0 : }
30 :
31 : // ListCountry は、国一覧を返すエンドポイントです。
32 : // クエリパラメータ ?only_supported=false を指定すると、
33 : // 非サポート国も含めた全件を返します。
34 : // 例: GET /meta/country?only_supported=false
35 0 : func (h *MetaHandler) ListCountry(c *gin.Context) {
36 0 : lang := middleware.From(c)
37 0 : // ?only_supported=false の場合のみ false、それ以外は true
38 0 : only := c.DefaultQuery("only_supported", "true") != "false"
39 0 : in := ucmeta.ListCountryInput{
40 0 : Locale: lang,
41 0 : OnlySupported: only,
42 0 : }
43 0 : out, err := h.uc.ListCountry(c.Request.Context(), in)
44 0 : if err != nil {
45 0 : handlerutil.WriteError(c, err)
46 0 : return
47 0 : }
48 0 : c.JSON(http.StatusOK, out)
49 : }
50 :
51 : // ListAddressPurpose は、住所用途(billing, home, office など)の一覧を返すエンドポイントです。
52 : // ロケールに応じて翻訳済みラベルを返します。
53 : // 例: GET /meta/address-purpose?lang=ja
54 0 : func (h *MetaHandler) ListAddressPurpose(c *gin.Context) {
55 0 : lang := middleware.From(c)
56 0 : in := ucmeta.ListAddressPurposeInput{
57 0 : Locale: lang,
58 0 : }
59 0 : out, err := h.uc.ListAddressPurpose(c.Request.Context(), in)
60 0 : if err != nil {
61 0 : handlerutil.WriteError(c, err)
62 0 : return
63 0 : }
64 0 : c.JSON(http.StatusOK, out)
65 : }
66 :
67 : // ListGender は、性別(male, female, other, unspecified)の一覧を返すエンドポイントです。
68 : // ロケールに応じて翻訳済みラベルを返します。
69 : // 例: GET /meta/gender?lang=ja
70 0 : func (h *MetaHandler) ListGender(c *gin.Context) {
71 0 : lang := middleware.From(c)
72 0 : in := ucmeta.ListGenderInput{
73 0 : Locale: lang,
74 0 : }
75 0 : out, err := h.uc.ListGender(c.Request.Context(), in)
76 0 : if err != nil {
77 0 : handlerutil.WriteError(c, err)
78 0 : return
79 0 : }
80 0 : c.JSON(http.StatusOK, out)
81 : }
82 :
83 : // ListEducationStatus は 学歴状態の一覧を返すエンドポイントです。
84 : // ロケールに応じて翻訳済みラベルを返します。
85 : // 例: GET /meta/education/status?lang=ja
86 0 : func (h *MetaHandler) ListEducationStatus(c *gin.Context) {
87 0 : lang := middleware.From(c)
88 0 : slog.Debug("ListEducationStatus called. lang:", lang, lang)
89 0 : in := ucmeta.ListEducationStatusInput{
90 0 : Locale: lang,
91 0 : }
92 0 : out, err := h.uc.ListEducationStatus(c.Request.Context(), in)
93 0 : if err != nil {
94 0 : handlerutil.WriteError(c, err)
95 0 : return
96 0 : }
97 0 : c.JSON(http.StatusOK, out)
98 : }
99 :
100 : // ListDegreeType は 学位種別の一覧を返すエンドポイントです。
101 : // ロケールに応じて翻訳済みラベルを返します。
102 : // 例: GET /meta/education/degree?lang=ja
103 0 : func (h *MetaHandler) ListDegreeType(c *gin.Context) {
104 0 : lang := middleware.From(c)
105 0 : slog.Debug("ListEducationStatus called. lang:", lang, lang)
106 0 : in := ucmeta.ListDegreeTypeInput{
107 0 : Locale: lang,
108 0 : }
109 0 : out, err := h.uc.ListDegreeType(c.Request.Context(), in)
110 0 : if err != nil {
111 0 : handlerutil.WriteError(c, err)
112 0 : return
113 0 : }
114 0 : c.JSON(http.StatusOK, out)
115 : }
116 :
117 : // ListSkillCategory は スキルカテゴリの一覧を返すエンドポイントです。
118 : // ロケールに応じて翻訳済みラベルを返します。
119 : // 例: GET /meta/education/degree?lang=ja
120 0 : func (h *MetaHandler) ListSkillCategory(c *gin.Context) {
121 0 : lang := middleware.From(c)
122 0 : in := ucmeta.ListSkillCategoryInput{
123 0 : Locale: lang,
124 0 : }
125 0 : out, err := h.uc.ListSkillCategory(c.Request.Context(), in)
126 0 : if err != nil {
127 0 : handlerutil.WriteError(c, err)
128 0 : return
129 0 : }
130 0 : c.JSON(http.StatusOK, out)
131 : }
132 :
133 : // ListOccupation は 職域の一覧を返すエンドポイントです。
134 : // ロケールに応じて翻訳済みラベルを返します。
135 : // 例: GET /meta/education/degree?lang=ja
136 0 : func (h *MetaHandler) ListOccupation(c *gin.Context) {
137 0 : lang := middleware.From(c)
138 0 : in := ucmeta.ListOccupationInput{
139 0 : Locale: lang,
140 0 : }
141 0 : out, err := h.uc.ListOccupation(c.Request.Context(), in)
142 0 : if err != nil {
143 0 : handlerutil.WriteError(c, err)
144 0 : }
145 0 : c.JSON(http.StatusOK, out)
146 : }
147 :
148 : // ListSkillLevel は スキルレベルの一覧を返すエンドポイントです。
149 : // ロケールに応じて翻訳済みラベルを返します。
150 : // 例: GET /meta/skill/level?lang=ja
151 0 : func (h *MetaHandler) ListSkillLevel(c *gin.Context) {
152 0 : lang := middleware.From(c)
153 0 : in := ucmeta.ListSkillLevelInput{
154 0 : Locale: lang,
155 0 : }
156 0 : out, err := h.uc.ListSkillLevel(c.Request.Context(), in)
157 0 : if err != nil {
158 0 : handlerutil.WriteError(c, err)
159 0 : return
160 0 : }
161 0 : c.JSON(http.StatusOK, out)
162 : }
163 :
164 : // ListExperience は 経験年数の一覧を表すエンドポイントです
165 0 : func (h *MetaHandler) ListExperience(c *gin.Context) {
166 0 : lang := middleware.From(c)
167 0 :
168 0 : in := ucmeta.ListExperienceInput{
169 0 : Locale: lang,
170 0 : }
171 0 : out, err := h.uc.ListExperience(c.Request.Context(), in)
172 0 : if err != nil {
173 0 : handlerutil.WriteError(c, err)
174 0 : return
175 0 : }
176 0 : c.JSON(http.StatusOK, out)
177 : }
178 :
179 : // ListRelationshipType は 関係タイプの一覧を表すエンドポイントです
180 0 : func (h *MetaHandler) ListRelationshipType(c *gin.Context) {
181 0 : lang := middleware.From(c)
182 0 : in := ucmeta.ListRelationshipTypeInput{
183 0 : Locale: lang,
184 0 : }
185 0 : out, err := h.uc.ListRelationshipType(c.Request.Context(), in)
186 0 : if err != nil {
187 0 : handlerutil.WriteError(c, err)
188 0 : return
189 0 : }
190 0 : c.JSON(http.StatusOK, out)
191 : }
|