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