Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[EASI 4457] - TRB Request Feedback dataloaders #2700

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 52 additions & 1 deletion cmd/devdata/trb_request.go
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,22 @@ func (s *seederConfig) seedTRBCase9(ctx context.Context) error {
return err
}

_, err = s.addTRBFeedback(ctx, trb, func(fb *models.TRBRequestFeedback) {
fb.FeedbackMessage = "This is the earlier feedback"
fb.CreatedAt = time.Now().AddDate(0, 0, -7)
})
if err != nil {
return err
}

_, err = s.addTRBFeedback(ctx, trb, func(fb *models.TRBRequestFeedback) {
fb.FeedbackMessage = "This is the earliest feedback"
fb.CreatedAt = time.Now().AddDate(0, 0, -14)
})
if err != nil {
return err
}

_, err = s.addTRBConsultMeeting(ctx, trb, true)
if err != nil {
return err
Expand Down Expand Up @@ -263,6 +279,14 @@ func (s *seederConfig) seedTRBCase10(ctx context.Context) error {
return err
}

_, err = s.addTRBFeedback(ctx, trb, func(fb *models.TRBRequestFeedback) {
fb.FeedbackMessage = "This is the earlier feedback"
fb.CreatedAt = time.Now().AddDate(0, 0, -14)
})
if err != nil {
return err
}

_, err = s.addTRBConsultMeeting(ctx, trb, true)
if err != nil {
return err
Expand Down Expand Up @@ -293,6 +317,29 @@ func (s *seederConfig) seedTRBCase11(ctx context.Context) error {
return err
}

_, err = s.addTRBFeedback(ctx, trb, func(fb *models.TRBRequestFeedback) {
fb.FeedbackMessage = "This is the newest feedback"
fb.CreatedAt = time.Now().AddDate(0, 0, 7)
})
if err != nil {
return err
}
_, err = s.addTRBFeedback(ctx, trb, func(fb *models.TRBRequestFeedback) {
fb.FeedbackMessage = "This is the earlier feedback"
fb.CreatedAt = time.Now().AddDate(0, 0, -7)
})
if err != nil {
return err
}

_, err = s.addTRBFeedback(ctx, trb, func(fb *models.TRBRequestFeedback) {
fb.FeedbackMessage = "This is more feedback"
fb.CreatedAt = time.Now().AddDate(0, 0, -1)
})
if err != nil {
return err
}

_, err = s.addTRBConsultMeeting(ctx, trb, true)
if err != nil {
return err
Expand Down Expand Up @@ -701,7 +748,7 @@ func (s *seederConfig) updateTRBRequestFundingSources(ctx context.Context, trbID
return sources, nil
}

func (s *seederConfig) addTRBFeedback(ctx context.Context, trb *models.TRBRequest) (*models.TRBRequestFeedback, error) {
func (s *seederConfig) addTRBFeedback(ctx context.Context, trb *models.TRBRequest, ops ...func(fb *models.TRBRequestFeedback)) (*models.TRBRequestFeedback, error) {
feedback := &models.TRBRequestFeedback{
TRBRequestID: trb.ID,
FeedbackMessage: "This is the most excellent TRB request ever created",
Expand All @@ -710,6 +757,10 @@ func (s *seederConfig) addTRBFeedback(ctx context.Context, trb *models.TRBReques
Action: models.TRBFeedbackActionReadyForConsult,
}

for _, op := range ops {
op(feedback)
}

feedback, err := resolvers.CreateTRBRequestFeedback(ctx, s.store, nil, mock.FetchUserInfoMock, mock.FetchUserInfosMock, feedback)
if err != nil {
return nil, err
Expand Down
4 changes: 4 additions & 0 deletions pkg/dataloaders/dataloaders.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ type Dataloaders struct {
SystemIntakeSystems *dataloadgen.Loader[uuid.UUID, []*models.SystemIntakeSystem]
TRBRequestContractNumbers *dataloadgen.Loader[uuid.UUID, []*models.TRBRequestContractNumber]
TRBRequestForm *dataloadgen.Loader[uuid.UUID, *models.TRBRequestForm]
TRBRequestFeedback *dataloadgen.Loader[uuid.UUID, []*models.TRBRequestFeedback]
TRBRequestFeedbackNewest *dataloadgen.Loader[uuid.UUID, *models.TRBRequestFeedback]
TRBRequestRelatedSystemIntakes *dataloadgen.Loader[uuid.UUID, []*models.SystemIntake]
TRBRequestRelatedTRBRequests *dataloadgen.Loader[uuid.UUID, []*models.TRBRequest]
TRBRequestSystems *dataloadgen.Loader[uuid.UUID, []*models.TRBRequestSystem]
Expand Down Expand Up @@ -108,6 +110,8 @@ func NewDataloaders(store *storage.Store, fetchUserInfos fetchUserInfosFunc, get
SystemIntakeRelatedTRBRequests: dataloadgen.NewLoader(dr.batchRelatedTRBRequestsBySystemIntakeIDs),
SystemIntakeSystems: dataloadgen.NewLoader(dr.batchSystemIntakeSystemsBySystemIntakeIDs),
TRBRequestForm: dataloadgen.NewLoader(dr.batchTRBRequestFormsByTRBRequestIDs),
TRBRequestFeedback: dataloadgen.NewLoader(dr.batchTRBRequestFeedbackByTRBRequestIDs),
TRBRequestFeedbackNewest: dataloadgen.NewLoader(dr.batchTRBRequestNewestFeedbackByTRBRequestIDs),
TRBRequestContractNumbers: dataloadgen.NewLoader(dr.batchTRBRequestContractNumbersByTRBRequestIDs),
TRBRequestRelatedSystemIntakes: dataloadgen.NewLoader(dr.batchRelatedSystemIntakesByTRBRequestIDs),
TRBRequestRelatedTRBRequests: dataloadgen.NewLoader(dr.batchRelatedTRBRequestsByTRBRequestIDs),
Expand Down
47 changes: 47 additions & 0 deletions pkg/dataloaders/trb_request_feedback.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package dataloaders

import (
"context"
"errors"

"github.com/google/uuid"

"github.com/cms-enterprise/easi-app/pkg/helpers"
"github.com/cms-enterprise/easi-app/pkg/models"
)

func (d *dataReader) batchTRBRequestNewestFeedbackByTRBRequestIDs(ctx context.Context, trbRequestIDs []uuid.UUID) ([]*models.TRBRequestFeedback, []error) {
data, err := d.db.GetNewestTRBRequestFeedbackByTRBRequestIDs(ctx, trbRequestIDs)
if err != nil {
return nil, []error{err}
}

return helpers.OneToOne(trbRequestIDs, data), nil
}

func GetNewestTRBRequestFeedbackByTRBRequestID(ctx context.Context, trbRequestID uuid.UUID) (*models.TRBRequestFeedback, error) {
loaders, ok := loadersFromCTX(ctx)
if !ok {
return nil, errors.New("unexpected nil dataloaders in GetNewestTRBRequestFeedbackByTRBRequestID")
}

return loaders.TRBRequestFeedbackNewest.Load(ctx, trbRequestID)
}

func (d *dataReader) batchTRBRequestFeedbackByTRBRequestIDs(ctx context.Context, trbRequestIDs []uuid.UUID) ([][]*models.TRBRequestFeedback, []error) {
data, err := d.db.GetTRBRequestFeedbackByTRBRequestIDs(ctx, trbRequestIDs)
if err != nil {
return nil, []error{err}
}

return helpers.OneToMany(trbRequestIDs, data), nil
}

func GetTRBRequestFeedbackByTRBRequestID(ctx context.Context, trbRequestID uuid.UUID) ([]*models.TRBRequestFeedback, error) {
loaders, ok := loadersFromCTX(ctx)
if !ok {
return nil, errors.New("unexpected nil dataloaders in GetNewestTRBRequestFeedbackByTRBRequestID")
}

return loaders.TRBRequestFeedback.Load(ctx, trbRequestID)
}
3 changes: 2 additions & 1 deletion pkg/graph/resolvers/trb_request_feedback.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"golang.org/x/sync/errgroup"

"github.com/cms-enterprise/easi-app/pkg/appcontext"
"github.com/cms-enterprise/easi-app/pkg/dataloaders"
"github.com/cms-enterprise/easi-app/pkg/email"
"github.com/cms-enterprise/easi-app/pkg/models"
"github.com/cms-enterprise/easi-app/pkg/storage"
Expand Down Expand Up @@ -128,7 +129,7 @@ func CreateTRBRequestFeedback(

// GetTRBRequestFeedbackByTRBRequestID retrieves TRB request feedback records for a given TRB request ID
func GetTRBRequestFeedbackByTRBRequestID(ctx context.Context, store *storage.Store, id uuid.UUID) ([]*models.TRBRequestFeedback, error) {
results, err := store.GetTRBRequestFeedbackByTRBRequestID(ctx, id)
results, err := dataloaders.GetTRBRequestFeedbackByTRBRequestID(ctx, id)
if err != nil {
return nil, err
}
Expand Down
20 changes: 18 additions & 2 deletions pkg/graph/resolvers/trb_request_feedback_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,18 @@ func (s *ResolverSuite) TestCreateTRBRequestFeedback() {
trbRequest, err = CreateTRBRequest(s.testConfigs.Context, models.TRBTBrainstorm, store)
s.NoError(err)

initFeedbackStatus, err := getTRBFeedbackStatus(s.ctxWithNewDataloaders(), trbRequest.ID)
s.NoError(err)
s.EqualValues(models.TRBFeedbackStatusCannotStartYet, *initFeedbackStatus)

feedback, err := store.GetTRBRequestFeedbackByTRBRequestID(ctx, trbRequest.ID)
s.NoError(err)
s.Empty(feedback)

latestFeedback, err := store.GetNewestTRBRequestFeedbackByTRBRequestID(ctx, trbRequest.ID)
s.NoError(err)
s.Nil(latestFeedback)

form, err := GetTRBRequestFormByTRBRequestID(s.ctxWithNewDataloaders(), store, trbRequest.ID)
s.NoError(err)

Expand All @@ -83,6 +95,10 @@ func (s *ResolverSuite) TestCreateTRBRequestFeedback() {
s.NoError(err)
s.EqualValues(models.TRBFormStatusCompleted, form.Status)

reviewFeedbackStatus, err := getTRBFeedbackStatus(s.ctxWithNewDataloaders(), trbRequest.ID)
s.NoError(err)
s.EqualValues(models.TRBFeedbackStatusInReview, *reviewFeedbackStatus)

notifyEUAIDs := pq.StringArray{"WUTT", "NOPE", "YEET"}
toCreate := &models.TRBRequestFeedback{
TRBRequestID: trbRequest.ID,
Expand All @@ -108,7 +124,7 @@ func (s *ResolverSuite) TestCreateTRBRequestFeedback() {
s.EqualValues(toCreate.NotifyEUAIDs[1], created.NotifyEUAIDs[1])
s.EqualValues(toCreate.NotifyEUAIDs[2], created.NotifyEUAIDs[2])
// Verify that the TRB request feedback status is now "edits requested"
updatedFeedbackStatus, err := getTRBFeedbackStatus(ctx, store, trbRequest.ID)
updatedFeedbackStatus, err := getTRBFeedbackStatus(s.ctxWithNewDataloaders(), trbRequest.ID)
s.NoError(err)
s.EqualValues(models.TRBFeedbackStatusEditsRequested, *updatedFeedbackStatus)
form, err := GetTRBRequestFormByTRBRequestID(s.ctxWithNewDataloaders(), store, trbRequest.ID)
Expand Down Expand Up @@ -151,7 +167,7 @@ func (s *ResolverSuite) TestCreateTRBRequestFeedback() {
s.EqualValues(toCreate2.NotifyEUAIDs[2], created2.NotifyEUAIDs[2])

// Verify that the TRB request feedback status is now "completed"
finalFeedbackStatus, err := getTRBFeedbackStatus(ctx, store, trbRequest.ID)
finalFeedbackStatus, err := getTRBFeedbackStatus(s.ctxWithNewDataloaders(), trbRequest.ID)
s.NoError(err)
s.EqualValues(models.TRBFeedbackStatusCompleted, *finalFeedbackStatus)
})
Expand Down
44 changes: 18 additions & 26 deletions pkg/graph/resolvers/trb_request_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,29 @@ import (
"github.com/google/uuid"
"golang.org/x/sync/errgroup"

"github.com/cms-enterprise/easi-app/pkg/dataloaders"
"github.com/cms-enterprise/easi-app/pkg/models"
"github.com/cms-enterprise/easi-app/pkg/storage"
)

func getTRBFormStatus(ctx context.Context, store *storage.Store, trbRequestID uuid.UUID) (*models.TRBFormStatus, error) {
form, err := store.GetTRBRequestFormByTRBRequestID(ctx, trbRequestID)
func getTRBFormStatus(ctx context.Context, trbRequestID uuid.UUID) (*models.TRBFormStatus, error) {
form, err := dataloaders.GetTRBRequestFormByTRBRequestID(ctx, trbRequestID)
if err != nil {
return nil, err
}
return &form.Status, nil
}

func getTRBFeedbackStatus(ctx context.Context, store *storage.Store, trbRequestID uuid.UUID) (*models.TRBFeedbackStatus, error) {
func getTRBFeedbackStatus(ctx context.Context, trbRequestID uuid.UUID) (*models.TRBFeedbackStatus, error) {
status := models.TRBFeedbackStatusCannotStartYet
errGroup := new(errgroup.Group)

var form *models.TRBRequestForm
var errForm error
errGroup.Go(func() error {
form, errForm = store.GetTRBRequestFormByTRBRequestID(ctx, trbRequestID)
return errForm
})

var feedback *models.TRBRequestFeedback
var errFeedback error
errGroup.Go(func() error {
feedback, errFeedback = store.GetNewestTRBRequestFeedbackByTRBRequestID(ctx, trbRequestID)
return errFeedback
})
form, err := dataloaders.GetTRBRequestFormByTRBRequestID(ctx, trbRequestID)
if err != nil {
return nil, err
}

if err := errGroup.Wait(); err != nil {
feedback, err := dataloaders.GetNewestTRBRequestFeedbackByTRBRequestID(ctx, trbRequestID)
if err != nil {
return nil, err
}

Expand All @@ -64,9 +56,9 @@ func getTRBFeedbackStatus(ctx context.Context, store *storage.Store, trbRequestI
return &status, nil
}

func getTRBConsultPrepStatus(ctx context.Context, store *storage.Store, trbRequest models.TRBRequest) (*models.TRBConsultPrepStatus, error) {
func getTRBConsultPrepStatus(ctx context.Context, trbRequest models.TRBRequest) (*models.TRBConsultPrepStatus, error) {
status := models.TRBConsultPrepStatusCannotStartYet
feedbackStatus, err := getTRBFeedbackStatus(ctx, store, trbRequest.ID)
feedbackStatus, err := getTRBFeedbackStatus(ctx, trbRequest.ID)
if err != nil {
return nil, err
}
Expand All @@ -81,9 +73,9 @@ func getTRBConsultPrepStatus(ctx context.Context, store *storage.Store, trbReque
return &status, nil
}

func getTRBAttendConsultStatus(ctx context.Context, store *storage.Store, trbRequest models.TRBRequest) (*models.TRBAttendConsultStatus, error) {
func getTRBAttendConsultStatus(ctx context.Context, trbRequest models.TRBRequest) (*models.TRBAttendConsultStatus, error) {
status := models.TRBAttendConsultStatusCannotStartYet
feedbackStatus, err := getTRBFeedbackStatus(ctx, store, trbRequest.ID)
feedbackStatus, err := getTRBFeedbackStatus(ctx, trbRequest.ID)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -131,28 +123,28 @@ func GetTRBTaskStatuses(ctx context.Context, store *storage.Store, trbRequest mo
var formStatus *models.TRBFormStatus
var errForm error
errGroup.Go(func() error {
formStatus, errForm = getTRBFormStatus(ctx, store, trbRequest.ID)
formStatus, errForm = getTRBFormStatus(ctx, trbRequest.ID)
return errForm
})

var feedbackStatus *models.TRBFeedbackStatus
var errFeedback error
errGroup.Go(func() error {
feedbackStatus, errFeedback = getTRBFeedbackStatus(ctx, store, trbRequest.ID)
feedbackStatus, errFeedback = getTRBFeedbackStatus(ctx, trbRequest.ID)
return errFeedback
})

var consultPrepStatus *models.TRBConsultPrepStatus
var errConsultPrep error
errGroup.Go(func() error {
consultPrepStatus, errConsultPrep = getTRBConsultPrepStatus(ctx, store, trbRequest)
consultPrepStatus, errConsultPrep = getTRBConsultPrepStatus(ctx, trbRequest)
return errConsultPrep
})

var attendConsultStatus *models.TRBAttendConsultStatus
var errAttendConsult error
errGroup.Go(func() error {
attendConsultStatus, errAttendConsult = getTRBAttendConsultStatus(ctx, store, trbRequest)
attendConsultStatus, errAttendConsult = getTRBAttendConsultStatus(ctx, trbRequest)
return errAttendConsult
})

Expand Down
Loading