diff --git a/client/src/pages/AddSelf.tsx b/client/src/pages/AddSelf.tsx index 9277185..a9b66e9 100644 --- a/client/src/pages/AddSelf.tsx +++ b/client/src/pages/AddSelf.tsx @@ -33,7 +33,7 @@ const AddSelf = () => { let correctCode; if (tr !== '') { console.log(tr); - const res = await postRequest(`/qr/check/${tr}`, '', { + const res = await postRequest(`/qr/check/${encodeURIComponent(tr)}`, '', { code: paramCode, }); if (res.status !== 200) { diff --git a/client/src/pages/admin/QrCode.tsx b/client/src/pages/admin/QrCode.tsx index ddbd812..04c899b 100644 --- a/client/src/pages/admin/QrCode.tsx +++ b/client/src/pages/admin/QrCode.tsx @@ -27,7 +27,7 @@ const QrCode = () => { cd = res.data?.qr_code as string; } else { - const res = await getRequest(`/admin/qr/${tr}`, 'admin'); + const res = await getRequest(`/admin/qr/${encodeURIComponent(tr)}`, 'admin'); if (res.status !== 200) { errorAlert(res); return; @@ -62,7 +62,7 @@ const QrCode = () => { } cd = res.data?.qr_code as string; } else { - const res = await postRequest(`/admin/qr/${track}`, 'admin', {}); + const res = await postRequest(`/admin/qr/${encodeURIComponent(track)}`, 'admin', {}); if (res.status !== 200) { errorAlert(res); return; @@ -78,7 +78,7 @@ const QrCode = () => { // Create QR code const origin = window.location.origin.toString(); const track = searchParams.get('track') ?? ''; - const url = `${origin}/add-self?code=${code}&track=${track.replace(/\s/g, '%20')}`; + const url = `${origin}/add-self?code=${code}&track=${encodeURIComponent(track)}`; const qrCode = qr(url); diff --git a/server/database/judge.go b/server/database/judge.go index 4818ebb..7aa77cd 100644 --- a/server/database/judge.go +++ b/server/database/judge.go @@ -181,19 +181,27 @@ func UpdateAfterSeen(db *mongo.Database, ctx context.Context, judge *models.Judg return errors.New("error updating judge: " + err.Error()) } - incData := gin.H{} if judge.Track != "" { - incData["track_seen."+judge.Track] = 1 + project, findErr := FindProject(db, ctx, &seenProject.ProjectId) + if findErr != nil { + return errors.New("error finding project: " + findErr.Error()) + } + if project.TrackSeen == nil { + project.TrackSeen = make(map[string]int64) + } + project.TrackSeen[judge.Track] += 1 + _, err = db.Collection("projects").UpdateOne( + ctx, + gin.H{"_id": seenProject.ProjectId}, + gin.H{"$set": gin.H{"track_seen": project.TrackSeen, "last_activity": util.Now()}}, + ) } else { - incData["seen"] = 1 + _, err = db.Collection("projects").UpdateOne( + ctx, + gin.H{"_id": seenProject.ProjectId}, + gin.H{"$inc": gin.H{"seen": 1}, "$set": gin.H{"last_activity": util.Now()}}, + ) } - - // Update the project's seen count - _, err = db.Collection("projects").UpdateOne( - ctx, - gin.H{"_id": seenProject.ProjectId}, - gin.H{"$inc": incData, "$set": gin.H{"last_activity": util.Now()}}, - ) if err != nil { return errors.New("error updating project: " + err.Error()) } diff --git a/server/database/options.go b/server/database/options.go index 1378dea..9c729c1 100644 --- a/server/database/options.go +++ b/server/database/options.go @@ -174,8 +174,12 @@ func UpdateQRCode(db *mongo.Database, ctx context.Context, qrCode string) error // UpdateTrackQRCode updates the QR code for a track in the database func UpdateTrackQRCode(db *mongo.Database, ctx context.Context, track string, qrCode string) error { - key := "track_qr_codes." + track - _, err := db.Collection("options").UpdateOne(ctx, gin.H{}, gin.H{"$set": gin.H{key: qrCode}}) + options, err := GetOptions(db, ctx) + if err != nil { + return err + } + options.TrackQRCodes[track] = qrCode + _, err = db.Collection("options").UpdateOne(ctx, gin.H{}, gin.H{"$set": gin.H{"track_qr_codes": options.TrackQRCodes}}) return err } diff --git a/server/database/project.go b/server/database/project.go index e027715..b698148 100644 --- a/server/database/project.go +++ b/server/database/project.go @@ -319,13 +319,22 @@ func UpdateProjectStars(db *mongo.Database, ctx context.Context, projId primitiv // UpdateProjectTrackStars updates the starred count of a project in a specific track, incrementing or decrementing it func UpdateProjectTrackStars(db *mongo.Database, ctx context.Context, projId primitive.ObjectID, track string, increment bool) error { - change := -1 - if increment { - change = 1 + project, err := FindProject(db, ctx, &projId) + if err != nil { + return err } - track_str := "track_stars." + track - - _, err := db.Collection("projects").UpdateOne(ctx, gin.H{"_id": projId}, gin.H{"$inc": gin.H{track_str: change}}) + if project == nil { + return errors.New("project not found") + } + change := int64(1) + if !increment { + change = -1 + } + if project.TrackStars == nil { + project.TrackStars = make(map[string]int64) + } + project.TrackStars[track] += change + _, err = db.Collection("projects").UpdateOne(ctx, gin.H{"_id": projId}, gin.H{"$set": gin.H{"track_stars": project.TrackStars}}) return err }