Spring Boot 3 API for the EventHub event management platform. It provides attendee, host, and administrator authentication with email MFA; event and seat inventory management; bookings and reviews; Stripe-hosted Checkout; signed webhook processing; cancellations and refunds; and operational health probes.
Requirements: Java 17 and either the supplied Docker Compose services or a local MySQL instance.
cp .env.example .env
docker compose -f compose.local.yaml up -d
./mvnw verify
./mvnw spring-boot:runThe Compose stack exposes MySQL on 127.0.0.1:3307 and Mailpit SMTP on
127.0.0.1:1025; captured local MFA messages are available at
http://127.0.0.1:8025. If you instead use a manually installed MySQL server or
Resend, update only the ignored .env file.
For Resend's onboarding@resend.dev test sender, set
MAIL_RECIPIENT_OVERRIDE in .env to the email address associated with the
Resend account. The override is for local/staging testing only and is rejected
when DEPLOYMENT_ENVIRONMENT=production.
Flyway migrates an empty database before Hibernate validates the resulting schema. Automated tests use an isolated H2 database; CI also performs a fresh MySQL startup smoke test. Do not point the application at a legacy Hibernate-managed schema until completing the reviewed migration procedure.
The API listens on port 8080 by default. Health endpoints are available at
/actuator/health, /actuator/health/liveness, and
/actuator/health/readiness.
Use JDK 17 for the project and Maven importer. Run
com.sihe.emsbackend.EmsbackendApplication with the working directory set to
the emsbackend folder and the active profile set to dev. The ignored .env
is loaded by Spring; no IntelliJ dotenv plugin is required.
Build and test the application with:
./mvnw verify
docker build --tag eventhub-api .Production uses the prod Spring profile, versioned Flyway migrations, schema
validation, exact HTTPS CORS origins, a verified transactional-email sender,
and backend-only Stripe credentials. Store remote secrets in the hosting
platform's secret manager, never in .env or frontend VITE_* variables.
Deployment references: