handler.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package handlers
  2. import (
  3. "net/http"
  4. "github.com/porter-dev/porter/api/server/shared"
  5. "github.com/porter-dev/porter/api/server/shared/apierrors"
  6. "github.com/porter-dev/porter/internal/repository"
  7. )
  8. type PorterHandler interface {
  9. Config() *shared.Config
  10. Repo() repository.Repository
  11. HandleAPIError(w http.ResponseWriter, err apierrors.RequestError)
  12. }
  13. type PorterHandlerWriter interface {
  14. PorterHandler
  15. WriteResult(w http.ResponseWriter, v interface{})
  16. }
  17. type PorterHandlerReader interface {
  18. PorterHandler
  19. DecodeAndValidate(w http.ResponseWriter, r *http.Request, v interface{}) bool
  20. }
  21. type PorterHandlerReadWriter interface {
  22. PorterHandlerWriter
  23. PorterHandlerReader
  24. }
  25. type DefaultPorterHandler struct {
  26. config *shared.Config
  27. decoderValidator shared.RequestDecoderValidator
  28. writer shared.ResultWriter
  29. }
  30. func NewDefaultPorterHandler(
  31. config *shared.Config,
  32. decoderValidator shared.RequestDecoderValidator,
  33. writer shared.ResultWriter,
  34. ) PorterHandlerReadWriter {
  35. return &DefaultPorterHandler{config, decoderValidator, writer}
  36. }
  37. func (d *DefaultPorterHandler) Config() *shared.Config {
  38. return d.config
  39. }
  40. func (d *DefaultPorterHandler) Repo() repository.Repository {
  41. return d.config.Repo
  42. }
  43. func (d *DefaultPorterHandler) HandleAPIError(w http.ResponseWriter, err apierrors.RequestError) {
  44. apierrors.HandleAPIError(w, d.Config().Logger, err)
  45. }
  46. func (d *DefaultPorterHandler) WriteResult(w http.ResponseWriter, v interface{}) {
  47. d.writer.WriteResult(w, v)
  48. }
  49. func (d *DefaultPorterHandler) DecodeAndValidate(w http.ResponseWriter, r *http.Request, v interface{}) bool {
  50. return d.decoderValidator.DecodeAndValidate(w, r, v)
  51. }