@@ -39,6 +39,13 @@ type uiAIJobPage struct {
3939 Jobs []* uiAIJob
4040 CrashReport template.HTML
4141 Trajectory []* uiAITrajectorySpan
42+ History []* uiJobReviewHistory
43+ }
44+
45+ type uiJobReviewHistory struct {
46+ Date time.Time
47+ User string
48+ Correct string
4249}
4350
4451type uiAIJob struct {
@@ -141,6 +148,18 @@ func handleAIJobPage(ctx context.Context, w http.ResponseWriter, r *http.Request
141148 default :
142149 job .Correct = spanner.NullBool {}
143150 }
151+ userEmail := ""
152+ if user := currentUser (ctx ); user != nil {
153+ userEmail = user .Email
154+ }
155+ if err := aidb .AddJobReviewHistory (ctx , & aidb.JobReviewHistory {
156+ JobID : job .ID ,
157+ Date : timeNow (ctx ),
158+ User : userEmail ,
159+ Correct : job .Correct ,
160+ }); err != nil {
161+ return err
162+ }
144163 if err := aiJobUpdate (ctx , job ); err != nil {
145164 return err
146165 }
@@ -149,6 +168,10 @@ func handleAIJobPage(ctx context.Context, w http.ResponseWriter, r *http.Request
149168 if err != nil {
150169 return err
151170 }
171+ history , err := aidb .LoadJobReviewHistory (ctx , job .ID )
172+ if err != nil {
173+ return err
174+ }
152175 hdr , err := commonHeader (ctx , r , w , job .Namespace )
153176 if err != nil {
154177 return err
@@ -172,6 +195,7 @@ func handleAIJobPage(ctx context.Context, w http.ResponseWriter, r *http.Request
172195 Jobs : []* uiAIJob {uiJob },
173196 CrashReport : crashReport ,
174197 Trajectory : makeUIAITrajectory (trajectory ),
198+ History : makeUIJobReviewHistory (history ),
175199 }
176200 return serveTemplate (w , "ai_job.html" , page )
177201}
@@ -258,6 +282,26 @@ func makeUIAITrajectory(trajetory []*aidb.TrajectorySpan) []*uiAITrajectorySpan
258282 return res
259283}
260284
285+ func makeUIJobReviewHistory (history []* aidb.JobReviewHistory ) []* uiJobReviewHistory {
286+ var res []* uiJobReviewHistory
287+ for _ , h := range history {
288+ val := aiCorrectnessUnset
289+ if h .Correct .Valid {
290+ if h .Correct .Bool {
291+ val = aiCorrectnessCorrect
292+ } else {
293+ val = aiCorrectnessIncorrect
294+ }
295+ }
296+ res = append (res , & uiJobReviewHistory {
297+ Date : h .Date ,
298+ User : h .User ,
299+ Correct : val ,
300+ })
301+ }
302+ return res
303+ }
304+
261305func apiAIJobPoll (ctx context.Context , req * dashapi.AIJobPollReq ) (any , error ) {
262306 if len (req .Workflows ) == 0 || req .CodeRevision == "" {
263307 return nil , fmt .Errorf ("invalid request" )
0 commit comments