| .mvn/wrapper | ||
| src | ||
| .gitattributes | ||
| .gitignore | ||
| mvnw | ||
| mvnw.cmd | ||
| pom.xml | ||
| README.md | ||
Price Service – Technical Exercise
Description
Spring Boot service that exposes a REST endpoint to retrieve the applicable price for a product, brand and application date.
The service uses:
- Spring Boot
- Spring Data JPA
- H2 in-memory database
- Liquibase for schema and data initialization
- Maven
- Integration tests with MockMvc
The pricing logic follows the specification provided in the exercise, including date ranges and priority handling.
Data Model
The service is initialized with sample data equivalent to the provided PRICES table, including:
- Brand identifier
- Product identifier
- Price list
- Application date range (start / end)
- Priority
- Final price
If multiple prices apply for the same date range, the one with the highest priority is selected.
REST Endpoint
Request
GET /api/price/{brandId}/{productId}?applicationDate={applicationDate}
Path parameters:
brandId: brand identifierproductId: product identifier
Request parameters:
applicationDate: date and time of application (ISO-8601 format)
Example:
/api/price/1/35455?applicationDate=2020-06-14T10:00:00
Response
The service returns:
- product identifier
- brand identifier
- applicable price list
- start date
- end date
- final price
Running the Application
To start the application locally:
mvn spring-boot:run
The service will be available on port 8080.
Running Tests
The project includes integration tests that validate the scenarios described in the exercise.
To execute the tests:
mvn test
The tests:
- Load the Spring context
- Initialize the in-memory H2 database via Liquibase
- Validate the REST endpoint responses
Notes
The database is fully in-memory and requires no external setup.
Liquibase is used to manage database schema and initial data.