entity.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package domain
  2. import (
  3. "git.sxidc.com/go-framework/baize/infrastructure/database/sql"
  4. "git.sxidc.com/go-framework/baize/tag/sql/sql_mapping"
  5. "git.sxidc.com/go-tools/utils/strutils"
  6. "git.sxidc.com/service-supports/fserr"
  7. )
  8. type ConditionFieldCallback func(conditions *sql.Conditions, fieldName string, columnName string, value any) (hasDeal bool)
  9. type Entity interface {
  10. DomainCNName() string
  11. GenerateID() error
  12. ID() string
  13. CheckID(domainCNName string, errCode int) error
  14. QueryDBConditions(callback ConditionFieldCallback) sql.Conditions
  15. }
  16. type BaseEntity struct {
  17. ID string `sqlmapping:"column:id;key;" sqlresult:"column:id;"`
  18. }
  19. func (e *BaseEntity) DomainCNName() string {
  20. return "基础实体"
  21. }
  22. func (e *BaseEntity) GenerateID() {
  23. e.ID = strutils.SimpleUUID()
  24. }
  25. func (e *BaseEntity) GetID() string {
  26. return e.ID
  27. }
  28. func (e *BaseEntity) CheckID(errCode int) error {
  29. if strutils.IsStringEmpty(e.ID) {
  30. return fserr.WithCode(nil, errCode, fserr.MsgOption(e.DomainCNName()+"ID为空"))
  31. }
  32. if len([]byte(e.ID)) != FieldIDLen {
  33. return fserr.WithCode(nil, errCode, fserr.MsgOption(e.DomainCNName()+"ID长度不正确"))
  34. }
  35. return nil
  36. }
  37. func (e *BaseEntity) QueryDBConditions(callback ConditionFieldCallback) (*sql.Conditions, error) {
  38. fields, err := sql_mapping.DefaultUsage(e)
  39. if err != nil {
  40. return nil, err
  41. }
  42. conditions := sql.NewConditions()
  43. for _, field := range fields {
  44. hasDeal := false
  45. if callback != nil {
  46. hasDeal = callback(conditions, field.FieldName, field.ColumnName, field.Value)
  47. }
  48. if !hasDeal {
  49. conditions.Equal(field.ColumnName, field.Value)
  50. }
  51. }
  52. return conditions, nil
  53. }