A modern, scalable REST API service for managing technology radar data, built with Spring Boot. This service provides comprehensive APIs for managing and querying technology entries, quadrants, rings, and analytics data.
The Tech Radar API service enables organizations to:
- Track and manage technology adoption across different categories
- Query and analyze technology distribution across quadrants and rings
- Monitor changes and updates to technology entries
- Support batch operations for efficient data management
- Java 21
- Spring Boot 3.4.1
- Spring Data JPA
- PostgreSQL (for data persistence)
- Lombok (for reducing boilerplate)
- Prometheus (for metrics)
- CRUD operations for technology entries
- Flexible querying with filtering and pagination
- Quadrant and ring-based analytics
- Change tracking and audit logging
- Batch operations support
GET /api/v1/technologies- List technologies with filtering optionsGET /api/v1/technologies/{id}- Get specific technology detailsPOST /api/v1/technologies- Add new technologyPUT /api/v1/technologies/{id}- Update existing technologyDELETE /api/v1/technologies/{id}- Remove technology
GET /api/v1/quadrants- List all quadrants with their technologiesGET /api/v1/quadrants/{quadrantType}/technologies- Get technologies for specific quadrant
GET /api/v1/rings- List all rings with their technologiesGET /api/v1/rings/{ringType}/technologies- Get technologies for specific ring
GET /api/v1/metrics/quadrant- Get technology distribution by quadrantGET /api/v1/metrics/ring- Get technology distribution by ringGET /api/v1/metrics/changes- Get recent changes/updates
POST /api/v1/technologies/batch- Add multiple technologiesPUT /api/v1/technologies/batch- Update multiple technologies
- UUID id
- String name
- String description
- Quadrant quadrant (enum)
- Ring ring (enum)
- Map<String, String> metadata
- Audit fields (createdAt, updatedAt, version)
- UUID id
- String action
- String entityType
- String entityId
- String changes (JSON)
- LocalDateTime timestamp
- String performedBy
- String ipAddress
- Quadrant: TECHNIQUES, TOOLS, PLATFORMS, LANGUAGES_AND_FRAMEWORKS
- Ring: ADOPT, TRIAL, ASSESS, HOLD
- ChangeType: ADDED, UPDATED, DELETED
- JDK 21 or later
- Maven 3.8+
- PostgreSQL 14+
This guide explains how to run the Tech Radar application using Spring Boot's Docker Compose support.
- Java 21 or later
- Maven 3.8+
- Docker and Docker Compose
- Git
git clone [email protected]:AshishBagdane/tech-radar-api.git
cd tech-radar-api./mvnw clean package -DskipTestsSimply run the application using Maven or Java:
# Using Maven
./mvnw spring-boot:run
# OR using Java
java -jar target/tech-radar-[version].jarSpring Boot will automatically:
- Detect the
compose.yamlfile in the project root - Start PostgreSQL and Redis Stack containers
- Configure all necessary environment variables
- Start the application
The application should be accessible at:
- Application: http://localhost:8080
- Redis Stack Manager: http://localhost:8001
Check if all services are running:
# Check running containers
docker ps
# Check application health
curl http://localhost:8080/actuator/healthWhen you stop the Spring Boot application (using Ctrl+C or any other method), it will automatically:
- Stop the containers
- Preserve the data volumes
- Clean up the resources
# Database
DB_HOST=localhost
DB_PORT=5432
DB_NAME=tech-radar
DB_USERNAME=tech
DB_PASSWORD=radar
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379The configuration uses named volumes for data persistence:
postgres_data: PostgreSQL dataredis_data: Redis data
Data will persist between restarts unless you explicitly remove the volumes.
If you see port conflict errors:
# Check what's using PostgreSQL port
lsof -i :5432
# Check what's using Redis ports
lsof -i :6379
lsof -i :8001# View container logs
docker logs tech-radar-postgres-1
docker logs redis-stack
# Check container status
docker ps -aIf you need to start fresh:
# Stop the application
# Then remove containers and volumes
docker compose down -v
# Start the application again
./mvnw spring-boot:run- Database Connection:
- Verify PostgreSQL container is running
- Check logs for connection errors
- Ensure correct credentials in application.properties
- Redis Connection:
- Verify Redis Stack container is running
- Check Redis Stack Manager at http://localhost:8001
- Review Redis connection logs
- Volume Permissions:
-
If you see permission errors, you might need to clean up volumes:
docker compose down -v docker volume prune
While security is a secondary concern, the following best practices are implemented:
- SSL/TLS encryption for all communications
- Input validation and sanitization
- Exception handling to prevent information leakage
- Basic authentication for API access
- CORS configuration for frontend integration
- Audit logging for all changes
The service includes basic observability features:
- Logging with correlation IDs
- Prometheus metrics integration
- Audit trail for all data changes
- Error tracking with stack traces (in development only)
- Follow SOLID principles and clean architecture practices
- Use proper exception handling with custom exceptions
- Implement comprehensive input validation
- Write unit tests for all business logic
- Document all public APIs using OpenAPI/Swagger
- Follow consistent code formatting and naming conventions
- Use meaningful commit messages
The following features are planned for future iterations:
- Advanced search capabilities
- Caching implementation
- Rate limiting
- API versioning strategy
- Integration test suite
- Documentation enhancement
Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
This project is licensed under the MIT License - see the LICENSE.md file for details