2
0

update_onboarding.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package project
  2. import (
  3. "errors"
  4. "net/http"
  5. "github.com/porter-dev/porter/api/server/handlers"
  6. "github.com/porter-dev/porter/api/server/shared"
  7. "github.com/porter-dev/porter/api/server/shared/apierrors"
  8. "github.com/porter-dev/porter/api/server/shared/config"
  9. "github.com/porter-dev/porter/api/types"
  10. "github.com/porter-dev/porter/internal/models"
  11. "gorm.io/gorm"
  12. )
  13. type OnboardingUpdateHandler struct {
  14. handlers.PorterHandlerReadWriter
  15. }
  16. func NewOnboardingUpdateHandler(
  17. config *config.Config,
  18. decoderValidator shared.RequestDecoderValidator,
  19. writer shared.ResultWriter,
  20. ) *OnboardingUpdateHandler {
  21. return &OnboardingUpdateHandler{
  22. PorterHandlerReadWriter: handlers.NewDefaultPorterHandler(config, decoderValidator, writer),
  23. }
  24. }
  25. func (p *OnboardingUpdateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  26. proj, _ := r.Context().Value(types.ProjectScope).(*models.Project)
  27. request := &types.UpdateOnboardingRequest{}
  28. if ok := p.DecodeAndValidate(w, r, request); !ok {
  29. return
  30. }
  31. // look for onboarding
  32. onboarding, err := p.Repo().Onboarding().ReadProjectOnboarding(proj.ID)
  33. isNotFound := errors.Is(gorm.ErrRecordNotFound, err)
  34. if err != nil && !isNotFound {
  35. p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  36. return
  37. }
  38. if isNotFound {
  39. onboarding = &models.Onboarding{
  40. ProjectID: proj.ID,
  41. }
  42. }
  43. onboarding.CurrentStep = request.CurrentStep
  44. onboarding.ConnectedSource = request.ConnectedSource
  45. onboarding.SkipRegistryConnection = request.SkipRegistryConnection
  46. onboarding.SkipResourceProvision = request.SkipResourceProvision
  47. onboarding.RegistryConnectionID = request.RegistryConnectionID
  48. onboarding.RegistryConnectionCredentialID = request.RegistryConnectionCredentialID
  49. onboarding.RegistryConnectionProvider = request.RegistryConnectionProvider
  50. onboarding.RegistryInfraID = request.RegistryInfraID
  51. onboarding.RegistryInfraCredentialID = request.RegistryInfraCredentialID
  52. onboarding.RegistryInfraProvider = request.RegistryInfraProvider
  53. onboarding.ClusterInfraID = request.ClusterInfraID
  54. onboarding.ClusterInfraCredentialID = request.ClusterInfraCredentialID
  55. onboarding.ClusterInfraProvider = request.ClusterInfraProvider
  56. if isNotFound {
  57. // if not found, create onboarding struct
  58. onboarding, err = p.Repo().Onboarding().CreateProjectOnboarding(onboarding)
  59. } else {
  60. // otherwise, update the onboarding model
  61. onboarding, err = p.Repo().Onboarding().UpdateProjectOnboarding(onboarding)
  62. }
  63. if err != nil {
  64. p.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  65. return
  66. }
  67. // return onboarding data type
  68. p.WriteResult(w, r, onboarding.ToOnboardingType())
  69. }