Skip to content

Commit 94b6776

Browse files
committed
Merge remote-tracking branch 'origin/staging' into 493-implement-fuzzy-search-for-companiesspeakers
2 parents 125fdc7 + 4ae944f commit 94b6776

File tree

1,003 files changed

+175971
-636
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,003 files changed

+175971
-636
lines changed
649 KB
Binary file not shown.
664 KB
Binary file not shown.

backend/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.23.0
55
toolchain go1.24.2
66

77
require (
8+
baliance.com/gooxml v1.0.1
89
github.com/arran4/golang-ical v0.2.7
910
github.com/dgrijalva/jwt-go v3.2.0+incompatible
1011
github.com/digitalocean/godo v1.19.0
@@ -15,7 +16,9 @@ require (
1516
github.com/h2non/filetype v1.0.10
1617
github.com/joho/godotenv v1.5.1
1718
github.com/minio/minio-go v0.0.0-20190523192347-c6c2912aa552
19+
github.com/nguyenthenguyen/docx v0.0.0-20230621112118-9c8e795a11db
1820
github.com/patrickmn/go-cache v2.1.0+incompatible
21+
github.com/phpdave11/gofpdf v1.4.3
1922
github.com/spf13/viper v1.4.0
2023
go.mongodb.org/mongo-driver v1.5.1
2124
golang.org/x/oauth2 v0.30.0

backend/go.sum

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
baliance.com/gooxml v1.0.1 h1:fG5lmxmjEVFfbKQ2NuyCuU3hMuuOb5avh5a38SZNO1o=
2+
baliance.com/gooxml v1.0.1/go.mod h1:+gpUgmkAF4zCtwOFPNRLDAvpVRWoKs5EeQTSv/HYFnw=
13
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
24
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
35
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
@@ -55,6 +57,7 @@ github.com/aws/aws-sdk-go v1.34.28 h1:sscPpn/Ns3i0F4HPEWAVcwdIRaZZCuL7llJ2/60yPI
5557
github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
5658
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
5759
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
60+
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
5861
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
5962
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
6063
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
@@ -207,8 +210,6 @@ github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1
207210
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
208211
github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
209212
github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
210-
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
211-
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
212213
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
213214
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
214215
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
@@ -237,6 +238,7 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X
237238
github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE=
238239
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
239240
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
241+
github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
240242
github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
241243
github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
242244
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
@@ -270,13 +272,18 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua
270272
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
271273
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
272274
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
275+
github.com/nguyenthenguyen/docx v0.0.0-20230621112118-9c8e795a11db h1:v0cW/tTMrJQyZr7r6t+t9+NhH2OBAjydHisVYxuyObc=
276+
github.com/nguyenthenguyen/docx v0.0.0-20230621112118-9c8e795a11db/go.mod h1:BZyH8oba3hE/BTt2FfBDGPOHhXiKs9RFmUvvXRdzrhM=
273277
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
274278
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
275279
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
276280
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
277281
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
278282
github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI=
279283
github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
284+
github.com/phpdave11/gofpdf v1.4.3 h1:M/zHvS8FO3zh9tUd2RCOPEjyuVcs281FCyF22Qlz/IA=
285+
github.com/phpdave11/gofpdf v1.4.3/go.mod h1:MAwzoUIgD3J55u0rxIG2eu37c+XWhBtXSpPAhnQXf/o=
286+
github.com/phpdave11/gofpdi v1.0.15/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
280287
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
281288
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
282289
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -300,6 +307,7 @@ github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
300307
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
301308
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
302309
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
310+
github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
303311
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
304312
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
305313
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
@@ -406,6 +414,7 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH
406414
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
407415
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
408416
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
417+
golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
409418
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
410419
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
411420
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=

backend/src/config/config.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package config
33
import (
44
"fmt"
55
"log"
6+
"os"
67

78
"github.com/joho/godotenv"
89
"github.com/spf13/viper"
@@ -98,8 +99,15 @@ func InitializeConfig(filename *string) {
9899
}
99100

100101
if file {
101-
if err := godotenv.Load(*filename); err != nil {
102-
fmt.Printf("Error loading .env file: %v\n", err)
102+
// If a filename was provided but the file doesn't exist, silently ignore it.
103+
// In Kubernetes/staging we rely on environment variables provided by the
104+
// runtime, so a missing .env file is not an error.
105+
if _, statErr := os.Stat(*filename); os.IsNotExist(statErr) {
106+
// No .env file present; ignore
107+
} else {
108+
if err := godotenv.Load(*filename); err != nil {
109+
fmt.Printf("Error loading .env file: %v\n", err)
110+
}
103111
}
104112
}
105113

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package models
2+
3+
import (
4+
"go.mongodb.org/mongo-driver/bson/primitive"
5+
)
6+
7+
// CoordinationTeam represents a dedicated coordination team separate from normal teams.
8+
// It maps a set of coordinator members to the IDs of teams they coordinate.
9+
type CoordinationTeam struct {
10+
ID primitive.ObjectID `json:"id" bson:"_id"`
11+
Name string `json:"name" bson:"name"`
12+
13+
// Coordinator is the single member that acts as coordinator for this coordination team.
14+
Coordinator *TeamMember `json:"coordinator,omitempty" bson:"coordinator,omitempty"`
15+
16+
// CoordinatedMembers holds IDs of members (from models.Member) that belong to
17+
// this coordination team for the current event.
18+
CoordinatedMembers []primitive.ObjectID `json:"coordinatedMembers" bson:"coordinatedMembers"`
19+
}
20+
21+
// HasCoordinator returns true if the given member is a coordinator in this coordination team.
22+
func (ct *CoordinationTeam) HasCoordinator(member primitive.ObjectID) bool {
23+
if ct.Coordinator == nil {
24+
return false
25+
}
26+
return ct.Coordinator.Member == member
27+
}
28+
29+
// HasCoordinatedTeam returns true if this coordination team coordinates the provided team id.
30+
func (ct *CoordinationTeam) HasCoordinatedMember(memberID primitive.ObjectID) bool {
31+
for _, m := range ct.CoordinatedMembers {
32+
if m == memberID {
33+
return true
34+
}
35+
}
36+
return false
37+
}

backend/src/models/template.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ type Template struct {
99
// template's ID (_id of mongodb).
1010
ID primitive.ObjectID `json:"id" bson:"_id"`
1111

12-
Name string `json:"name" bson:"name"`
13-
Url string `json:"url" bson:"url"`
12+
Name string `json:"name" bson:"name"`
13+
Url string `json:"url" bson:"url"`
14+
Event int `json:"event,omitempty" bson:"event,omitempty"`
1415
Requirements []Requirement `json:"requirements" bson:"requirements"`
1516
Kind string `json:"kind" bson:"kind"`
1617
}

backend/src/mongodb/company.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,42 @@ func (c *CompaniesType) GetCompanies(compOptions GetCompaniesOptions) ([]*models
284284
return companies, nil
285285
}
286286

287+
// GetCompaniesByMembers returns companies that have a participation with any of the provided member IDs.
288+
// If eventID is provided, only participations for that event are considered.
289+
func (c *CompaniesType) GetCompaniesByMembers(memberIDs []primitive.ObjectID, eventID *int) ([]*models.Company, error) {
290+
ctx := context.Background()
291+
var companies = make([]*models.Company, 0)
292+
293+
filter := bson.M{}
294+
295+
if eventID != nil {
296+
filter["participations"] = bson.M{"$elemMatch": bson.M{"member": bson.M{"$in": memberIDs}, "event": *eventID}}
297+
} else {
298+
filter["participations.member"] = bson.M{"$in": memberIDs}
299+
}
300+
301+
cur, err := c.Collection.Find(ctx, filter)
302+
if err != nil {
303+
return nil, err
304+
}
305+
306+
for cur.Next(ctx) {
307+
var comp models.Company
308+
if err := cur.Decode(&comp); err != nil {
309+
return nil, err
310+
}
311+
companies = append(companies, &comp)
312+
}
313+
314+
if err := cur.Err(); err != nil {
315+
return nil, err
316+
}
317+
318+
cur.Close(ctx)
319+
320+
return companies, nil
321+
}
322+
287323
// Transforms a models.Company into a models.CompanyPublic. If eventID != nil, returns only the participation for that event, if announced.
288324
// Otherwise, returns all participations in which they were announced
289325
func companyToPublic(company models.Company, eventID *int) (*models.CompanyPublic, error) {

backend/src/mongodb/companyReps.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (c *CompanyRepsType) CreateCompanyRep(data CreateCompanyRepData) (*models.C
102102
if err != nil {
103103
return nil, err
104104
}
105-
105+
106106
dataQuery["contact"] = contact.ID
107107
} else {
108108
contact, err := Contacts.Collection.InsertOne(ctx, bson.M{
@@ -144,10 +144,8 @@ func (c *CompanyRepsType) CreateCompanyRep(data CreateCompanyRepData) (*models.C
144144
func (c *CompanyRepsType) UpdateCompanyRep(id primitive.ObjectID, data CreateCompanyRepData) (*models.CompanyRep, error) {
145145
ctx := context.Background()
146146

147-
var updateQuery = bson.M{
148-
"$set": bson.M{
149-
"name": data.Name,
150-
},
147+
setDoc := bson.M{
148+
"name": data.Name,
151149
}
152150

153151
if data.Contact != nil {
@@ -156,9 +154,12 @@ func (c *CompanyRepsType) UpdateCompanyRep(id primitive.ObjectID, data CreateCom
156154
return nil, err
157155
}
158156

159-
updateQuery["$Set.contact"] = contact.ID
157+
// add contact id to the $set document
158+
setDoc["contact"] = contact.ID
160159
}
161160

161+
var updateQuery = bson.M{"$set": setDoc}
162+
162163
var optionsQuery = options.FindOneAndUpdate()
163164
optionsQuery.SetReturnDocument(options.After)
164165

0 commit comments

Comments
 (0)