51 lines · 1.9 KB
1 /**
2 * REST API: Activity feed endpoints.
3 */
4
5 import { authenticate } from '../../middleware/auth.js';
6 import { RepoService } from '../../services/repo-service.js';
7 import { ActivityService } from '../../services/activity-service.js';
8 import type { HandlerContext } from '../../router.js';
9
10 /** GET /api/repos/:owner/:repo/activity — Repo activity feed */
11 export async function handleApiRepoActivity(
12 request: Request,
13 hctx: HandlerContext
14 ): Promise<Response> {
15 const { owner, repo: repoName } = hctx.params;
16 const repoService = new RepoService(hctx.env.DB);
17 const { repo } = await repoService.getByOwnerAndName(owner, repoName);
18
19 const userId = await authenticate(request, hctx.env.DB);
20 const hasAccess = await repoService.hasReadAccess(repo, userId);
21 if (!hasAccess) return Response.json({ error: 'Not found' }, { status: 404 });
22
23 const activityService = new ActivityService(hctx.env.DB);
24 const activity = await activityService.getRepoActivity(repo.id);
25
26 return Response.json(activity);
27 }
28
29 /** GET /api/repos/:owner/:repo/commit/:sha/diff — Commit diff */
30 export async function handleApiCommitDiff(
31 request: Request,
32 hctx: HandlerContext
33 ): Promise<Response> {
34 const { owner, repo: repoName, sha } = hctx.params;
35 const repoService = new RepoService(hctx.env.DB);
36 const { repo } = await repoService.getByOwnerAndName(owner, repoName);
37
38 const userId = await authenticate(request, hctx.env.DB);
39 const hasAccess = await repoService.hasReadAccess(repo, userId);
40 if (!hasAccess) return Response.json({ error: 'Not found' }, { status: 404 });
41
42 const { ObjectStore } = await import('../../services/object-store.js');
43 const { DiffService } = await import('../../services/diff-service.js');
44
45 const objectStore = new ObjectStore(hctx.env.OBJECTS, owner, repoName);
46 const diffService = new DiffService(objectStore);
47 const diff = await diffService.diffCommitAgainstParent(sha);
48
49 return Response.json(diff);
50 }
51