feat: list gh repos in user admin

This commit is contained in:
tdurieux
2023-02-22 11:05:37 +01:00
parent d825cc1d69
commit c59e202124
5 changed files with 103 additions and 19 deletions

View File

@@ -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: {

View File

@@ -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", {

View File

@@ -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);
}