Line data Source code
1 : // Package skill は ユーザーのスキルに関するユースケース(アプリケーションロジック)を提供します
2 : package skill
3 :
4 : import (
5 : "context"
6 :
7 : "resume/internal/shared/apperr"
8 : "resume/internal/shared/valerr"
9 : )
10 :
11 : // DeleteUserSkill はユーザーのスキルを削除するユースケースを提供します
12 : func (uc *Interactor) DeleteUserSkill(
13 : ctx context.Context,
14 : in DeleteUserSkillInput,
15 0 : ) (DeleteUserSkillOutput, error) {
16 0 : if err := uc.tx.Do(ctx, func(txCtx context.Context) error {
17 0 :
18 0 : skill, err := uc.usRepo.FindByID(txCtx, in.ID)
19 0 : if err != nil {
20 0 : return err
21 0 : }
22 0 : if skill.UserID != in.UserID {
23 0 : ve := valerr.New()
24 0 : ve.Add(
25 0 : "domain.user_skill.id",
26 0 : "validation.rules.invalid",
27 0 : map[string]any{
28 0 : "field": "domain.user_skill.id",
29 0 : "value": in.ID,
30 0 : },
31 0 : )
32 0 : return apperr.New(
33 0 : apperr.CodeUnprocessable,
34 0 : "The request contains semantically invalid data.",
35 0 : ve.ToDetails(),
36 0 : )
37 0 : }
38 0 : return uc.usRepo.SoftDelete(txCtx, in.ID, in.UserID)
39 0 : }); err != nil {
40 0 : return DeleteUserSkillOutput{}, err
41 0 : }
42 0 : return DeleteUserSkillOutput{ID: in.ID}, nil
43 : }
|