envanter.io

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ı.

Rol
Full-stack geliştirici
Ekip
2 kişi · Arda Ardıç ile
Yıl
2026
Durum
GitHub’da açık kaynak
Java 17Spring Boot 3.5Spring SecurityMySQLReact 18TypeScriptTanStack QueryJWT
01/api/auth # Auth02/api/users # Users03/api/products # Products04/api/categories # Categories05/api/warehouses # Warehouses06/api/suppliers # Suppliers07/api/supplier-orders # Supplier orders08/api/assets # Assets09/api/inventory # Stock movements10/api/stock-requests # Stock requests11/api/notifications # Notifications12/api/dashboard # Dashboard
BEKLIYORONAYLANDIYOLDATESLIM_ALINDIREDDEDILDI
67REST uç noktası119birim testi

Stoktan tedarikçiye, tek bir sistem.

Mimari
REST API + SPA
Roller
Admin, yönetici, personel, tedarikçi
Veritabanı
MySQL · JPA / Hibernate
Dokümantasyon
Swagger UI · .http koleksiyonları

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ı.

Projedeki rolüm

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.

Neler yapabiliyor?

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.

Roller & depo kapsamı

ADMIN, MANAGER, STAFF ve SUPPLIER rolleri; yöneticiler ve personel yalnızca kendi depolarının verisiyle çalışır.

Katalog

Ü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 hareketleri

Stok doğrulamalı giriş / çıkış / depolar arası transfer ve depo bazlı stok görünümleri.

Demirbaşlar

Zimmetleme, iade, depo transferi, bakım ve hurdaya ayırma — her biri kendi geçmişiyle.

Tedarikçi siparişleri

BEKLIYOR → ONAYLANDI → YOLDA → TESLIM_ALINDI (veya REDDEDILDI); teslim alınan sipariş stoğu hedef depoya işler.

Talepler & bildirimler

Personel stok talebi oluşturur, yönetici onaylar ya da reddeder; talepler, sipariş durumları ve kritik stok için uygulama içi bildirimler.

Tedarikçi portalı

SUPPLIER kullanıcıları için ayrı /supplier portalı: kendi ürünleri, fiyat güncelleme, siparişler ve hareket geçmişi.

Dokümantasyon

Swagger UI (springdoc-openapi) ile etkileşimli API dokümantasyonu ve REST Client .http istek koleksiyonları.

Nasıl kurulu?

Backend

Java 17Spring Boot 3.5Spring SecuritySpring Data JPAHibernateValidationMailjjwt 0.12

Veri

MySQL

Frontend

React 18TypeScript 5.6Vite 5Tailwind CSS 3TanStack Query 5AxiosReact Router 6

Doküman & test

springdoc-openapiSwagger UIJUnit 5Mockito

Masaüstü sürümü

Java SwingFlatLafJDBCMySQL

Mimari

Bağlantılar üzerindeki noktalar veri akışını gösterir.
envanter — architectureSpring Boot APIReact SPAVite · TanStack QueryAxios + JWT interceptorana uygulama + tedarikçi portalıSpring SecurityJWT filtresi · BCryptController’lar12 grup · 67 uç noktaServisleriş kuralları · 119 birim testiSpring Data JPAHibernate repository’leriMySQLenvanter_webSMTPgeçici şifre e-postasıSwagger UIspringdoc-openapiREST /api/* · JWTJPAMailOpenAPIenvanter — architectureSpring Boot APIReact SPAVite · TanStack Query · Axiosana uygulama + tedarikçi portalıSpring SecurityJWT filtresi · BCryptController’lar12 grup · 67 uç noktaServisleriş kuralları · 119 birim testiSpring Data JPAHibernate repository’leriMySQLenvanter_webSMTPgeçici şifreREST · JWTJPA

Kurallar kodda, veri tutarlı.

01

Durum makinesiyle tedarikçi siparişleri

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.

02

Depo kapsamlı erişim

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.

03

Silme bağımlılık kontrolleri

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.

04

Güvenli hesap akışı

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.

05

Arayüzde merkezi oturum yönetimi

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.

06

Bağlamsız, hızlı testler

119 birim testi 8 servis sınıfını Spring context ya da veritabanı olmadan, JUnit 5 ve Mockito ile test ediyor.

Rakamlarla

119birim testi
67REST uç noktası
12uç nokta grubu
4kullanıcı rolü