diff --git a/backend/controllers/debatevsbot_controller.go b/backend/controllers/debatevsbot_controller.go index 9571099..918cd3c 100644 --- a/backend/controllers/debatevsbot_controller.go +++ b/backend/controllers/debatevsbot_controller.go @@ -274,6 +274,7 @@ func JudgeDebate(c *gin.Context) { latestDebate.Topic, latestDebate.BotName, resultStatus, + 0.0, req.History, nil, ) @@ -590,6 +591,7 @@ func ConcedeDebate(c *gin.Context) { debate.Topic, debate.BotName, "loss", + 0.0, historyToSave, nil, ) diff --git a/backend/controllers/profile_controller.go b/backend/controllers/profile_controller.go index 489261a..cf24e4f 100644 --- a/backend/controllers/profile_controller.go +++ b/backend/controllers/profile_controller.go @@ -254,7 +254,7 @@ func GetProfile(c *gin.Context) { "opponent": transcript.Opponent, "debateType": transcript.DebateType, "date": transcript.CreatedAt.Format("2006-01-02T15:04:05Z07:00"), - "eloChange": 0, // TODO: Add actual Elo change tracking + "eloChange": transcript.EloChange, }) } diff --git a/backend/controllers/transcript_controller.go b/backend/controllers/transcript_controller.go index 733c60f..f0b87a1 100644 --- a/backend/controllers/transcript_controller.go +++ b/backend/controllers/transcript_controller.go @@ -113,6 +113,7 @@ func SaveDebateTranscriptHandler(c *gin.Context) { req.Topic, req.Opponent, req.Result, + 0.0, req.Messages, req.Transcripts, ) @@ -295,6 +296,7 @@ func CreateTestTranscriptHandler(c *gin.Context) { "Climate Change Action", "AI Bot", "win", + 0.0, testMessages, nil, ) @@ -353,6 +355,7 @@ func CreateTestBotDebateHandler(c *gin.Context) { "AI Benefits vs Risks", "Expert Emma", "win", + 0.0, testMessages, nil, ) diff --git a/backend/models/transcript.go b/backend/models/transcript.go index cb0a796..c6de6d1 100644 --- a/backend/models/transcript.go +++ b/backend/models/transcript.go @@ -30,6 +30,7 @@ type SavedDebateTranscript struct { Topic string `bson:"topic" json:"topic"` Opponent string `bson:"opponent" json:"opponent"` // Bot name or opponent email Result string `bson:"result" json:"result"` // "win", "loss", "draw", "pending" + EloChange float64 `bson:"eloChange" json:"eloChange"` Messages []Message `bson:"messages" json:"messages"` Transcripts map[string]string `bson:"transcripts,omitempty" json:"transcripts,omitempty"` // For user vs user debates CreatedAt time.Time `bson:"createdAt" json:"createdAt"` diff --git a/backend/services/transcriptservice.go b/backend/services/transcriptservice.go index 2d893a5..a1917fd 100644 --- a/backend/services/transcriptservice.go +++ b/backend/services/transcriptservice.go @@ -176,34 +176,6 @@ func SubmitTranscripts( // Determine the actual debate topic topic := resolveDebateTopic(ctx, roomID, forSubmission, againstSubmission) - // Save transcript for "for" user - err = SaveDebateTranscript( - forUser.ID, - forUser.Email, - "user_vs_user", - topic, - againstUser.Email, - resultFor, - []models.Message{}, // You might want to reconstruct messages from transcripts - forSubmission.Transcripts, - ) - if err != nil { - } - - // Save transcript for "against" user - err = SaveDebateTranscript( - againstUser.ID, - againstUser.Email, - "user_vs_user", - topic, - forUser.Email, - resultAgainst, - []models.Message{}, // You might want to reconstruct messages from transcripts - againstSubmission.Transcripts, - ) - if err != nil { - } - // Update ratings based on the result outcomeFor := 0.5 switch strings.ToLower(resultFor) { @@ -214,8 +186,12 @@ func SubmitTranscripts( } debateRecord, opponentRecord, ratingErr := UpdateRatings(forUser.ID, againstUser.ID, outcomeFor, time.Now()) - if ratingErr != nil { - } else { + + var forEloChange, againstEloChange float64 + if ratingErr == nil { + forEloChange = debateRecord.RatingChange + againstEloChange = opponentRecord.RatingChange + debateRecord.Topic = topic debateRecord.Result = resultFor opponentRecord.Topic = topic @@ -236,6 +212,36 @@ func SubmitTranscripts( }, } } + + // Save transcript for "for" user + err = SaveDebateTranscript( + forUser.ID, + forUser.Email, + "user_vs_user", + topic, + againstUser.Email, + resultFor, + forEloChange, + []models.Message{}, // You might want to reconstruct messages from transcripts + forSubmission.Transcripts, + ) + if err != nil { + } + + // Save transcript for "against" user + err = SaveDebateTranscript( + againstUser.ID, + againstUser.Email, + "user_vs_user", + topic, + forUser.Email, + resultAgainst, + againstEloChange, + []models.Message{}, // You might want to reconstruct messages from transcripts + againstSubmission.Transcripts, + ) + if err != nil { + } } else { } } @@ -659,7 +665,7 @@ func buildFallbackJudgeResult(merged map[string]string) string { } // SaveDebateTranscript saves a debate transcript for later viewing -func SaveDebateTranscript(userID primitive.ObjectID, email, debateType, topic, opponent, result string, messages []models.Message, transcripts map[string]string) error { +func SaveDebateTranscript(userID primitive.ObjectID, email, debateType, topic, opponent, result string, eloChange float64, messages []models.Message, transcripts map[string]string) error { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() @@ -681,14 +687,21 @@ func SaveDebateTranscript(userID primitive.ObjectID, email, debateType, topic, o // Transcript already exists, check if we need to update it // If the result has changed or is "pending", update the transcript - if existingTranscript.Result != result || existingTranscript.Result == "pending" { + if existingTranscript.Result != result || existingTranscript.Result == "pending" || (eloChange != 0 && existingTranscript.EloChange == 0) { + updateFields := bson.M{ + "result": result, + "messages": messages, + "transcripts": transcripts, + "updatedAt": time.Now(), + } + + // Update eloChange if provided + if eloChange != 0 { + updateFields["eloChange"] = eloChange + } + update := bson.M{ - "$set": bson.M{ - "result": result, - "messages": messages, - "transcripts": transcripts, - "updatedAt": time.Now(), - }, + "$set": updateFields, } _, err = collection.UpdateOne(ctx, bson.M{"_id": existingTranscript.ID}, update) @@ -711,6 +724,7 @@ func SaveDebateTranscript(userID primitive.ObjectID, email, debateType, topic, o Topic: topic, Opponent: opponent, Result: result, + EloChange: eloChange, Messages: messages, Transcripts: transcripts, CreatedAt: time.Now(),