dto.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package request
  2. import (
  3. "git.sxidc.com/go-framework/baize/domain"
  4. "git.sxidc.com/go-framework/baize/tag/assign"
  5. "git.sxidc.com/go-tools/utils/reflectutils"
  6. "git.sxidc.com/service-supports/fserr"
  7. "reflect"
  8. )
  9. type Params interface{}
  10. func AssignRequestParamsToDomainObject(params Params, domainObject domain.Object) error {
  11. return assign.DefaultUsage(params, domainObject)
  12. }
  13. func Field[T any](params Params, fieldName string) (T, error) {
  14. var zero T
  15. if params == nil {
  16. return zero, fserr.New("请求参数为nil")
  17. }
  18. fieldValue, err := getRequestParamsValue(params, fieldName)
  19. if err != nil {
  20. return zero, err
  21. }
  22. if !fieldValue.IsValid() {
  23. return zero, fserr.New("请求参数" + fieldValue.Type().String() + "的字段" + fieldName + "无法赋值")
  24. }
  25. retValue, ok := fieldValue.Interface().(T)
  26. if !ok {
  27. return zero, fserr.New("请求参数" + fieldValue.Type().String() + "的字段" + fieldName + "无法转换类型")
  28. }
  29. return retValue, nil
  30. }
  31. func ToConcrete[T Params](params Params) (T, error) {
  32. var zero T
  33. if params == nil {
  34. return zero, fserr.New("请求参数为nil")
  35. }
  36. concrete, ok := params.(T)
  37. if !ok {
  38. return zero, fserr.New("请求参数转化失败")
  39. }
  40. return concrete, nil
  41. }
  42. func getRequestParamsValue(params Params, fieldName string) (*reflect.Value, error) {
  43. if params == nil {
  44. return nil, fserr.New("请求参数为nil")
  45. }
  46. paramsValue := reflect.ValueOf(params)
  47. if reflectutils.IsValueStructOrStructPointer(paramsValue) {
  48. return nil, fserr.New("请求参数必须是结构或结构指针")
  49. }
  50. fieldValue := reflectutils.PointerValueElem(paramsValue).FieldByName(fieldName)
  51. return &fieldValue, nil
  52. }