public async Task <IActionResult> EditIssue([FromBody] EditIssueFormModel issueForm) { var resp = await _issueService.EditIssueAsync(HttpContext.GetUser(), issueForm); return(Ok(GetRequestResult(resp))); }
public async Task <bool> EditIssueAsync(User user, EditIssueFormModel issueForm) { try { var issue = await _context.Issues.FindAsync(issueForm.IssueId); if (issue is null) { throw new ExperienceManagementGlobalException(IssueServiceErrors.IssueNotFoundError); } if (issue.AnswerCounts > 1) { throw new ExperienceManagementGlobalException(IssueServiceErrors.IssueDetailsCountError); } FileAddress fileAddress; if (issueForm.ImageId != null) { fileAddress = await _context.FileAddresses.FindAsync(issueForm.ImageId); if (fileAddress == null) { throw new ExperienceManagementGlobalException(IssueServiceErrors.NotExistFileAddressError); } try { if (!File.Exists(fileAddress.FilePath)) { throw new ExperienceManagementGlobalException(IssueServiceErrors.FileNotFoundError); } Image image = Image.FromFile(fileAddress.FilePath); Image thumb = image.GetThumbnailImage(120, 120, () => false, IntPtr.Zero); var newPath = Path.ChangeExtension(fileAddress.FilePath, "thumb"); thumb.Save(newPath); issue.FileId = fileAddress.FileId; fileAddress.FilePath = newPath; fileAddress.FileType = "thumb"; _context.FileAddresses.Update(fileAddress); } catch (Exception ex) { throw new ExperienceManagementGlobalException(IssueServiceErrors.ChangeToThumbnailError, ex); } } var IsExistEquipment = _context.Equipments.All(c => issueForm.EquipmentIds.Contains(c.Id)); if (!IsExistEquipment) { throw new ExperienceManagementGlobalException(IssueServiceErrors.NotExistEquipmentsListError); } var equipmentIssueSubscriptionsRemove = await _context.EquipmentIssueSubscriptions.Where(c => c.IssueId == issue.Id).ToListAsync(); var oldequipmentIssueSubscription = equipmentIssueSubscriptionsRemove.Select(c => c.Id).ToList(); IEnumerable <long> differencesFirst = issueForm.EquipmentIds.Except(oldequipmentIssueSubscription).Union(oldequipmentIssueSubscription.Except(issueForm.EquipmentIds)); IEnumerable <long> differencesSecond = issueForm.EquipmentIds.Union(oldequipmentIssueSubscription).Except(issueForm.EquipmentIds.Intersect(oldequipmentIssueSubscription)); if (differencesFirst.Count() > 0 || differencesSecond.Count() > 0) { _context.EquipmentIssueSubscriptions.RemoveRange(equipmentIssueSubscriptionsRemove); issueForm.EquipmentIds.ForEach(async resp => { var equipmentIssueSubscription = new EquipmentIssueSubscription(); equipmentIssueSubscription.IssueId = issue.Id; equipmentIssueSubscription.EquipmentId = resp; await _context.EquipmentIssueSubscriptions.AddAsync(equipmentIssueSubscription); }); } issue.IssueType = (IssueType)issueForm.IssueType; issue.Title = issueForm.Title; issue.Description = issue.Description; issue.LastUpdateDate = DateTime.Now; _context.Issues.Update(issue); await _context.SaveChangesAsync(); return(true); } catch (Exception ex) { throw new ExperienceManagementGlobalException(IssueServiceErrors.EditIssueError, ex); } }