func createFinalResult(ctx context.Context, w http.ResponseWriter, resultKey *datastore.Key, result model.Result) (int, error) { var challenge model.Challenge if err := datastore.Get(ctx, result.Challenge, &challenge); err != nil { return http.StatusInternalServerError, nil } result.Finished = time.Now() for i, taskKey := range challenge.Tasks { key, err := getLatestSubmissionKey(ctx, resultKey, taskKey) if err != nil { return http.StatusInternalServerError, err } result.FinalSubmissions[i] = key } key, err := result.Put(ctx, resultKey) if err != nil { return http.StatusInternalServerError, err } json.NewEncoder(w).Encode(result.Key(key)) go computeFinalScore(ctx, challenge, result, resultKey) return http.StatusOK, nil }