Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
152 commits
Select commit Hold shift + click to select a range
fe2dfc6
Improve code quality
DistractedCat Sep 29, 2024
5303643
Merge branch 'api-test-yuheng'
DistractedCat Sep 29, 2024
e2607d2
Merge branch 'main' of https://github.com/CS3219-AY2425S1/cs3219-ay24…
DistractedCat Oct 1, 2024
9ff311b
Add initial nginx config file
alvinlim277 Oct 5, 2024
6e587f5
Temporary fix for question view fetch fail
alvinlim277 Oct 5, 2024
ae0183e
Merge branch 'main' of https://github.com/CS3219-AY2425S1/cs3219-ay24…
DistractedCat Oct 8, 2024
253a8e4
ignore .idea
DistractedCat Oct 8, 2024
9696b11
Create rabbitMQ
DistractedCat Oct 8, 2024
128c99a
Create mappings storage
DistractedCat Oct 8, 2024
6530e1e
Add logic to start handling requests
DistractedCat Oct 8, 2024
8938cb4
Add rooms
DistractedCat Oct 9, 2024
5a77ff9
Implement new architecture
DistractedCat Oct 12, 2024
002c739
add logic for publishing messages
DistractedCat Oct 12, 2024
b3ea591
bug fixes for message queue
DistractedCat Oct 13, 2024
fc92c7c
Add ability to store in redis
DistractedCat Oct 15, 2024
376783d
Add logic to send rooms to storage blob
DistractedCat Oct 15, 2024
4dc02f5
Finish up v1 of user matching
DistractedCat Oct 16, 2024
aa6c5ba
Example .env files
alvinlim277 Oct 16, 2024
cc96d18
Add filter context
alvinlim277 Oct 16, 2024
b23c658
Add stub functions to periodically query resource blob
alvinlim277 Oct 17, 2024
1675d46
Add stub for user context and request time
alvinlim277 Oct 17, 2024
d8c53ea
Set up internal API, verify local testing and fix question filter bug
alvinlim277 Oct 17, 2024
994ba1a
Fix expiry time bug, add .gitignore files
DistractedCat Oct 17, 2024
61ac5cc
Merge remote-tracking branch 'origin/user-matching' into match-button
alvinlim277 Oct 17, 2024
6309549
Initial setup of dockerfiles and compose.yaml
alvinlim277 Oct 18, 2024
a55ca7d
Attempt to fix some issues
alvinlim277 Oct 18, 2024
38f8732
Forgot these
alvinlim277 Oct 18, 2024
eebbfbe
Change .env.example templates
alvinlim277 Oct 18, 2024
90717b7
Rectify storage blob Dockerfile
alvinlim277 Oct 18, 2024
bb68806
Fix matching service and storage blob connection issues + compose.yaml
alvinlim277 Oct 19, 2024
a7f0a6c
Add functionality to match button
WZWren Oct 20, 2024
8454cf8
Fix rabbitmq depend_on
tzyian Oct 20, 2024
422e509
Add stopwatch for matchmaking and default difficulty to easy
alvinlim277 Oct 20, 2024
258db87
Merge remote-tracking branch 'origin/dockerise-match-service' into ad…
alvinlim277 Oct 20, 2024
6770d98
Revert filter hooks, add matching button dropdown
WZWren Oct 20, 2024
d8f75ac
Merge pull request #34 from CS3219-AY2425S1/add-match-timer
WZWren Oct 20, 2024
924c484
Minor css changes to login page
tzyian Oct 20, 2024
d0cdf95
Add MS4 requirements
WZWren Oct 20, 2024
83f4844
Merge pull request #35 from CS3219-AY2425S1/minor-css-changes-to-login
WZWren Oct 20, 2024
6a291d0
Add websocket for collab
modembcc Oct 23, 2024
84830a8
Redirects to question on match found and connect to websocket
modembcc Oct 25, 2024
416e7c9
Add verify user on connection
modembcc Oct 27, 2024
371f27f
Fix questionID invalid
modembcc Oct 27, 2024
9937f89
Prettify home page, add prettier pre-commit
tzyian Oct 27, 2024
c0c6882
Fix pre-commit hook
tzyian Oct 27, 2024
3a64cfc
Add show/hide password
tzyian Oct 27, 2024
db8d994
Add lefthook
tzyian Oct 27, 2024
eda104f
UI icons and navbar dropdown
tzyian Oct 27, 2024
bcd5b64
Update lefthook
tzyian Oct 27, 2024
386d863
Fix broken addquestion difficulty
tzyian Oct 28, 2024
81b8d61
add close button
modembcc Oct 28, 2024
a09ab51
dockerize
modembcc Oct 28, 2024
d59dd85
Basic addquestion page
tzyian Oct 28, 2024
c2f0dbb
Add room verification
modembcc Oct 28, 2024
2733b84
Update Match found alert and collab server down feedback
modembcc Oct 31, 2024
a3eae90
Merge remote-tracking branch 'origin/nginx-initial-setup' into n9-api…
alvinlim277 Oct 31, 2024
e986eaf
Rudimentary Dockerfile and compose
alvinlim277 Oct 31, 2024
8d5b39e
Fix close room button showing up
modembcc Oct 31, 2024
590b0b4
Dockerise nginx and add basic nginx.conf
alvinlim277 Oct 31, 2024
79276ed
Fix compiler error related to DOMPurify
WZWren Nov 1, 2024
9a80388
Fix add question page except for css
tzyian Nov 1, 2024
5dad4c4
Add logout under profile dropdown
tzyian Nov 1, 2024
1b06717
Fix login bug
alvinlim277 Nov 1, 2024
a4d07a6
Change blob to be queried by a random hash instead
WZWren Nov 1, 2024
1b02dd9
Hook up new logic for matching to frontend
WZWren Nov 1, 2024
59785b1
Add manifests
DistractedCat Nov 1, 2024
72ed9ec
Merge remote-tracking branch 'origin/collab-gorilla' into collab-gorilla
DistractedCat Nov 1, 2024
704fdbc
Merge branch 'n9-api-gateway' of https://github.com/CS3219-AY2425S1/c…
DistractedCat Nov 2, 2024
8088237
Add edit question
tzyian Nov 2, 2024
b13dd9a
Remove lefthook
tzyian Nov 2, 2024
cf26dd2
fix issues for kubernetes
DistractedCat Nov 2, 2024
003d526
Add persistent store of rooms
WZWren Nov 2, 2024
5b990dc
Update nginx conf for watch (i think)
alvinlim277 Nov 2, 2024
61a7f67
Add collab fix to next config
WZWren Nov 3, 2024
f83113e
temp fix for collab
DistractedCat Nov 3, 2024
a7013c5
Add collab fix to next config
WZWren Nov 3, 2024
3ae3404
Add collab fix to next config
WZWren Nov 3, 2024
ce53139
Attempt to fix collab ws issues
alvinlim277 Nov 3, 2024
5ac751a
Fix collab bug
DistractedCat Nov 3, 2024
26eaa53
update manifests
DistractedCat Nov 3, 2024
0c90257
Add comms component, without dockerization
WZWren Nov 3, 2024
22a497a
Add UI for Comms, switched off StrictMode
WZWren Nov 3, 2024
95261be
Use dmp for hopefully faster changes
tzyian Nov 4, 2024
6397c42
Add formatter url
tzyian Nov 4, 2024
ba9de29
Merge branch 'collab-gorilla' into persist-matches
WZWren Nov 4, 2024
0ffb306
Better error response in console when formatters fail
tzyian Nov 4, 2024
dc831be
Change question seed to be syntactically valid
tzyian Nov 4, 2024
41bf8b8
Remove duplicated code
tzyian Nov 4, 2024
026e2c7
Add logs and deploy script
modembcc Nov 4, 2024
b54506a
Fix formatting
tzyian Nov 4, 2024
f7f712e
Merge remote-tracking branch 'origin/formatter' into formatting
DistractedCat Nov 4, 2024
b87bac3
Merge branch 'persist-matches' into n1-comms
WZWren Nov 4, 2024
d4ce18d
Show better error message on syntax errors
tzyian Nov 4, 2024
6fcd886
Merge branch 'collab-gorilla' into formatter
tzyian Nov 4, 2024
ee7c8eb
test npm install
DistractedCat Nov 4, 2024
75dcc50
test formatter
DistractedCat Nov 4, 2024
2838af0
Add Dockerfile to Comms module
WZWren Nov 4, 2024
367f010
Fix cookie issue
DistractedCat Nov 4, 2024
9cb7ff4
Merge branch 'n1-comms' into formatting
tzyian Nov 4, 2024
20b6ce0
Fix merge conflicts from branch: n1-comms
tzyian Nov 4, 2024
921673d
add comms
DistractedCat Nov 4, 2024
dada4cf
Fix questions page not refreshing when deleted
tzyian Nov 4, 2024
952fcdb
Merge branch 'fix-refresh-on-delete-question' into post-ms6
tzyian Nov 5, 2024
7f3a449
Merge branch 'formatter' into post-ms6
tzyian Nov 5, 2024
833dd56
Merge branch 'home-page-editor-page' into post-ms6
tzyian Nov 5, 2024
88d7556
Merged fix-add-question and home-page
tzyian Nov 5, 2024
743a3c4
Fix unterminated string literals
tzyian Nov 6, 2024
bb0b52c
Fix /questions page refreshing on add/edit
tzyian Nov 6, 2024
81ec1b0
Fix unterminated string literal
tzyian Nov 6, 2024
4dc737d
Add second gateway to connect socket.io behind
WZWren Nov 6, 2024
d9fd8fd
Swapped gateway ports 70 and 80 to prep for SSL
WZWren Nov 7, 2024
9eb79db
Set edit/add question to admin only actions
tzyian Nov 7, 2024
6f5e27b
Fix editQuestion form style and error handling
tzyian Nov 7, 2024
3c3c46c
CSS for questions list, new, edit
tzyian Nov 7, 2024
8db03d9
Fix carousel
tzyian Nov 7, 2024
44f69d8
Add alert on fail to match
tzyian Nov 7, 2024
2eb49fe
Make question filter sticky
tzyian Nov 7, 2024
fe287dc
Show error on duplicate user registration
tzyian Nov 8, 2024
9c75fcd
Make textbox visible in login/register
tzyian Nov 8, 2024
114b7f3
Merge branch 'post-ms6' into second-nginx
WZWren Nov 8, 2024
0eabf1a
Adjust logout handling to be done in middleware
WZWren Nov 8, 2024
587ebe4
Add eslint disable to let npm build go through
WZWren Nov 8, 2024
fde213a
Merge pull request #64 from CS3219-AY2425S1/second-nginx
tzyian Nov 8, 2024
bf1bbd3
prevent users from matching with themselves
DistractedCat Nov 9, 2024
46978ee
Merge pull request #65 from CS3219-AY2425S1/collab-post-ms6
tzyian Nov 9, 2024
f162037
Add pinging to other user during collab
DistractedCat Nov 9, 2024
3946273
Add hook to prevent webcall until authorized
WZWren Nov 9, 2024
58a4522
Properly hook authentication up to message
WZWren Nov 9, 2024
c1f60db
Add room deletion on room closure
WZWren Nov 9, 2024
c4a2387
Remove unnecessary fields in persistentRoom store
WZWren Nov 9, 2024
95c92f9
Store text-editor content within server
tzyian Nov 9, 2024
febb737
Start adding online indicator for collab editor
alvinlim277 Nov 10, 2024
e41e20f
Temp fix for heartbeat
alvinlim277 Nov 10, 2024
73a9287
Merge remote-tracking branch 'origin/post-ms6' into collab-post-ms6
alvinlim277 Nov 10, 2024
01666e6
Merge remote-tracking branch 'origin/save-history-on-server' into col…
alvinlim277 Nov 10, 2024
f039836
Fix types
alvinlim277 Nov 10, 2024
092d26a
Fix after merge
alvinlim277 Nov 10, 2024
37e1bcb
add risky room expiry
DistractedCat Nov 11, 2024
b13d1b2
Add refresh of simple-peer objects when DC
WZWren Nov 11, 2024
78011ce
Adjusted comms fix to be independent of latency
WZWren Nov 12, 2024
9572fb7
Add a simple status message indicating no call
WZWren Nov 12, 2024
185dc0f
Merge pull request #70 from CS3219-AY2425S1/minor-add-status-msg
WZWren Nov 12, 2024
e0bf1a3
Fix the server content being wiped
tzyian Nov 12, 2024
cf3cea7
Change ping interval for failure to 5
tzyian Nov 12, 2024
fd174ab
Fixed alert not showing up on format error
tzyian Nov 12, 2024
e2befa9
Set ping stop to 3x failed pings
tzyian Nov 12, 2024
adbd48f
Adjust collab delete algorithm
WZWren Nov 13, 2024
b0c34c0
Fix navbar showing logged in when not
tzyian Nov 13, 2024
5e1ee7c
Fix middleware not doing anything
tzyian Nov 13, 2024
283e2c6
Fix REGEX not matching all routes
WZWren Nov 13, 2024
81a1e21
Add missing message type for close-room
WZWren Nov 13, 2024
52b21d6
Merge pull request #72 from CS3219-AY2425S1/fix-navbar
WZWren Nov 13, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
**/.env
**/.env
.idea
*.log
main.exe
1 change: 1 addition & 0 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cd ./peerprep && npx lint-staged
10 changes: 10 additions & 0 deletions .lefthook.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#pre-commit:
# parallel: true
# commands:
# golangci-lint:
# glob: "*.go"
# run: golangci-lint run {staged_files}
# lint-staged:
# root: "peerprep/"
# glob: "*.(ts|tsx|css|scss|md|json)"
# run: npx lint-staged
7 changes: 6 additions & 1 deletion backend/common/question_struct.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// defines the JSON format of quesitons.
// defines the JSON format of questions.
package common

