func (as *APIServer) listPatches(w http.ResponseWriter, r *http.Request) { user := MustHaveUser(r) patches, err := patch.Find(patch.ByUser(user.Id)) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("error finding patches for user %v: %v", user.Id, err)) return } as.WriteJSON(w, http.StatusOK, patches) }
// listPatches returns a user's "n" most recent patches. func (as *APIServer) listPatches(w http.ResponseWriter, r *http.Request) { dbUser := MustHaveUser(r) n, err := util.GetIntValue(r, "n", 0) if err != nil { as.LoggedError(w, r, http.StatusBadRequest, fmt.Errorf("cannot read value n: %v", err)) return } query := patch.ByUser(dbUser.Id).Sort([]string{"-" + patch.CreateTimeKey}) if n > 0 { query = query.Limit(n) } patches, err := patch.Find(query) if err != nil { as.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("error finding patches for user %v: %v", dbUser.Id, err)) return } as.WriteJSON(w, http.StatusOK, patches) }
func (uis *UIServer) patchTimelineJson(w http.ResponseWriter, r *http.Request) { projCtx := MustHaveProjectContext(r) pageNum, err := strconv.Atoi(r.FormValue("page")) if err != nil { pageNum = 0 } skip := pageNum * DefaultLimit user := mux.Vars(r)["user_id"] var patches []patch.Patch if len(user) > 0 { patches, err = patch.Find(patch.ByUser(user). Project(patch.ExcludePatchDiff). Sort([]string{"-" + patch.CreateTimeKey}). Skip(skip).Limit(DefaultLimit)) } else { patches, err = patch.Find(patch.ByProject(projCtx.Project.Identifier). Sort([]string{"-" + patch.CreateTimeKey}). Project(patch.ExcludePatchDiff). Skip(skip).Limit(DefaultLimit)) } if err != nil { uis.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("Error fetching patches for %v: %v", projCtx.Project.Identifier, err)) return } versionIds := make([]string, 0, len(patches)) uiPatches := make([]uiPatch, 0, len(patches)) for _, patch := range patches { if patch.Version != "" { versionIds = append(versionIds, patch.Version) } baseVersion, err := version.FindOne(version.ByProjectIdAndRevision(patch.Project, patch.Githash)) if err != nil { uis.LoggedError(w, r, http.StatusInternalServerError, err) return } var baseVersionId string if baseVersion != nil { baseVersionId = baseVersion.Id } patch.Patches = nil uiPatches = append(uiPatches, uiPatch{Patch: patch, BaseVersionId: baseVersionId}) } versions, err := version.Find(version.ByIds(versionIds).WithoutFields(version.ConfigKey)) if err != nil { uis.LoggedError(w, r, http.StatusInternalServerError, fmt.Errorf("Error fetching versions for patches: %v", err)) return } versionsMap := map[string]*uiVersion{} for _, version := range versions { versionUI, err := PopulateUIVersion(&version) if err != nil { uis.LoggedError(w, r, http.StatusInternalServerError, err) return } versionsMap[version.Id] = versionUI } data := struct { VersionsMap map[string]*uiVersion UIPatches []uiPatch PageNum int }{versionsMap, uiPatches, pageNum} uis.WriteJSON(w, http.StatusOK, data) }