You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
6.7 KiB
159 lines
6.7 KiB
3 weeks ago
|
using SqlSugar;
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using System.Security.Policy;
|
||
|
using System.Text;
|
||
|
using System.Text.RegularExpressions;
|
||
|
|
||
|
namespace ReZero.SuperAPI
|
||
|
{
|
||
|
public class BaseSaveInterfaceList
|
||
|
{
|
||
|
|
||
|
protected void ApplyDefaultAndClearIfNotEmpty(ZeroInterfaceList zeroInterfaceList)
|
||
|
{
|
||
|
foreach (var item in zeroInterfaceList.DataModel?.DefaultValueColumns ?? new List<DataModelDefaultValueColumnParameter>())
|
||
|
{
|
||
|
var paramter = zeroInterfaceList.DataModel?.DefaultParameters?.FirstOrDefault(it => it.Name == item.PropertyName);
|
||
|
if (paramter != null)
|
||
|
{
|
||
|
if (paramter?.ParameterValidate?.IsRequired == true && item?.Type != DefaultValueType.None)
|
||
|
{
|
||
|
paramter.ParameterValidate = null;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
protected void Check(EntityColumnInfo pk)
|
||
|
{
|
||
|
if (pk == null)
|
||
|
{
|
||
|
throw new Exception(TextHandler.GetCommonText("创建失败实体没有主键", "The failed entity does not have a primary key"));
|
||
|
|
||
|
}
|
||
|
}
|
||
|
protected virtual void SetCommonProperties(ZeroInterfaceList zeroInterfaceList, SaveInterfaceListModel saveInterfaceListModel)
|
||
|
{
|
||
|
// Set default values for ZeroInterfaceList
|
||
|
zeroInterfaceList.IsInitialized = false;
|
||
|
zeroInterfaceList.IsDeleted = false;
|
||
|
zeroInterfaceList.IsAttributeMethod = false;
|
||
|
zeroInterfaceList.Name = saveInterfaceListModel.Name;
|
||
|
zeroInterfaceList.Url = GetUrl(saveInterfaceListModel);
|
||
|
zeroInterfaceList.DatabaseId = saveInterfaceListModel?.Json?.DataBaseId;
|
||
|
zeroInterfaceList.GroupName = !string.IsNullOrEmpty(saveInterfaceListModel?.GroupName)? saveInterfaceListModel?.GroupName!:saveInterfaceListModel?.TableId!;
|
||
|
zeroInterfaceList.InterfaceCategoryId = Convert.ToInt64(saveInterfaceListModel?.InterfaceCategoryId);
|
||
|
|
||
|
// Set creator information
|
||
|
var options = SuperAPIModule._apiOptions;
|
||
|
var userInfo = options?.DatabaseOptions!.GetCurrentUserCallback();
|
||
|
zeroInterfaceList.Creator = userInfo?.UserName;
|
||
|
zeroInterfaceList.CreateTime = DateTime.Now;
|
||
|
|
||
|
// Set default HttpMethod if not specified
|
||
|
if (string.IsNullOrEmpty(zeroInterfaceList.HttpMethod))
|
||
|
{
|
||
|
zeroInterfaceList.HttpMethod = HttpRequestMethod.All.ToString();
|
||
|
}
|
||
|
if (!string.IsNullOrEmpty(saveInterfaceListModel?.HttpMethod))
|
||
|
{
|
||
|
zeroInterfaceList.HttpMethod = saveInterfaceListModel.HttpMethod;
|
||
|
}
|
||
|
|
||
|
// Set DataModel for ZeroInterfaceList
|
||
|
zeroInterfaceList.DataModel = new DataModel()
|
||
|
{
|
||
|
ActionType = saveInterfaceListModel!.ActionType!.Value,
|
||
|
TableId = GetTableId(saveInterfaceListModel.TableId)
|
||
|
};
|
||
|
|
||
|
//primary key
|
||
|
zeroInterfaceList.Id= saveInterfaceListModel.Json?.Id??0;
|
||
|
|
||
|
//update info
|
||
|
SetCurrentData(zeroInterfaceList.DataModel,saveInterfaceListModel);
|
||
|
|
||
|
}
|
||
|
|
||
|
protected void SetCurrentData(DataModel dataModel, SaveInterfaceListModel saveInterfaceListModel)
|
||
|
{
|
||
|
dataModel.CurrentDataString = saveInterfaceListModel?.Json?.CurrentDataString;
|
||
|
}
|
||
|
protected EntityInfo GetEntityInfo(long tableId)
|
||
|
{
|
||
|
var type = EntityGeneratorManager.GetTypeAsync(tableId).GetAwaiter().GetResult();
|
||
|
var entityInfo = App.Db.EntityMaintenance.GetEntityInfo(type);
|
||
|
return entityInfo;
|
||
|
}
|
||
|
|
||
|
protected object SaveData(ZeroInterfaceList zeroInterfaceList)
|
||
|
{
|
||
|
if (zeroInterfaceList.Id == 0)
|
||
|
{
|
||
|
zeroInterfaceList.Id = SnowFlakeSingle.Instance.NextId();
|
||
|
}
|
||
|
zeroInterfaceList.IsDeleted = false;
|
||
|
var url = zeroInterfaceList.Url?.ToLower();
|
||
|
var urlCount = App.Db.Queryable<ZeroInterfaceList>()
|
||
|
.Where(it => it.Id != zeroInterfaceList!.Id)
|
||
|
.Where(it => it.Url!.ToLower() == url)
|
||
|
.Count();
|
||
|
if (urlCount > 0) throw new Exception(TextHandler.GetCommonText("接口地址已存在", "The interface address already exists."));
|
||
|
var x= App.Db.Storageable(zeroInterfaceList).ToStorage();
|
||
|
x.AsInsertable.ExecuteCommand();
|
||
|
if(x.UpdateList.Any())
|
||
|
App.Db.Updateable(x.UpdateList.Select(it=>it.Item).First()).ExecuteCommand();
|
||
|
return true;
|
||
|
}
|
||
|
public long GetTableId(string? tableId)
|
||
|
{
|
||
|
var db = App.Db;
|
||
|
var entityInfo= db.Queryable<ZeroEntityInfo>()
|
||
|
.Includes(x=>x.ZeroEntityColumnInfos)
|
||
|
.Where(it => it.ClassName == tableId).ToList();
|
||
|
if (entityInfo.Count > 1)
|
||
|
{
|
||
|
throw new Exception("表名重复");
|
||
|
}
|
||
|
else if (entityInfo.Count == 0)
|
||
|
{
|
||
|
throw new Exception("表名不存在");
|
||
|
}
|
||
|
else if (!entityInfo.First().ZeroEntityColumnInfos.Any())
|
||
|
{
|
||
|
throw new Exception("实体没有配置列");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return entityInfo.First().Id;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public string GetUrl(SaveInterfaceListModel? saveInterfaceListModel)
|
||
|
{
|
||
|
if (string.IsNullOrEmpty(saveInterfaceListModel?.Url))
|
||
|
{
|
||
|
var data = App.Db.Queryable<ZeroInterfaceList>().InSingle(saveInterfaceListModel?.Json?.Id ?? 0);
|
||
|
if (data != null)
|
||
|
{
|
||
|
saveInterfaceListModel!.Url = data.Url;
|
||
|
}
|
||
|
else if (Regex.IsMatch(saveInterfaceListModel?.TableId?.ToLower()+"", @"[\u4e00-\u9fa5]"))
|
||
|
{
|
||
|
saveInterfaceListModel!.Url = $"/{saveInterfaceListModel.InterfaceCategoryId}/{saveInterfaceListModel.ActionType.ToString().ToLower()}/{SqlSugar.SnowFlakeSingle.Instance.NextId()}";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
saveInterfaceListModel!.Url = $"/{saveInterfaceListModel.InterfaceCategoryId}/{saveInterfaceListModel.ActionType.ToString().ToLower()}/{saveInterfaceListModel.TableId?.ToLower()}/{SqlSugar.SnowFlakeSingle.Instance.NextId()}";
|
||
|
}
|
||
|
}
|
||
|
if (saveInterfaceListModel?.Url?.StartsWith(@"/") != true)
|
||
|
{
|
||
|
saveInterfaceListModel!.Url = $@"/{saveInterfaceListModel?.Url}";
|
||
|
}
|
||
|
return saveInterfaceListModel?.Url!;
|
||
|
}
|
||
|
}
|
||
|
}
|