Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions backend/controllers/debatevsbot_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,7 @@ func JudgeDebate(c *gin.Context) {
latestDebate.Topic,
latestDebate.BotName,
resultStatus,
0.0,
req.History,
nil,
)
Expand Down Expand Up @@ -590,6 +591,7 @@ func ConcedeDebate(c *gin.Context) {
debate.Topic,
debate.BotName,
"loss",
0.0,
historyToSave,
nil,
)
Expand Down
2 changes: 1 addition & 1 deletion backend/controllers/profile_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
})
}

Expand Down
3 changes: 3 additions & 0 deletions backend/controllers/transcript_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ func SaveDebateTranscriptHandler(c *gin.Context) {
req.Topic,
req.Opponent,
req.Result,
0.0,
req.Messages,
req.Transcripts,
)
Expand Down Expand Up @@ -295,6 +296,7 @@ func CreateTestTranscriptHandler(c *gin.Context) {
"Climate Change Action",
"AI Bot",
"win",
0.0,
testMessages,
nil,
)
Expand Down Expand Up @@ -353,6 +355,7 @@ func CreateTestBotDebateHandler(c *gin.Context) {
"AI Benefits vs Risks",
"Expert Emma",
"win",
0.0,
testMessages,
nil,
)
Expand Down
1 change: 1 addition & 0 deletions backend/models/transcript.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"`
Expand Down
90 changes: 52 additions & 38 deletions backend/services/transcriptservice.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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
Expand All @@ -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 {
}
}
Expand Down Expand Up @@ -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()

Expand All @@ -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)
Expand All @@ -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(),
Expand Down