This commit is contained in:
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@@ -53,7 +53,7 @@
|
||||
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
|
||||
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
|
||||
"AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles",
|
||||
"AYANOVA_SERVER_TEST_MODE": "false",
|
||||
"AYANOVA_SERVER_TEST_MODE": "true",
|
||||
"AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small",
|
||||
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
|
||||
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\"
|
||||
|
||||
@@ -19,10 +19,10 @@ namespace AyaNova.Api.Controllers
|
||||
[Route("api/v{version:apiVersion}/data-list-column-view")]
|
||||
[Produces("application/json")]
|
||||
[Authorize]
|
||||
public class DataListSavedColumnViewController : ControllerBase
|
||||
public class DataListColumnViewController : ControllerBase
|
||||
{
|
||||
private readonly AyContext ct;
|
||||
private readonly ILogger<DataListSavedColumnViewController> log;
|
||||
private readonly ILogger<DataListColumnViewController> log;
|
||||
private readonly ApiServerState serverState;
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace AyaNova.Api.Controllers
|
||||
/// <param name="dbcontext"></param>
|
||||
/// <param name="logger"></param>
|
||||
/// <param name="apiServerState"></param>
|
||||
public DataListSavedColumnViewController(AyContext dbcontext, ILogger<DataListSavedColumnViewController> logger, ApiServerState apiServerState)
|
||||
public DataListColumnViewController(AyContext dbcontext, ILogger<DataListColumnViewController> logger, ApiServerState apiServerState)
|
||||
{
|
||||
ct = dbcontext;
|
||||
log = logger;
|
||||
@@ -41,16 +41,16 @@ namespace AyaNova.Api.Controllers
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get DataListSavedColumnView for current user
|
||||
/// Get DataListColumnView for current user
|
||||
/// </summary>
|
||||
/// <param name="listKey"></param>
|
||||
/// <returns>DataListSavedColumnView</returns>
|
||||
/// <returns>DataListColumnView</returns>
|
||||
[HttpGet("{userId}/{listKey}")]
|
||||
public async Task<IActionResult> GetDataListSavedColumnView([FromRoute] string listKey)
|
||||
public async Task<IActionResult> GetDataListColumnView([FromRoute] string listKey)
|
||||
{
|
||||
if (!serverState.IsOpen)
|
||||
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
|
||||
DataListSavedColumnViewBiz biz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext);
|
||||
DataListColumnViewBiz biz = DataListColumnViewBiz.GetBiz(ct, HttpContext);
|
||||
if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType))
|
||||
return StatusCode(403, new ApiNotAuthorizedResponse());
|
||||
if (!ModelState.IsValid)
|
||||
@@ -63,22 +63,22 @@ namespace AyaNova.Api.Controllers
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Replace DataListSavedColumnView
|
||||
/// Replace DataListColumnView
|
||||
/// </summary>
|
||||
/// <param name="newObject"></param>
|
||||
/// <param name="apiVersion">From route path</param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> ReplaceDataListSavedColumnView([FromBody] DataListSavedColumnView newObject, ApiVersion apiVersion)
|
||||
public async Task<IActionResult> ReplaceDataListColumnView([FromBody] DataListColumnView newObject, ApiVersion apiVersion)
|
||||
{
|
||||
if (!serverState.IsOpen)
|
||||
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
|
||||
DataListSavedColumnViewBiz biz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext);
|
||||
DataListColumnViewBiz biz = DataListColumnViewBiz.GetBiz(ct, HttpContext);
|
||||
if (!Authorized.HasCreateRole(HttpContext.Items, biz.BizType))
|
||||
return StatusCode(403, new ApiNotAuthorizedResponse());
|
||||
if (!ModelState.IsValid)
|
||||
return BadRequest(new ApiErrorResponse(ModelState));
|
||||
DataListSavedColumnView o = await biz.CreateAsync(newObject);
|
||||
DataListColumnView o = await biz.CreateAsync(newObject);
|
||||
if (o == null)
|
||||
return BadRequest(new ApiErrorResponse(biz.Errors));
|
||||
else
|
||||
@@ -87,18 +87,18 @@ namespace AyaNova.Api.Controllers
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Reset DataListSavedColumnView to factory defaults
|
||||
/// Reset DataListColumnView to factory defaults
|
||||
/// </summary>
|
||||
/// <param name="listKey"></param>
|
||||
/// <returns>NoContent</returns>
|
||||
[HttpDelete("{id}")]
|
||||
public async Task<IActionResult> ResetDataListSavedColumnView([FromRoute] string listKey)
|
||||
public async Task<IActionResult> ResetDataListColumnView([FromRoute] string listKey)
|
||||
{
|
||||
if (!serverState.IsOpen)
|
||||
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
|
||||
if (!ModelState.IsValid)
|
||||
return BadRequest(new ApiErrorResponse(ModelState));
|
||||
DataListSavedColumnViewBiz biz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext);
|
||||
DataListColumnViewBiz biz = DataListColumnViewBiz.GetBiz(ct, HttpContext);
|
||||
var o = await biz.DeleteAsync(biz.UserId, listKey);
|
||||
if (o == null)
|
||||
return BadRequest(new ApiErrorResponse(biz.Errors));
|
||||
@@ -74,7 +74,7 @@ namespace AyaNova.Api.Controllers
|
||||
try
|
||||
{
|
||||
|
||||
DataListSavedColumnViewBiz viewbiz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext);
|
||||
DataListColumnViewBiz viewbiz = DataListColumnViewBiz.GetBiz(ct, HttpContext);
|
||||
var SavedView = await viewbiz.GetAsync(UserId, tableRequest.DataListKey, true);
|
||||
|
||||
DataListSavedFilter SavedFilter = null;
|
||||
|
||||
@@ -134,7 +134,7 @@ namespace AyaNova.Biz
|
||||
[CoreBizObject]
|
||||
PartWarehouse = 66,
|
||||
PartInventory = 67,
|
||||
DataListSavedColumnView = 68
|
||||
DataListColumnView = 68
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -12,24 +12,24 @@ namespace AyaNova.Biz
|
||||
{
|
||||
|
||||
|
||||
internal class DataListSavedColumnViewBiz : BizObject
|
||||
internal class DataListColumnViewBiz : BizObject
|
||||
{
|
||||
|
||||
internal DataListSavedColumnViewBiz(AyContext dbcontext, long currentUserId, long userTranslationId, AuthorizationRoles UserRoles)
|
||||
internal DataListColumnViewBiz(AyContext dbcontext, long currentUserId, long userTranslationId, AuthorizationRoles UserRoles)
|
||||
{
|
||||
ct = dbcontext;
|
||||
UserId = currentUserId;
|
||||
UserTranslationId = userTranslationId;
|
||||
CurrentUserRoles = UserRoles;
|
||||
BizType = AyaType.DataListSavedColumnView;
|
||||
BizType = AyaType.DataListColumnView;
|
||||
}
|
||||
|
||||
internal static DataListSavedColumnViewBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null)
|
||||
internal static DataListColumnViewBiz GetBiz(AyContext ct, Microsoft.AspNetCore.Http.HttpContext httpContext = null)
|
||||
{
|
||||
if (httpContext != null)
|
||||
return new DataListSavedColumnViewBiz(ct, UserIdFromContext.Id(httpContext.Items), UserTranslationIdFromContext.Id(httpContext.Items), UserRolesFromContext.Roles(httpContext.Items));
|
||||
return new DataListColumnViewBiz(ct, UserIdFromContext.Id(httpContext.Items), UserTranslationIdFromContext.Id(httpContext.Items), UserRolesFromContext.Roles(httpContext.Items));
|
||||
else
|
||||
return new DataListSavedColumnViewBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdminFull);
|
||||
return new DataListColumnViewBiz(ct, 1, ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID, AuthorizationRoles.BizAdminFull);
|
||||
}
|
||||
|
||||
|
||||
@@ -38,14 +38,14 @@ namespace AyaNova.Biz
|
||||
//EXISTS
|
||||
internal async Task<bool> ExistsAsync(long id)
|
||||
{
|
||||
return await ct.DataListSavedColumnView.AnyAsync(z => z.Id == id);
|
||||
return await ct.DataListColumnView.AnyAsync(z => z.Id == id);
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//CREATE
|
||||
//
|
||||
internal async Task<DataListSavedColumnView> CreateAsync(DataListSavedColumnView newObject)
|
||||
internal async Task<DataListColumnView> CreateAsync(DataListColumnView newObject)
|
||||
{
|
||||
ValidateAsync(newObject);
|
||||
if (HasErrors)
|
||||
@@ -56,11 +56,11 @@ namespace AyaNova.Biz
|
||||
var dbObject = await GetAsync(newObject.UserId, newObject.ListKey, false);
|
||||
if (dbObject != null)
|
||||
{
|
||||
ct.DataListSavedColumnView.Remove(dbObject);
|
||||
ct.DataListColumnView.Remove(dbObject);
|
||||
await ct.SaveChangesAsync();
|
||||
}
|
||||
|
||||
await ct.DataListSavedColumnView.AddAsync(newObject);
|
||||
await ct.DataListColumnView.AddAsync(newObject);
|
||||
await ct.SaveChangesAsync();
|
||||
|
||||
return newObject;
|
||||
@@ -74,16 +74,16 @@ namespace AyaNova.Biz
|
||||
//GET
|
||||
//
|
||||
//
|
||||
internal async Task<DataListSavedColumnView> GetAsync(long userId, string listKey, bool createDefaultIfNecessary)
|
||||
internal async Task<DataListColumnView> GetAsync(long userId, string listKey, bool createDefaultIfNecessary)
|
||||
{
|
||||
var ret = await ct.DataListSavedColumnView.AsNoTracking().SingleOrDefaultAsync(z => z.UserId == userId && z.ListKey == listKey);
|
||||
var ret = await ct.DataListColumnView.AsNoTracking().SingleOrDefaultAsync(z => z.UserId == userId && z.ListKey == listKey);
|
||||
if (ret == null && createDefaultIfNecessary)
|
||||
{
|
||||
if (!DataListFactory.ListKeyIsValid(listKey))
|
||||
{
|
||||
throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey");
|
||||
}
|
||||
ret = new DataListSavedColumnView();
|
||||
ret = new DataListColumnView();
|
||||
ret.UserId = UserId;
|
||||
ret.ListKey = listKey;
|
||||
var dataList = DataListFactory.GetAyaDataList(listKey);
|
||||
@@ -99,7 +99,7 @@ namespace AyaNova.Biz
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//DELETE (RESET)
|
||||
//
|
||||
internal async Task<DataListSavedColumnView> DeleteAsync(long userId, string listKey)
|
||||
internal async Task<DataListColumnView> DeleteAsync(long userId, string listKey)
|
||||
{
|
||||
//this is effectively the RESET route handler
|
||||
//so it can be called any time even if there is no default list and it's a-ok
|
||||
@@ -108,7 +108,7 @@ namespace AyaNova.Biz
|
||||
var dbObject = await GetAsync(userId, listKey, false);
|
||||
if (dbObject != null)
|
||||
{
|
||||
ct.DataListSavedColumnView.Remove(dbObject);
|
||||
ct.DataListColumnView.Remove(dbObject);
|
||||
await ct.SaveChangesAsync();
|
||||
dbObject = await GetAsync(userId, listKey, true);
|
||||
}
|
||||
@@ -121,7 +121,7 @@ namespace AyaNova.Biz
|
||||
//
|
||||
|
||||
//Can save or update?
|
||||
private void ValidateAsync(DataListSavedColumnView inObj)
|
||||
private void ValidateAsync(DataListColumnView inObj)
|
||||
{
|
||||
|
||||
if (inObj.UserId != UserId)
|
||||
@@ -600,7 +600,7 @@ namespace AyaNova.Biz
|
||||
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from anotifysubscription where userid = {dbObject.Id}");
|
||||
//personal datalist options
|
||||
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistsavedfilter where public = {false} and userid = {dbObject.Id}");
|
||||
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistsavedcolumnview where userid = {dbObject.Id}");
|
||||
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adatalistcolumnview where userid = {dbObject.Id}");
|
||||
//Dashboard view
|
||||
await ct.Database.ExecuteSqlInterpolatedAsync($"delete from adashboardview where userid = {dbObject.Id}");
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace AyaNova.Models
|
||||
public virtual DbSet<Translation> Translation { get; set; }
|
||||
public virtual DbSet<TranslationItem> TranslationItem { get; set; }
|
||||
public virtual DbSet<DataListSavedFilter> DataListSavedFilter { get; set; }
|
||||
public virtual DbSet<DataListSavedColumnView> DataListSavedColumnView { get; set; }
|
||||
public virtual DbSet<DataListColumnView> DataListColumnView { get; set; }
|
||||
public virtual DbSet<Tag> Tag { get; set; }
|
||||
public virtual DbSet<FormCustom> FormCustom { get; set; }
|
||||
public virtual DbSet<PickListTemplate> PickListTemplate { get; set; }
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace AyaNova.Models
|
||||
{
|
||||
//this is a hiearchical object so saving as a JSON fragment still best option
|
||||
|
||||
public class DataListSavedColumnView
|
||||
public class DataListColumnView
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public uint Concurrency { get; set; }
|
||||
@@ -6,7 +6,7 @@ namespace AyaNova.Models
|
||||
|
||||
public class DataListReportProcessingOptions : DataListSelectedProcessingOptions
|
||||
{
|
||||
internal DataListReportProcessingOptions(DataListSelectedRequest request, IDataListProcessing dataList, DataListSavedColumnView savedView, DataListSavedFilter savedFilter, long userId, AuthorizationRoles userRoles) : base(request, dataList, savedView, savedFilter, userId, userRoles)
|
||||
internal DataListReportProcessingOptions(DataListSelectedRequest request, IDataListProcessing dataList, DataListColumnView savedView, DataListSavedFilter savedFilter, long userId, AuthorizationRoles userRoles) : base(request, dataList, savedView, savedFilter, userId, userRoles)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace AyaNova.Models
|
||||
internal DataListSelectedProcessingOptions(
|
||||
DataListSelectedRequest request,
|
||||
IDataListProcessing dataList,
|
||||
DataListSavedColumnView savedView,
|
||||
DataListColumnView savedView,
|
||||
DataListSavedFilter savedFilter,
|
||||
long userId,
|
||||
AuthorizationRoles userRoles)
|
||||
@@ -51,7 +51,7 @@ namespace AyaNova.Models
|
||||
|
||||
public static async Task<long[]> RehydrateIdList(DataListSelectedRequest selectedRequest, AyContext ct, AuthorizationRoles userRoles, Microsoft.Extensions.Logging.ILogger log, long userId, long userTranslationId)
|
||||
{
|
||||
DataListSavedColumnViewBiz viewbiz = new DataListSavedColumnViewBiz(ct, userId, userTranslationId, userRoles);
|
||||
DataListColumnViewBiz viewbiz = new DataListColumnViewBiz(ct, userId, userTranslationId, userRoles);
|
||||
var SavedView = await viewbiz.GetAsync(userId, selectedRequest.DataListKey, true);
|
||||
|
||||
DataListSavedFilter SavedFilter = null;
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace AyaNova.Models
|
||||
internal DataListTableProcessingOptions(
|
||||
DataListTableRequest request,
|
||||
IDataListProcessing dataList,
|
||||
DataListSavedColumnView savedView,
|
||||
DataListColumnView savedView,
|
||||
DataListSavedFilter savedFilter,
|
||||
long userId,
|
||||
AuthorizationRoles userRoles)
|
||||
|
||||
@@ -396,7 +396,7 @@ BEGIN
|
||||
when 65 then aytable = 'apartassembly';
|
||||
when 66 then aytable = 'apartwarehouse';
|
||||
when 67 then aytable = 'apartinventory'; aynamecolumn='description';
|
||||
when 68 then return format('DataListSavedColumnView %L', ayobjectid);
|
||||
when 68 then return format('DataListColumnView %L', ayobjectid);
|
||||
else
|
||||
RETURN returnstr;
|
||||
end case;
|
||||
@@ -505,7 +505,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
//DATALISTSAVEDFILTER / DATALISTSAVEDCOLUMNVIEW
|
||||
//DATALISTSAVEDFILTER / DATALISTCOLUMNVIEW
|
||||
if (currentSchema < 7)
|
||||
{
|
||||
LogUpdateMessage(log);
|
||||
@@ -513,7 +513,7 @@ $BODY$ LANGUAGE PLPGSQL STABLE");
|
||||
await ExecQueryAsync("CREATE TABLE adatalistsavedfilter (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, userid BIGINT NOT NULL, name TEXT NOT NULL, public BOOL NOT NULL, "
|
||||
+ "defaultfilter BOOL NOT NULL, listkey VARCHAR(255) NOT NULL, filter TEXT)");
|
||||
|
||||
await ExecQueryAsync("CREATE TABLE adatalistsavedcolumnview (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, userid BIGINT NOT NULL, "
|
||||
await ExecQueryAsync("CREATE TABLE adatalistcolumnview (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, userid BIGINT NOT NULL, "
|
||||
+ "listkey VARCHAR(255) NOT NULL, columns TEXT, sort TEXT)");
|
||||
|
||||
|
||||
|
||||
@@ -318,7 +318,7 @@ namespace AyaNova.Util
|
||||
await EraseTableAsync("awidget", conn);
|
||||
await EraseTableAsync("aevent", conn);
|
||||
await EraseTableAsync("adatalistsavedfilter", conn);
|
||||
await EraseTableAsync("adatalistsavedcolumnview", conn);
|
||||
await EraseTableAsync("adatalistcolumnview", conn);
|
||||
await EraseTableAsync("apicklisttemplate", conn, true);
|
||||
await EraseTableAsync("aformcustom", conn);
|
||||
await EraseTableAsync("asearchkey", conn);
|
||||
|
||||
Reference in New Issue
Block a user