endpoints.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package shared
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/porter-dev/porter/api/server/requestutils"
  6. "github.com/porter-dev/porter/api/types"
  7. )
  8. type APIEndpoint struct {
  9. Metadata *types.APIRequestMetadata
  10. DecoderValidator RequestDecoderValidator
  11. Writer ResultWriter
  12. }
  13. type APIEndpointFactory interface {
  14. NewAPIEndpoint(metadata *types.APIRequestMetadata) *APIEndpoint
  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. type JSONResponseWriter struct {
  40. config *Config
  41. }
  42. func NewJSONResponseWriter(config *Config) *JSONResponseWriter {
  43. return &JSONResponseWriter{config}
  44. }
  45. func (j *JSONResponseWriter) Write(w http.ResponseWriter, v interface{}) {
  46. json.NewEncoder(w).Encode(v)
  47. }