mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-16 23:40:32 +00:00
Merge pull request #55 from brendan-ch/chore/setup-claude
chore/setup-claude
This commit is contained in:
97
CLAUDE.md
Normal file
97
CLAUDE.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Development Commands
|
||||
|
||||
### Core Development
|
||||
```bash
|
||||
# Start development server with hot reloading
|
||||
docker compose run dev
|
||||
|
||||
# Run comprehensive test suite
|
||||
docker compose run test
|
||||
|
||||
# Run integration tests with test data
|
||||
docker compose run app-integration-tests
|
||||
|
||||
# Generate GraphQL TypeScript types
|
||||
npm run generate
|
||||
|
||||
# Build for development
|
||||
npm run build:dev
|
||||
```
|
||||
|
||||
### Testing
|
||||
```bash
|
||||
# Run all tests
|
||||
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.
|
||||
|
||||
### Core Components
|
||||
|
||||
1. **InterchangeSystem** - Central orchestrator managing shuttles, parking, and notifications
|
||||
- Use `InterchangeSystem.build()` for production
|
||||
- Use `InterchangeSystem.buildForTesting()` for tests
|
||||
|
||||
2. **Repository Pattern** - Data access abstraction
|
||||
- Shuttle: `UnoptimizedInMemoryShuttleRepository`
|
||||
- Parking: `InMemoryParkingRepository`
|
||||
- Notifications: `RedisNotificationRepository` (prod) / `InMemoryNotificationRepository` (test)
|
||||
|
||||
3. **Data Loaders** - External API integration
|
||||
- `ApiBasedShuttleRepositoryLoader` - Passio GO! API integration
|
||||
- `ChapmanApiBasedParkingRepositoryLoader` - University parking data
|
||||
- `TimedApiBasedRepositoryLoader` - Periodic data refresh
|
||||
|
||||
4. **Notification System**
|
||||
- `ETANotificationScheduler` - Manages shuttle arrival notifications
|
||||
- `AppleNotificationSender` - APNS integration
|
||||
- Default threshold: 180 seconds
|
||||
|
||||
### GraphQL Schema
|
||||
- Schema definition: `schema.graphqls`
|
||||
- Generated types: `src/generated/`
|
||||
- Resolvers: `src/resolvers/`
|
||||
- Combined in: `src/MergedResolvers.ts`
|
||||
|
||||
### Directory Structure
|
||||
- `src/entities/` - Core business logic
|
||||
- `src/repositories/` - Data access layer
|
||||
- `src/loaders/` - External API integrations
|
||||
- `src/notifications/` - Push notification system
|
||||
- `test/` - Comprehensive test suite with mock data
|
||||
|
||||
### Multi-tenant Support
|
||||
Currently supports Chapman University (Passio System ID: "263"). Each university system has:
|
||||
- System-specific configurations
|
||||
- Isolated data repositories
|
||||
- Custom API integrations
|
||||
|
||||
### Docker Services
|
||||
- `dev` - Development with hot reload
|
||||
- `test` - Unit/integration testing
|
||||
- `app-integration-test` - Integration with test data
|
||||
- `redis` - Persistent Redis
|
||||
- `redis-no-persistence` - Ephemeral Redis for tests
|
||||
|
||||
### Testing Patterns
|
||||
- Use `buildForTesting()` for InterchangeSystem in tests
|
||||
- Mock external APIs with JSON snapshots in test data
|
||||
- Separate unit tests from integration tests
|
||||
- Use in-memory repositories for faster testing
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
### Git Workflow
|
||||
- Use the name of the branch for all pull requests
|
||||
Reference in New Issue
Block a user