mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 07:50:31 +00:00
3.6 KiB
3.6 KiB
AGENTS.md
This file provides guidance to coding agents (e.g., Codex CLI, Claude Code, and other AI coding assistants) 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
Testing
# Run all tests via npm
npm test
# Run specific test file
npm test -- --testPathPattern=<test-file-name>
# Run tests with coverage
npm test -- --coverage
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.