package entity import ( "git.sxidc.com/go-framework/baize/framework/core/tag/check" "git.sxidc.com/go-tools/utils/strutils" "github.com/pkg/errors" "time" ) const ( // FieldID ID字段名 FieldID = "ID" // FieldTenantID 租户ID字段名 FieldTenantID = "TenantID" // FieldCreateUserID 创建用户ID字段名 FieldCreateUserID = "CreateUserID" // FieldLastUpdateUserID 最近更新用户ID字段名 FieldLastUpdateUserID = "LastUpdateUserID" // FieldDeleteUserID 删除用户ID字段名 FieldDeleteUserID = "DeleteUserID" // FieldOperatorUserName 操作者用户名 FieldOperatorUserName = "OperatorUserName" // FieldCreatedTime 创建时间字段名 FieldCreatedTime = "CreatedTime" // FieldLastUpdatedTime 最近更新时间字段名 FieldLastUpdatedTime = "LastUpdatedTime" ) const ( // ColumnID ID列名 ColumnID = "id" // ColumnTenantID 租户ID列名 ColumnTenantID = "tenant_id" // ColumnCreateUserID 创建用户ID列名 ColumnCreateUserID = "create_user_id" // ColumnLastUpdateUserID 最新更新用户ID列名 ColumnLastUpdateUserID = "last_update_user_id" // ColumnDeleteUserID 删除用户ID列名 ColumnDeleteUserID = "delete_user_id" // ColumnOperatorUserName 操作者用户名列名 ColumnOperatorUserName = "operator_user_name" // ColumnCreatedTime 创建时间列名 ColumnCreatedTime = "created_time" // ColumnLastUpdatedTime 最近更新时间列名 ColumnLastUpdatedTime = "last_updated_time" ) const ( idLen = 32 ) // TenantIDField 租户ID字段 type TenantIDField struct { TenantID string `sqlmapping:"column:tenant_id;" sqlresult:"column:tenant_id;" check:"required,len=32"` } // UserIDFields 用户ID相关字段 type UserIDFields struct { CreateUserID string `sqlmapping:"column:create_user_id;" sqlresult:"column:create_user_id;" check:"required,len=32"` LastUpdateUserID string `sqlmapping:"column:last_update_user_id;" sqlresult:"column:last_update_user_id;" check:"required,len=32"` DeleteUserID string `sqlmapping:"-" sqlresult:"-" check:"required,len=32"` } // OperatorUserNameField 操作者用户名 type OperatorUserNameField struct { OperatorUserName string `sqlmapping:"-" sqlresult:"-" check:"required"` } // TimeFields 时间相关字段 type TimeFields struct { CreatedTime time.Time `sqlmapping:"column:created_time;" sqlresult:"column:created_time;"` LastUpdatedTime time.Time `sqlmapping:"column:last_updated_time;" sqlresult:"column:last_updated_time;"` } // CheckFieldID 校验领域实体的ID字段是否合规 // 参数: // - entity: 领域实体 // 返回值: // - 错误 func CheckFieldID(entity Entity) error { return checkField(entity, FieldID, "ID") } // CheckFieldTenantID 校验领域实体的租户ID字段是否合规 // 参数: // - entity: 领域实体 // 返回值: // - 错误 func CheckFieldTenantID(entity Entity) error { return checkField(entity, FieldTenantID, "租户ID") } // CheckFieldCreateUserID 校验领域实体的创建用户ID字段是否合规 // 参数: // - entity: 领域实体 // 返回值: // - 错误 func CheckFieldCreateUserID(entity Entity) error { return checkField(entity, FieldCreateUserID, "创建用户ID") } // CheckFieldLastUpdateUserID 校验领域实体的最近更新用户ID字段是否合规 // 参数: // - entity: 领域实体 // 返回值: // - 错误 func CheckFieldLastUpdateUserID(entity Entity) error { return checkField(entity, FieldLastUpdateUserID, "最近更新用户ID") } // CheckFieldDeleteUserID 校验领域实体的删除用户ID字段是否合规 // 参数: // - entity: 领域实体 // 返回值: // - 错误 func CheckFieldDeleteUserID(entity Entity) error { return checkField(entity, FieldDeleteUserID, "删除用户ID") } // CheckFieldIDResult 利用check.Struct函数返回的结果校验领域实体的ID字段是否合规 // 参数: // - checkResult: check.Struct函数返回的结果 // 返回值: // - 错误 func CheckFieldIDResult(checkResult check.Result) error { return checkUseResult(checkResult, FieldID, "ID") } // CheckFieldOperatorUserName 校验领域实体的操作者用户ID字段是否合规 // 参数: // - entity: 领域实体 // 返回值: // - 错误 func CheckFieldOperatorUserName(entity Entity) error { return checkField(entity, FieldOperatorUserName, "操作者用户ID") } // CheckFieldTenantIDResult 利用check.Struct函数返回的结果校验领域实体的租户ID字段是否合规 // 参数: // - checkResult: check.Struct函数返回的结果 // 返回值: // - 错误 func CheckFieldTenantIDResult(checkResult check.Result) error { return checkUseResult(checkResult, FieldTenantID, "租户ID") } // CheckFieldCreateUserIDResult 利用check.Struct函数返回的结果校验领域实体的创建用户ID字段是否合规 // 参数: // - checkResult: check.Struct函数返回的结果 // 返回值: // - 错误 func CheckFieldCreateUserIDResult(checkResult check.Result) error { return checkUseResult(checkResult, FieldCreateUserID, "创建用户ID") } // CheckFieldLastUpdateUserIDResult 利用check.Struct函数返回的结果校验领域实体的最近更新用户ID字段是否合规 // 参数: // - checkResult: check.Struct函数返回的结果 // 返回值: // - 错误 func CheckFieldLastUpdateUserIDResult(checkResult check.Result) error { return checkUseResult(checkResult, FieldLastUpdateUserID, "最近更新用户ID") } // CheckFieldDeleteUserIDResult 利用check.Struct函数返回的结果校验领域实体的删除用户ID字段是否合规 // 参数: // - checkResult: check.Struct函数返回的结果 // 返回值: // - 错误 func CheckFieldDeleteUserIDResult(checkResult check.Result) error { return checkUseResult(checkResult, FieldDeleteUserID, "删除用户ID") } // CheckFieldOperatorUserNameResult 利用check.Struct函数返回的结果校验领域实体的操作者用户ID字段是否合规 // 参数: // - entity: 领域实体 // 返回值: // - 错误 func CheckFieldOperatorUserNameResult(checkResult check.Result) error { return checkUseResult(checkResult, FieldOperatorUserName, "操作者用户ID") } // CheckIDTypeValue 校验ID类型的字段,如ID,租户ID,用户ID等,特点是字符串类型,不能为空且长度严格为32字节 // 参数: // - domainCNName: 领域中文名,可以使用DomainCNName()方法获得 // - fieldCNName: 字段的中文名称(用于构造报错信息) // - id: id字段的值 // 返回值: // - 错误 func CheckIDTypeValue(domainCNName string, fieldCNName string, id string) error { if strutils.IsStringEmpty(id) { return errors.New(domainCNName + fieldCNName + "为空") } if len(id) != idLen { return errors.New(domainCNName + fieldCNName + "长度不正确") } return nil } func checkField(entity Entity, fieldName string, fieldCNName string) error { checkResult := check.Struct(entity, map[string]string{ fieldName: entity.DomainCNName() + fieldCNName, }) err := checkResult.CheckFields(fieldName) if err != nil { return errors.New(entity.DomainCNName() + ": " + err.Error()) } return nil } func checkUseResult(checkResult check.Result, domainCNName string, fieldName string) error { err := checkResult.CheckFields(fieldName) if err != nil { return errors.New(domainCNName + ": " + err.Error()) } return nil }