Skip to content

MehmetCokol/task-management-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📝 Görev Yönetim Sistemi

🌟 Proje Amacı

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.


🛠 Kullanılan Teknolojiler

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

🚀 Projeyi Çalıştırma

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.

1. Docker ile Çalıştırmak (Tavsiye Edilen)

# 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.sql dosyası otomatik çalışır. Bu dosya, tablo yapılarını ve varsayılan admin kullanıcısını oluşturur.


2. Manuel Çalıştırmak

  • PostgreSQL bilgisayarınızda kurulu ve çalışır durumda olmalı.
  • Veritabanı adı: task_manager (manuel olarak oluşturmalısınız).
  • application-local.properties içinde veritabanı bağlantı bilgileri (localhost, kullanıcı adı, şifre vs.) tanımlanmış olmalı.
  • Aktif profil olarak local kullanılmalı (default olarak zaten local tanımlıdır).

Çalıştırmak için:

./mvnw spring-boot:run

Manuel çalıştırmada init.sql dosyasını PostgreSQL veritabanınıza kendiniz çalıştırmalısınız (proje kök dizininde bulunur).

🔐 Varsayılan Admin Kullanıcısı

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.


🔐 Yetki Yapısı

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

🛎 API Kullanımı

🔑 Auth

POST /auth/register
POST /auth/login

Login sonrası dönen JWT token'ı Authorization: Bearer <token> şeklinde tüm isteklerde kullanılır.

📥 Örnek Kayıt İsteği (/auth/register)

POST /auth/register
Content-Type: application/json

{
  "username": "messi",
  "password": "messi123"
}

📤 Örnek Yanıt

"Kayıt Başarılı"

✅ Task CRUD operations

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

🔎 Filtreleme ve Sıralama

GET /tasks?status=TODO&priority=HIGH&sortBy=createdAt&direction=desc

🥪 Unit Testler

Aşağıdaki servis sınıfları için kapsamlı testler yazıldı:

  • AuthServiceImplTest
  • TaskServiceImplTest

Mock ve bağımsız test prensiplerine göre JUnit 5 + Mockito ile yazıldı.


🐳 Docker Yapılandırması

  • Dockerfile: Uygulama için
  • docker-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

📍 Teknik Notlar

  • spring.jpa.hibernate.ddl-auto=none kullanıldı – veritabanı manuel olarak init.sql ile oluşturulmalıdır.
  • ModelMapper ile DTO ↔ Entity dönüşümü sağlandı.
  • Role dayalı yetkilendirme uygulandı.
  • Swagger UI aktif durumdadır (/swagger-ui/index.html).
  • Varsayılan bir ADMIN Kullanıcı eklendi.
  • Register olan her kullanıcı USER olarak veritabanına eklendi.
  • Uygulama, spring.profiles.active ile profil bazlı konfigürasyon kullanır (application-local.properties, application-docker.properties).

✍️ Geliştirici Bilgisi

Bu proje 32bit için Mehmet Çokol tarafından geliştirilmiştir.

İletişim:
📧 mehmetcokol0@gmail.com

About

Spring Boot 3, JWT Security ve PostgreSQL tabanlı görev yönetim uygulaması.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors