public async Task <IActionResult> GetById([FromRoute] GetMaterialDetailQuery.Request request) { if (User != null) { if (User.IsInRole(nameof(RolesEnum.NewsStart)) || User.IsInRole(nameof(RolesEnum.BlogStart))) { request.IncludePending = true; } } var model = await _cacheManager.GetOrCreateAsync(CacheKeysConstants.Material + request.Id, async() => await Mediator.Send(request)); return(Ok(model)); }
public async Task <IActionResult> Detail(GetMaterialDetailQuery.Request request) { request.IncludePending = User != null && (User.IsInRole(nameof(RolesEnum.NewsStart)) || User.IsInRole(nameof(RolesEnum.BlogStart))); var model = await Mediator.Send(request); if (model == null) { return(RedirectToAction("Index", "Blogs")); } if (model.Pending) { if ((model.Type == MaterialType.News || User.GetUserId() != model.UserId) && (User == null || !User.IsInRole(nameof(RolesEnum.NewsStart)))) { return(BadRequest()); } } var label = CacheKeysConstants.Material + request.Id; if (string.IsNullOrWhiteSpace(Request.Cookies[label])) { var options = new CookieOptions { Expires = DateTime.Now.AddMonths(1) }; Response.Cookies.Append(label, "1", options); model.Reads++; await Mediator.Send(new AddMaterialReadCommand.Request { Id = request.Id }); UpdateMaterialCacheAddViewAsync(request.Id); } return(View("../Materials/Detail", model)); }