entity.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. Object
  11. DomainCNName() string
  12. GenerateID() error
  13. GetID() string
  14. CheckID(errCode int) error
  15. IDColumnName() string
  16. QueryDBConditions(callback ConditionFieldCallback) (*sql.Conditions, error)
  17. }
  18. type BaseEntity struct {
  19. ID string `sqlmapping:"column:id;key;" sqlresult:"column:id;"`
  20. }
  21. func (e *BaseEntity) DomainCNName() string {
  22. return "基础实体"
  23. }
  24. func (e *BaseEntity) GenerateID() error {
  25. e.ID = strutils.SimpleUUID()
  26. return nil
  27. }
  28. func (e *BaseEntity) GetID() string {
  29. return e.ID
  30. }
  31. func (e *BaseEntity) CheckID(errCode int) error {
  32. if strutils.IsStringEmpty(e.ID) {
  33. return fserr.WithCode(nil, errCode, fserr.MsgOption(e.DomainCNName()+"ID为空"))
  34. }
  35. if len([]byte(e.ID)) != FieldIDLen {
  36. return fserr.WithCode(nil, errCode, fserr.MsgOption(e.DomainCNName()+"ID长度不正确"))
  37. }
  38. return nil
  39. }
  40. func (e *BaseEntity) IDColumnName() string {
  41. return ColumnID
  42. }
  43. func (e *BaseEntity) QueryDBConditions(callback ConditionFieldCallback) (*sql.Conditions, error) {
  44. fields, err := sql_mapping.DefaultUsage(e)
  45. if err != nil {
  46. return nil, err
  47. }
  48. conditions := sql.NewConditions()
  49. for _, field := range fields {
  50. hasDeal := false
  51. if callback != nil {
  52. hasDeal = callback(conditions, field.FieldName, field.ColumnName, field.Value)
  53. }
  54. if !hasDeal {
  55. conditions.Equal(field.ColumnName, field.Value)
  56. }
  57. }
  58. return conditions, nil
  59. }