public async Task <int> UpdateItem(ExportRequestDto dto)
 {
     using (var ctx = _contextFactory.ConstructContext())
     {
         ctx.Update(dto.ToEntity());
         return(await ctx.SaveChangesAsync(true));
     }
 }
        public IActionResult Export([FromBody] ExportRequestDto exportRequest)
        {
            Thread background = new Thread(() => _exportService.Export(exportRequest));

            background.Start();

            return(NoContent());
        }
        public async Task <ExportRequestDto> QueueRequest(ExportRequestDto request)
        {
            using (var ctx = _contextFactory.ConstructContext())
            {
                var ent = await ctx.ExportQueue.AddAsync(request.ToEntity());

                await ctx.SaveChangesAsync(true);

                return(ent.Entity.ToDto());
            }
        }
 private async Task SendResultEmail(ExportRequestDto dto, byte[] zip)
 {
     await _emailAccessor.SendEmail(new EmailMessageDto
     {
         To              = dto.Email,
         From            = "*****@*****.**", //TODO pull from settings
         Subject         = $"Export Result {dto.RequestId}",
         Body            = $"Request Id: '{dto.RequestId}' is complete! <br />Check this message for an attatchment.",
         FileName        = $"Export-{DateTime.Now:yyyy-MM-dd}.zip",
         AttatchmentMime = "application/zip",
         File            = zip
     });
 }
        public async Task <IActionResult> ExportToJson([FromQuery] ExportRequestDto request,
                                                       CancellationToken cancellationToken)
        {
            if (request.StartDate > request.EndDate)
            {
                ModelState.AddModelError(nameof(request.StartDate), "Start date cannot be greater than end date");
                return(BadRequest(ModelState));
            }

            var fileContents = await _exportService.ExportToJsonAsync(request, cancellationToken);

            return(File(fileContents, "application/json"));
        }
        internal static ExportQueueEntity ToEntity(this ExportRequestDto dto)
        {
            if (dto == null)
            {
                return(null);
            }

            return(new ExportQueueEntity
            {
                Id = dto.Id,
                RequestId = dto.RequestId,
                Email = dto.Email,
                UserId = dto.UserId,
                ExportType = (int)dto.ExportType,
                Status = (int)dto.Status,
                StartRange = dto.StartRange,
                LastUpdated = null,
                TimeStamp = dto.TimeStamp == DateTimeOffset.MinValue
                            ? null
                            : (DateTimeOffset?)dto.TimeStamp
            });
        }