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 |