Files
mixtape/zero.Api/Endpoints/Spaces/SpacesController.cs
T
2022-01-15 17:22:26 +01:00

72 lines
2.3 KiB
C#

using Microsoft.AspNetCore.Mvc;
using System.Collections;
namespace zero.Api.Endpoints.Spaces;
public class SpacesController : ZeroApiEntityStoreController<Space, ISpaceStore>
{
ISpaceTypeService SpaceTypes;
public SpacesController(ISpaceStore store, ISpaceTypeService spaceTypes) : base(store)
{
SpaceTypes = spaceTypes;
}
[HttpGet("types")]
[ZeroAuthorize(SpacePermissions.Read)]
public virtual ActionResult<IEnumerable> GetTypes() => Ok(SpaceTypes.GetAll());
[HttpGet("types/{alias}")]
[ZeroAuthorize(SpacePermissions.Read)]
public virtual ActionResult<SpaceType> GetType(string alias) => Ok(SpaceTypes.GetByAlias(alias));
[HttpGet("{alias}")]
[ZeroAuthorize(SpacePermissions.Read)]
public virtual async Task<ActionResult<object>> Get(string alias, [FromQuery] ListQuery<Space> query = null)
{
SpaceType space = SpaceTypes.GetByAlias(alias);
if (space == null)
{
return NotFound();
}
if (space.View != SpaceView.Editor)
{
query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate);
query.SearchSelector ??= x => x.Name;
Paged<Space> result = await Store.Load<zero_Api_Spaces_Listing>(query.Page, query.PageSize, q => q.Where(x => x.Flavor == alias).Filter(query));
return result;
}
var stream = Store.Stream(q => q.Where(x => x.Flavor == alias));
Space item = (await stream.FirstOrDefaultAsync()) ?? (await Store.Empty<Space>(alias));
return item;
}
[HttpGet("{alias}/empty")]
[ZeroAuthorize(SpacePermissions.Create)]
public virtual Task<ActionResult<Space>> Empty(string alias) => EmptyModel(alias);
[HttpGet("{alias}/{id}")]
[ZeroAuthorize(SpacePermissions.Read)]
public virtual Task<ActionResult<Space>> Get(string alias, string id, string changeVector = null) => GetModel(id, changeVector);
[HttpPost("")]
[ZeroAuthorize(SpacePermissions.Create)]
public virtual Task<ActionResult<Result>> Create([FromBody] Space saveModel) => CreateModel(saveModel);
[HttpPut("{id}")]
[ZeroAuthorize(SpacePermissions.Update)]
public virtual Task<ActionResult<Result>> Update(string id, [FromBody] Space updateModel, [FromQuery] string changeToken = null) => UpdateModel(id, updateModel, changeToken);
[HttpDelete("{id}")]
[ZeroAuthorize(SpacePermissions.Delete)]
public virtual Task<ActionResult<Result>> Delete(string id) => DeleteModel(id);
}