type Question struct {
Expand All @@ -17,3 +17,8 @@ type FrontendQuestion struct {
TopicTags []string `json:"topicTags"`
Content string `json:"content"`
}

type MatchingQuestion struct {
TopicTags []string `json:"topicTags"`
Difficulty string `json:"difficulty"`
}
31 changes: 31 additions & 0 deletions backend/database/database_interactions.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"peerprep/common"

"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)

Expand All @@ -34,6 +35,36 @@ func (db *QuestionDB) GetAllQuestionsWithQuery(
return questions, nil
}

func (db *QuestionDB) GetOneQuestionWithQuery(
logger *common.Logger,
filter bson.D,
) (*common.Question, error) {
// Define the aggregation pipeline with the $match and $sample stages
pipeline := mongo.Pipeline{
{{Key: "$match", Value: filter}},
{{Key: "$sample", Value: bson.D{{Key: "size", Value: 1}}}},
}

// Execute the aggregation pipeline
cursor, err := db.questions.Aggregate(context.Background(), pipeline)
if err != nil {
logger.Log.Error("Error retrieving questions: ", err.Error())
return nil, err
}

var questions []common.Question
if err = cursor.All(context.Background(), &questions); err != nil {
logger.Log.Error("Error decoding questions: ", err.Error())
return nil, err
}

if len(questions) == 0 {
return nil, nil
}

return &questions[0], nil
}

func (db *QuestionDB) AddQuestion(logger *common.Logger, question *common.Question) (int, error) {
if db.QuestionExists(question) {
logger.Log.Warn("Cannot add question: question already exists")
Expand Down
1 change: 0 additions & 1 deletion backend/main.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// this is the main file to run the server
package main

import (
Expand Down
43 changes: 43 additions & 0 deletions backend/transport/get_random_matching_question.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package transport

import (
"net/http"
"peerprep/common"
"peerprep/database"

"github.com/gin-gonic/gin"
"go.mongodb.org/mongo-driver/bson"
)

func GetRandomMatchingQuestion(db *database.QuestionDB, logger *common.Logger) (gin.HandlerFunc) {
return func(ctx *gin.Context) {
var request common.MatchingQuestion

err := ctx.BindJSON(&request)

if err != nil {
ctx.JSON(http.StatusBadGateway, "error binding request from JSON")
logger.Log.Error("Error converting JSON to matching request:", err.Error())
return
}

filter := bson.D{
{Key: "topicTags", Value: bson.D{{Key: "$in", Value: request.TopicTags}}},
{Key: "difficulty", Value: request.Difficulty},
}
question, err := db.GetOneQuestionWithQuery(logger, filter)

if err != nil {
ctx.JSON(http.StatusBadGateway, "error retrieving questions from database")
return
}

if question == nil {
ctx.JSON(http.StatusNotFound, "no questions found matching the request")
return
}

ctx.JSON(http.StatusOK, question)
logger.Log.Info("matching-service request handled successfully")
}
}
3 changes: 2 additions & 1 deletion backend/transport/question_http_requests.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ func SetAllEndpoints(router *gin.Engine, db *database.QuestionDB, logger *common
router.DELETE("/questions/delete/:id", DeleteQuestionWithLogger(db, logger))
router.PUT("/questions/replace/:id", ReplaceQuestionWithLogger(db, logger))
router.GET("/health", HealthCheck(logger))
router.POST("/match", GetRandomMatchingQuestion(db, logger))
}

// enable CORS for the frontend
func SetCors(router *gin.Engine, origin string) {
router.Use(cors.New(cors.Config{
AllowOrigins: []string{origin},
AllowOrigins: []string{"http://host.docker.internal", origin},
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
AllowHeaders: []string{"Origin", "Content-Type", "Content-Length", "Authorization"},
ExposeHeaders: []string{"Content-Length"},
Expand Down
30 changes: 15 additions & 15 deletions backend/transport/replace_question.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,21 @@ func ReplaceQuestionWithLogger(db *database.QuestionDB, logger *common.Logger) g
return
}

if id_param >= db.FindNextQuestionId() {
logger.Log.Info(
"Attempting to update a question with an ID greater than next ID, creating a new question",
)
status, err := db.AddQuestion(logger, &new_question)

if err != nil {
ctx.JSON(status, err.Error())
return
}

ctx.JSON(status, "Question added successfully")
logger.Log.Info("Question added successfully")
return
}
//if id_param >= db.FindNextQuestionId() {
// logger.Log.Info(
// "Attempting to update a question with an ID greater than next ID, creating a new question",
// )
// status, err := db.AddQuestion(logger, &new_question)
//
// if err != nil {
// ctx.JSON(status, err.Error())
// return
// }
//
// ctx.JSON(status, "Question added successfully")
// logger.Log.Info("Question added successfully")
// return
//}

logger.Log.Info("Replacing question with ID: ", id_param)
new_question.Id = id_param
Expand Down
16 changes: 16 additions & 0 deletions collab/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
FROM golang:1.20

WORKDIR /collab

COPY go.mod go.sum ./
RUN go mod download

COPY . .

# Build
RUN CGO_ENABLED=0 GOOS=linux go build -o /collab/app

EXPOSE 4000

# Run
CMD ["/collab/app"]
39 changes: 39 additions & 0 deletions collab/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
module collab
go 1.20

require (
github.com/gin-gonic/gin v1.10.0
github.com/go-redis/redis/v8 v8.11.5
github.com/gorilla/websocket v1.5.3
)

require (
github.com/bytedance/sonic v1.11.6 // indirect
github.com/bytedance/sonic/loader v0.1.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.20.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
golang.org/x/arch v0.8.0 // indirect
golang.org/x/crypto v0.23.0 // indirect
golang.org/x/net v0.25.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/text v0.15.0 // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
100 changes: 100 additions & 0 deletions collab/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8=
github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
Loading