handler.go 1.9 KB

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