/
meeting_series_service.go
107 lines (82 loc) · 2.59 KB
/
meeting_series_service.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
package service
import (
"context"
"errors"
"github.com/swimresults/meeting-service/model"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"time"
)
var collection *mongo.Collection
func meetingSeriesService(database *mongo.Database) {
collection = database.Collection("meeting_series")
}
func getMeetingSeriesByBsonDocument(d primitive.D) ([]model.MeetingSeries, error) {
var meetings []model.MeetingSeries
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
cursor, err := collection.Find(ctx, d)
if err != nil {
return []model.MeetingSeries{}, err
}
defer cursor.Close(ctx)
for cursor.Next(ctx) {
var meeting model.MeetingSeries
cursor.Decode(&meeting)
if !meeting.LocationId.IsZero() {
meeting.Location, _ = GetLocationById(meeting.LocationId)
}
meetings = append(meetings, meeting)
}
if err := cursor.Err(); err != nil {
return []model.MeetingSeries{}, err
}
return meetings, nil
}
func GetMeetingSeries() ([]model.MeetingSeries, error) {
return getMeetingSeriesByBsonDocument(bson.D{})
}
func GetMeetingSeriesById(id primitive.ObjectID) (model.MeetingSeries, error) {
meetings, err := getMeetingSeriesByBsonDocument(bson.D{{"_id", id}})
if err != nil {
return model.MeetingSeries{}, err
}
if len(meetings) > 0 {
return meetings[0], nil
}
return model.MeetingSeries{}, errors.New("no entry with given id found")
}
func RemoveMeetingSeriesById(id primitive.ObjectID) error {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
_, err := collection.DeleteOne(ctx, bson.D{{"_id", id}})
if err != nil {
return err
}
return nil
}
func AddMeetingSeries(meeting model.MeetingSeries) (model.MeetingSeries, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
if !meeting.Location.Identifier.IsZero() {
meeting.LocationId = meeting.Location.Identifier
}
meeting.AddedAt = time.Now()
meeting.UpdatedAt = time.Now()
r, err := collection.InsertOne(ctx, meeting)
if err != nil {
return model.MeetingSeries{}, err
}
return GetMeetingSeriesById(r.InsertedID.(primitive.ObjectID))
}
func UpdateMeetingSeries(meeting model.MeetingSeries) (model.MeetingSeries, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
meeting.UpdatedAt = time.Now()
_, err := collection.ReplaceOne(ctx, bson.D{{"_id", meeting.Identifier}}, meeting)
if err != nil {
return model.MeetingSeries{}, err
}
return GetMeetingSeriesById(meeting.Identifier)
}