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