package rest import ( "io" "git.ali33.ru/fcg-xvii/go-tools/json" ) type IRequest interface { IsAuth() bool Command() string Auth() json.Map Data() json.Map FileKeys() []string File(name string) (io.Reader, bool) GenerateToken(data json.Map, expire int64) (string, error) Root() any ResponseSuccess(data json.Map, files map[string]io.ReadCloser) IResponse ResponseError(code int, err IErrorArgs) IResponse } type Request struct { auth json.Map `json:"auth"` command string `json:"command"` data json.Map `json:"data"` fileKeys []string `json:"file_keys"` files map[string]io.Reader root any generateToken func(data json.Map, expire int64) (string, error) //Response func(data json.Map, files map[string]io.ReadCloser) IResponse } // сеттеры func (s *Request) SetAuth(auth json.Map) { s.auth = auth } func (s *Request) SetCommand(command string) { s.command = command } func (s *Request) SetData(data json.Map) { s.data = data } func (s *Request) SetFiles(files map[string]io.Reader) { s.files = files } func (s *Request) SetRoot(root any) { s.root = root } func (s *Request) SetGenerateToken(generateToken func(data json.Map, expire int64) (string, error)) { s.generateToken = generateToken } // методы интерфейса func (s *Request) IsAuth() bool { return s.auth != nil } func (s *Request) Data() json.Map { return s.data } func (s *Request) FileKeys() []string { keys := make([]string, len(s.files)) for key, _ := range s.files { keys[0] = key } return keys } func (s *Request) File(name string) (io.Reader, bool) { file, ok := s.files[name] return file, ok } func (s *Request) GenerateToken(data json.Map, expire int64) (string, error) { return s.generateToken(data, expire) } func (s *Request) Root() any { return s.root } func (s *Request) ResponseSuccess(data json.Map, files map[string]io.ReadCloser) IResponse { return &Response{ code: 200, data: data, files: files, } } func (s *Request) ResponseError(code int, err IErrorArgs) IResponse { return &Response{ code: code, err: err, } }