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

@@ -1,9 +1,15 @@
<div class="container page">
<div class="row">
<h1>
<img ng-src="{{userInfo.photo}}" ng-if="userInfo.photo" width="30" height="30" class="rounded-circle ng-scope">
<img
ng-src="{{userInfo.photo}}"
ng-if="userInfo.photo"
width="30"
height="30"
class="rounded-circle ng-scope"
/>
{{userInfo.username}}
<span class="badge"><span ng-bind="userInfo.status | title"></span>
<span class="badge"><span ng-bind="userInfo.status | title"></span></span>
</h1>
<div class="row mb-3 m-0 py-2 border">
<div class="col-2 font-weight-bold">ID</div>
@@ -16,12 +22,47 @@
<div class="col-10">{{userInfo.accessTokens.github}}</div>
<div class="col-2 font-weight-bold">Github</div>
<div class="col-10"><a ng-href="https://github.com/{{userInfo.username}}">{{userInfo.username}}</a></div>
<div class="col-10">
<a ng-href="https://github.com/{{userInfo.username}}"
>{{userInfo.username}}</a
>
</div>
<div class="col-2 font-weight-bold">Github Repositories</div>
<div class="col-10">{{userInfo.repositories.length}}</a></div>
<div class="col-10" ng-click="showRepos =!showRepos">
{{userInfo.repositories.length}}
</div>
<button
class="btn btn-primary m-1 mx-3"
ng-click="getGitHubRepositories()"
>
Regresh Repositories
</button>
<ul class="m-0 col-12" ng-if="showRepos">
<li
class="col-12 d-flex px-0 py-3 border-bottom color-border-secondary"
ng-repeat="repo in userInfo.repositories"
>
<div class="w-100">
<div class="">
{{repo.name}}
</div>
<div class="color-text-secondary mt-2">
<span
class="ml-0 mr-3"
title="Size: {{::repo.size | humanFileSize}}"
data-toggle="tooltip"
data-placement="bottom"
>
<i class="fas fa-database"></i> {{::repo.size |
humanFileSize}}</span
>
</div>
</div>
</li>
</ul>
</div>
<h3>Repositories {{repositories.length}}</h3>
<div class="border-bottom color-border-secondary py-3 w-100">
<div class="d-flex flex-items-start w-100">

View File

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

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