From 133efdddeaca67de9c657b22a9a336c76ff65dfb Mon Sep 17 00:00:00 2001 From: Giovani Date: Sat, 30 Aug 2025 21:54:36 -0400 Subject: [PATCH] feat(frontend+backend): connect api backend with frontend --- .vscode/launch.json | 35 ++ .vscode/tasks.json | 41 ++ CLAUDE.md | 306 ++++++++--- backend/api/__init__.py | 7 + backend/api/__main__.py | 14 + backend/api/app.py | 479 ++++++++++++++++++ backend/requirements.txt | 19 + frontend/.gitignore | 368 ++++++++++++++ frontend/Components/Pages/Home.razor | 2 +- frontend/Components/Pages/Members.razor | 4 +- frontend/Models/Member.cs | 2 +- frontend/Program.cs | 2 - .../bin/Debug/net8.0/NimbusFlow.Frontend.dll | Bin 90112 -> 90112 bytes .../bin/Debug/net8.0/NimbusFlow.Frontend.pdb | Bin 56864 -> 56868 bytes .../NimbusFlow.Frontend.AssemblyInfo.cs | 2 +- ...mbusFlow.Frontend.AssemblyInfoInputs.cache | 2 +- ...sFlow.Frontend.csproj.FileListAbsolute.txt | 10 +- .../obj/Debug/net8.0/NimbusFlow.Frontend.dll | Bin 90112 -> 90112 bytes .../obj/Debug/net8.0/NimbusFlow.Frontend.pdb | Bin 56864 -> 56868 bytes .../Debug/net8.0/ref/NimbusFlow.Frontend.dll | Bin 19456 -> 19456 bytes .../net8.0/refint/NimbusFlow.Frontend.dll | Bin 19456 -> 19456 bytes 21 files changed, 1202 insertions(+), 91 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 backend/api/__init__.py create mode 100644 backend/api/__main__.py create mode 100644 backend/api/app.py create mode 100644 backend/requirements.txt create mode 100644 frontend/.gitignore diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b3d7fe7 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,35 @@ +{ + "version": "0.2.0", + "configurations": [ + { + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.md. + "name": ".NET Core Launch (web)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.dll", + "args": [], + "cwd": "${workspaceFolder}/frontend", + "stopAtEntry": false, + // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser + "serverReadyAction": { + "action": "openExternally", + "pattern": "\\bNow listening on:\\s+(https?://\\S+)" + }, + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "sourceFileMap": { + "/Views": "${workspaceFolder}/Views" + } + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..ff0c17f --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/frontend/NimbusFlow.Frontend.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary;ForceNoAlign" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/frontend/NimbusFlow.Frontend.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary;ForceNoAlign" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "--project", + "${workspaceFolder}/frontend/NimbusFlow.Frontend.csproj" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 2225b60..019b8bb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,145 +2,295 @@ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. -## Architecture +## Project Overview -NimbusFlow is a scheduling system with a **monorepo structure** containing separate backend and frontend applications: +NimbusFlow is a comprehensive scheduling system with a **monorepo structure** containing separate backend and frontend applications designed for church music ministry scheduling. The system handles round-robin member scheduling with sophisticated algorithms for fair distribution and availability management. -- **Backend**: Python-based scheduling service using SQLite with a repository pattern -- **Frontend**: .NET Blazor Server application with Bootstrap UI +### Architecture Overview -### Backend Architecture +- **Backend**: Python-based scheduling service with FastAPI REST API, SQLite database, and comprehensive CLI +- **Frontend**: .NET 8 Blazor Server application with Bootstrap UI for web-based management + +## Backend Architecture The backend follows a **layered architecture** with clear separation of concerns: ``` backend/ -├── db/ # Database connection layer -├── models/ # Data models and enums -├── repositories/ # Data access layer -├── services/ # Business logic layer -└── tests/ # Test suite +├── api/ # FastAPI REST API server +├── cli/ # Command-line interface +├── db/ # Database connection layer +├── models/ # Data models and enums +├── repositories/ # Data access layer (Repository pattern) +├── services/ # Business logic layer +├── tests/ # Comprehensive test suite +├── utils/ # Utility functions +├── requirements.txt # Python dependencies +└── schema.sql # Database schema ``` -**Key Components:** +### Key Components -- **DatabaseConnection** (`db/connection.py`): SQLite wrapper with context manager support -- **Repository Pattern**: Each domain entity has its own repository (Member, Service, Classification, etc.) -- **SchedulingService** (`services/scheduling_service.py`): Core business logic for round-robin scheduling with boost/cooldown algorithms -- **Data Models** (`models/dataclasses.py`): Dataclasses with SQLite row conversion utilities +#### API Layer (`api/`) +- **app.py**: FastAPI application with comprehensive REST endpoints +- **__main__.py**: Uvicorn server entry point with auto-reload +- Supports CORS for frontend communication on `localhost:5000/5001` +- Pydantic models for request/response validation with C# naming convention compatibility -**Database Schema** (`schema.sql`): SQLite-based with tables for Members, Services, Classifications, Schedules, and audit logging. Uses foreign key constraints and indexes for performance. +#### CLI Layer (`cli/`) +- **main.py**: Command-line interface coordinator with subcommands +- **interactive.py**: Interactive mode for user-friendly operations +- **commands/**: Modular command implementations (members, schedules, services) +- **base.py**: Base CLI class with common functionality -### Frontend Architecture +#### Database Layer (`db/`) +- **connection.py**: SQLite wrapper with context manager support +- **base_repository.py**: Abstract base repository with common CRUD operations +- Thread-safe connection handling for FastAPI + +#### Repository Pattern (`repositories/`) +- **MemberRepository** (`member.py`): Member CRUD operations +- **ScheduleRepository** (`schedule.py`): Schedule management with status updates +- **ServiceRepository** (`service.py`): Service instance management +- **ClassificationRepository** (`classification.py`): Member role management +- **ServiceTypeRepository** (`service_type.py`): Time slot definitions +- **ServiceAvailabilityRepository** (`service_availability.py`): Member eligibility + +#### Business Logic (`services/`) +- **SchedulingService** (`scheduling_service.py`): Core scheduling algorithms + - Round-robin scheduling based on `LastAcceptedAt` timestamps + - 5-day decline boost for recently declined members + - Same-day exclusion rules + - Multi-classification support + - Status-aware scheduling (pending/accepted/declined) + +#### Data Models (`models/`) +- **dataclasses.py**: Core data models with SQLite row conversion utilities +- **enums.py**: Enumerated types for system constants +- Models: Member, Service, Schedule, Classification, ServiceType, etc. + +### Database Schema (`schema.sql`) + +SQLite-based with comprehensive relational design: + +**Core Tables:** +- `Members`: Member information with scheduling timestamps +- `Services`: Service instances with dates and types +- `Schedules`: Member-service assignments with status tracking +- `Classifications`: Member roles (Soprano, Alto, Tenor, Baritone) +- `ServiceTypes`: Time slots (9AM, 11AM, 6PM) +- `ServiceAvailability`: Member eligibility for service types + +**Audit Tables:** +- `AcceptedLog`, `DeclineLog`, `ScheduledLog` for comprehensive tracking +- Foreign key constraints and indexes for performance + +## Frontend Architecture .NET 8 Blazor Server application with the following structure: ``` frontend/ ├── Components/ -│ ├── Layout/ # Layout components (NavMenu, MainLayout) -│ └── Pages/ # Razor pages (Dashboard, Members, Schedules, Services) -├── Models/ # C# models matching backend data structure +│ ├── Layout/ # Layout components (NavMenu, MainLayout) +│ ├── Pages/ # Razor pages (Members, Schedules, Services) +│ ├── App.razor # Root application component +│ └── _Imports.razor # Global imports +├── Models/ # C# models matching backend structure ├── Services/ # HTTP client services for API communication -└── wwwroot/ # Static files and assets +├── Properties/ # Launch settings and configuration +├── wwwroot/ # Static files and assets +└── Program.cs # Application startup and DI configuration ``` -**Key Components:** +### Key Components -- **ApiService** (`Services/ApiService.cs`): HTTP client wrapper for Python backend API communication -- **Models** (`Models/Member.cs`): C# data models (Member, Schedule, Service, Classification, etc.) -- **Razor Components**: Interactive pages for member management, scheduling, and service administration -- **Bootstrap UI**: Responsive design with Bootstrap 5 styling +#### Services Layer +- **ApiService.cs**: HTTP client implementation with JSON serialization +- **IApiService.cs**: Service interface for dependency injection +- Configured for `http://localhost:8000/api/` backend communication +- Camel case JSON handling for API compatibility -The frontend communicates with the Python backend via HTTP API calls, expecting JSON responses that match the C# model structure. +#### Models (`Models/`) +- **Member.cs**: Complete data models matching backend structure +- Models: Member, Classification, Service, ServiceType, Schedule +- Navigation properties for related data +- Compatible with FastAPI Pydantic models + +#### Razor Components (`Components/Pages/`) +- **Members.razor**: Member management interface +- **Schedules.razor**: Schedule management and workflow +- **Services.razor**: Service administration +- **Home.razor**: Dashboard and overview +- Bootstrap 5 styling with responsive design + +#### Dependency Injection (`Program.cs`) +- HTTP client configuration for backend API +- Service registration with scoped lifetime +- HTTPS redirection and static file serving ## Development Commands -### Backend +### Backend Development -**Setup:** +**Environment Setup:** ```bash cd backend -# Activate virtual environment (already exists) -source venv/bin/activate +# Virtual environment is pre-configured in .venv/ +source .venv/bin/activate +``` + +**Dependencies:** +```bash +# Install from requirements.txt +pip install -r requirements.txt +``` + +**API Server:** +```bash +cd backend +source .venv/bin/activate +python -m api +# Starts FastAPI server on http://localhost:8000 +# API documentation at http://localhost:8000/docs +``` + +**CLI Usage:** +```bash +cd backend +source .venv/bin/activate +python -m cli --help +python -m cli members list +python -m cli schedules schedule --help +``` + +**Demo/Development Data:** +```bash +cd backend +source .venv/bin/activate +python main.py # Runs demo data population ``` **Testing:** ```bash cd backend -# Run tests using pytest from virtual environment -venv/bin/pytest -# Run specific test file -venv/bin/pytest tests/repositories/test_member.py -# Run with coverage -venv/bin/pytest --cov +source .venv/bin/activate +pytest # Run all tests +pytest tests/repositories/ # Run repository tests +pytest --cov # Run with coverage ``` -**Run Application:** -```bash -cd backend -# Run the demo script -python main.py -``` - -### Frontend +### Frontend Development **Setup:** ```bash cd frontend -# Restore NuGet packages dotnet restore ``` -**Development:** +**Development Server:** ```bash cd frontend -# Start development server (with hot reload) -dotnet watch -# Or run without watch -dotnet run +dotnet watch # Hot reload development +# Or: dotnet run +``` -# Build for production -dotnet build -# Publish for deployment -dotnet publish -c Release +**Build & Deploy:** +```bash +cd frontend +dotnet build # Development build +dotnet build -c Release # Production build +dotnet publish -c Release # Publish for deployment ``` **Access:** - Development: https://localhost:5001 (HTTPS) or http://localhost:5000 (HTTP) -- The application expects the Python backend API to be available at http://localhost:8000/api/ +- Expects backend API at http://localhost:8000/api/ ## Core Business Logic -The **SchedulingService** implements a sophisticated member scheduling algorithm: +### Scheduling Algorithm -1. **Round-robin scheduling** based on `Members.LastAcceptedAt` timestamps -2. **5-day decline boost** - recently declined members get priority -3. **Same-day exclusion** - members can't be scheduled for multiple services on the same day -4. **Service availability** - members must be eligible for the specific service type -5. **Status constraints** - prevents double-booking (pending/accepted/declined statuses) +The **SchedulingService** implements sophisticated member scheduling: + +1. **Round-robin fairness**: Based on `LastAcceptedAt` timestamps +2. **Decline boost**: 5-day priority for recently declined members +3. **Same-day exclusion**: Members cannot serve multiple services per day +4. **Classification matching**: Multi-classification support for flexible roles +5. **Availability filtering**: Service type eligibility checking +6. **Status management**: Prevents double-booking across pending/accepted states **Key Methods:** -- `schedule_next_member()` - Core scheduling logic with multi-classification support -- `decline_service_for_user()` - Handle member declining assignments +- `schedule_next_member(classification_ids, service_id)`: Core scheduling with multi-role support +- `decline_service_for_user(member_id, service_id, reason)`: Decline handling with boost logic -## Database +### API Endpoints -The system uses **SQLite** with the following key tables: -- `Members` - Core member data with scheduling timestamps -- `Services` - Service instances on specific dates -- `Schedules` - Member-service assignments with status tracking -- `Classifications` - Member roles (Soprano, Alto, Tenor, Baritone) -- `ServiceTypes` - Time slots (9AM, 11AM, 6PM) -- `ServiceAvailability` - Member eligibility for service types +**Member Management:** +- `GET /api/members` - List all members +- `GET /api/members/{id}` - Get member details +- `POST /api/members` - Create new member +- `PUT /api/members/{id}` - Update member +- `DELETE /api/members/{id}` - Delete member -**Audit Tables**: `AcceptedLog`, `DeclineLog`, `ScheduledLog` for comprehensive tracking. +**Scheduling Operations:** +- `GET /api/schedules` - List all schedules +- `POST /api/schedules/schedule-next` - Schedule next available member +- `POST /api/schedules/{id}/accept` - Accept assignment +- `POST /api/schedules/{id}/decline` - Decline with reason +- `DELETE /api/schedules/{id}` - Remove schedule + +**Service Management:** +- `GET /api/services` - List services +- `POST /api/services` - Create new service +- `GET /api/service-types` - List service types + +## Database Management + +**Schema Location:** `backend/schema.sql` + +**Database File:** `backend/db/sqlite/database.db` (auto-created) + +**Key Features:** +- Automatic database creation from schema if missing +- Foreign key constraints enforced +- Comprehensive indexing for performance +- Audit logging for all schedule operations ## Testing -Backend uses **pytest** with fixtures for database setup. Tests cover: -- Repository layer functionality -- Business logic in services -- Database schema constraints +**Backend Testing with pytest:** +- Repository layer unit tests with in-memory SQLite +- Service layer business logic tests +- Fixtures for database setup and test data +- Comprehensive coverage of scheduling algorithms -All tests use in-memory SQLite databases created fresh for each test. \ No newline at end of file +**Test Structure:** +``` +tests/ +├── conftest.py # Shared fixtures +├── repositories/ # Repository layer tests +└── services/ # Business logic tests +``` + +## Development Workflow + +1. **Backend First**: Start with API development and testing +2. **Database Schema**: Modify `schema.sql` for data model changes +3. **Repository Layer**: Update repositories for new database operations +4. **Service Layer**: Implement business logic in services +5. **API Layer**: Add FastAPI endpoints with Pydantic models +6. **Frontend Models**: Update C# models to match API +7. **Frontend Services**: Extend ApiService for new endpoints +8. **Frontend UI**: Create/update Razor components +9. **Testing**: Add tests for new functionality +10. **Integration**: Test full stack communication + +## Important Notes + +- **Thread Safety**: FastAPI uses custom DatabaseConnection for thread safety +- **JSON Compatibility**: Backend uses PascalCase/camelCase aliasing for C# compatibility +- **Error Handling**: Comprehensive HTTP status codes and error responses +- **CORS**: Configured for frontend origins on localhost:5000/5001 +- **Virtual Environment**: Pre-configured Python environment in `backend/.venv/` +- **Auto-reload**: Both backend (Uvicorn) and frontend (dotnet watch) support hot reload \ No newline at end of file diff --git a/backend/api/__init__.py b/backend/api/__init__.py new file mode 100644 index 0000000..f35899a --- /dev/null +++ b/backend/api/__init__.py @@ -0,0 +1,7 @@ +""" +FastAPI module for NimbusFlow backend. +""" + +from .app import app + +__all__ = ["app"] \ No newline at end of file diff --git a/backend/api/__main__.py b/backend/api/__main__.py new file mode 100644 index 0000000..3211f57 --- /dev/null +++ b/backend/api/__main__.py @@ -0,0 +1,14 @@ +""" +Entry point for running the FastAPI server with python -m backend.api +""" + +import uvicorn + +if __name__ == "__main__": + uvicorn.run( + "backend.api:app", + host="0.0.0.0", + port=8000, + reload=True, + log_level="info" + ) \ No newline at end of file diff --git a/backend/api/app.py b/backend/api/app.py new file mode 100644 index 0000000..2315266 --- /dev/null +++ b/backend/api/app.py @@ -0,0 +1,479 @@ +""" +FastAPI application for NimbusFlow backend. +Provides REST API endpoints for the frontend Blazor application. +""" + +from __future__ import annotations + +from pathlib import Path +from typing import List, Optional, Union +from datetime import datetime, date + +from fastapi import FastAPI, HTTPException, Depends +from fastapi.middleware.cors import CORSMiddleware +from pydantic import BaseModel, Field + +# Import the existing backend modules +from backend.db import DatabaseConnection +from backend.repositories import ( + MemberRepository, + ClassificationRepository, + ServiceRepository, + ServiceTypeRepository, + ScheduleRepository, + ServiceAvailabilityRepository, +) +from backend.services.scheduling_service import SchedulingService +from backend.models.dataclasses import ( + Member as DbMember, + Classification as DbClassification, + Service as DbService, + ServiceType as DbServiceType, + Schedule as DbSchedule, +) + +# Initialize FastAPI app +app = FastAPI(title="NimbusFlow API", version="1.0.0") + +# Add CORS middleware to allow frontend access +app.add_middleware( + CORSMiddleware, + allow_origins=[ + "http://localhost:5059", + "https://localhost:5059" + ], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +# Database path +DB_PATH = Path(__file__).parent.parent / "db" / "sqlite" / "database.db" + +# Configure SQLite to allow threading +import sqlite3 +sqlite3.threadsafety = 3 + + +# Custom DatabaseConnection for FastAPI that handles threading +class FastAPIDatabaseConnection(DatabaseConnection): + """DatabaseConnection that allows cross-thread usage for FastAPI.""" + + def __init__( + self, + db_path: Union[str, Path], + *, + timeout: float = 5.0, + detect_types: int = sqlite3.PARSE_DECLTYPES | sqlite3.PARSE_COLNAMES, + ) -> None: + # Call parent constructor but modify connection to allow threading + self._conn: sqlite3.Connection = sqlite3.connect( + str(db_path), + timeout=timeout, + detect_types=detect_types, + check_same_thread=False # Allow cross-thread usage + ) + # ``Row`` makes column access dictionary‑like and preserves order. + self._conn.row_factory = sqlite3.Row + self._cursor: sqlite3.Cursor = self._conn.cursor() + +# Pydantic models for API requests/responses +class Member(BaseModel): + memberId: int = Field(alias="MemberId") + firstName: str = Field(alias="FirstName") + lastName: str = Field(alias="LastName") + email: Optional[str] = Field(default=None, alias="Email") + phoneNumber: Optional[str] = Field(default=None, alias="PhoneNumber") + classificationId: Optional[int] = Field(default=None, alias="ClassificationId") + notes: Optional[str] = Field(default=None, alias="Notes") + isActive: int = Field(default=1, alias="IsActive") + lastScheduledAt: Optional[datetime] = Field(default=None, alias="LastScheduledAt") + lastAcceptedAt: Optional[datetime] = Field(default=None, alias="LastAcceptedAt") + lastDeclinedAt: Optional[datetime] = Field(default=None, alias="LastDeclinedAt") + declineStreak: int = Field(default=0, alias="DeclineStreak") + + class Config: + populate_by_name = True + + +class MemberCreate(BaseModel): + firstName: str = Field(alias="FirstName") + lastName: str = Field(alias="LastName") + email: Optional[str] = Field(default=None, alias="Email") + phoneNumber: Optional[str] = Field(default=None, alias="PhoneNumber") + classificationId: Optional[int] = Field(default=None, alias="ClassificationId") + notes: Optional[str] = Field(default=None, alias="Notes") + isActive: int = Field(default=1, alias="IsActive") + + class Config: + populate_by_name = True + + +class Classification(BaseModel): + classificationId: int = Field(alias="ClassificationId") + classificationName: str = Field(alias="ClassificationName") + + class Config: + populate_by_name = True + + +class Service(BaseModel): + serviceId: int = Field(alias="ServiceId") + serviceTypeId: int = Field(alias="ServiceTypeId") + serviceDate: date = Field(alias="ServiceDate") + + class Config: + populate_by_name = True + + +class ServiceCreate(BaseModel): + serviceTypeId: int = Field(alias="ServiceTypeId") + serviceDate: date = Field(alias="ServiceDate") + + class Config: + populate_by_name = True + + +class ServiceType(BaseModel): + serviceTypeId: int = Field(alias="ServiceTypeId") + typeName: str = Field(alias="TypeName") + + class Config: + populate_by_name = True + + +class Schedule(BaseModel): + scheduleId: int = Field(alias="ScheduleId") + serviceId: int = Field(alias="ServiceId") + memberId: int = Field(alias="MemberId") + status: str = Field(alias="Status") + scheduledAt: datetime = Field(alias="ScheduledAt") + acceptedAt: Optional[datetime] = Field(default=None, alias="AcceptedAt") + declinedAt: Optional[datetime] = Field(default=None, alias="DeclinedAt") + expiresAt: Optional[datetime] = Field(default=None, alias="ExpiresAt") + declineReason: Optional[str] = Field(default=None, alias="DeclineReason") + + class Config: + populate_by_name = True + + +class ScheduleNextRequest(BaseModel): + serviceId: int + classificationIds: List[int] + + +class DeclineRequest(BaseModel): + reason: Optional[str] = None + + +# Context manager for database operations +from contextlib import contextmanager + +@contextmanager +def get_db_context(): + """Context manager to handle database connections properly.""" + db = DatabaseConnection(DB_PATH) + try: + with db: + yield db + finally: + pass # Context manager handles cleanup + + +# Dependency to get database connection and repositories +def get_repositories(): + # Create a new database connection for each request to avoid thread safety issues + db = FastAPIDatabaseConnection(DB_PATH) + return { + "db": db, + "member_repo": MemberRepository(db), + "classification_repo": ClassificationRepository(db), + "service_repo": ServiceRepository(db), + "service_type_repo": ServiceTypeRepository(db), + "schedule_repo": ScheduleRepository(db), + "availability_repo": ServiceAvailabilityRepository(db), + } + + +def get_scheduling_service(repos: dict = Depends(get_repositories)): + return SchedulingService( + classification_repo=repos["classification_repo"], + member_repo=repos["member_repo"], + service_repo=repos["service_repo"], + availability_repo=repos["availability_repo"], + schedule_repo=repos["schedule_repo"], + ) + + +# Helper functions to convert between DB and API models +def db_member_to_api(db_member: DbMember) -> Member: + return Member( + MemberId=db_member.MemberId, + FirstName=db_member.FirstName, + LastName=db_member.LastName, + Email=db_member.Email, + PhoneNumber=db_member.PhoneNumber, + ClassificationId=db_member.ClassificationId, + Notes=db_member.Notes, + IsActive=db_member.IsActive, + LastScheduledAt=db_member.LastScheduledAt, + LastAcceptedAt=db_member.LastAcceptedAt, + LastDeclinedAt=db_member.LastDeclinedAt, + DeclineStreak=db_member.DeclineStreak, + ) + + +def api_member_to_db(api_member: Member) -> DbMember: + return DbMember( + MemberId=api_member.memberId, + FirstName=api_member.firstName, + LastName=api_member.lastName, + Email=api_member.email, + PhoneNumber=api_member.phoneNumber, + ClassificationId=api_member.classificationId, + Notes=api_member.notes, + IsActive=api_member.isActive, + LastScheduledAt=api_member.lastScheduledAt, + LastAcceptedAt=api_member.lastAcceptedAt, + LastDeclinedAt=api_member.lastDeclinedAt, + DeclineStreak=api_member.declineStreak, + ) + + +def db_classification_to_api(db_classification: DbClassification) -> Classification: + return Classification( + ClassificationId=db_classification.ClassificationId, + ClassificationName=db_classification.ClassificationName, + ) + + +def db_service_to_api(db_service: DbService) -> Service: + return Service( + ServiceId=db_service.ServiceId, + ServiceTypeId=db_service.ServiceTypeId, + ServiceDate=db_service.ServiceDate, + ) + + +def db_service_type_to_api(db_service_type: DbServiceType) -> ServiceType: + return ServiceType( + ServiceTypeId=db_service_type.ServiceTypeId, + TypeName=db_service_type.TypeName, + ) + + +def db_schedule_to_api(db_schedule: DbSchedule) -> Schedule: + return Schedule( + ScheduleId=db_schedule.ScheduleId, + ServiceId=db_schedule.ServiceId, + MemberId=db_schedule.MemberId, + Status=db_schedule.Status, + ScheduledAt=db_schedule.ScheduledAt, + AcceptedAt=db_schedule.AcceptedAt, + DeclinedAt=db_schedule.DeclinedAt, + ExpiresAt=db_schedule.ExpiresAt, + DeclineReason=db_schedule.DeclineReason, + ) + + +# API Endpoints + +# Member endpoints +@app.get("/api/members", response_model=List[Member]) +async def get_members(repos: dict = Depends(get_repositories)): + db_members = repos["member_repo"].list_all() + return [db_member_to_api(member) for member in db_members] + + +@app.get("/api/members/{member_id}", response_model=Member) +async def get_member(member_id: int, repos: dict = Depends(get_repositories)): + db_member = repos["member_repo"].get_by_id(member_id) + if not db_member: + raise HTTPException(status_code=404, detail="Member not found") + return db_member_to_api(db_member) + + +@app.post("/api/members", response_model=Member) +async def create_member(member_data: MemberCreate, repos: dict = Depends(get_repositories)): + db_member = repos["member_repo"].create( + first_name=member_data.firstName, + last_name=member_data.lastName, + email=member_data.email, + phone_number=member_data.phoneNumber, + classification_id=member_data.classificationId, + notes=member_data.notes, + is_active=member_data.isActive, + ) + return db_member_to_api(db_member) + + +@app.put("/api/members/{member_id}", response_model=Member) +async def update_member(member_id: int, member_data: Member, repos: dict = Depends(get_repositories)): + existing_member = repos["member_repo"].get_by_id(member_id) + if not existing_member: + raise HTTPException(status_code=404, detail="Member not found") + + # Use the base repository _update method + updates = { + "FirstName": member_data.firstName, + "LastName": member_data.lastName, + "Email": member_data.email, + "PhoneNumber": member_data.phoneNumber, + "ClassificationId": member_data.classificationId, + "Notes": member_data.notes, + "IsActive": member_data.isActive, + } + repos["member_repo"]._update("Members", "MemberId", member_id, updates) + + # Return the updated member + updated_member = repos["member_repo"].get_by_id(member_id) + return db_member_to_api(updated_member) + + +@app.delete("/api/members/{member_id}") +async def delete_member(member_id: int, repos: dict = Depends(get_repositories)): + existing_member = repos["member_repo"].get_by_id(member_id) + if not existing_member: + raise HTTPException(status_code=404, detail="Member not found") + + repos["member_repo"]._delete("Members", "MemberId", member_id) + return {"message": "Member deleted successfully"} + + +@app.get("/api/members/{member_id}/schedules", response_model=List[Schedule]) +async def get_member_schedules(member_id: int, repos: dict = Depends(get_repositories)): + existing_member = repos["member_repo"].get_by_id(member_id) + if not existing_member: + raise HTTPException(status_code=404, detail="Member not found") + + # Get all schedules and filter by member ID (since there's no specific method) + all_schedules = repos["schedule_repo"].list_all() + member_schedules = [s for s in all_schedules if s.MemberId == member_id] + return [db_schedule_to_api(schedule) for schedule in member_schedules] + + +# Classification endpoints +@app.get("/api/classifications", response_model=List[Classification]) +async def get_classifications(repos: dict = Depends(get_repositories)): + db_classifications = repos["classification_repo"].list_all() + return [db_classification_to_api(classification) for classification in db_classifications] + + +# Service endpoints +@app.get("/api/services", response_model=List[Service]) +async def get_services(repos: dict = Depends(get_repositories)): + db_services = repos["service_repo"].list_all() + return [db_service_to_api(service) for service in db_services] + + +@app.get("/api/services/{service_id}", response_model=Service) +async def get_service(service_id: int, repos: dict = Depends(get_repositories)): + db_service = repos["service_repo"].get_by_id(service_id) + if not db_service: + raise HTTPException(status_code=404, detail="Service not found") + return db_service_to_api(db_service) + + +@app.post("/api/services", response_model=Service) +async def create_service(service_data: ServiceCreate, repos: dict = Depends(get_repositories)): + db_service = repos["service_repo"].create( + service_type_id=service_data.serviceTypeId, + service_date=service_data.serviceDate, + ) + return db_service_to_api(db_service) + + +# Service Type endpoints +@app.get("/api/service-types", response_model=List[ServiceType]) +async def get_service_types(repos: dict = Depends(get_repositories)): + db_service_types = repos["service_type_repo"].list_all() + return [db_service_type_to_api(service_type) for service_type in db_service_types] + + +# Schedule endpoints +@app.get("/api/schedules", response_model=List[Schedule]) +async def get_schedules(repos: dict = Depends(get_repositories)): + db_schedules = repos["schedule_repo"].list_all() + return [db_schedule_to_api(schedule) for schedule in db_schedules] + + +@app.get("/api/schedules/{schedule_id}", response_model=Schedule) +async def get_schedule(schedule_id: int, repos: dict = Depends(get_repositories)): + db_schedule = repos["schedule_repo"].get_by_id(schedule_id) + if not db_schedule: + raise HTTPException(status_code=404, detail="Schedule not found") + return db_schedule_to_api(db_schedule) + + +@app.post("/api/schedules/{schedule_id}/accept", response_model=Schedule) +async def accept_schedule(schedule_id: int, repos: dict = Depends(get_repositories)): + db_schedule = repos["schedule_repo"].get_by_id(schedule_id) + if not db_schedule: + raise HTTPException(status_code=404, detail="Schedule not found") + + repos["schedule_repo"].mark_accepted(schedule_id) + + # Return the updated schedule + updated_schedule = repos["schedule_repo"].get_by_id(schedule_id) + return db_schedule_to_api(updated_schedule) + + +@app.post("/api/schedules/{schedule_id}/decline", response_model=Schedule) +async def decline_schedule( + schedule_id: int, + decline_data: DeclineRequest, + repos: dict = Depends(get_repositories), + scheduling_service: SchedulingService = Depends(get_scheduling_service) +): + db_schedule = repos["schedule_repo"].get_by_id(schedule_id) + if not db_schedule: + raise HTTPException(status_code=404, detail="Schedule not found") + + # Use the scheduling service to decline (handles the business logic) + scheduling_service.decline_service_for_user( + member_id=db_schedule.MemberId, + service_id=db_schedule.ServiceId, + reason=decline_data.reason, + ) + + # Return the updated schedule + updated_schedule = repos["schedule_repo"].get_by_id(schedule_id) + return db_schedule_to_api(updated_schedule) + + +@app.delete("/api/schedules/{schedule_id}") +async def remove_schedule(schedule_id: int, repos: dict = Depends(get_repositories)): + existing_schedule = repos["schedule_repo"].get_by_id(schedule_id) + if not existing_schedule: + raise HTTPException(status_code=404, detail="Schedule not found") + + repos["schedule_repo"]._delete("Schedules", "ScheduleId", schedule_id) + return {"message": "Schedule removed successfully"} + + +@app.post("/api/schedules/schedule-next", response_model=Optional[Schedule]) +async def schedule_next_member( + request: ScheduleNextRequest, + scheduling_service: SchedulingService = Depends(get_scheduling_service), + repos: dict = Depends(get_repositories) +): + result = scheduling_service.schedule_next_member( + classification_ids=request.classificationIds, + service_id=request.serviceId, + only_active=True, + exclude_member_ids=set(), + ) + + if not result: + raise HTTPException(status_code=404, detail="No eligible member found") + + # result is a tuple: (schedule_id, first_name, last_name, member_id) + schedule_id = result[0] + db_schedule = repos["schedule_repo"].get_by_id(schedule_id) + return db_schedule_to_api(db_schedule) + + +# Health check endpoint +@app.get("/api/health") +async def health_check(): + return {"status": "healthy", "message": "NimbusFlow API is running"} \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..f3bf7f6 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,19 @@ +annotated-types==0.7.0 +anyio==4.10.0 +click==8.2.1 +fastapi==0.116.1 +h11==0.16.0 +httptools==0.6.4 +idna==3.10 +pydantic==2.11.7 +pydantic_core==2.33.2 +python-dotenv==1.1.1 +PyYAML==6.0.2 +sniffio==1.3.1 +starlette==0.47.3 +typing-inspection==0.4.1 +typing_extensions==4.15.0 +uvicorn==0.35.0 +uvloop==0.21.0 +watchfiles==1.1.0 +websockets==15.0.1 diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..f81e3e3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,368 @@ +# Build results +bin/ +obj/ +out/ + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ + +# Visual Studio Code +.vscode/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these files may be created as clear text +*.azurePubxml + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +CDF_Data/ +l3codegen.ps1 + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml \ No newline at end of file diff --git a/frontend/Components/Pages/Home.razor b/frontend/Components/Pages/Home.razor index 7a0b250..e69e8fc 100644 --- a/frontend/Components/Pages/Home.razor +++ b/frontend/Components/Pages/Home.razor @@ -106,7 +106,7 @@ { // Load dashboard data var members = await ApiService.GetMembersAsync(); - activeMemberCount = members.Count(m => m.IsActive); + activeMemberCount = members.Count(m => m.IsActive == 1); var schedules = await ApiService.GetSchedulesAsync(); recentSchedules = schedules.OrderByDescending(s => s.ScheduledAt).ToList(); diff --git a/frontend/Components/Pages/Members.razor b/frontend/Components/Pages/Members.razor index b473473..7876365 100644 --- a/frontend/Components/Pages/Members.razor +++ b/frontend/Components/Pages/Members.razor @@ -55,7 +55,7 @@ else if (members.Any()) @member.Email @member.PhoneNumber - @if (member.IsActive) + @if (member.IsActive == 1) { Active } @@ -134,7 +134,7 @@ else private bool showInactiveMembers = false; private IEnumerable filteredMembers => - showInactiveMembers ? members : members.Where(m => m.IsActive); + showInactiveMembers ? members : members.Where(m => m.IsActive == 1); protected override async Task OnInitializedAsync() { diff --git a/frontend/Models/Member.cs b/frontend/Models/Member.cs index fddf6c6..2021247 100644 --- a/frontend/Models/Member.cs +++ b/frontend/Models/Member.cs @@ -9,7 +9,7 @@ namespace NimbusFlow.Frontend.Models public string? PhoneNumber { get; set; } public int? ClassificationId { get; set; } public string? Notes { get; set; } - public bool IsActive { get; set; } = true; + public int IsActive { get; set; } = 1; public DateTime? LastScheduledAt { get; set; } public DateTime? LastAcceptedAt { get; set; } public DateTime? LastDeclinedAt { get; set; } diff --git a/frontend/Program.cs b/frontend/Program.cs index bab3840..e2aee21 100644 --- a/frontend/Program.cs +++ b/frontend/Program.cs @@ -13,8 +13,6 @@ builder.Services.AddHttpClient(client => client.BaseAddress = new Uri("http://localhost:8000/api/"); // Python backend API endpoint }); -builder.Services.AddScoped(); - var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.dll b/frontend/bin/Debug/net8.0/NimbusFlow.Frontend.dll index c3449924854b338395267f887f01057b077819ab..b4e9cd5012d5bd75eec36958b7040f1d113b90c0 100644 GIT binary patch delta 33841 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 auTLuf{?vDj;#($__WMq5{Le`t1o%JX?VLgY delta 8910 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

Cw+B-L(FfuNbXcwW9iGYk%+RU>m7H2iy4X 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 auTLuf{?vDj;#($__WMq5{Le`t1o%JX?VLgY delta 8910 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

Cw+B-L(FfuNbXcwW9iGYk%+RU>m7H2iy4X z{!+6Jx{d>_k~zZx{&xVB=7B7slEn{V}{R^O+XXa*mSw5dJK-<;*-nj6tCo{Y(rC+^ntA#nerS5MxBTgaTm zAfH=N#-t-+(g7<%3xV%I_?IIBbUBSU@xz?{jhq3th=6fgDg?k25dQKA|0nc_08RuA zeCTM1#1E1ClPCjhqOIy(f4_~ac^(4+}Uu^u-^j!neY=FLLd;2NARB!L}id;fTW@ZKrz~>(dzfT&zU9; zG@>bf9}<2NzqU1!oBc08Gw_C#R3GTzgOWK(M7}FPpm-<`p0Q&2qbobjP~;e2Du6(t zi0oa`2m~hDpj!qZ86DBxPczKt-^dqW3!kbS$vl6+Xvj4k8pPik{Q-ZuWsC&;0b}$xgI6oYA5aK?fckmf!)}RN_P*Ei`aI9) zd7ev`)VU-%m!ym5LbJyjf6rW4CtaSodQjTyO43F(bB1W0o06Y)4@+axZ0)LaP;TEJ zoVju2(NlY_t~hk~jVCW&t967PNHRID6z)=gevU}u72Dl?;ezyi?d$ORcz(USo%ZR( zKkr39*CbjR-HzwvT(fpJZY&$Ul*q}0&Dybqv24`NwP%~Pbi!~4x_)UJlZTt`gUA6l zz2Z-MOy1pe*W(A4jk4ThPqQ|{{g+0M_*|pSn#8rG(J5ZHw^=*KwWZNJv6TEmvo;-T zcR%b-JoB>rV$S<6Q8@G*I;Sz8r;RUUJtp6A`W-MO0Hb2e(<)cUA}F3Ww?MPG2P zrJI~-y2H7de&p<@PNk1_&}L49vYex2aPEgc!Z}PQ=%{AU1h3jnWjd)GM=o%VO81b8 zbebkLMG{7l&eLg46>Ljs9=xyhqF^vjYa?I_ndfCEmHcBqPoHT;u)}^-DuK(GQ+~|n z=_~E5bb`LsreLb5R>4=0^Dqlw`xZY=Dh*bXS_A4Hl4P+l$u6DY{FHB|z$mh~fr?DC znbgwY4YJs>7i?gr0Ukk`FeZ0fP)u~oV{P6>xri*w;ss8DJuZ(*RhU_{z5?%ai}sL@ z7W1esz&F76z@&(^iXytHia2gkap`C%sfcT&;Wx0K)OrToiq>WL3K~_xv#Pk?Jh*|B!q`46wofAsqy?V`m%wFk6*-Tr!`lrE zln7cNha>n*fGuzyTmqND6>t^oBj;cOa2-rh{0BuvXDKRrCSj5=DHz>`(xHZ-Oc)c! zf^onevI66S10-qKK*I)L9cdyhcn9nuD=wjT1Rd8*u!X7v_K+1AA6y4hVuEb`XXD2mIh7ELb+C!F5@G`nTtU?b&%p;^YQ<4n zaTKtQ9ELGl#Vt)32kd}Ltzs`vuq{_G)kh&f)?uhkv`!*ZZDIo*Y$B~T(ZT_jQ1!q* zat_r1Tt}7K(G8huM>nwhP46at2c-_&ptHtXI>=y=yMzgl`U=4wlDgrMdJjC3Rth$e zJ~FvV7zY_3_0^bJ2MBa>^f02v_lby$FGBZ=CnjXL)R=O1B_eKC>uku~*{@GZi8sfn4t#><=&36UEUws<6BqHqI?J!B0{7tL1i6mmK; z%`-1x&Z2R_hf!Uexp<&zTx|J!T+DwRn{7s3Kz@Y7-Hv@6=JKZSCpBy1gO2}y`7;M| zvRm0P>OS0YyDyu`_7@A;t;I}#ew&reZz&8|MJux{lNlV(Te<#1e%$IGAI}o05`Rs+ zKfK0$Vz9;ahQhV3p@Fcw%joEQi@$UJ_cJY6pGoz&hm5#;!FYEj6R)-Id`%h4QiihB zPem&5b1OeHJj&BHvUr@QE$j!Fi~N^io8jL<8s~~dIi6Wy8fWh39H(sUyIn)F>`W%|FJR`iiU0rr delta 2837 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 delta 2837 zcmZXWUu;uV9LIm>-rlyiYxjq-f&9^yG9W>h;x@avE#9U~gPV>-6Cft!cDJ3;88spJ zAewu(Zic`_=Jf&HOPc}_^ubsq$kUwzRD6@@6JfVblo$=s_-07_o$p9l;+B2;IiKG- zzjMybmR;wRa88MnM+1lN{&Q(=c9S?icW$59?+US98+e;&lbcW;b`OYA@mckp*rzl% zZTb4bvEM#^^24jYZ(CaTS9i4~a7QRK>xy8jc6)$G@QSp%H<%YUs$T{-N3C8ZO?wUE zuXn;{^?_BRYtf9-Td&=Wj;tCzAIm6x_1cTEkyWE+u039_C1WFQPwP_CekD_P$3h3) zovi(`=d8`-AKK5lxz1#Z$%QyGxgeu zNVEH1TkMg7@@(B*jl8^S6b-(vjMi)GgNKz-SF}Ij-fZiw8tv0z`?}sq4fKi9Nv-q+ z=SI5DnWP(>JE_LmMGvW+)K9&fS;}(qQ8}N3e}OYYhiF32(gd&CLq(caUqW8t92U2b zsyISZx+3Zp9W1{yNS zW=cbW4saGTv*01531f1%A5;_FEUdL`lncnBA|K!kxWwgQQGq#))@R^7Zm~Jw zp~WJqSKybyx4@*zwW=z+X{tPKTy<$85Le|jlJHyEPw5@1Ez4P`Axz!F$qyVRugW_W z;2mypG2oy@5!D&^68nDxCHM;b8F-KVpyt6Z!e2%=pZ%2P!!N57HlK(BE`6g>01r7J zPaS6y4aQ-TFb11_K?5cWW3rhKnlKhjJ|K_luwM!~@J09%n{A;IOgSJgT!Hu4+pmN? z6c$ieM8W66#gGqQgI|XK1sjm&(%leg^0-2i?NkkiWELUDg$N0 zm@qjQ2V6pyVLY&pBpn;**Z^!GO=J$<0hf?v7!U00wp?6;qKM=`ME?HA!3pMJu@%OE z$-wM}F=28rc^C(#ge=2*;03S`u7RmRKAS{C(dG?|2D!0`%r(d@9q=T$1YQ99V2a|# zQQR18AT!ZJ^oDMNbErDt60!{AfooujO_0rhZ2WOUNyOx018gF5F}XnrTt?LcFTnd? zYQ#|*aTKtD%)pq9@|Gry19rfZjdHJ&WLqg?s)vG)tie!|Y#m1?n&bus*hJ=k2KjZIj9Y$8F;)I=@(y@uMTmDcfF z&yU&>g-8wAoVSBAJ0mjxKvuP)^bOLS*Jn9@j-KS4h{@a@v*kxDB3oR>;u5lorYq)A z@C@=qXr5=zV$Opz7YgEpE4V&#m&LZE(;jTr>K`!qIo~`D#-)Z^( z%b(fTtLSQ+lt5ev#XZ$O98h=g|K;WWYn@$VeO4;nJ!YlHyHnP9PkKDHt6=4=TvwMh z*4vXR6uJvz>AXdx34Uu_%4~2S>}&XZus`SyWSid)h9mNw@gsf-C1WnpE@s`s*>|gr zyI)mDyJ(F1$f6Xbship2&vB*{(>V2Dl%ic!;BlURa@57&7SHVEYKnb