diff --git a/backend/appsettings.Production.json b/backend/appsettings.Production.json new file mode 100644 index 0000000..1bc20da --- /dev/null +++ b/backend/appsettings.Production.json @@ -0,0 +1,17 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*", + "Jwt": { + "Key": "${JWT_SECRET_KEY}", + "Issuer": "RacePlannerApi", + "Audience": "RacePlannerClient" + }, + "ConnectionStrings": { + "DefaultConnection": "${DATABASE_URL}" + } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0671914 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,46 @@ +version: '3.8' + +services: + db: + image: postgres:16 + environment: + POSTGRES_DB: RacePlanner + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 5 + + backend: + build: + context: ./backend + dockerfile: Dockerfile + environment: + ASPNETCORE_ENVIRONMENT: Production + ConnectionStrings__DefaultConnection: Host=db;Database=RacePlanner;Username=postgres;Password=postgres + Jwt__Key: your-super-secret-key-minimum-32-characters-long-here + ports: + - "5000:80" + depends_on: + db: + condition: service_healthy + + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + environment: + NEXT_PUBLIC_API_URL: http://localhost:5000/api + ports: + - "3000:3000" + depends_on: + - backend + +volumes: + postgres_data: \ No newline at end of file diff --git a/frontend/src/app/announcements/[eventId]/page.tsx b/frontend/src/app/announcements/[eventId]/page.tsx new file mode 100644 index 0000000..66d72af --- /dev/null +++ b/frontend/src/app/announcements/[eventId]/page.tsx @@ -0,0 +1,20 @@ +import { AnnouncementList } from '@/components/announcement-list'; + +interface AnnouncementsPageProps { + params: Promise<{ + eventId: string; + }>; +} + +export default async function AnnouncementsPage({ params }: AnnouncementsPageProps) { + const { eventId } = await params; + + return ( +
+
+

Announcements

+ +
+
+ ); +} \ No newline at end of file diff --git a/openspec/changes/new-raceplanner-app/tasks.md b/openspec/changes/new-raceplanner-app/tasks.md index a3c4e60..c7c0a45 100644 --- a/openspec/changes/new-raceplanner-app/tasks.md +++ b/openspec/changes/new-raceplanner-app/tasks.md @@ -51,9 +51,9 @@ - [x] 6.1 Implement record payment endpoint - [x] 6.2 Implement payment status endpoint - [x] 6.3 Implement payment report endpoint -- [ ] 6.4 Create payment recording form component -- [ ] 6.5 Create payment status display component -- [ ] 6.6 Create payment report view +- [x] 6.4 Create payment recording form component +- [x] 6.5 Create payment status display component +- [x] 6.6 Create payment report view ## 7. Announcements (announcements) @@ -61,8 +61,8 @@ - [x] 7.2 Implement edit announcement endpoint - [x] 7.3 Implement delete announcement endpoint - [x] 7.4 Implement list announcements endpoint -- [ ] 7.5 Create announcement creation form -- [ ] 7.6 Create announcement list component +- [x] 7.5 Create announcement creation form +- [x] 7.6 Create announcement list component - [ ] 7.7 Implement notification system ## 8. Dashboard (dashboard) @@ -79,6 +79,6 @@ - [x] 9.2 Add error handling and loading states - [x] 9.3 Implement responsive design - [x] 9.4 Add form validation feedback -- [ ] 9.5 Setup email service for notifications -- [ ] 9.6 Add basic unit tests for critical paths -- [ ] 9.7 Create deployment configuration +- [x] 9.5 Setup email service for notifications +- [x] 9.6 Add basic unit tests for critical paths +- [x] 9.7 Create deployment configuration