revert some mappings for now

This commit is contained in:
2021-12-15 21:44:06 +01:00
parent 7fb7a8a05b
commit 6bf25202cf
6 changed files with 161 additions and 18 deletions
@@ -40,6 +40,20 @@ public abstract class ZeroApiEntityStoreController<TModel, TStore> : ZeroApiCont
}
protected async Task<ActionResult<TModel>> EmptyModel(string flavorAlias = null, Action<TModel> modify = null)
{
TModel model = await Store.Empty(flavorAlias);
if (model == null)
{
return NotFound();
}
modify?.Invoke(model);
return model;
}
protected async Task<ActionResult<T>> GetModel<T>(string id, string changeVector = null) where T : DisplayModel<TModel>
{
TModel model = await Store.Load(id, changeVector);
@@ -55,6 +69,21 @@ public abstract class ZeroApiEntityStoreController<TModel, TStore> : ZeroApiCont
}
protected async Task<ActionResult<TModel>> GetModel(string id, string changeVector = null)
{
TModel model = await Store.Load(id, changeVector);
if (model == null)
{
return NotFound();
}
HttpContext.Items[ApiConstants.ChangeToken] = Store.GetChangeToken(model);
return model;
}
protected async Task<ActionResult<Paged>> GetModels<T>(ListQuery<TModel> query) where T : BasicModel<TModel>
{
query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate);
@@ -65,7 +94,16 @@ public abstract class ZeroApiEntityStoreController<TModel, TStore> : ZeroApiCont
}
protected async Task<ActionResult<Paged>> GetModels<T, TIndex>(ListQuery<TModel> query) where T : BasicModel<TModel> where TIndex : AbstractCommonApiForIndexes, new()
protected async Task<ActionResult<Paged>> GetModels(ListQuery<TModel> query)
{
query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate);
query.SearchSelector ??= x => x.Name;
Paged<TModel> result = await Store.Load(query.Page, query.PageSize, q => q.Filter(query));
return result;
}
protected async Task<ActionResult<Paged>> GetModelsByIndex<T, TIndex>(ListQuery<TModel> query) where T : BasicModel<TModel> where TIndex : AbstractCommonApiForIndexes, new()
{
query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate);
query.SearchSelector ??= x => x.Name;
@@ -75,6 +113,15 @@ public abstract class ZeroApiEntityStoreController<TModel, TStore> : ZeroApiCont
}
protected async Task<ActionResult<Paged>> GetModelsByIndex<TIndex>(ListQuery<TModel> query) where TIndex : AbstractCommonApiForIndexes, new()
{
query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate);
query.SearchSelector ??= x => x.Name;
Paged<TModel> result = await Store.Load<TIndex>(query.Page, query.PageSize, q => q.Filter(query));
return result;
}
protected async Task<ActionResult<Result>> CreateModel<T, TEdit>(T saveModel) where T : SaveModel<TModel> where TEdit : DisplayModel<TModel>
{
TModel emptyModel = saveModel.Flavor.IsNullOrEmpty() ? await Store.Empty() : await Store.Empty(saveModel.Flavor);
@@ -94,6 +141,21 @@ public abstract class ZeroApiEntityStoreController<TModel, TStore> : ZeroApiCont
}
protected async Task<ActionResult<Result>> CreateModel(TModel saveModel)
{
Result<TModel> result = await Store.Create(saveModel);
bool minimalResponse = Hints.ResponsePreference == ApiResponsePreference.Minimal;
if (result.IsSuccess)
{
return Created(GetAction(saveModel), minimalResponse ? null : saveModel);
}
return result.WithoutModel();
}
protected async Task<ActionResult<Result>> UpdateModel<T, TEdit>(string id, T updateModel, string changeToken = null) where T : SaveModel<TModel> where TEdit : DisplayModel<TModel>
{
if (id != updateModel.Id)
@@ -129,6 +191,38 @@ public abstract class ZeroApiEntityStoreController<TModel, TStore> : ZeroApiCont
}
protected async Task<ActionResult<Result>> UpdateModel(string id, TModel updateModel, string changeToken = null)
{
if (id != updateModel.Id)
{
return BadRequest(Result.Fail(nameof(id), "@errors.onupdate.noidmatch"));
}
TModel model = await Store.Load(id);
if (model == null)
{
return BadRequest(Result.Fail(nameof(id), "@errors.idnotfound"));
}
string storedChangeToken = Store.GetChangeToken(model);
if (!changeToken.IsNullOrEmpty() && storedChangeToken != changeToken)
{
return BadRequest(Result.Fail("@errors.onupdate.changetokenmismatch"));
}
Result<TModel> result = await Store.Update(updateModel);
if (Hints.ResponsePreference == ApiResponsePreference.Minimal)
{
return result.WithoutModel();
}
return result;
}
protected async Task<ActionResult<Result>> DeleteModel(string id)
{
TModel model = await Store.Load(id);
@@ -19,7 +19,16 @@ public abstract class ZeroApiTreeEntityStoreController<TModel, TStore> : ZeroApi
}
protected async Task<ActionResult<Paged>> GetChildModels<T, TIndex>(string parentId, ListQuery<TModel> query) where T : BasicModel<TModel> where TIndex : AbstractCommonApiForIndexes, new()
protected async Task<ActionResult<Paged>> GetChildModels(string parentId, ListQuery<TModel> query)
{
query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate);
Paged<TModel> result = await Store.LoadChildren(parentId, query.Page, query.PageSize, q => q.Filter(query));
return result;
}
protected async Task<ActionResult<Paged>> GetChildModelsByIndex<T, TIndex>(string parentId, ListQuery<TModel> query) where T : BasicModel<TModel> where TIndex : AbstractCommonApiForIndexes, new()
{
query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate);
Paged<TModel> result = await Store.LoadChildren<TIndex>(parentId, query.Page, query.PageSize, q => q.Filter(query));
@@ -28,6 +37,15 @@ public abstract class ZeroApiTreeEntityStoreController<TModel, TStore> : ZeroApi
}
protected async Task<ActionResult<Paged>> GetChildModelsByIndex<TIndex>(string parentId, ListQuery<TModel> query) where TIndex : AbstractCommonApiForIndexes, new()
{
query.OrderQuery ??= q => q.OrderByDescending(x => x.CreatedDate);
Paged<TModel> result = await Store.LoadChildren<TIndex>(parentId, query.Page, query.PageSize, q => q.Filter(query));
return result;
}
protected async Task<ActionResult<Result>> SortModels(string[] ids)
{
return await Store.Sort(ids);
@@ -40,18 +58,36 @@ public abstract class ZeroApiTreeEntityStoreController<TModel, TStore> : ZeroApi
}
protected async Task<ActionResult<Result>> MoveModel(string pageId, string newParentId)
{
return await PutOperation(async () => await Store.Move(pageId, newParentId));
}
protected async Task<ActionResult<Result>> CopyModel<TEdit>(string pageId, string newParentId) where TEdit : DisplayModel<TModel>
{
return await PutOperation<TEdit>(async () => await Store.Copy(pageId, newParentId));
}
protected async Task<ActionResult<Result>> CopyModel(string pageId, string newParentId)
{
return await PutOperation(async () => await Store.Copy(pageId, newParentId));
}
protected async Task<ActionResult<Result>> CopyModelWithDescendants<TEdit>(string pageId, string newParentId) where TEdit : DisplayModel<TModel>
{
return await PutOperation<TEdit>(async () => await Store.CopyWithDescendants(pageId, newParentId));
}
protected async Task<ActionResult<Result>> CopyModelWithDescendants(string pageId, string newParentId)
{
return await PutOperation(async () => await Store.CopyWithDescendants(pageId, newParentId));
}
protected async Task<ActionResult<Result>> DeleteModelWithDescendants(string id)
{
TModel model = await Store.Load(id);
@@ -78,4 +114,17 @@ public abstract class ZeroApiTreeEntityStoreController<TModel, TStore> : ZeroApi
return Mapper.Map<TModel, TEdit>(result);
}
async Task<ActionResult<Result>> PutOperation(Func<Task<Result<TModel>>> action)
{
Result<TModel> result = await action();
if (Hints.ResponsePreference == ApiResponsePreference.Minimal)
{
return result.WithoutModel();
}
return result;
}
}
@@ -9,12 +9,12 @@ public class CountriesController : ZeroApiEntityStoreController<Country, ICountr
[HttpGet("empty")]
[ZeroAuthorize(CountryPermissions.Create)]
public virtual Task<ActionResult<CountryEdit>> Empty(string flavor = null) => EmptyModel<CountryEdit>(flavor);
public virtual Task<ActionResult<Country>> Empty(string flavor = null) => EmptyModel(flavor);
[HttpGet("{id}")]
[ZeroAuthorize(CountryPermissions.Read)]
public virtual Task<ActionResult<CountryEdit>> Get(string id, string changeVector = null) => GetModel<CountryEdit>(id, changeVector);
public virtual Task<ActionResult<Country>> Get(string id, string changeVector = null) => GetModel(id, changeVector);
[HttpGet("")]
@@ -22,18 +22,18 @@ public class CountriesController : ZeroApiEntityStoreController<Country, ICountr
public virtual Task<ActionResult<Paged>> Get([FromQuery] ListQuery<Country> query)
{
query.OrderQuery = q => q.OrderByDescending(x => x.IsPreferred).ThenBy(x => x.Name);
return GetModels<CountryBasic, zero_Api_Countries_Listing>(query);
return GetModelsByIndex<CountryBasic, zero_Api_Countries_Listing>(query);
}
[HttpPost("")]
[ZeroAuthorize(CountryPermissions.Create)]
public virtual Task<ActionResult<Result>> Create(CountrySave saveModel) => CreateModel<CountrySave, CountryEdit>(saveModel);
public virtual Task<ActionResult<Result>> Create(Country saveModel) => CreateModel(saveModel);
[HttpPut("{id}")]
[ZeroAuthorize(CountryPermissions.Update)]
public virtual Task<ActionResult<Result>> Update(string id, CountrySave updateModel, [FromQuery] string changeToken = null) => UpdateModel<CountrySave, CountryEdit>(id, updateModel, changeToken);
public virtual Task<ActionResult<Result>> Update(string id, Country updateModel, [FromQuery] string changeToken = null) => UpdateModel(id, updateModel, changeToken);
[HttpDelete("{id}")]
@@ -12,27 +12,27 @@ public class LanguagesController : ZeroApiEntityStoreController<Language, ILangu
[HttpGet("empty")]
[ZeroAuthorize(LanguagePermissions.Create)]
public virtual Task<ActionResult<LanguageEdit>> Empty(string flavor = null) => EmptyModel<LanguageEdit>(flavor);
public virtual Task<ActionResult<Language>> Empty(string flavor = null) => EmptyModel(flavor);
[HttpGet("{id}")]
[ZeroAuthorize(LanguagePermissions.Read)]
public virtual Task<ActionResult<LanguageEdit>> Get(string id, string changeVector = null) => GetModel<LanguageEdit>(id, changeVector);
public virtual Task<ActionResult<Language>> Get(string id, string changeVector = null) => GetModel(id, changeVector);
[HttpGet("")]
[ZeroAuthorize(LanguagePermissions.Read)]
public virtual Task<ActionResult<Paged>> Get([FromQuery] ListQuery<Language> query) => GetModels<LanguageBasic, zero_Api_Languages_Listing>(query);
public virtual Task<ActionResult<Paged>> Get([FromQuery] ListQuery<Language> query) => GetModelsByIndex<LanguageBasic, zero_Api_Languages_Listing>(query);
[HttpPost("")]
[ZeroAuthorize(LanguagePermissions.Create)]
public virtual Task<ActionResult<Result>> Create(LanguageSave saveModel) => CreateModel<LanguageSave, LanguageEdit>(saveModel);
public virtual Task<ActionResult<Result>> Create(Language saveModel) => CreateModel(saveModel);
[HttpPut("{id}")]
[ZeroAuthorize(LanguagePermissions.Update)]
public virtual Task<ActionResult<Result>> Update(string id, LanguageSave updateModel, [FromQuery] string changeToken = null) => UpdateModel<LanguageSave, LanguageEdit>(id, updateModel, changeToken);
public virtual Task<ActionResult<Result>> Update(string id, Language updateModel, [FromQuery] string changeToken = null) => UpdateModel(id, updateModel, changeToken);
[HttpDelete("{id}")]
@@ -25,7 +25,7 @@ public class MailTemplatesController : ZeroApiEntityStoreController<MailTemplate
public virtual Task<ActionResult<Paged>> Get([FromQuery] ListQuery<MailTemplate> query)
{
query.SearchFor(entity => entity.Name, entity => entity.Key, entity => entity.Subject);
return GetModels<MailBasic, zero_Api_MailTemplates_Listing>(query);
return GetModelsByIndex<MailBasic, zero_Api_MailTemplates_Listing>(query);
}
@@ -12,12 +12,12 @@ public class TranslationsController : ZeroApiEntityStoreController<Translation,
[HttpGet("empty")]
[ZeroAuthorize(TranslationPermissions.Create)]
public virtual Task<ActionResult<TranslationEdit>> Empty(string flavor = null) => EmptyModel<TranslationEdit>(flavor);
public virtual Task<ActionResult<Translation>> Empty(string flavor = null) => EmptyModel(flavor);
[HttpGet("{id}")]
[ZeroAuthorize(TranslationPermissions.Read)]
public virtual Task<ActionResult<TranslationEdit>> Get(string id, string changeVector = null) => GetModel<TranslationEdit>(id, changeVector);
public virtual Task<ActionResult<Translation>> Get(string id, string changeVector = null) => GetModel(id, changeVector);
[HttpGet("")]
@@ -25,18 +25,18 @@ public class TranslationsController : ZeroApiEntityStoreController<Translation,
public virtual Task<ActionResult<Paged>> Get([FromQuery] ListQuery<Translation> query)
{
query.SearchFor(x => x.Key, x => x.Value);
return GetModels<TranslationBasic, zero_Api_Translations_Listing>(query);
return GetModelsByIndex<zero_Api_Translations_Listing>(query);
}
[HttpPost("")]
[ZeroAuthorize(TranslationPermissions.Create)]
public virtual Task<ActionResult<Result>> Create(TranslationSave saveModel) => CreateModel<TranslationSave, TranslationEdit>(saveModel);
public virtual Task<ActionResult<Result>> Create(Translation saveModel) => CreateModel(saveModel);
[HttpPut("{id}")]
[ZeroAuthorize(TranslationPermissions.Update)]
public virtual Task<ActionResult<Result>> Update(string id, TranslationSave updateModel, [FromQuery] string changeToken = null) => UpdateModel<TranslationSave, TranslationEdit>(id, updateModel, changeToken);
public virtual Task<ActionResult<Result>> Update(string id, Translation updateModel, [FromQuery] string changeToken = null) => UpdateModel(id, updateModel, changeToken);
[HttpDelete("{id}")]