public async Task <Result> Report(ReportAccommodationDuplicateRequest duplicateRequest, AgentContext agent)
        {
            var now = _dateTimeProvider.UtcNow();

            return(await Validate(duplicateRequest)
                   .Map(SaveReport)
                   .Tap(AddDuplicateRecords)
                   .Tap(ResetCacheForAgent));
 static Result Validate(ReportAccommodationDuplicateRequest duplicateRequest)
 {
     return(GenericValidator <ReportAccommodationDuplicateRequest> .Validate(v =>
     {
         v.RuleFor(r => r.Duplicates).NotEmpty();
         v.RuleForEach(r => r.Duplicates.Union(new[] { r.Accommodation }))
         .ChildRules(d =>
         {
             d.RuleFor(d => d.Id).NotEmpty();
             d.RuleFor(d => d.Supplier).IsInEnum();
             d.RuleFor(d => d.Supplier)
             .Must(p => p != Suppliers.Unknown)
             .WithMessage("Provider code is required");
         })
         .OverridePropertyName("Accommodations");
     }, duplicateRequest));
 }
        public async Task <IActionResult> AddDuplicateReport([FromBody] ReportAccommodationDuplicateRequest request)
        {
            var agent = await _agentContextService.GetAgent();

            return(OkOrBadRequest(await _duplicatesService.Report(request, agent)));
        }