mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 07:50:31 +00:00
3.4 KiB
3.4 KiB
CLAUDE.md
This file provides guidance to Claude Code when working with code in this repository.
Development Commands
Core Development
# Start development server with hot reloading
docker compose run dev
# Run comprehensive test suite
docker compose run test
# Generate GraphQL TypeScript types
npm run generate
# Build for development (install, codegen, tsc)
npm run build:dev
Only use Docker Compose for running tests.
Architecture Overview
Project Inter Server is a GraphQL-based backend for college transit tracking with real-time shuttle data, parking availability, and push notifications.
-
InterchangeSystem: Central orchestrator for shuttles, parking, and notifications
- Use
InterchangeSystem.build()in production - Use
InterchangeSystem.buildForTesting()in tests
- Use
-
Repository Pattern (data access abstraction)
- Shuttle:
UnoptimizedInMemoryShuttleRepository - Parking:
InMemoryParkingRepository - Notifications:
RedisNotificationRepository(prod) /InMemoryNotificationRepository(test)
- Shuttle:
-
Data Loaders (external API integration)
ApiBasedShuttleRepositoryLoader– Passio GO! APIChapmanApiBasedParkingRepositoryLoader– Parking dataTimedApiBasedRepositoryLoader– Periodic refresh wrapper
-
Notification System
ETANotificationScheduler– Shuttle arrival notificationsAppleNotificationSender– APNS integration
GraphQL
- Schema definition:
schema.graphqls - Generated types:
src/generated/ - Resolvers:
src/resolvers/ - Resolver merge:
src/MergedResolvers.ts
Directory Structure
src/entities/– Core business logicsrc/repositories/– Data access layersrc/loaders/– External API integrationssrc/notifications/– Push notification systemsrc/resolvers/– GraphQL resolvers and teststestHelpers/– Test utilities and mock data
Docker Services
dev– Development server with hot reloadtest– Unit/integration testsredis– Persistent Redisredis-no-persistence– Ephemeral Redis for tests
Testing Patterns
- Prefer
buildForTesting()to construct systems in tests. - Mock external APIs using JSON snapshots under
testHelpers/jsonSnapshots. - Use in-memory repositories for speed where possible.
- When adding features that affect API output, add focused resolver tests in the corresponding
src/resolvers/__tests__file. - Separate unit tests from integration tests where practical to keep feedback fast and failures well-scoped.
Development Guidelines
General Guidelines
- Use test-driven development where possible. Write tests before implementation and run them before and after changes.
- Use Docker Compose for tests. Run
docker compose run testso you can see full output.
Git Workflow
- Name pull requests after their branch name.
Code Style
- Prefer arrow functions, especially within classes.
- Keep changes minimal and focused; avoid unrelated refactors. Mention incidental issues separately.
- Respect existing interfaces and types; use non-destructive edits.
Agent Tips
- Write or update tests alongside changes; validate with
docker compose run test. - When touching GraphQL resolvers, co-locate new tests in
src/resolvers/__tests__.
Multi-tenant Support
Currently supports Chapman University (Passio System ID: 263). Each university system uses isolated repositories and configuration. New systems should be added via InterchangeSystem configuration and appropriate loaders.