request.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package rest
  2. import (
  3. "io"
  4. "git.ali33.ru/fcg-xvii/go-tools/json"
  5. )
  6. type RequestType byte
  7. const (
  8. RequestTypeMessage RequestType = iota
  9. RequestTypeEvent
  10. RequestTypeAnswer
  11. )
  12. type IRequest interface {
  13. Type() RequestType
  14. IsAuth() bool
  15. SetAuth(auth json.Map)
  16. Command() string
  17. Auth() json.Map
  18. Data() json.Map
  19. FileKeys() []string
  20. File(name string) (IReadCloserLen, bool)
  21. GenerateToken(data json.Map, expire int64) (string, error)
  22. Root() any
  23. Core() any
  24. ResponseSuccess(data json.Map, files map[string]IReadCloserLen) IResponse
  25. ResponseError(code int, err IErrorArgs) IResponse
  26. Close()
  27. }
  28. type Request struct {
  29. rType RequestType
  30. auth json.Map
  31. command string
  32. data json.Map
  33. files map[string]IReadCloserLen
  34. core any
  35. root any
  36. generateToken func(data json.Map, expire int64) (string, error)
  37. //Response func(data json.Map, files map[string]io.ReadCloser) IResponse
  38. }
  39. // сеттеры
  40. func (s *Request) SetType(rType RequestType) {
  41. s.rType = rType
  42. }
  43. func (s *Request) SetAuth(auth json.Map) {
  44. s.auth = auth
  45. }
  46. func (s *Request) SetCommand(command string) {
  47. s.command = command
  48. }
  49. func (s *Request) SetData(data json.Map) {
  50. s.data = data
  51. }
  52. func (s *Request) SetFiles(files map[string]IReadCloserLen) {
  53. s.files = files
  54. }
  55. func (s *Request) SetRoot(root any) {
  56. s.root = root
  57. }
  58. func (s *Request) SetCore(core any) {
  59. s.core = core
  60. }
  61. func (s *Request) SetGenerateToken(generateToken func(data json.Map, expire int64) (string, error)) {
  62. s.generateToken = generateToken
  63. }
  64. // методы интерфейса
  65. func (s *Request) Type() RequestType {
  66. return RequestTypeMessage
  67. }
  68. func (s *Request) IsAuth() bool {
  69. return s.auth != nil
  70. }
  71. func (s *Request) Command() string {
  72. return s.command
  73. }
  74. func (s *Request) Auth() json.Map {
  75. return s.auth
  76. }
  77. func (s *Request) Data() json.Map {
  78. return s.data
  79. }
  80. func (s *Request) FileKeys() []string {
  81. keys := make([]string, 0, len(s.files))
  82. for key := range s.files {
  83. keys = append(keys, key)
  84. }
  85. return keys
  86. }
  87. func (s *Request) File(name string) (io.Reader, bool) {
  88. file, ok := s.files[name]
  89. return file, ok
  90. }
  91. func (s *Request) GenerateToken(data json.Map, expire int64) (string, error) {
  92. return s.generateToken(data, expire)
  93. }
  94. func (s *Request) Root() any {
  95. return s.root
  96. }
  97. func (s *Request) Core() any {
  98. return s.core
  99. }
  100. func (s *Request) ResponseSuccess(data json.Map, files map[string]IReadCloserLen) IResponse {
  101. return &Response{
  102. code: 200,
  103. data: data,
  104. files: files,
  105. }
  106. }
  107. func (s *Request) ResponseError(code int, err IErrorArgs) IResponse {
  108. return &Response{
  109. code: code,
  110. err: err,
  111. }
  112. }