Spring Boot + Docker + Postgres + Repository ile hazırlanmış bir Rest api'dir.
Kullanıcı tanımı ile başlar ve her kullanıcıya kendine ait liste hazırlmasına imkan vermektedir. Aynı zamanda listelerini silebilir ve tüm içeriklerini göstermektedir.
Kullanıcılar listelerine item ekleyebilmektedir veya item silebilmektedir.
Genel kullanım şöyle olabilir:
1- User tanımı yapılır.
2- User'lar için TodoList oluşturulur.
3 -TodoList'lere item eklenir.
4- Kullanıcıya ait liste görüntülenir.
5- Kullanıcıya ait bir listenin item'ları görüntülenebilir.
6- Tüm kullanıcılar listelenebilir.
DB DIAGRAM
Database'de 3 tablo oluşmaktadır.
td_user: User tanımları tutulur
list_item: Listelere ait item'lar.
todo_list: Listeler
Hexagonal Mimari
Projenin mimarisi şu şekildedir.
UYGULAMAYI ÇALIŞTIRMA
Dockerhub TodolistApi docker image'ın indirilebileceği adres: [https://hub.docker.com/r/msahin25/todo-list-api]]
Docker image indirme komutu: docker pull msahin25/todo-list-api
[1] Docker ile Postgres DB ayağa kaldırmak için
docker-compose -f "your-workspace"/todoList-rest-api/srcmain/resources/docker-compose.yml up -d
[2] Configleri saklamak için gerekli local path volume oluşturur. application.properties ve log4j2.xml dosyalarının dışarıdan değiştirilebilmesine olanak sağlamak için bu şekilde bir eklenti yapılmıştır.
docker volume create --name v_todo_api_config --opt type=none --opt device=c:/todoapp/config --opt o=bind
device= --> config dosyasının path'i yazılmalıdır.
[3] Logları saklamak için local path volume oluşturur. Uygulama logları bu dizinden görülebilir.
docker volume create --name v_todo_api_logs --opt type=none --opt device=c:/todoapp/logs --opt o=bind
device= --> log dosyasının path'i yazılmalıdır.
[4] application.properties ve log4j2.xml in manuel kopyalanması
2 nolu maddedeki device komutundaki path'e ("c:/todoapp/config") application.properties ve log4j2.xml dosyalarının kopyalanması gerekmektedir.
[5] Application.properties içindeki postgres ip'si güncellenebilir. Veya application.properties ve log4j2.xml içinde dışarıdan değişiklik yapılabilir.
[6] Uygulama aşağıdaki komutla çalıştırılır.
docker run -d -p 9090:9090 --name=todo-api-test --restart=always -v v_todo_api_logs:/usr/app/logs -v v_todo_api_config:/usr/app/config msahin25/todo-list-api:0.0.4
-p 9090:9090 ile verilen ilk port parametresi dışarıdan api'ye erişilen portdur. Bu port değiştirilirse servis url'indeki portun değiştirilmesi gerekmektedir.
İkinci port parametsesi ise application.properties içindeki "server.port" değişkeni ile aynı olmalıdır.
**Eclipse üzerinden çalıştırma **
[1] IDE üzerinden main sınıf olarak TodoListApplication seçilir.
[2] Aşağıdaki url'ler üzerinden kullanılabilir.
ECLIPSE lombok kurulumu
Projede lombok kullanılmıştır. Eclipse'te kurulu değilse aşağıdaki gibi kurulabilir.
https://projectlombok.org/setup/eclipse
POST Add User
http://localhost:9090/user/addUser
Örnek Request:
{
"name": "User1",
"status": "A"
}
DELETE Delete User
http://localhost:9090/user/deleteUser?username=User1
GET All Users
http://localhost:9090/user/getUsers
GET TodoList with list name
http://localhost:9090/list/getList?name=ReadBook&username=User1
**POST TodoList **
http://localhost:9090/list/add?username=User1
Örnek Request:
{
"name": "ReadBook",
"items": [
{
"name": "Küçük Prens",
"status": "O",
"createDate": "2021-31-05T09:12:33.001Z",
"updateDate": "2021-31-05T09:12:33.001Z",
"description": "Read küçük prens"
}
],
"createDate": "2016-08-29T09:12:33.001Z",
"updateDate": "2021-05-30T12:48:13.422Z",
"status": "O",
"description": "Read book"
}
**GET All TodoList **
http://localhost:9090/list/getUserList?username=User1
DELETE TodoList
http://localhost:9090/list/delete?name=Haberler3&username=User1
GET TodoList item with item name, list name and username
http://localhost:9090/listItem/getItem?itemName=Küçük Prens&listName=ReadBook&username=User1
POST Add TodoList item with list name and user name
http://localhost:9090/listItem/addItem?listName=Haberler2&username=muhammet
Örnek Request:
{
"name": "ListItem1",
"status": "O",
"createDate": "2021-31-05T09:12:33.001Z",
"updateDate": "2021-31-05T09:12:33.001Z",
"description": "Add list Item"
}
DELETE Todolist item
http://localhost:9090/list/deleteItem?itemName=Küçük Prens?listName=ReadBook&username=User1
SONAR ANALİZ RAPORU
Proje Sonar Cloud'da analiz edilmiştir. Rapor aşağıdaki gibidir.