//редактировать запись 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<NoteAddModel> AddNewNoteAsync(NoteAddModel noteModel) { if (noteModel == null) { return null; } //создаём запись Note noteAdd = new Note { Title = noteModel.Title, Description = noteModel.Description, ImagePath = noteModel.ImagePath, Status = "Ожидает модерацию", CatalogUserId = noteModel.UserId, CategoryId = noteModel.CategoryId, Date = DateTime.Now, }; if (noteModel.Files != null) { //добавляем прикрепляемы файлы foreach (var file in noteModel.Files) { File fileAdd = new File { FileName = file.Name, Path = file.Path, Size = file.Size }; noteAdd.Files.Add(fileAdd); } } if (!String.IsNullOrEmpty(noteModel.Tags)) { var tags = await JsonConvert.DeserializeObjectAsync<TagForNoteAddModel[]>(noteModel.Tags); //добовляем тэги foreach (var tag in tags) { //если тэг отсутствовал в БД, добовляем его if (tag.Id == 0) { noteAdd.Tags.Add(new Tag { Id = tag.Id, Name = tag.Name }); } //если тэг присутствовал, берём существующий else { noteAdd.Tags.Add(await Database.Tags.GetAsync(tag.Id)); } } } if (!String.IsNullOrEmpty(noteModel.NoteSpecifications)) { var specif = await JsonConvert.DeserializeObjectAsync<SpecificationsForNoteAddModel[]>(noteModel.NoteSpecifications); //добовляем характеристики foreach (var sp in specif) { //если характеристика отсутствовала в БД, добовляем её if (sp.SpecificationId == 0) { noteAdd.NoteSpecifications.Add(new NoteSpecification { Specification = new Specification { Id = sp.SpecificationId, Title = sp.Title, CategoryId = noteModel.CategoryId }, SpecificationId = sp.SpecificationId, Value = sp.Value, }); } else { noteAdd.NoteSpecifications.Add(new NoteSpecification { SpecificationId = sp.SpecificationId, Value = sp.Value, }); } } } //добовляем запись в БД Database.Notes.Create(noteAdd); //сохраняем результат int result = await Database.SaveAsync(); return result > 0 ? noteModel : null; }