public async Task <IActionResult> EditPage([FromRoute] int id, [FromBody] PageCreateEditRequest updatedPageData, CancellationToken cancellationToken) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var originalPage = await _mediator.Send(new GetPageByIdRequest(id), cancellationToken); if (originalPage == null) { return(NotFound()); } var pagesWithTheSameDate = await _mediator.Send(new GetPagesByExactDateRequest(updatedPageData.Date), cancellationToken); var pageHasChanges = originalPage.Date != updatedPageData.Date; var pageCanBeUpdated = !pageHasChanges || (pageHasChanges && !pagesWithTheSameDate.Any()); if (!pageCanBeUpdated) { ModelState.AddModelError(nameof(updatedPageData.Date), $"Page with date '${updatedPageData.Date.ToShortDateString()}' already exists"); return(BadRequest(ModelState)); } originalPage = _mapper.Map(updatedPageData, originalPage); await _mediator.Send(new EditPageRequest(originalPage), cancellationToken); return(Ok()); }
public async Task <IActionResult> CreatePage([FromBody] PageCreateEditRequest pageData, CancellationToken cancellationToken) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var pagesWithTheSameDate = await _mediator.Send(new GetPagesByExactDateRequest(pageData.Date), cancellationToken); if (pagesWithTheSameDate.Any()) { ModelState.AddModelError(nameof(pageData.Date), $"Page with date '${pageData.Date.ToShortDateString()}' already exists"); return(BadRequest(ModelState)); } var page = _mapper.Map <Page>(pageData); var createdPage = await _mediator.Send(new CreatePageRequest(page), cancellationToken); return(Ok(createdPage.Id)); }