diff --git a/public/script/admin.js b/public/script/admin.js
index 7a6e0b6..b5ff453 100644
--- a/public/script/admin.js
+++ b/public/script/admin.js
@@ -231,6 +231,16 @@ angular
);
};
+ $scope.getGitHubRepositories = (force) => {
+ $http
+ .get(`/api/user/${$scope.userInfo.username}/all_repositories`, {
+ params: { force: "1" },
+ })
+ .then((res) => {
+ $scope.userInfo.repositories = res.data;
+ });
+ };
+
let timeClear = null;
$scope.$watch(
"query",
diff --git a/src/database/users/users.schema.ts b/src/database/users/users.schema.ts
index d816cfe..731d92f 100644
--- a/src/database/users/users.schema.ts
+++ b/src/database/users/users.schema.ts
@@ -19,7 +19,12 @@ const UserSchema = new Schema({
],
isAdmin: { type: Boolean, default: false },
photo: String,
- repositories: [String],
+ repositories: [
+ {
+ type: String,
+ ref: "Repository",
+ },
+ ],
default: {
terms: [String],
options: {
diff --git a/src/routes/admin.ts b/src/routes/admin.ts
index f68d315..ab0b188 100644
--- a/src/routes/admin.ts
+++ b/src/routes/admin.ts
@@ -9,6 +9,7 @@ import Repository from "../Repository";
import User from "../User";
import { ensureAuthenticated } from "./connection";
import { handleError, getUser, isOwnerOrAdmin, getRepo } from "./route-utils";
+import RepositoryModel from "../database/repositories/repositories.model";
const router = express.Router();
@@ -206,7 +207,14 @@ router.get(
"/users/:username",
async (req: express.Request, res: express.Response) => {
try {
- const model = await UserModel.findOne({ username: req.params.username });
+ const model = await UserModel.findOne({
+ username: req.params.username,
+ }).populate({
+ path: "repositories",
+ model: "Repository",
+ foreignField: "_id",
+ localField: "repositories",
+ });
if (!model) {
req.logout((error) => console.error(error));
throw new AnonymousError("user_not_found", {
diff --git a/src/routes/user.ts b/src/routes/user.ts
index 387baef..74238b2 100644
--- a/src/routes/user.ts
+++ b/src/routes/user.ts
@@ -1,7 +1,9 @@
import * as express from "express";
import config from "../../config";
import { ensureAuthenticated } from "./connection";
-import { handleError, getUser } from "./route-utils";
+import { handleError, getUser, isOwnerOrAdmin } from "./route-utils";
+import UserModel from "../database/users/users.model";
+import User from "../User";
const router = express.Router();
@@ -117,22 +119,40 @@ router.get(
}
);
+async function getAllRepositories(user: User, force: boolean) {
+ const repos = await user.getGitHubRepositories({
+ force,
+ });
+ return repos.map((x) => {
+ return {
+ fullName: x.fullName,
+ id: x.id,
+ };
+ });
+}
router.get(
"/all_repositories",
async (req: express.Request, res: express.Response) => {
try {
const user = await getUser(req);
- const repos = await user.getGitHubRepositories({
- force: req.query.force == "1",
- });
- res.json(
- repos.map((x) => {
- return {
- fullName: x.fullName,
- id: x.id,
- };
- })
- );
+ res.json(await getAllRepositories(user, req.query.force == "1"));
+ } catch (error) {
+ handleError(error, res, req);
+ }
+ }
+);
+router.get(
+ "/:username/all_repositories",
+ async (req: express.Request, res: express.Response) => {
+ try {
+ const loggedUser = await getUser(req);
+ isOwnerOrAdmin([req.params.username], loggedUser);
+ const model = await UserModel.findOne({ username: req.params.username });
+ if (!model) {
+ throw new Error("User not found");
+ }
+ const user = new User(model);
+ res.json(await getAllRepositories(user, req.query.force == "1"));
} catch (error) {
handleError(error, res, req);
}