Spring Boot and React are used to develop this project.
Using OpenAPI, via Spring-doc, the API is documented.
JWT token is used for authentication operations. A role based authorization is applied. The JWT token is stored as cookie on web browser to increase the security.
If the client is not a browser the token is returned as it is to respond the login requests.
![{66B560F4-51DD-43CE-96BA-0D294F5DF354}](https://private-user-images.githubusercontent.com/89942570/368879569-5b07c28a-231b-451c-ba3c-ce736de4d915.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MjY2MzEsIm5iZiI6MTczOTQyNjMzMSwicGF0aCI6Ii84OTk0MjU3MC8zNjg4Nzk1NjktNWIwN2MyOGEtMjMxYi00NTFjLWJhM2MtY2U3MzZkZTRkOTE1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDA1NTg1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWVlNTVjNDc0ZjEyMzE3NmZiNzg5MDJjMjFkZDYzMGQ4MmY3ZDFhNjEyZDMyNGU1M2U3MzYxMmNmYjYyNGI2ZjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.0rVn2PGGBD8wLs4Dz7_sq-KdNb2caLKKZrza90cdcxE)
![{8CF38444-9034-429D-9390-77F0FE652B44}](https://private-user-images.githubusercontent.com/89942570/368883994-e6d14491-890f-4057-858d-0db0140ea1d2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MjY2MzEsIm5iZiI6MTczOTQyNjMzMSwicGF0aCI6Ii84OTk0MjU3MC8zNjg4ODM5OTQtZTZkMTQ0OTEtODkwZi00MDU3LTg1OGQtMGRiMDE0MGVhMWQyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDA1NTg1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYxMWQ0YWUwOWEzNWE2NTMyMDE4OWVmMTY0YTk0ZjgzYWRmZjMwZjBjMDdjZjBhNzE3NWJkMWExODc2NDJlYjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.XoL7tCBAsm2mqeF1M1nL4Gc1gis8zCVjFtb9Iw-nbvQ)
![{348CA995-A6BD-4DAE-839E-140B3A048795}](https://private-user-images.githubusercontent.com/89942570/368884727-d3584f99-1657-4c2b-9f09-35f31d6b3d7a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MjY2MzEsIm5iZiI6MTczOTQyNjMzMSwicGF0aCI6Ii84OTk0MjU3MC8zNjg4ODQ3MjctZDM1ODRmOTktMTY1Ny00YzJiLTlmMDktMzVmMzFkNmIzZDdhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDA1NTg1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg4NmQyZjliYjRlYjM3MGYzNTMxMzc1Mjc5OTcyNDIzNWE0ZWM5MDVmODE4ZWVlOTU3ZjRkMGEyOGE0YzA4MTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.-jsijIMB2PG8YtwH0rs5M6wGMTRvJI58r12VTG3FtL4)
Customers are filtered by using Java Stream API.
As an alternative the filtering operation takes place on DB, but not the memory.
![{0A5CE8A0-6F4D-4A8A-BB34-0B551DA93F27}](https://private-user-images.githubusercontent.com/89942570/368886212-4d48c2ed-51b5-4ffb-a302-3fb05b1c7a93.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MjY2MzEsIm5iZiI6MTczOTQyNjMzMSwicGF0aCI6Ii84OTk0MjU3MC8zNjg4ODYyMTItNGQ0OGMyZWQtNTFiNS00ZmZiLWEzMDItM2ZiMDViMWM3YTkzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDA1NTg1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTkzZmJmMDk0ZjUyYmYzZDhlNDE0ZjNkNDc0OTQ4ZmI4NzhhZTZlMDg3MmY2MTFlMmE4N2IyZjExM2UzMzhiNDgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.PV414i0RnAnrQDWzwgnS_7eeNrV0q1qhQFYd9ZjyUv0)
There are form validations too:
![{5B2917F4-9579-45C8-865A-2CC39DEAD755}](https://private-user-images.githubusercontent.com/89942570/368890561-9a9f9d90-feb1-4650-b688-b6db4a8eb870.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MjY2MzEsIm5iZiI6MTczOTQyNjMzMSwicGF0aCI6Ii84OTk0MjU3MC8zNjg4OTA1NjEtOWE5ZjlkOTAtZmViMS00NjUwLWI2ODgtYjZkYjRhOGViODcwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDA1NTg1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJlMTg4NTk3NzZiZjY2NzEzZTdkZGM5ODY4NjgyNTk1NWM2OWI4YmFiMTMyY2MwZTg1ZTlmNjc2YTI4MTc3MzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.I60MqSa4Qf4WUwTnCdfSOSxU2wzmJ9ruDA4iXuofxZ4)
![{A7528B6B-2A05-425A-A787-597177AADAC3}](https://private-user-images.githubusercontent.com/89942570/368890751-ce92e2b3-9565-4701-aa83-4622bed0b441.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0MjY2MzEsIm5iZiI6MTczOTQyNjMzMSwicGF0aCI6Ii84OTk0MjU3MC8zNjg4OTA3NTEtY2U5MmUyYjMtOTU2NS00NzAxLWFhODMtNDYyMmJlZDBiNDQxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDA1NTg1MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk5ZTg0ZTE2MDVhYzllNDUzMzU1MTBiYTgzZjZkMzVjOTVkODk4YTkwMjM2NDIxMGJjMDgwN2M0ODQzMDRhYTUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.q7TN6ndueBuTOhHEWJOjwZe_DJ2_rQVVjdGylqKCm10)