Line data Source code
1 : // Package meta は、国・住所用途・性別などのメタ情報を扱うユースケースを提供します。
2 : package meta
3 :
4 : import (
5 : "context"
6 :
7 : "resume/internal/domain/entity"
8 : vo "resume/internal/domain/valueobject/i18n"
9 : "resume/internal/shared/util"
10 : )
11 :
12 : // ListGender は、性別の選択肢一覧を取得するユースケースです。
13 0 : func (uc *Interactor) ListGender(ctx context.Context, in ListGenderInput) (ListGenderOutput, error) {
14 0 : var list []entity.Gender
15 0 : if err := uc.tx.Do(ctx, func(txCtx context.Context) error {
16 0 : var err error
17 0 : list, err = uc.gnRepo.ListActive(txCtx)
18 0 : return err
19 0 : }); err != nil {
20 0 : return ListGenderOutput{}, err
21 0 : }
22 0 : out := assembleGender(list, func(code, fallback string) (string, string) {
23 0 : // master/gender.yaml → master.gender.<code>
24 0 : label := util.ToCamel("master.gender." + code)
25 0 : key := vo.NewKey("master.gender." + code)
26 0 :
27 0 : translatedText, ok := uc.translator.Translate(vo.NewLocale(in.Locale), key)
28 0 : if !ok {
29 0 : // fallback(YAML未定義なら DisplayName または code を返す)
30 0 : if fallback != "" {
31 0 : return label, fallback
32 0 : }
33 0 : return label, code
34 : }
35 0 : return label, translatedText
36 : })
37 0 : return out, nil
38 : }
|