//редактировать запись public async Task<NoteModelForUser> EditNoteAsync(NoteModelForUser noteModel) { if (noteModel == null) { return null; } //берём запись из БД Note noteEdit = await Database.Notes.GetAsync(noteModel.Id); //обновляем поля noteEdit.Title = noteModel.Title; noteEdit.Description = noteModel.Description; if (noteModel.ImagePath != null) { noteEdit.ImagePath = noteModel.ImagePath; } noteEdit.Status = "Ожидает модерацию"; noteEdit.Date = DateTime.Now; if (noteModel.Files != null) { //удаляем ненужные старые файлы foreach (var file in noteEdit.Files.ToList()) { //если файл был удалён, удаляем его из бд if (noteModel.Files.FirstOrDefault(f => f.Id == file.Id) == null) { Database.Files.Delete(file); } } //добавляем прикрепляемые файлы foreach (var file in noteModel.Files) { //если файла не было у записи, добавляем его if (noteEdit.Files.FirstOrDefault(f => f.Id == file.Id) == null) { File fileAdd = new File { FileName = file.Name, Path = file.Path, Size = file.Size }; noteEdit.Files.Add(fileAdd); } } } //удаляем удалённые тэги foreach (var tag in noteEdit.Tags.ToList()) { //если тэг был удалён, удаляем его if (noteModel.Tags.FirstOrDefault(t => t.Id == tag.Id) == null) { noteEdit.Tags.Remove(tag); //Database.Tags.Delete(tag); } } //добовляем тэги foreach (var tag in noteModel.Tags.ToList()) { //если тэг отсутствовал в БД, добовляем его if (tag.Id == 0) { noteEdit.Tags.Add(new Tag { Id = tag.Id, Name = tag.Name }); } //если тэг присутствовал, берём существующий else { //если тэга не было у записи, добовляем его if (noteEdit.Tags.FirstOrDefault(t => t.Id == tag.Id) == null) { noteEdit.Tags.Add(await Database.Tags.GetAsync(tag.Id)); } } } //редактируем характеристики foreach (var sp in noteModel.NoteSpecifications) { //если характеристика отсутствовала в БД, добовляем её if (sp.SpecificationId == 0) { noteEdit.NoteSpecifications.Add(new NoteSpecification { Specification = new Specification { Id = sp.SpecificationId, Title = sp.Title, CategoryId = noteModel.Category.Id }, SpecificationId = sp.SpecificationId, Value = sp.Value, }); } else { //редактируем характеристику NoteSpecification specif = (await Database.NoteSpecifications.FindAsync(n => n.SpecificationId == sp.SpecificationId)).FirstOrDefault(); specif.Value = sp.Value; } } //обвновляем запись в БД Database.Notes.Update(noteEdit); //сохраняем результат int result = await Database.SaveAsync(); return result > 0 ? noteModel : null; }
public async Task<ActionResult> EditNote(NoteModelForUser noteModel, HttpPostedFileBase imagePath, HttpPostedFileBase[] file) { if (ModelState.IsValid) { //если загружено новое изображение if (noteModel.ImagePath != null) { //удаляем старое изображение string path = await UserNoteService.GetImagePathAsync(noteModel.Id); System.IO.File.Delete(Server.MapPath(path)); //сохраняем новое изображение string imageName = Path.GetFileName(imagePath.FileName); int startIndex = imageName.LastIndexOf('.'); imageName = imageName.Insert(startIndex , DateTime.Now.ToString("dd/MM/yyyy H:mm:ss").Replace(':', '_').Replace('/', '.').Replace(' ', '_')); imagePath.SaveAs(Server.MapPath("~/Images/Note/" + imageName)); //записываем путь к файлу в объект noteModel.ImagePath = "~/Images/Note/" + imageName; } //получаем файлы, которые были у записи var files = await UserNoteService.GetFilesAsync(noteModel.Id); //проверям файлы, которые были у записи foreach (var fl in files) { //если файл был удалён, удаляем его с сервера if (noteModel.Files.FirstOrDefault(f => f.Id == fl.Id) == null) { System.IO.File.Delete(Server.MapPath(fl.Path)); } } //если загружены доп файлы, //загуржаем их на сервер и добовляем к записи if (file != null && file[0] != null) { if (noteModel.Files == null) { noteModel.Files = new List<FileDTO>(); } foreach (var item in file) { string fileName = Path.GetFileName(item.FileName); item.SaveAs(Server.MapPath("~/Files/TempFiles/" + fileName)); noteModel.Files.Add(new FileDTO { Path = "~/Files/TempFiles/" + fileName, Size = item.ContentLength, Name = fileName }); } } var result = await UserNoteService.EditNoteAsync(noteModel); if (result != null) { ViewBag.Title = "Запись отредактирована"; ViewBag.Result = "Запись успешно отредактирована и ожидает проверки администратором."; return View("Success"); } else { return HttpNotFound(); } } return HttpNotFound(); }