package adminkindboxreqservice import ( "context" "git.gocasts.ir/ebhomengo/niki/logger" adminkindboxparam "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box" param "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box_req" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" ) // @see // When confirming a request, should the senderID field, which represents the person sending the kind-box to the beneficiary, // be filled at the same time? Or is it acceptable to confirm the request first and fill in the senderID field later? // func (s Service) Accept(ctx context.Context, req param.KindBoxReqAcceptRequest) (param.KindBoxReqAcceptResponse, error) { const op = "adminkindboxreqservice.Accept" err := s.repo.AcceptKindBoxReq(ctx, req.ID, req.CountAccepted) if err != nil { return param.KindBoxReqAcceptResponse{}, richerror.New(op).WithErr(err) } kindBoxReq, gErr := s.repo.GetByID(ctx, req.ID) if gErr != nil { return param.KindBoxReqAcceptResponse{}, richerror.New(op).WithErr(gErr) } _, aErr := s.kindBoxClient.AddKindBoxAfterAcceptingRequest(ctx, adminkindboxparam.KindBoxAddAfterAcceptingReqRequest{ BenefactorID: kindBoxReq.BenefactorID, KindBoxReqID: kindBoxReq.ID, Type: kindBoxReq.KindBoxType, Count: kindBoxReq.CountAccepted, }) if aErr != nil { // rollback kind box request status rErr := s.repo.RollbackKindBoxRequestStatus(ctx, req.ID) if rErr != nil { // log error logger.L().Error(rErr.Error()) } return param.KindBoxReqAcceptResponse{}, richerror.New(op).WithErr(aErr) } return param.KindBoxReqAcceptResponse{ KindBoxReqID: kindBoxReq.ID, KindBoxReqStatus: kindBoxReq.Status, CountRequested: kindBoxReq.CountRequested, CountAccepted: kindBoxReq.CountAccepted, ReferDate: kindBoxReq.ReferDate, AddressID: kindBoxReq.AddressID, }, nil }