Bu proje, kullanıcıların görev oluşturabildiği, görevlerini listeleyip filtreleyebildiği, JWT tabanlı güvenlik yapısına sahip bir Görev Yönetim Sistemidir.
Hem kullanıcı (USER) hem yönetici (ADMIN) rolleriyle çalışır.
| Teknoloji | Açıklama |
|---|---|
| Java 17 | Modern programlama dili |
| Spring Boot 3.x | Mikroservis çatısı |
| Spring Security + JWT | Giriş ve yetkilendirme |
| PostgreSQL | Kalıcı veritabanı çözümü |
| Spring Data JPA | ORM ve repository yönetimi |
| Lombok | Kod sadeleştirme |
| ModelMapper | DTO ↔ Entity dönüşümü |
| Swagger UI | API dokümantasyonu |
| Docker + Docker Compose | Container yönetimi |
| JUnit + Mockito | Unit testler |
Proje hem Docker ortamında hem de doğrudan yerel çalıştırma için ayrı konfigürasyonlarla uyumlu şekilde yapılandırılmıştır.
# Proje klasöründe:
./mvnw clean package -DskipTests
docker-compose up --build📌 NOT: Uygulama context yükleme testi veritabanı bağlantısı gerektirdiğinden dolayı,
testleri atlamak için -DskipTests parametresi ile build almanız önerilir.
Tüm birim testler mock'lanarak yazılmıştır, sistemin işleyişine engel değildir.
- Uygulama:
http://localhost:8080 - Swagger UI:
http://localhost:8080/swagger-ui/index.html
PostgreSQL ve Spring Boot uygulaması aynı anda ayağa kalkar.
PostgreSQL container'ı başlatıldığında proje dizinindeki
init.sqldosyası otomatik çalışır. Bu dosya, tablo yapılarını ve varsayılanadminkullanıcısını oluşturur.
- PostgreSQL bilgisayarınızda kurulu ve çalışır durumda olmalı.
- Veritabanı adı:
task_manager(manuel olarak oluşturmalısınız). application-local.propertiesiçinde veritabanı bağlantı bilgileri (localhost, kullanıcı adı, şifre vs.) tanımlanmış olmalı.- Aktif profil olarak
localkullanılmalı (default olarak zatenlocaltanımlıdır).
Çalıştırmak için:
./mvnw spring-boot:runManuel çalıştırmada
init.sqldosyasını PostgreSQL veritabanınıza kendiniz çalıştırmalısınız (proje kök dizininde bulunur).
Test için varsayılan bir admin hesabı mevcuttur:
- Kullanıcı adı:
admin - Şifre:
admin123
Giriş yaptıktan sonra JWT token ile ADMIN yetkisi gerektiren işlemleri yapabilirsiniz.
| Rol | Açıklama |
|---|---|
| USER | Görev ekleyebilir, kendi görevlerini listeleyebilir, filtreleyebilir |
| ADMIN | Tüm görevleri güncelleyebilir, silebilir, tüm kullanıcı görevlerini görebilir |
POST /auth/register
POST /auth/loginLogin sonrası dönen JWT token'ı
Authorization: Bearer <token>şeklinde tüm isteklerde kullanılır.
POST /auth/register
Content-Type: application/json
{
"username": "messi",
"password": "messi123"
}"Kayıt Başarılı"
| Endpoint | Açıklama |
|---|---|
POST /tasks |
Görev oluştur |
GET /tasks |
Görevleri listele |
PUT /tasks/{id} |
Görev güncelle |
DELETE /tasks/{id} |
Görev sil |
GET /tasks?status=TODO&priority=HIGH&sortBy=createdAt&direction=descAşağıdaki servis sınıfları için kapsamlı testler yazıldı:
AuthServiceImplTestTaskServiceImplTest
Mock ve bağımsız test prensiplerine göre JUnit 5 + Mockito ile yazıldı.
Dockerfile: Uygulama içindocker-compose.yml: PostgreSQL + Uygulama birlikte ayağa kalkar- Kalıcı volume sayesinde veriler silinmez
- Tüm ortam değişkenleri
environmentüzerinden aktarılır
spring.jpa.hibernate.ddl-auto=nonekullanıldı – veritabanı manuel olarak init.sql ile oluşturulmalıdır.ModelMapperile DTO ↔ Entity dönüşümü sağlandı.- Role dayalı yetkilendirme uygulandı.
- Swagger UI aktif durumdadır (
/swagger-ui/index.html). - Varsayılan bir
ADMINKullanıcı eklendi. - Register olan her kullanıcı
USERolarak veritabanına eklendi. - Uygulama,
spring.profiles.activeile profil bazlı konfigürasyon kullanır (application-local.properties,application-docker.properties).
Bu proje 32bit için Mehmet Çokol tarafından geliştirilmiştir.