using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http.Headers; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace ReZero.SuperAPI { internal class ValidateParameters { public static async Task> CheckAsync(DataModel dataModel) { List errorLists = new List(); foreach (var item in dataModel.DefaultParameters ?? new List()) { if (IsRequired(item)) { AddReuiredError(errorLists, item); } if (IsInsertUnique(dataModel, item)) { await AddInsertUniqueError(dataModel, errorLists, item); } if (item?.ParameterValidate?.IsUnique == true && dataModel.ActionType == ActionType.InsertObject) { } } return errorLists; } #region Add Error private static async Task AddInsertUniqueError(DataModel dataModel, List errorLists, DataModelDefaultParameter item) { var type = await EntityGeneratorManager.GetTypeAsync(dataModel.TableId); var db = App.GetDbTableId(dataModel.TableId); new CommonDataService().InitDb(type, db!); var entityInfo = db!.EntityMaintenance.GetEntityInfo(type); var dbColumnInfo = entityInfo.Columns.FirstOrDefault(it => it.PropertyName.EqualsCase(item.Name!)); var isDeleteIdColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName.EqualsCase(nameof(DbBase.IsDeleted))); bool isAny = await IsAnyValue(item, type, db, dbColumnInfo, isDeleteIdColumn, dataModel); if (isAny) { errorLists.Add(new ErrorParameter() { Name = item.Name, ErrorType = "IsUnique", Message = TextHandler.GetCommonText("唯一", "Unique") }); } } private static void AddReuiredError(List errorLists, DataModelDefaultParameter item) { errorLists.Add(new ErrorParameter() { Name = item.Name, ErrorType = "IsRequired", Message = TextHandler.GetCommonText("必填", "Required") }); } #endregion #region Validate private static bool IsInsertUnique(DataModel dataModel, DataModelDefaultParameter item) { return item?.ParameterValidate?.IsUnique == true && dataModel.ActionType == ActionType.InsertObject; } private static bool IsRequired(DataModelDefaultParameter item) { return item?.ParameterValidate?.IsRequired == true && string.IsNullOrEmpty(item.Value + ""); } private static async Task IsAnyValue(DataModelDefaultParameter? item, Type type, SqlSugarClient? db, EntityColumnInfo dbColumnInfo, EntityColumnInfo isDeleteIdColumn, DataModel dataModel) { var condition = new ConditionalModel() { ConditionalType = ConditionalType.Equal, CSharpTypeName = dbColumnInfo.UnderType.Name, FieldValue = item!.Value + "", FieldName = dbColumnInfo.DbColumnName }; var whereColumns = new List() { condition }; if (isDeleteIdColumn != null) { var condition2 = new ConditionalModel() { ConditionalType = ConditionalType.Equal, CSharpTypeName = typeof(bool).Name, FieldValue = false.ToString().ToLower(), FieldName = isDeleteIdColumn.DbColumnName }; whereColumns.Add(condition2); } if (type.Name == nameof(ZeroEntityInfo)) { var condition3 = new ConditionalModel() { ConditionalType = ConditionalType.Equal, CSharpTypeName = typeof(long).Name, FieldValue = dataModel.DefaultParameters.First(it => it.Name!.EqualsCase(nameof(ZeroEntityInfo.DataBaseId))).Value + "", FieldName = db!.EntityMaintenance.GetEntityInfo(type).Columns.First(it => it.PropertyName == nameof(ZeroEntityInfo.DataBaseId)).DbColumnName }; whereColumns.Add(condition3); } return await db!.QueryableByObject(type) .Where(whereColumns) .AnyAsync(); } #endregion } }