endpoints.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package shared
  2. import (
  3. "github.com/porter-dev/porter/api/server/shared/requestutils"
  4. "github.com/porter-dev/porter/api/types"
  5. )
  6. type APIEndpoint struct {
  7. Metadata *types.APIRequestMetadata
  8. DecoderValidator RequestDecoderValidator
  9. Writer ResultWriter
  10. }
  11. type APIEndpointFactory interface {
  12. NewAPIEndpoint(metadata *types.APIRequestMetadata) *APIEndpoint
  13. GetDecoderValidator() RequestDecoderValidator
  14. GetResultWriter() ResultWriter
  15. }
  16. type APIObjectEndpointFactory struct {
  17. DecoderValidator RequestDecoderValidator
  18. ResultWriter ResultWriter
  19. }
  20. func NewAPIObjectEndpointFactory(config *Config) APIEndpointFactory {
  21. validator := requestutils.NewDefaultValidator()
  22. decoder := requestutils.NewDefaultDecoder()
  23. decoderValidator := NewDefaultRequestDecoderValidator(config, validator, decoder)
  24. resultWriter := NewDefaultResultWriter(config)
  25. return &APIObjectEndpointFactory{
  26. DecoderValidator: decoderValidator,
  27. ResultWriter: resultWriter,
  28. }
  29. }
  30. func (factory *APIObjectEndpointFactory) NewAPIEndpoint(
  31. metadata *types.APIRequestMetadata,
  32. ) *APIEndpoint {
  33. return &APIEndpoint{
  34. Metadata: metadata,
  35. DecoderValidator: factory.DecoderValidator,
  36. Writer: factory.ResultWriter,
  37. }
  38. }
  39. func (factory *APIObjectEndpointFactory) GetDecoderValidator() RequestDecoderValidator {
  40. return factory.DecoderValidator
  41. }
  42. func (factory *APIObjectEndpointFactory) GetResultWriter() ResultWriter {
  43. return factory.ResultWriter
  44. }