Line data Source code
1 : package profile
2 :
3 : import (
4 : "context"
5 : "errors"
6 :
7 : "resume/internal/domain/entity"
8 : )
9 :
10 : // GetUser は GetUser ユースケースの実装本体です。
11 : // Interactor.GetUser から呼ばれる private 実装にしています。
12 0 : func (uc *Interactor) GetUser(ctx context.Context, in UserInput) (UserOutput, error) {
13 0 : if in.UserID == 0 {
14 0 : return UserOutput{}, errUnauthorized()
15 0 : }
16 0 : var user *entity.User
17 0 : if err := uc.tx.Do(ctx, func(txCtx context.Context) error {
18 0 : u, err := uc.uRepo.FindByID(txCtx, in.UserID)
19 0 : if err != nil {
20 0 : // ここで repository.ErrNotFound をアプリ共通の NotFound に正規化できるとなお良い
21 0 : return err
22 0 : }
23 0 : if u == nil {
24 0 : // repository.ErrNotFound 等に差し替え可能
25 0 : return errors.New("not found")
26 0 : }
27 0 : user = u
28 0 : return nil
29 0 : }); err != nil {
30 0 : return UserOutput{}, err
31 0 : }
32 :
33 0 : return assembleUserOutput(user), nil
34 : }
|