public IActionResult GetById(int id, DateTimeOffset?timestamp = null) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var status = _entityIndex.Status(ResourceType.Tag, id) ?? ContentStatus.Published; if (!UserPermissions.IsAllowedToGet(User.Identity, status, _entityIndex.Owner(ResourceType.Tag, id))) { return(Forbid()); } var tag = _db.Database.GetCollection <Tag>(ResourceType.Tag.Name) .AsQueryable() .FirstOrDefault(x => x.Id == id); if (tag == null) { return(NotFound()); } if (timestamp != null && tag.Timestamp <= timestamp.Value) { return(StatusCode(304)); } var tagResult = new TagResult(tag) { Timestamp = _referencesIndex.LastModificationCascading(ResourceType.Tag, id) }; return(Ok(tagResult)); }
// APIs to get the state of an entity at a specific point in time /* * [HttpGet("/api/Exhibits/{id}/History/{timestamp}")] * public Task<IActionResult> GetExhibitVersion(int id, DateTimeOffset timestamp) => * GetVersionAsync<Exhibit>(ResourceType.Exhibit, id, timestamp); * * [HttpGet("/api/Exhibits/Pages/{id}/History/{timestamp}")] * public Task<IActionResult> GetExhibitPageVersion(int id, DateTimeOffset timestamp) => * GetVersionAsync<ExhibitPage>(ResourceType.ExhibitPage, id, timestamp); * * [HttpGet("/api/Media/{id}/History/{timestamp}")] * public Task<IActionResult> GetMediaVersion(int id, DateTimeOffset timestamp) => * GetVersionAsync<MediaElement>(ResourceType.Media, id, timestamp); * * [HttpGet("/api/Routes/{id}/History/{timestamp}")] * public Task<IActionResult> GetRouteVersion(int id, DateTimeOffset timestamp) => * GetVersionAsync<Route>(ResourceType.Route, id, timestamp); * * [HttpGet("/api/Tags/{id}/History/{timestamp}")] * public Task<IActionResult> GetTagVersion(int id, DateTimeOffset timestamp) => * GetVersionAsync<Route>(ResourceType.Tag, id, timestamp); */ // Private helper methods private async Task <IActionResult> GetSummaryAsync(ResourceType type, int id) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (!UserPermissions.IsAllowedToGetHistory(User.Identity, _entityIndex.Owner(type, id))) { return(Forbid()); } var summary = await HistoryUtil.GetSummaryAsync(_eventStore.EventStream, (type, id)); return(Ok(summary)); }
public IActionResult GetById(int id, DateTimeOffset?timestamp = null) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var status = _entityIndex.Status(ResourceType.Media, id) ?? ContentStatus.Published; if (!UserPermissions.IsAllowedToGet(User.Identity, status, _entityIndex.Owner(ResourceType.Media, id))) { return(Forbid()); } var media = _db.Database.GetCollection <MediaElement>(ResourceType.Media.Name) .AsQueryable() .FirstOrDefault(x => x.Id == id); if (media == null) { return(NotFound()); } // Media instance wasn`t modified after timestamp if (timestamp != null && media.Timestamp <= timestamp) { return(StatusCode(304)); } var result = new MediaResult(media) { File = GenerateFileUrl(media), Timestamp = _referencesIndex.LastModificationCascading(ResourceType.Media, id) }; return(Ok(result)); }