A complete user registry, with access permissions, JWT token, integration and unit tests, using the RESTful API pattern.
- Features
- Requirements
- Entities
- Installation
- Running a specific test
- Swagger
- Database Migrations
- Docker
- Environment variables
- Postgres:
^13 - Java:
^17 - Maven:
^3.8.4
This project was started with Spring Initializr.
π¨ check requirements or if you are using docker check docker development instructions
- clone the repository and access the directory.
git clone git@github.com:Throyer/springboot-api-crud.git crud && cd crud
- download dependencies
mvn -f api/pom.xml install -DskipTests
- run the application
mvn -f api/pom.xml spring-boot:run
- running the tests
mvn -f api/pom.xml test - to build for production
mvn -f api/pom.xml clean package
- to generate the coverage report after testing
(available at: target/site/jacoco/index.html)mvn -f api/pom.xml jacoco:report
use the parameter -Dtest=<class>#<method>
- for example the integration test. creating a user:
mvn -f api/pom.xml test -Dtest=UsersControllerIntegrationTests#should_save_a_new_user
Once the application is up, it is available at: localhost:8080/documentation
Creating database migration files
π¨ check requirements
if you using docker-compose
.docker/scripts/mvn migration:generate -Dname=my-migration-name
-
Java based migrations
mvn -f api/pom.xml migration:generate -Dname=my-migration-name
-
SQL based migrations
mvn -f api/pom.xml migration:generate -Dname=my-migration-name -Dsql
π¨ create
environmentfile and add permission to execute scriptscp .docker/.env.example .docker/.env && chmod -R +x .docker/scripts
-
docker-compose for development
- starting containers
.docker/scripts/develop up -d- removing contaiers
.docker/scripts/develop down- show backend logs
.docker/scripts/develop logs -f api -
docker-compose for production
.docker/scripts/production up -d --build.docker/scripts/production down
| Description | Parameter | Default values |
|---|---|---|
| server port | SERVER_PORT | 8080 |
| database url | DB_URL | localhost:5432/common_app |
| username (database) | DB_USERNAME | root |
| user password (database) | DB_PASSWORD | root |
| displays the generated sql in the logger | DB_SHOW_SQL | false |
| set maximum database connections | DB_MAX_CONNECTIONS | 5 |
| secret value in token generation | TOKEN_SECRET | secret |
| token expiration time in hours | TOKEN_EXPIRATION_IN_HOURS | 24 |
| refresh token expiry time in days | REFRESH_TOKEN_EXPIRATION_IN_DAYS | 7 |
| SMTP server address | SMTP_HOST | smtp.gmail.com |
| SMTP server port | SMTP_PORT | 587 |
| SMTP username | SMTP_USERNAME | user |
| SMTP server password | SMTP_PASSWORD | secret |
| time for recovery email to expire | MINUTES_TO_EXPIRE_RECOVERY_CODE | 20 |
| max requests per minute | MAX_REQUESTS_PER_MINUTE | 10 |
| swagger username | SWAGGER_USERNAME | null |
| swagger password | SWAGGER_PASSWORD | null |
these variables are defined in: application.properties
# to change the value of some environment variable at runtime # on execution, just pass it as a parameter. (like --SERVER_PORT=80). $ java -jar api-4.1.2.jar --SERVER_PORT=80



