Create "BazaarOverviewCard" that can be added to Backstage homepage.

Change-Id: I6e2565360cb3f7af27f60a0336cd87a75b3018c3
Signed-off-by: Frida Jacobsson <fridaja@axis.com>
Signed-off-by: Frida Jacobsson <fridahelenajacobsson@gmail.com>
This commit is contained in:
Frida Jacobsson
2022-09-23 09:22:18 +02:00
committed by Frida Jacobsson
parent 32aa6532bf
commit f7c2855d76
17 changed files with 292 additions and 34 deletions
+1
View File
@@ -25,6 +25,7 @@
"@backstage/backend-common": "workspace:^",
"@backstage/backend-test-utils": "workspace:^",
"@backstage/config": "workspace:^",
"@backstage/errors": "workspace:^",
"@backstage/plugin-auth-node": "workspace:^",
"@types/express": "^4.17.6",
"express": "^4.17.1",
@@ -175,14 +175,22 @@ export class DatabaseHandler {
return await this.client('metadata').where({ id: id }).del();
}
async getProjects() {
async getProjects(limit?: number, order?: string) {
const coalesce = this.client.raw(
'coalesce(count(members.item_id), 0) as members_count',
);
return await this.client('metadata')
let get = this.client('metadata')
.select([...this.columns, coalesce])
.groupBy(this.columns)
.leftJoin('members', 'metadata.id', '=', 'members.item_id');
.groupBy(this.columns);
if (limit) {
get = get.limit(limit);
}
if (order === 'latest') {
get = get.orderByRaw('id desc');
}
if (order === 'random') {
get = get.orderByRaw('RANDOM()');
}
return await get.leftJoin('members', 'metadata.id', '=', 'members.item_id');
}
}
+8 -2
View File
@@ -92,8 +92,14 @@ export async function createRouter(
response.json({ status: 'ok', data: data });
});
router.get('/projects', async (_, response) => {
const data = await dbHandler.getProjects();
router.get('/projects', async (request, response) => {
const limit = request.query.limit?.toString();
const order = request.query.order?.toString();
const data = await dbHandler.getProjects(
limit ? parseInt(limit, 10) : undefined,
order,
);
response.json({ status: 'ok', data: data });
});