Skip to content

Commit 7e6243b

Browse files
authored
feat: add new 4 endpoints (CM-1236) (#4218)
Signed-off-by: Umberto Sgueglia <usgueglia@contractor.linuxfoundation.org>
1 parent 5d3525d commit 7e6243b

10 files changed

Lines changed: 1188 additions & 7 deletions

File tree

backend/src/api/public/v1/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { staticApiKeyMiddleware } from '../middlewares/staticApiKeyMiddleware'
1515
import { memberOrganizationAffiliationsRouter } from './affiliations'
1616
import { membersRouter } from './members'
1717
import { organizationsRouter } from './organizations'
18+
import { osspreyRouter } from './ossprey'
1819
import { packagesRouter } from './packages'
1920
import { batchGetStewardship } from './packages/batchGetStewardship'
2021
import { stewardshipsRouter } from './stewardships'
@@ -38,6 +39,7 @@ export function v1Router(): Router {
3839
)
3940
router.use('/packages', oauth2Middleware(AUTH0_CONFIG), packagesRouter())
4041
router.use('/stewardships', oauth2Middleware(AUTH0_CONFIG), stewardshipsRouter())
42+
router.use('/ossprey', oauth2Middleware(AUTH0_CONFIG), osspreyRouter())
4143

4244
router.use(() => {
4345
throw new NotFoundError()
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import type { Request, Response } from 'express'
2+
import { z } from 'zod'
3+
4+
import { listStewardshipActivity } from '@crowd/data-access-layer'
5+
6+
import { getPackagesQx } from '@/db/packagesDb'
7+
import { ok } from '@/utils/api'
8+
import { validateOrThrow } from '@/utils/validation'
9+
10+
const querySchema = z.object({
11+
page: z.coerce.number().int().min(1).default(1),
12+
pageSize: z.coerce.number().int().min(1).max(100).default(25),
13+
})
14+
15+
export async function activityFeedHandler(req: Request, res: Response): Promise<void> {
16+
const { page, pageSize } = validateOrThrow(querySchema, req.query)
17+
18+
const qx = await getPackagesQx()
19+
const { rows, total } = await listStewardshipActivity(qx, { page, pageSize })
20+
21+
ok(res, {
22+
rows: rows.map((r) => ({
23+
id: r.id,
24+
stewardshipId: r.stewardshipId,
25+
packagePurl: r.packagePurl,
26+
packageName: r.packageName,
27+
packageEcosystem: r.packageEcosystem,
28+
actorUserId: r.actorUserId,
29+
actorName: r.actorUserId, // TODO: resolve display name from crowd.dev users/members table by actorUserId
30+
actorType: r.actorType,
31+
activityType: r.activityType,
32+
content: r.content,
33+
metadata: r.metadata,
34+
stewardshipStatus: r.stewardshipStatus,
35+
createdAt: r.createdAt,
36+
})),
37+
total,
38+
page,
39+
pageSize,
40+
})
41+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Router } from 'express'
2+
3+
import { safeWrap } from '@/middlewares/errorMiddleware'
4+
5+
import { activityFeedHandler } from './activityFeed'
6+
import { metricsHandler } from './metrics'
7+
import { packageListHandler } from './packageList'
8+
import { packageScatterHandler } from './packageScatter'
9+
10+
export function osspreyRouter(): Router {
11+
const router = Router()
12+
13+
router.get('/metrics', safeWrap(metricsHandler))
14+
// /packages/scatter must be registered before /packages to avoid Express treating 'scatter' as a path param
15+
router.get('/packages/scatter', safeWrap(packageScatterHandler))
16+
router.get('/packages', safeWrap(packageListHandler))
17+
router.get('/activity', safeWrap(activityFeedHandler))
18+
19+
return router
20+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type { Request, Response } from 'express'
2+
3+
import { getOsspreyMetrics } from '@crowd/data-access-layer'
4+
5+
import { getPackagesQx } from '@/db/packagesDb'
6+
import { ok } from '@/utils/api'
7+
8+
export async function metricsHandler(req: Request, res: Response): Promise<void> {
9+
const qx = await getPackagesQx()
10+
const metrics = await getOsspreyMetrics(qx)
11+
ok(res, metrics)
12+
}

0 commit comments

Comments
 (0)