55using ECER . Resources . Documents . Applications ;
66using ECER . Resources . Documents . ICRA ;
77using MediatR ;
8+ using ECER . Engines . Validation . ICRA ;
89
910
1011namespace ECER . Managers . Registry ;
@@ -14,9 +15,11 @@ namespace ECER.Managers.Registry;
1415/// </summary>
1516public class ICRAEligibilityHandlers (
1617 IICRARepository iCRARepository ,
17- IMapper mapper )
18+ IMapper mapper ,
19+ IICRAValidationEngine icraValidationEngine )
1820 : IRequestHandler < SaveICRAEligibilityCommand , Contract . ICRA . ICRAEligibility ? > ,
19- IRequestHandler < ICRAEligibilitiesQuery , ICRAEligibilitiesQueryResults >
21+ IRequestHandler < ICRAEligibilitiesQuery , ICRAEligibilitiesQueryResults > ,
22+ IRequestHandler < SubmitICRAEligibilityCommand , SubmitICRAEligibilityResult >
2023{
2124
2225 public async Task < Contract . ICRA . ICRAEligibility ? > Handle ( SaveICRAEligibilityCommand request , CancellationToken cancellationToken )
@@ -27,7 +30,7 @@ public class ICRAEligibilityHandlers(
2730 var icraEligibilities = await iCRARepository . Query ( new ICRAQuery
2831 {
2932 ByApplicantId = request . eligibility . ApplicantId ,
30- ByStatus = [ Resources . Documents . ICRA . ICRAStatus . Draft ]
33+ ByStatus = [ Resources . Documents . ICRA . ICRAStatus . Draft ] // IDE0028: already simplified
3134 } , cancellationToken ) ;
3235
3336 var existingDraftICRA = icraEligibilities . FirstOrDefault ( ) ;
@@ -47,6 +50,37 @@ public class ICRAEligibilityHandlers(
4750 return mapper . Map < Contract . ICRA . ICRAEligibility > ( freshIcraEligibilities . SingleOrDefault ( ) ) ! ;
4851 }
4952
53+ public async Task < SubmitICRAEligibilityResult > Handle ( SubmitICRAEligibilityCommand request , CancellationToken cancellationToken )
54+ {
55+ ArgumentNullException . ThrowIfNull ( request ) ;
56+
57+ var eligibilities = await iCRARepository . Query ( new ICRAQuery
58+ {
59+ ById = request . icraEligibilityId ,
60+ ByApplicantId = request . userId ,
61+ ByStatus = [ Resources . Documents . ICRA . ICRAStatus . Draft ]
62+ } , cancellationToken ) ;
63+
64+ var draft = mapper . Map < IEnumerable < Contract . ICRA . ICRAEligibility > > ( eligibilities ) ! . FirstOrDefault ( ) ;
65+ if ( draft == null )
66+ {
67+ return new SubmitICRAEligibilityResult { Eligibility = null , Error = Contract . ICRA . SubmissionError . DraftIcraEligibilityNotFound , ValidationErrors = new List < string > { "draft icra eligibility does not exist" } } ;
68+ }
69+
70+ var validation = await icraValidationEngine . Validate ( draft ! ) ;
71+ if ( ! validation . IsValid )
72+ {
73+ return new SubmitICRAEligibilityResult { Eligibility = null , Error = Contract . ICRA . SubmissionError . DraftIcraEligibilityValidationFailed , ValidationErrors = validation . ValidationErrors } ;
74+ }
75+
76+ var repoModel = mapper . Map < Resources . Documents . ICRA . ICRAEligibility > ( draft ) ! ;
77+ repoModel . Status = Resources . Documents . ICRA . ICRAStatus . Submitted ;
78+ var id = await iCRARepository . Save ( repoModel , cancellationToken ) ;
79+
80+ var fresh = await iCRARepository . Query ( new ICRAQuery { ById = id } , cancellationToken ) ;
81+ return new SubmitICRAEligibilityResult { Eligibility = mapper . Map < Contract . ICRA . ICRAEligibility > ( fresh . SingleOrDefault ( ) ) } ;
82+ }
83+
5084
5185 public async Task < ICRAEligibilitiesQueryResults > Handle ( ICRAEligibilitiesQuery request , CancellationToken cancellationToken )
5286 {
0 commit comments