/
consent_controller.go
130 lines (100 loc) · 4.88 KB
/
consent_controller.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package controllers
import (
"net/http"
"time"
"github.com/amundlrohne/dcs-medication-sharing/services/consent/configs"
"github.com/amundlrohne/dcs-medication-sharing/services/consent/models"
"github.com/amundlrohne/dcs-medication-sharing/services/consent/responses"
"github.com/go-playground/validator/v10"
"github.com/labstack/echo/v4"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"golang.org/x/net/context"
)
var consentCollection *mongo.Collection = configs.GetCollection(configs.DB, "consents")
var validate = validator.New()
func CreateConsent(c echo.Context) error {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
var consent models.Consent
defer cancel()
//validate the request body
if err := c.Bind(&consent); err != nil {
return c.JSON(http.StatusBadRequest, responses.ConsentResponse{Status: http.StatusBadRequest, Message: "error", Data: &echo.Map{"data": err.Error()}})
}
//use the validator library to validate required fields
if validationErr := validate.Struct(&consent); validationErr != nil {
return c.JSON(http.StatusBadRequest, responses.ConsentResponse{Status: http.StatusBadRequest, Message: "error", Data: &echo.Map{"data": validationErr.Error()}})
}
newConsent := models.Consent{
ID: primitive.NewObjectID(),
ToPublicKey: consent.ToPublicKey,
FromPublicKey: consent.FromPublicKey,
ExpDate: consent.ExpDate,
DateCreated: consent.DateCreated,
}
result, err := consentCollection.InsertOne(ctx, newConsent)
if err != nil {
return c.JSON(http.StatusInternalServerError, responses.ConsentResponse{Status: http.StatusInternalServerError, Message: "error", Data: &echo.Map{"data": err.Error()}})
}
return c.JSON(http.StatusCreated, responses.ConsentResponse{Status: http.StatusCreated, Message: "success", Data: &echo.Map{"data": result}})
}
func GetConsentRequests(c echo.Context) error {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
fromPublicKey := c.Param("from_public_key")
var consents []models.Consent
defer cancel()
// objId, _ := primitive.ObjectIDFromHex(fromPublicKey)
results, err := consentCollection.Find(ctx, bson.M{"frompublickey": fromPublicKey})
if err != nil {
return c.JSON(http.StatusInternalServerError, responses.ConsentResponse{Status: http.StatusInternalServerError, Message: "error", Data: &echo.Map{"data": err.Error()}})
}
defer results.Close(ctx)
for results.Next(ctx) {
var singleConsent models.Consent
if err = results.Decode(&singleConsent); err != nil {
return c.JSON(http.StatusInternalServerError, responses.ConsentResponse{Status: http.StatusInternalServerError, Message: "error", Data: &echo.Map{"data": err.Error()}})
}
consents = append(consents, singleConsent)
}
return c.JSON(http.StatusOK, responses.ConsentResponse{Status: http.StatusOK, Message: "success", Data: &echo.Map{"data": consents}})
}
func GetConsentIncoming(c echo.Context) error {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
toPublicKey := c.Param("to_public_key")
var consents []models.Consent
defer cancel()
// objId, _ := primitive.ObjectIDFromHex(fromPublicKey)
results, err := consentCollection.Find(ctx, bson.M{"topublickey": toPublicKey})
if err != nil {
return c.JSON(http.StatusInternalServerError, responses.ConsentResponse{Status: http.StatusInternalServerError, Message: "error", Data: &echo.Map{"data": err.Error()}})
}
defer results.Close(ctx)
for results.Next(ctx) {
var singleConsent models.Consent
if err = results.Decode(&singleConsent); err != nil {
return c.JSON(http.StatusInternalServerError, responses.ConsentResponse{Status: http.StatusInternalServerError, Message: "error", Data: &echo.Map{"data": err.Error()}})
}
consents = append(consents, singleConsent)
}
return c.JSON(http.StatusOK, responses.ConsentResponse{Status: http.StatusOK, Message: "success", Data: &echo.Map{"data": consents}})
}
func GetAllConsents(c echo.Context) error {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
var consents []models.Consent
defer cancel()
results, err := consentCollection.Find(ctx, bson.M{})
if err != nil {
return c.JSON(http.StatusInternalServerError, responses.ConsentResponse{Status: http.StatusInternalServerError, Message: "error", Data: &echo.Map{"data": err.Error()}})
}
//reading from the db in an optimal way
defer results.Close(ctx)
for results.Next(ctx) {
var singleConsent models.Consent
if err = results.Decode(&singleConsent); err != nil {
return c.JSON(http.StatusInternalServerError, responses.ConsentResponse{Status: http.StatusInternalServerError, Message: "error", Data: &echo.Map{"data": err.Error()}})
}
consents = append(consents, singleConsent)
}
return c.JSON(http.StatusOK, responses.ConsentResponse{Status: http.StatusOK, Message: "success", Data: &echo.Map{"data": consents}})
}