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 : // ListCountry は、国の選択肢一覧を取得するユースケースです。
13 0 : func (uc *Interactor) ListCountry(ctx context.Context, in ListCountryInput) (ListCountryOutput, error) {
14 0 : var list []entity.Country
15 0 : if err := uc.tx.Do(ctx, func(txCtx context.Context) error {
16 0 : var err error
17 0 : list, err = uc.cnRepo.List(txCtx, in.OnlySupported)
18 0 : return err
19 0 : }); err != nil {
20 0 : return ListCountryOutput{}, err
21 0 : }
22 0 : out := assembleCountry(list, func(code, fallback string) (string, string) {
23 0 : // master/country.yaml → master.country.<code>
24 0 : label := util.ToCamel("master.country." + code)
25 0 : key := vo.NewKey("master.country." + code)
26 0 : translatedText, ok := uc.translator.Translate(vo.NewLocale(in.Locale), key)
27 0 : if !ok {
28 0 : // fallback(YAML未定義なら DisplayName または code を返す)
29 0 : if fallback != "" {
30 0 : return label, fallback
31 0 : }
32 0 : return label, code
33 : }
34 0 : return label, translatedText
35 : })
36 0 : return out, nil
37 : }
|