Simple RESTful API with Validator and Unit Testing
Install Java 20
, latest Docker
, and IntelliJ Community
with the IdeaVim
& Docker
plugins installed
Run the database by open project with IntelliJ, open compose.yaml
and hit run
Create player
database in a terminal:
docker exec -it postgres bash
psql -U postgres
create database player;
Run the backend by open com/lavantien/restapi/RestapiApplication.java
Install Java 20
, latest Docker
, and Neovim
with the Mason
plugins;
Use Mason
to install a Java LS
Run the database in a terminal:
Create player
database in a terminal:
docker exec -it postgres bash
psql -U postgres
create database player;
Run the backend in a terminal:
mvn install
mvn spring-boot:run
Run unit test with mvn test
, or more specifically ClassName#methodName
:
mvn test -Dtest=ControllerTest#allPlayers test
Using curl
or any mock callers to test the endpoints at localhost:8081
Or you can use Kreya
and take advantage of the mock-caller
directory
There will be an existing list of players migrated to the database
for testing purpose
GET /api/players
retrieves a list of all players
[
{
"id" : 2 ,
"name" : " player b" ,
"email" : " b@b.com" ,
"password" : " password" ,
"dateOfBirth" : " 2023-05-21"
},
{
"id" : 3 ,
"name" : " player c" ,
"email" : " c@c.com" ,
"password" : " password" ,
"dateOfBirth" : " 2023-05-21"
},
{
"id" : 4 ,
"name" : " player d" ,
"email" : " d@d.com" ,
"password" : " password" ,
"dateOfBirth" : " 2023-05-21"
}
]
GET /api/players/{id}
retrieves a specific player with the matching id
{
"id" : 6 ,
"name" : " player f" ,
"email" : " f@f.com" ,
"password" : " password" ,
"dateOfBirth" : " 2023-05-21"
}
POST /api/players
creates a new player; returned the newly created player
{
"id" : 32 ,
"name" : " player 0" ,
"email" : " player0@gmail.com" ,
"password" : " 12345670" ,
"dateOfBirth" : " 1990-02-01"
}
PATCH /api/players
creates a batch of new players;
returned the failed players
[
{
"id" : 27 ,
"name" : " player 1" ,
"email" : " player0gmail.com" ,
"password" : " 12345671" ,
"dateOfBirth" : " 1990-01-01"
},
{
"id" : 28 ,
"name" : " player 1" ,
"email" : " player1@gmail.com" ,
"password" : " 12345672" ,
"dateOfBirth" : " 2020-01-02"
}
]
PUT /api/players/{id}
edits an existing player with the matching id
;
returned the newly edited player; creates new player if not existed
{
"id" : 6 ,
"name" : " player 6" ,
"email" : " player6@gmail.com" ,
"password" : " 12345670" ,
"dateOfBirth" : " 1990-02-01"
}
DELETE /api/players/{id}
deletes an existing player with the matching id
;
returned nothing if success
Based on standard HTTP status codes
The returned error payload contains the error message relates to the root cause