Line data Source code
1 : package profile
2 :
3 : import (
4 : "context"
5 :
6 : "resume/internal/domain/entity"
7 : "resume/internal/shared/apperr"
8 : "resume/internal/shared/valerr"
9 : )
10 :
11 : // DetailUserAddress は 認証済みユーザーの住所情報を返します
12 : func (uc *Interactor) DetailUserAddress(
13 : ctx context.Context,
14 : in DetailUserAddressInput,
15 0 : ) (DetailUserAddressOutput, error) {
16 0 : var addr *entity.UserAddress
17 0 : if err := uc.tx.Do(ctx, func(txCtx context.Context) error {
18 0 :
19 0 : a, err := uc.uaRepo.FindByID(txCtx, in.AddressID)
20 0 : if err != nil {
21 0 : return err
22 0 : }
23 :
24 0 : if a.UserID != in.UserID {
25 0 : ve := valerr.New()
26 0 : ve.Add(
27 0 : "domain.user_address.id",
28 0 : "validation.rules.invalid",
29 0 : map[string]any{
30 0 : "field": "domain.userAddress.id",
31 0 : },
32 0 : )
33 0 : return apperr.New(
34 0 : apperr.CodeUnprocessable,
35 0 : "The request contains semantically invalid data.",
36 0 : ve.ToDetails(),
37 0 : )
38 0 : }
39 0 : addr = a
40 0 : return nil
41 0 : }); err != nil {
42 0 : return DetailUserAddressOutput{}, err
43 0 : }
44 :
45 0 : return DetailUserAddressOutput{
46 0 : UserAddress: addr,
47 0 : }, nil
48 : }
|