Skip to content

Commit 62b497c

Browse files
Merge pull request #425 from mayuka-c/feedback-db
Feedback DB Implementation
2 parents 93e056e + 34f307a commit 62b497c

File tree

4 files changed

+116
-0
lines changed

4 files changed

+116
-0
lines changed

internal/pkg/pac-go-server/db/interface.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,7 @@ type DB interface {
3939
AcceptTermsAndConditions(*models.TermsAndConditions) error
4040
GetTermsAndConditionsByUserID(string) (*models.TermsAndConditions, error)
4141
DeleteTermsAndConditionsByUserID(string) error
42+
43+
InsertFeedback(*models.Feedback) error
44+
GetFeedbacks(models.FeedbacksFilter) ([]models.Feedback, error)
4245
}

internal/pkg/pac-go-server/db/mock_db_client.go

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package mongodb
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/PDeXchange/pac/internal/pkg/pac-go-server/models"
8+
"go.mongodb.org/mongo-driver/bson"
9+
)
10+
11+
// InsertFeedback - insert feedback record into the DB
12+
func (db *MongoDB) InsertFeedback(feedback *models.Feedback) error {
13+
collection := db.Database.Collection("feedbacks")
14+
ctx, cancel := context.WithTimeout(context.Background(), dbContextTimeout)
15+
defer cancel()
16+
17+
if _, err := collection.InsertOne(ctx, feedback); err != nil {
18+
return fmt.Errorf("error inserting feedback: %w", err)
19+
}
20+
21+
return nil
22+
}
23+
24+
// GetFeedbacks - returns list of feedbacks based on the provided filter
25+
func (db *MongoDB) GetFeedbacks(filter models.FeedbacksFilter) ([]models.Feedback, error) {
26+
collection := db.Database.Collection("feedbacks")
27+
ctx, cancel := context.WithTimeout(context.Background(), dbContextTimeout)
28+
defer cancel()
29+
30+
cursor, err := collection.Find(ctx, buildFilter(filter))
31+
if err != nil {
32+
return nil, fmt.Errorf("error fetching feedbacks from DB: %w", err)
33+
}
34+
defer cursor.Close(ctx)
35+
36+
feedbacks := []models.Feedback{}
37+
if err := cursor.All(context.TODO(), &feedbacks); err != nil {
38+
return nil, fmt.Errorf("error getting feedbacks: %w", err)
39+
}
40+
41+
return feedbacks, nil
42+
}
43+
44+
func buildFilter(filter models.FeedbacksFilter) bson.M {
45+
bsonFilter := bson.M{}
46+
47+
// Conditionally add filters based on whether fields are set
48+
if filter.UserID != "" {
49+
bsonFilter["user_id"] = filter.UserID
50+
}
51+
52+
return bsonFilter
53+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package models
2+
3+
import "go.mongodb.org/mongo-driver/bson/primitive"
4+
5+
type Rating string
6+
7+
const (
8+
Positive Rating = "Positive"
9+
Negative Rating = "Negative"
10+
Neutral Rating = "Neutral"
11+
)
12+
13+
func (r Rating) IsValid() bool {
14+
switch r {
15+
case Positive, Negative, Neutral:
16+
return true
17+
default:
18+
return false
19+
}
20+
}
21+
22+
type Feedback struct {
23+
ID primitive.ObjectID `json:"id" bson:"_id,omitempty"`
24+
UserID string `json:"user_id" bson:"user_id,omitempty"`
25+
Rating Rating `json:"rating" bson:"rating,omitempty"`
26+
Comment string `json:"comment" bson:"comment,omitempty"`
27+
}
28+
29+
type FeedbacksFilter struct {
30+
UserID string
31+
}

0 commit comments

Comments
 (0)