public async Task <EditorDocument> Create(DocumentCreateOrUpdateInput input) { var itemToInsert = Mapper.Map <EditorDocument>(input); if (string.IsNullOrEmpty(itemToInsert.Title)) { itemToInsert.Title = await GenerateDocumentTitle(); } else { var hasSameTitleDocument = await HasSameTitleDocument(itemToInsert.Title); if (hasSameTitleDocument) { Response.StatusCode = (int)HttpStatusCode.Conflict; return(null); } } itemToInsert.UserId = JwtReader.GetUserId(); itemToInsert.DocumentAccess ??= EditorDocumentAllowedAccess.Private; var item = await Repository.AddAsync(itemToInsert); await Context.SaveChangesAsync(); return(item.Entity); }
public async Task <EditorDocument> Update(DocumentCreateOrUpdateInput input) { if (!input.Id.HasValue || input.Id == Guid.Empty) { throw new ArgumentException(nameof(input.Id)); } var item = await Get(input.Id.Value); item.Title = input.Title; if (!input.Title.Equals(item.Title)) { var hasSameTitleDocument = await HasSameTitleDocument(item.Title); if (hasSameTitleDocument) { Response.StatusCode = (int)HttpStatusCode.Conflict; return(null); } } item.Description = input.Description; item.DocumentAccess = input.AllowedAccess; var result = Repository.Update(item); await Context.SaveChangesAsync(); return(result.Entity); }
public async Task <EditorDocument> Update([FromBody] DocumentCreateOrUpdateInput input) { if (!input.Id.HasValue || input.Id == Guid.Empty) { throw new ArgumentException(nameof(input.Id)); } var item = await Repository.Include(d => d.Tags).FirstOrDefaultAsync(d => d.Id == input.Id.Value); item.Title = input.Title; if (!input.Title.Equals(item.Title)) { var hasSameTitleDocument = await HasSameTitleDocument(item.Title); if (hasSameTitleDocument) { Response.StatusCode = (int)HttpStatusCode.Conflict; return(null); } } item.Description = input.Description; item.DocumentAccess = input.AllowedAccess ?? EditorDocumentAllowedAccess.Private; item.LastUpdateTime = DateTime.Now; input.Tags ??= new List <Tags>(); item.Tags ??= new List <Tags>(); var tagsToAdd = input.Tags.Where(t => !item.Tags.Any(ct => ct.TagName.Equals(t.TagName))).ToList(); foreach (var tag in tagsToAdd) { item.Tags.Add(tag); } var tagsToRemove = item.Tags.Where(t => !input.Tags.Any(ct => ct.TagName.Equals(t.TagName))).ToList(); foreach (var tag in tagsToRemove) { item.Tags.Remove(tag); } var result = Repository.Update(item); await Context.SaveChangesAsync(); return(result.Entity); }