-
Notifications
You must be signed in to change notification settings - Fork 11
/
governance_request_feedback.go
99 lines (85 loc) · 2.64 KB
/
governance_request_feedback.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package storage
import (
"context"
"fmt"
"github.com/google/uuid"
"go.uber.org/zap"
"github.com/cmsgov/easi-app/pkg/appcontext"
"github.com/cmsgov/easi-app/pkg/apperrors"
"github.com/cmsgov/easi-app/pkg/models"
)
// CreateGovernanceRequestFeedback creates a governance request feedback record in the database
func (s *Store) CreateGovernanceRequestFeedback(ctx context.Context, requestFeedback *models.GovernanceRequestFeedback) (*models.GovernanceRequestFeedback, error) {
if requestFeedback.ID == uuid.Nil {
requestFeedback.ID = uuid.New()
}
const governanceRequestFeedbackCreateSQL = `
INSERT INTO governance_request_feedback(
id,
intake_id,
feedback,
source_action,
target_form,
type,
created_by
) VALUES (
:id,
:intake_id,
:feedback,
:source_action,
:target_form,
:type,
:created_by
) RETURNING *;
`
stmt, err := s.db.PrepareNamed(governanceRequestFeedbackCreateSQL)
if err != nil {
appcontext.ZLogger(ctx).Error(
fmt.Sprintf("Failed to create governance request feedback with error %s", err),
zap.Error(err),
zap.Any("user", requestFeedback.CreatedBy), // use zap.Any to handle possible nil pointers
)
return nil, err
}
defer stmt.Close()
retFeedback := models.GovernanceRequestFeedback{}
err = stmt.Get(&retFeedback, requestFeedback)
if err != nil {
appcontext.ZLogger(ctx).Error(
fmt.Sprintf("Failed to create governance request feedback with error %s", err),
zap.Error(err),
zap.Any("user", requestFeedback.CreatedBy), // use zap.Any to handle possible nil pointers
)
return nil, err
}
return &retFeedback, nil
}
// GetGovernanceRequestFeedbacksByIntakeID returns all governance request feedback items for a given system intake
func (s *Store) GetGovernanceRequestFeedbacksByIntakeID(ctx context.Context, intakeID uuid.UUID) ([]*models.GovernanceRequestFeedback, error) {
feedbacks := []*models.GovernanceRequestFeedback{}
stmt, err := s.db.PrepareNamed(`SELECT * FROM governance_request_feedback WHERE intake_id = :intake_id`)
if err != nil {
appcontext.ZLogger(ctx).Error(
"Failed to fetch governance request feedbacks",
zap.Error(err),
zap.String("intakeID", intakeID.String()),
)
return nil, err
}
defer stmt.Close()
arg := map[string]interface{}{"intake_id": intakeID}
err = stmt.Select(&feedbacks, arg)
if err != nil {
appcontext.ZLogger(ctx).Error(
"Failed to fetch governance request feedbacks",
zap.Error(err),
zap.String("intakeID", intakeID.String()),
)
return nil, &apperrors.QueryError{
Err: err,
Model: []*models.GovernanceRequestFeedback{},
Operation: apperrors.QueryFetch,
}
}
return feedbacks, nil
}