public async Task <Response> Handle(Request request, CancellationToken cancellationToken) { var state = await _context.BoardStates.FindAsync(request.Ticket.BoardStateId); var username = _httpContextAccessor.HttpContext.User.Identity.Name; var currentTeamMemberId = (await _context.TeamMembers.SingleAsync(x => x.Name == username)).TeamMemberId; var ticket = await _context.Tickets .Include(x => x.TicketStates) .ThenInclude(x => x.BoardState) .FirstOrDefaultAsync(x => x.TicketId == request.Ticket.TicketId); if (ticket == null) { ticket = new(currentTeamMemberId, request.Ticket.Name, request.Ticket.Url, (Html)request.Ticket.AcceptanceCriteria, (Html)request.Ticket.Description); _context.Tickets.Add(ticket); } else { ticket.Update(currentTeamMemberId, request.Ticket.Name, request.Ticket.Url, (Html)request.Ticket.AcceptanceCriteria, (Html)request.Ticket.Description); } ticket.TicketStates.Clear(); ticket.TicketStates.Add(new(state)); await _context.SaveChangesAsync(cancellationToken); return(new()); }
public async Task <Response> Handle(Request request, CancellationToken cancellationToken) { var httpContext = _httpContextAccessor.HttpContext; var defaultFormOptions = new FormOptions(); var tickets = new List <Ticket>(); if (!MultipartRequestHelper.IsMultipartContentType(httpContext.Request.ContentType)) { throw new Exception($"Expected a multipart request, but got {httpContext.Request.ContentType}"); } var mediaTypeHeaderValue = MediaTypeHeaderValue.Parse(httpContext.Request.ContentType); var boundary = MultipartRequestHelper.GetBoundary( mediaTypeHeaderValue, defaultFormOptions.MultipartBoundaryLengthLimit); var reader = new MultipartReader(boundary, httpContext.Request.Body); var section = await reader.ReadNextSectionAsync(); while (section != null) { //var ticket = new Ticket(); var hasContentDispositionHeader = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out ContentDispositionHeaderValue contentDisposition); if (hasContentDispositionHeader) { if (MultipartRequestHelper.HasFileContentDisposition(contentDisposition)) { using (var targetStream = new MemoryStream()) { await section.Body.CopyToAsync(targetStream); //ticket.Name = $"{contentDisposition.FileName}".Trim(new char[] { '"' }).Replace("&", "and"); /* digitalAsset.Bytes = StreamHelper.ReadToEnd(targetStream); * digitalAsset.ContentType = section.ContentType;*/ } } } //_context.Tickets.Add(ticket); //tickets.Add(ticket); section = await reader.ReadNextSectionAsync(); } await _context.SaveChangesAsync(cancellationToken); return(new() { TicketIds = tickets.Select(x => x.TicketId).ToList() }); }
public async Task<Response> Handle(Request request, CancellationToken cancellationToken) { var board = Board.WithDefaults(request.Name); _context.Boards.Add(board); await _context.SaveChangesAsync(cancellationToken); return new() { Board = board.ToDto() }; } }