/// <summary> /// Creates and adds new report to database /// </summary> /// <param name="reportToCreate">Report data from creation form</param> /// <param name="userId">Identifier of submitter</param> /// <returns>Service result with operation status and object to return</returns> public async Task <IServiceResult <ReportDetailsToReturnDto> > CreateAsync(ReportToCreateDto reportToCreate, int userId) { try { UserEntity user = await _userManager.Users.Where(x => x.Id == userId).Include(r => r.Reports).FirstOrDefaultAsync(); ReportEntity report = CreateReport(reportToCreate, userId, user.UserName); AttachmentEntity attachment = CreateAttachment(reportToCreate.File, userId); report.Attachment = attachment; try { _repository.AddNew(report); } catch (Exception) { if (report.Attachment != null) { string url = report.Attachment.Url; await _cloudinaryManager.DeleteFileAsync(url.Substring(url.LastIndexOf('/') + 1)); } throw; } ReportDetailsToReturnDto reportToReturn = _reportMapper.Map(report); return(new ServiceResult <ReportDetailsToReturnDto>(ResultType.Correct, reportToReturn)); } catch (Exception) { return(new ServiceResult <ReportDetailsToReturnDto>(ResultType.Error, new List <string> { "Błąd podczas tworzenia nowego zgłoszenia." })); } }