feat: implement GET /submissions/mine and GET /submissions/:id endpoints (#27, #28)#101
feat: implement GET /submissions/mine and GET /submissions/:id endpoints (#27, #28)#101chengfei-gh wants to merge 1 commit intodevasignhq:mainfrom
Conversation
Closes devasignhq#27 Closes devasignhq#28 Implements two new authenticated API endpoints: ## GET /api/submissions/mine - Returns paginated list of authenticated user's submissions - Includes bounty title, status, PR URL, and creation date - Supports cursor-style limit/offset pagination ## GET /api/submissions/:id - Returns full submission details including review status - Includes rejection reason (if any) and associated dispute info - Enforces ownership: only the submission creator can view details ## Files added/changed: - packages/api/src/routes/submissions.ts (new route module) - packages/api/src/__tests__/submissions.test.ts (comprehensive tests) - packages/api/src/app.ts (register submissions route) Solana Wallet: CZkLs4m55JBffoowGUtyfqb5GrymUVxgr9kMTrXKfbJV
Merge Score: 88/100🟢 The PR successfully implements the required submission endpoints with excellent test coverage and proper authorization checks. A few minor improvements are suggested: handling potential NaN values in pagination parameters, optimizing database queries by running them concurrently, and ensuring consistency with user ID properties. Code Suggestions (4)Medium Priority (1)
Reasoning: If a user provides a non-numeric string for Suggested Code: const query = c.req.query();
const parsedLimit = parseInt(query.limit || '10', 10);
const parsedOffset = parseInt(query.offset || '0', 10);
const limit = isNaN(parsedLimit) ? 10 : Math.min(parsedLimit, 100);
const offset = isNaN(parsedOffset) ? 0 : Math.max(parsedOffset, 0);Low Priority (3)
Reasoning: The queries for Suggested Code: // Fetch associated bounty info and disputes concurrently
const [bounty, relatedDisputes] = await Promise.all([
db.query.bounties.findFirst({
where: eq(bounties.id, submission.bountyId),
}),
db.query.disputes.findMany({
where: eq(disputes.submissionId, id),
orderBy: [desc(disputes.createdAt)],
})
]);
Reasoning: In other routes (e.g., Suggested Code: .where(eq(submissions.developerId, user.id || user.sub))
Reasoning: Keeping imports clean improves code readability and maintainability. Suggested Code: import { eq, desc } from 'drizzle-orm';📊 Review Metadata
|
Summary
Implements two new authenticated API endpoints for the submissions system:
GET /api/submissions/mine
limitandoffsetquery parameters (default: limit=10, max=100)GET /api/submissions/:id
Implementation Details
packages/api/src/routes/submissions.ts— clean Hono router following existing patternspackages/api/src/__tests__/submissions.test.ts— comprehensive tests covering happy path, pagination, auth, 403/404 casespackages/api/src/app.tsto mount submissions router at/api/submissionsTesting
Run with:
cd packages/api && npm testCloses
Payment
Solana Wallet:
CZkLs4m55JBffoowGUtyfqb5GrymUVxgr9kMTrXKfbJV