accesscontrol.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package service
  2. import (
  3. "bytes"
  4. "city_chips/internal/model"
  5. "city_chips/internal/repository"
  6. "encoding/json"
  7. "fmt"
  8. "io"
  9. "net/http"
  10. )
  11. type AccessControlService interface {
  12. GetAccessControl(id int64) (*model.AccessControl, error)
  13. SendRequest(client HTTPClient, method, url string, body interface{}) ([]byte, error)
  14. }
  15. func NewAccessControlService(service *Service, accessControlRepository repository.AccessControlRepository) AccessControlService {
  16. return &accessControlService{
  17. Service: service,
  18. accessControlRepository: accessControlRepository,
  19. }
  20. }
  21. type accessControlService struct {
  22. *Service
  23. accessControlRepository repository.AccessControlRepository
  24. }
  25. func (s *accessControlService) SendRequest(client HTTPClient, method, url string, body interface{}) ([]byte, error) {
  26. var requestBody io.Reader
  27. if body != nil {
  28. jsonBytes, err := json.Marshal(body)
  29. if err != nil {
  30. return nil, err
  31. }
  32. requestBody = bytes.NewBuffer(jsonBytes)
  33. }
  34. req, err := http.NewRequest(method, url, requestBody)
  35. if err != nil {
  36. return nil, err
  37. }
  38. resp, err := client.Do(req)
  39. if err != nil {
  40. return nil, err
  41. }
  42. defer resp.Body.Close()
  43. responseBody, err := io.ReadAll(resp.Body)
  44. if err != nil {
  45. return nil, err
  46. }
  47. if resp.StatusCode >= 400 {
  48. return nil, fmt.Errorf("bad status: %s", resp.Status)
  49. }
  50. return responseBody, nil
  51. }
  52. func (s *accessControlService) GetAccessControl(id int64) (*model.AccessControl, error) {
  53. return s.accessControlRepository.GetAccessControl(id)
  54. }