- Backend application demo using Spring Boot
- Application to manage Yoga classes
- Refactored of old version
- Docker
- PostgreSQL & pgAdmin
- Java & Spring boot
- Dependencies used:
- Spring Boot DevTools
- Spring Web
- JDBC API
- Spring Data JPA
- PostgreSQL Driver
- Validation
- Spring Boot Actuator
- Clone Repository and open project in IDE
- Set up database
- Run application
- Start docker daemon os unix based systems or docker desktop on windows based systems.
- Change directory to root of project using
cd /yoga-class-refactor/
then run Docker compose using docker compose up
- Open pgAdmin
- Set master password for pgAdmin
- Add a new server in pgAdmin:
- Set server name in general tab
- Set Host name/address in connection tab (get the address using command
docker inspect postgres_container | grep IPAddress
)
- Set username =
mustafa
& password = 123456789
in connection tab
- Create database with name
yoga-class-app
- Open Swagger to test CRUD operations
- Create operation
- Read operation
- Update operation
- Delete operation
- Enter body in POST request then execute
![image](https://private-user-images.githubusercontent.com/122436546/319943716-a6b97af7-7dac-4bb8-88eb-396435017095.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQzNzE2LWE2Yjk3YWY3LTdkYWMtNGJiOC04OGViLTM5NjQzNTAxNzA5NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02ODA4ZTQ0YjY1NGM1NjdhNzUyODU4NDg0OWJmYTI5OWVkYTAzN2E5YWYwNzQ3NTg2Njg2ZGE2NmVlZDc0NDNkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.YKkJlZBoYfKxY_E6rEbRqBzkYVDExAV4AzwPdV75mAc)
{
"firstName": "Ahmad",
"lastName": "Al-Deeb",
"phone": "01211223344",
"email": "ahmad@yahoo.com",
"nationality": "Egyptian",
"dateOfBirth": "2012-12-12",
"role": "STUDENT"
}
- Expected Response for Sample #1
![image](https://private-user-images.githubusercontent.com/122436546/319945030-fe069e7c-4bec-4638-be57-6a9f2c4ecfab.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQ1MDMwLWZlMDY5ZTdjLTRiZWMtNDYzOC1iZTU3LTZhOWYyYzRlY2ZhYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02YWRkNzhlMDk3OWM1ZWY5ZjA1MDQ2OGEwODQ2MzZmYWQzZDIwMjZlYTViMjdjM2NiZDkwMWUxN2JkNmYxY2JiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.SfpCQlC7JYnv_w9ZQQkMjFi4D6NT1aK16yFaQ5UFoyY)
{
"firstName": "Andrew",
"lastName": "Seif",
"phone": "01266778899",
"email": "andrew@gmail.com",
"nationality": "Egyptian",
"dateOfBirth": "2000-01-10",
"role": "INSTRUCTOR"
}
- Expected Response for Sample #2
![image](https://private-user-images.githubusercontent.com/122436546/319945259-97109417-2828-440e-bd65-7737dcfd9e3e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQ1MjU5LTk3MTA5NDE3LTI4MjgtNDQwZS1iZDY1LTc3MzdkY2ZkOWUzZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01ZTI5ZTZmNTBlZTZjNTRhMThhMDgzMmFjYWYwYWQ5MDliMjQ3NDJmNjYxNTNmZTExMDRiNGIwYjkwZDhiYzg3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.v8X79xu9I5nLlYItJEQiNIiePNlDvOaipP40-IF-Hzw)
- View results in database using below query in pgAdmin
SELECT id, first_name, last_name, role, email, phone, date_of_birth, nationality, created_by, created_date, last_modified_by, last_modified_date
FROM public.yoga_user;
id |
first_name |
last_name |
role |
email |
phone |
date_of_birth |
nationality |
created_by |
created_date |
last_modified_by |
last_modified_date |
c65d94c8-0646-4803-98d6-dffdf122c824 |
Ahmad |
Al-Deeb |
STUDENT |
ahmad@yahoo.com |
01211223344 |
2012-12-12 02:00:00 |
Egyptian |
Test User |
2024-04-05 11:51:35.289056 |
Test User |
2024-04-05 11:51:35.289056 |
914a4c5d-9916-4a07-a626-edc35dcc1226 |
Andrew |
Seif |
INSTRUCTOR |
andrew@gmail.com |
01266778899 |
2000-01-10 02:00:00 |
Egyptian |
Test User |
2024-04-05 11:52:17.970292 |
Test User |
2024-04-05 11:52:17.970292 |
- Copy one user's id and use it to execute GET request
![image](https://private-user-images.githubusercontent.com/122436546/319946197-b793848e-d710-4b8c-9a9b-589c23f275a2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQ2MTk3LWI3OTM4NDhlLWQ3MTAtNGI4Yy05YTliLTU4OWMyM2YyNzVhMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iZGExZGIzNmQzMGI1ZjNkZDU1ZDgyZGIyNzVhZDA4MGFhMTk2ZmVhZWRkYjE1MTEwMDFjZjdiYTIzZWI1YTJlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.VFpx6433la3cSOtcLobR8zYdVmInt9_SzxMeB1ybbM0)
![image](https://private-user-images.githubusercontent.com/122436546/319946385-39268147-a119-4a52-acbd-ffca685979cd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQ2Mzg1LTM5MjY4MTQ3LWExMTktNGE1Mi1hY2JkLWZmY2E2ODU5NzljZC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lNzExZGJjZTAwYTUwOGJjN2IxYjBiYzNjZTVkMzIxNTYyMTMzMDdkY2NhOTU3ODQzMmE1ODY1OWZkNjhkMDE5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.sn3h7n-JhdbAtvc3ogAh16PmWDB7rD46hZ4heDYxMzw)
![image](https://private-user-images.githubusercontent.com/122436546/319946601-40df490c-bfe6-4bc3-aa8c-793ed106deea.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQ2NjAxLTQwZGY0OTBjLWJmZTYtNGJjMy1hYThjLTc5M2VkMTA2ZGVlYS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kYWU1NTk1NDU1NWIxYzliYTgzZmU5ODZjM2FjYWQ5NDc1ZjE4YjdmNGMyNzRmYmU4ODQ3ZTcyMmVkZmE4YzUzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.7DhCWqH1iVX6hf4RiZ96vpF1p6hpOM94UjSZP-q06dI)
![image](https://private-user-images.githubusercontent.com/122436546/319946724-d33d77b6-4317-4cd3-a582-2d863514eee2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQ2NzI0LWQzM2Q3N2I2LTQzMTctNGNkMy1hNTgyLTJkODYzNTE0ZWVlMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wZTJmNjM1OTk3ZmY2YWVmZDRkY2UyOTcwNTE2MjY3ZDgzY2QyNjM3MmQ1Yjc0ZTg0YWI0ZjNlNTdkZGUxYmM4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.k_09wrAmBeyVpwdtlTQshrkFHA8SDIsR8M9Bgh-OWxM)
- Copy one user's id and use it to execute PUT request
- Updating
lastName
& Role
fields
{
"lastName": "Deeb",
"role": "INSTRUCTOR"
}
![image](https://private-user-images.githubusercontent.com/122436546/319935400-d1ad9eb4-f4b6-4f0f-8d88-1d1a69aa0eeb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTM1NDAwLWQxYWQ5ZWI0LWY0YjYtNGYwZi04ZDg4LTFkMWE2OWFhMGVlYi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0wZDVlZWNlMGFmOGUzNDViOTRiOWI1M2RiMGE3MjkyMzNiYzg1N2FlMmFiNGVlNzg4MWM5NjM2YzZjMDJlMGM1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.g07NefBlaYyNah9FQSb47M1fWWlVXh7xjyz_sMqT4eo)
![image](https://private-user-images.githubusercontent.com/122436546/319947270-b26c9b07-a7c8-4da5-9ca6-783acabac0c5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQ3MjcwLWIyNmM5YjA3LWE3YzgtNGRhNS05Y2E2LTc4M2FjYWJhYzBjNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jNjdjMGEyNWQxMTBhNDI3YzE0MTM0NzE0NjRkYzU1NjliOTAzMTg2NGY3MDgwOWY4MjY2ODdmMjY1YWRlMzc4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.V7BdMQg8SrAhxVaj8JjRlMTNhStP0JDJao5PTa2l-yg)
- View results in database using below query in pgAdmin
SELECT id, first_name, last_name, role, email, phone, date_of_birth, nationality, created_by, created_date, last_modified_by, last_modified_date
FROM public.yoga_user;
id |
first_name |
last_name |
role |
email |
phone |
date_of_birth |
nationality |
created_by |
created_date |
last_modified_by |
last_modified_date |
914a4c5d-9916-4a07-a626-edc35dcc1226 |
Andrew |
Seif |
INSTRUCTOR |
andrew@gmail.com |
01266778899 |
2000-01-10 02:00:00 |
Egyptian |
Test User |
2024-04-05 11:52:17.970292 |
Test User |
2024-04-05 11:52:17.970292 |
c65d94c8-0646-4803-98d6-dffdf122c824 |
Ahmad |
Deeb |
INSTRUCTOR |
ahmad@yahoo.com |
01211223344 |
2012-12-12 02:00:00 |
Egyptian |
Test User |
2024-04-05 11:51:35.289056 |
Test User |
2024-04-05 11:56:21.676482 |
- Copy one user's id and use it to execute DELETE request
![image](https://private-user-images.githubusercontent.com/122436546/319948700-2fc5d600-114d-4383-91f4-54d3f523c503.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQ4NzAwLTJmYzVkNjAwLTExNGQtNDM4My05MWY0LTU0ZDNmNTIzYzUwMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zNDY3NzA5YWZiMDM0MTc2OTM5NTBkMzM0ZjdiNTgxMGJhOGVlY2QxOWFiYWQwY2YzOWQ1ODUxZjliMmVjZGFlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.YXJPR7SOzTgoDtwpWDDbVu1Lzz-lrRcnq3By9IocgBw)
![image](https://private-user-images.githubusercontent.com/122436546/319948800-a60fe906-e54d-4563-9009-268ddac2933e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2MzQ2ODMsIm5iZiI6MTcxOTYzNDM4MywicGF0aCI6Ii8xMjI0MzY1NDYvMzE5OTQ4ODAwLWE2MGZlOTA2LWU1NGQtNDU2My05MDA5LTI2OGRkYWMyOTMzZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQwNDEzMDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kMTllMTVjNmM2MjVhMzViN2JhZjE3NjU4MmNiNDg3MTBiNTUxZWUyNjRlNzNiMThjMGQzYWVjZTE1YmZmMDA2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.VGXDPM_mZFEKaLfeCObUcS78KfBJhMPSjjeaRm8CStc)
- View results in database using below query in pgAdmin
SELECT id, first_name, last_name, role, email, phone, date_of_birth, nationality, created_by, created_date, last_modified_by, last_modified_date
FROM public.yoga_user;
id |
first_name |
last_name |
role |
email |
phone |
date_of_birth |
nationality |
created_by |
created_date |
last_modified_by |
last_modified_date |
914a4c5d-9916-4a07-a626-edc35dcc1226 |
Andrew |
Seif |
INSTRUCTOR |
andrew@gmail.com |
01266778899 |
2000-01-10 02:00:00 |
Egyptian |
Test User |
2024-04-05 11:52:17.970292 |
Test User |
2024-04-05 11:52:17.970292 |