Loading repository data…
Loading repository data…
a38062an / repository
Full-stack event management platform built with Spring Boot, featuring RESTful API with HATEOAS, Spring Security, and Thymeleaf templating. A Spring Boot application for managing events and venues, featuring AWS ECS deployment, EC2 launch automation, and ALB health checks. Includes scripts for cloud deployment and local development.
Local Development (Recommended):
mvn clean install to build the project.mvn spring-boot:run.Why run locally?
Troubleshooting:
OutOfMemoryError or similar messages.Contact: If you have issues running the app, please open an issue or contact the maintainer.
Application URL: http://showspace-alb-1201427212.eu-west-2.elb.amazonaws.com/
Deployed on AWS ECS (Free Tier) using Docker containers. See AWS_DEPLOYMENT.md for full deployment details.
Note: Initial load may be slow (7-8 minutes) due to free tier constraints (t3.micro instance).
Important: The live demo link may not work reliably. The site depends on a running EC2 instance in the ECS cluster. If the instance is stopped, terminated, or the ECS agent disconnects, the site will go offline until manual recovery steps are performed (such as launching a new EC2 instance and restarting the ECS agent). This is a limitation of the EC2 launch type and manual infrastructure management.
A full-stack event and venue management web application built with Spring Boot, demonstrating enterprise-level software engineering practices including MVC architecture, RESTful API design with HATEOAS, role-based security, and external API integration.
This project originated as team coursework for COMP23412 (Software Engineering) at the University of Manchester, where I served as team lead for a 7-person development team. I was recognized as the most contributing team member for exceptional performance in coordinating the team and delivering critical features.
The codebase has been significantly refactored and enhanced for this portfolio presentation:
While the core architecture reflects collaborative coursework, the refactoring, improvements, and presentation are my independent work.
The application follows a clean separation of concerns with distinct layers:
Controllers: Handle HTTP requests and responses
EventsController / VenueController - Web interfaceEventsControllerApi / VenuesControllerApi - REST API endpointsService Layer: Business logic and data validation
EventService / VenueService - Interface definitionsEventServiceImpl / VenueServiceImpl - Service implementationsRepository Layer: Data access using Spring Data JPA
EventRepository / VenueRepository - Database operationsEntities: JPA entities with Bean Validation
Event / Venue - Domain modelsAbstracts data access logic using Spring Data JPA repositories with custom query methods using method name conventions.
REST API responses include hypermedia links, enabling API discoverability and reducing client coupling:
{
"name": "Spring Workshop",
"_links": {
"self": { "href": "/api/events/1" },
"venue": { "href": "/api/venues/5" }
}
}
showspace/
├── src/main/java/anthonynguyen/showspace/
│ ├── ShowSpaceApplication.java # Main application entry point
│ ├── entities/ # JPA entities
│ ├── dao/ # Data access layer
│ │ ├── *Repository.java # Spring Data repositories
│ │ ├── *Service.java # Service interfaces
│ │ └── *ServiceImpl.java # Service implementations
│ ├── controllers/ # MVC controllers
│ ├── assemblers/ # HATEOAS resource assemblers
│ ├── config/ # Spring configuration
│ │ ├── Security.java # Security configuration
│ │ ├── Persistence.java # Database configuration
│ │ ├── Hateoas.java # API configuration
│ │ └── data/InitialDataLoader.java # Seed data
│ └── exceptions/ # Custom exception classes
├── src/main/resources/
│ ├── templates/ # Thymeleaf HTML templates
│ ├── static/css/ # Custom stylesheets
│ ├── banner.txt # Application banner
│ └── *.properties # Configuration files
├── src/test/ # Test sources
├── db/ # H2 database files
└── pom.xml # Maven configuration
git clone https://github.com/a38062an/showspace.git
cd showspace
mvn clean install
mvn spring-boot:run
For demonstration purposes, the application includes pre-configured admin accounts:
| Username | Password | Role |
|---|---|---|
| Rob | Haines | Administrator |
| Caroline | Jay | Administrator |
| Markel | Vigo | Administrator |
| Mustafa | Mustafa | Administrator |
| Tom | Carroll | Administrator |
All users have full administrative privileges including create, update, and delete operations. Public users can view events and venues without authentication.
Execute the test suite:
mvn test
Run with detailed output:
mvn test -X
The application uses H2 database with file-based persistence. Configuration in Persistence.java:
db/showspace-dev.mv.dbjdbc:h2:./db/showspace-devmapbox-config.propertiesmastodon-config.propertiesGET /api/events - List all eventsGET /api/events/{id} - Get event detailsPOST /api/events - Create new event (Admin only)PUT /api/events/{id} - Update event (Admin only)DELETE /api/events/{id} - Delete event (Admin only)GET /api/venues - List all venuesGET /api/venues/{id} - Get venue detailsPOST /api/venues - Create new venue (Admin only)PUT /api/venues/{id} - Update venue (Admin only)DELETE /api/venues/{id} - Delete venue (Admin only)This project builds upon university coursework. The original coursework specifications are property of the University of Manchester. This repository demonstrates my refactoring, enhancements, and independent development work for portfolio purposes.
See Licence.md for details.