Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Phase 5: Public read API for resources

Chiusa
#39 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
45/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
typescript

Direzione di ricerca

Start by reading src/lib/resources.ts and src/lib/directory-filters.ts, then inspect the PRD §8.13 requirements. Use src/app/api/resources/route.ts, src/lib/api-validation.ts, and the middleware entry point as the implementation map; resolve the rate-limiting approach and database-level filter behavior. Done means the documented endpoint supports the listed filters, pagination, caching, rate limiting, and response format.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement

Description

Implement public read API as specified in PRD §8.13. This is a P2 requirement for Phase 5.

Acceptance Criteria (from PRD §8.13)

  • GET /api/resources (paginated, filterable by category/tag) for campus ambassador bots/Discord integrations
  • Rate-limited, no auth required for reads

Current State

  • No public API exists
  • All data fetching is done via Server Components
  • Resources are fetched via src/lib/resources.ts functions

Implementation Plan

  1. Create API route: src/app/api/resources/route.ts
  2. Implement query parameters:
    • page / limit (pagination)
    • category (filter by category slug)
    • tag (filter by tag)
    • region (IN / Global)
    • costType (free, discount, etc.)
    • status (active only by default)
    • search (optional fuzzy search - may be heavy, consider exact match)
  3. Add rate limiting:
    • Use Vercel Edge Middleware or Upstash Redis
    • Limit: 60 requests/minute per IP
  4. Response format:
    {
      "data": [...],
      "pagination": { "page": 1, "limit": 30, "total": 593, "totalPages": 20 },
      "filters": { "category": "development-tools", ... }
    }
    
  5. Documentation: Add API docs to README or separate docs file

Files to Create

  • src/app/api/resources/route.ts (new)
  • src/lib/api-validation.ts (new) - Zod schemas for query params
  • src/middleware.ts or Edge Function - rate limiting (or use Upstash)

Rate Limiting Options

  • Option A: Upstash Redis (recommended for serverless)
    • npm install @upstash/ratelimit @upstash/redis
    • Edge-compatible
  • Option B: Vercel Edge Middleware with in-memory (not persistent across invocations)
  • Option C: Custom middleware with KV store

Query Implementation

Reuse existing applyFilters logic from src/lib/directory-filters.ts but on the database level (SQL WHERE clauses) for performance.

Caching

  • Add Cache-Control: public, s-maxage=60, stale-while-revalidate=300
  • Resources don't change frequently (admin CRUD + weekly cron)

OpenAPI/Swagger

  • Consider adding OpenAPI spec for documentation
  • Could use @asteasolutions/zod-to-openapi for auto-generation
Lingua principale
TypeScript
Stelle
1
Fork
6
Merge medio
11h 39m
PR unite (30g)
16

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Your-Voldemort/StudentStack

Tutte le issue di Your-Voldemort/StudentStack

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.