Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Phase 5: Public read API for resources

Cerrado
#39 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
45/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
typescript

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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
Lenguaje dominante
TypeScript
Estrellas
1
Forks
6
Merge medio
11 h 16 min
PR fusionados (30 d)
16

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Your-Voldemort/StudentStack

Todos los issues de Your-Voldemort/StudentStack

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.