Line data Source code
1 : package meta
2 :
3 : import (
4 : "context"
5 :
6 : "resume/internal/domain/entity"
7 : vo "resume/internal/domain/valueobject/i18n"
8 : "resume/internal/shared/util"
9 : )
10 :
11 : // ListSkillLevel はスキルレベルの一覧取得ユースケースのインタラクターです
12 : func (uc *Interactor) ListSkillLevel(
13 : ctx context.Context,
14 : in ListSkillLevelInput,
15 0 : ) (ListSkillLevelOutput, error) {
16 0 : var list []entity.SkillLevel
17 0 :
18 0 : if err := uc.tx.Do(ctx, func(txCtx context.Context) error {
19 0 : var err error
20 0 : list, err = uc.slRepo.ListIsActive(txCtx)
21 0 : return err
22 0 : }); err != nil {
23 0 : return ListSkillLevelOutput{}, err
24 0 : }
25 :
26 0 : out := assembleSkillLevel(list, func(code, fallback string) (string, string, string, string) {
27 0 : // 辞書引き用のキーを作成(例: master.skill_level.aware.label)
28 0 : labelKey := vo.NewKey("master.skill_level." + code + ".label")
29 0 : descKey := vo.NewKey("master.skill_level." + code + ".description")
30 0 :
31 0 : // 翻訳。見つからない場合はキー名をフォールバックとして使用
32 0 : locale := vo.NewLocale(in.Locale)
33 0 : translatedLabel, ok := uc.translator.Translate(locale, labelKey)
34 0 : if !ok {
35 0 : translatedLabel = labelKey.String()
36 0 : }
37 0 : translatedDesc, ok := uc.translator.Translate(locale, descKey)
38 0 : if !ok {
39 0 : translatedDesc = descKey.String()
40 0 : }
41 :
42 : // (label, text, description, description_text) の順で返却
43 0 : return util.ToCamel(labelKey.String()), translatedLabel, util.ToCamel(descKey.String()), translatedDesc
44 : })
45 0 : return out, nil
46 : }
|