Kimlik doğrulama
Spring Security ve BCrypt ile durumsuz JWT; kayıt, giriş, e-postayla geçici şifre gönderen “şifremi unuttum” ve zorunlu şifre değiştirme.
Stokları, çok depolu envanteri, demirbaşları, tedarikçi siparişlerini ve stok taleplerini JWT ve rol tabanlı erişimle tek yerde toplayan full-stack web uygulaması.
envanter; bir şirketin ürün stoklarını birden fazla depoda takip etmesi, demirbaşlarını (zimmet, transfer, bakım) yönetmesi ve tedarikçi siparişlerini uçtan uca izlemesi için geliştirilmiş bir envanter ve varlık yönetim sistemi.
Web sürümü iki parçadan oluşuyor: Spring Boot ile yazılmış bir REST API (envanter-api) ve React + TypeScript ile yazılmış tek sayfalık bir arayüz (envanter-ui). Projenin ilk sürümü ise MySQL’e JDBC ile bağlanan bir Java Swing masaüstü uygulamasıydı.
envanter bir takım projesi: Arda Ardıç ile iki kişilik bir ekip olarak geliştirdik. API ve arayüz ortak çalışmamızın ürünü; bu yüzden burada parçaları kişilere ayırmıyorum.
Proje; kimlik doğrulama ve rol bazlı yetkilendirmeden, durum makinesiyle ilerleyen tedarikçi siparişlerine ve birim testlerine kadar uçtan uca bir full-stack uygulamanın tüm katmanlarını kapsıyor.
Spring Security ve BCrypt ile durumsuz JWT; kayıt, giriş, e-postayla geçici şifre gönderen “şifremi unuttum” ve zorunlu şifre değiştirme.
ADMIN, MANAGER, STAFF ve SUPPLIER rolleri; yöneticiler ve personel yalnızca kendi depolarının verisiyle çalışır.
Ürün, kategori, depo ve tedarikçiler; çoka-çok ürün ↔ tedarikçi ilişkisi, ürün başına depo bazlı stok özeti ve hareket geçmişi.
Stok doğrulamalı giriş / çıkış / depolar arası transfer ve depo bazlı stok görünümleri.
Zimmetleme, iade, depo transferi, bakım ve hurdaya ayırma — her biri kendi geçmişiyle.
BEKLIYOR → ONAYLANDI → YOLDA → TESLIM_ALINDI (veya REDDEDILDI); teslim alınan sipariş stoğu hedef depoya işler.
Personel stok talebi oluşturur, yönetici onaylar ya da reddeder; talepler, sipariş durumları ve kritik stok için uygulama içi bildirimler.
SUPPLIER kullanıcıları için ayrı /supplier portalı: kendi ürünleri, fiyat güncelleme, siparişler ve hareket geçmişi.
Swagger UI (springdoc-openapi) ile etkileşimli API dokümantasyonu ve REST Client .http istek koleksiyonları.
Sipariş durumları tanımlı bir akışla ilerliyor; sipariş teslim alındığında stok hedef depoya işleniyor. Böylece sipariş ve stok kayıtları birbiriyle tutarlı kalıyor.
Rol kontrolü yalnızca uç nokta düzeyinde değil veri düzeyinde de uygulanıyor: MANAGER ve STAFF kullanıcıları sadece kendi depolarının kayıtlarıyla çalışabiliyor.
Başka kayıtların bağlı olduğu bir varlık silinmek istendiğinde API 409 Conflict döndürüyor; global exception handler tutarlı hata yanıtları üretiyor, listeler sayfalı dönüyor.
Kendi kaydolan hesaplar bir admin aktifleştirene kadar pasif başlıyor. “Şifremi unuttum” e-postayla geçici şifre gönderiyor ve arayüz kullanıcıyı şifresini değiştirmeye zorluyor.
Axios interceptor’ları her isteğe JWT ekliyor ve 401 yanıtında otomatik çıkış yaptırıyor; route guard’lar yönetim sayfalarını yetkisiz rollerden gizliyor, bildirimler 30 saniyede bir yenileniyor.
119 birim testi 8 servis sınıfını Spring context ya da veritabanı olmadan, JUnit 5 ve Mockito ile test ediyor.