private async Task <string> CreateAttachmentAsync(RequestCreationBindingModel model, Request request) { string failedAttachments = string.Empty; foreach (var attachment in model.Attachments) { var extension = attachment.FileName.Split('.').Last(); var isAllowedFileFormat = FileFormatValidator.IsValidFormat(extension); if (!isAllowedFileFormat) { failedAttachments += Environment.NewLine; failedAttachments += $"{attachment.FileName} failed to upload because the file format is forbidden."; continue; } string currentDirectory = Directory.GetCurrentDirectory(); string destination = currentDirectory + "/Files" + "/Requests/" + model.Subject; Directory.CreateDirectory(destination); string path = Path.Combine(destination, attachment.FileName); var fileStream = new FileStream(path, FileMode.Create); using (fileStream) { await attachment.CopyToAsync(fileStream); } this.dbContext.RequestAttachments.Add(new RequestAttachment { FileName = attachment.FileName, PathToFile = path, RequestId = request.Id }); } return(failedAttachments); }
public IActionResult Create() { var requestBindingModel = new RequestCreationBindingModel(); var requestCategories = dbContext.RequestCategories.ToArray(); foreach (var requestCategory in requestCategories) { requestBindingModel.Categories.Add(new SelectListItem { Text = requestCategory.Name, Value = requestCategory.Id.ToString() }); } return(this.View(requestBindingModel)); }
public async Task <IActionResult> Create(RequestCreationBindingModel model) { if (!ModelState.IsValid) { return(BadRequest()); } var request = this.mapper.Map <Request>(model); var openStatusId = this.dbContext.RequestStatuses.FirstOrDefault(s => s.Name == "Open").Id; request.RequesterId = this.userManager.GetUserId(User); request.StatusId = openStatusId; await this.requestService.AddAsync(request); string failedAttachments = string.Empty; if (model.Attachments != null) { failedAttachments = await CreateAttachmentAsync(model, request); } string message = "Request created successfully"; if (failedAttachments != string.Empty) { message += failedAttachments; } await this.requestService.SaveChangesAsync(); this.TempData.Put("__Message", new MessageModel() { Type = MessageType.Success, Message = message }); return(this.RedirectToAction("Details", new { id = request.Id.ToString() })); }
public async Task <IActionResult> Create(RequestCreationBindingModel model) { if (!ModelState.IsValid) { return(BadRequest()); } var request = Mapper.Map <Request>(model); request.RequesterId = this.userManager.GetUserId(User); await this.requestService.AddAsync(request); if (model.Attachments != null) { string path = await fileUploader.CreateAttachmentAsync(model.Subject, model.Attachments, "Requests"); ICollection <RequestAttachment> attachments = new List <RequestAttachment>(); foreach (var attachment in model.Attachments) { RequestAttachment requestAttachment = new RequestAttachment { FileName = attachment.FileName, PathToFile = Path.Combine(path, attachment.FileName), RequestId = request.Id }; attachments.Add(requestAttachment); } await this.attachmentService.AddRangeAsync(attachments); } await this.requestService.SaveChangesAsync(); this.alerter.AddMessage(MessageType.Success, "Request created successfully"); return(this.RedirectToAction("Details", new { id = request.Id.ToString() })); }
public void Create_AddsRequestToTheDatabase() { this.dbContext.RequestStatuses.Add(new RequestStatus { Id = 1, Name = "Open" }); this.dbContext.SaveChanges(); var mockUserManager = TestsUserManager.GetUserManager(); var controller = new RequestsController(this.dbContext, TestsAutoMapper.GetMapper(), mockUserManager.Object, requestService); controller.ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext { User = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(ClaimTypes.Role, WebConstants.AdminRole) })) } }; var model = new RequestCreationBindingModel { Subject = "Subject", Description = "Description" }; var result = controller.Create(model); var lastRequest = this.dbContext.Requests.LastOrDefault(); Assert.IsNotNull(lastRequest); Assert.IsTrue(lastRequest.Subject == model.Subject && lastRequest.Description == model.Description); }
public async Task <IActionResult> PostAsync(RequestCreationBindingModel model) { if (!ModelState.IsValid) { return(BadRequest()); } string userId = this.userManager.GetUserId(User); var request = new Request { Subject = model.Subject, Description = model.Description, CategoryId = 1, // TODO CHANGE THIS RequesterId = userId, }; await this.requestsService.AddAsync(request); await this.requestsService.SaveChangesAsync(); return(CreatedAtAction(nameof(this.PostAsync), model)); }