سامانه مدیریت انبار — فرانتاند متصل به استک (FastAPI + PostgreSQL + Casdoor)
معماری نهایی:
مرورگر (فرانت HTML — inventory-system.html / change-inventory.html)
│
├── ورود: Casdoor (OIDC + PKCE) یا رمز آزمایشی محلی
│ → نقش/پروژه از پروفایل محلی (ایمیل ⇄ مدیر پروژه)
│
└── داده: هدرهای X-User-Role / X-Project-Id / X-User-Name-B64
→ FastAPI (/api/v1) → PostgreSQL
اجرا
استک (Docker):
cd v1.2
docker compose up -d --build
- فرانت: http://localhost:3000 (nginx — پراکسی /api به بکاند)
- API: http://localhost:8000/docs
- Casdoor: http://localhost:8080 (admin/123) — بعد از seed: کاربرها mousavi/goli/mohaghegh/razaei با رمز 123456
- seed استک:
py seed_stack.py(واحد/پروژه/برند/متریال/انبار/تراکنش نمونه) - seed Casdoor:
cd casdoor && py seed.py(سازمان/اپلیکیشن OIDC/کاربران + تولید casdoor-config.js)
اجرای محلی بدون Docker برای فرانت:
py -m http.server 8123
و app-config.js را با apiBase: 'http://localhost:8000/api/v1' بگذارید.
ساختار
| فایل | نقش |
|---|---|
inventory-system.html |
داشبورد، کنترل روزانه، انبارها، سازماندهی، ورود |
change-inventory.html |
صفحه تغییر موجودی (فایل مستقل — فقط «برگشت به داشبوردها») |
core.js |
هویت/نشست + لایه API (fetch + هدرهای نقش) + آینه دادهها |
style.css |
استایل مشترک |
casdoor-config.js |
تنظیمات اتصال به Casdoor (تولیدشده توسط seed) |
app-config.js |
آدرس API بکاند |
callback.html |
بازگشت OIDC (تبدیل کد به توکن و نشست) |
test-logic-v3.mjs |
تست (هویت + لایه API در برابر استک واقعی) → ALL_LOGIC_V3_OK |
v1.2/ |
استک: backend (FastAPI) + frontend (nginx) + sql + seed_stack.py + docker-compose.yml |
casdoor/ |
docker-compose Casdoor + PostgreSQL + seed.py |
مدل دسترسی
- ادمین: فقطخواندنی برای موجودی؛ مدیریت ساختار (پروژه/انبار/مدیران) در «سازماندهی».
- مدیر پروژه: ثبت و مشاهده فقط در انبارهای پروژه خودش (اعمال در بکاند با هدر X-Project-Id).
- کاربران محلی (ایمیل ⇄ نقش/پروژه) در
localStorageنگهداری میشوند؛ هویت واقعی از Casdoor. - رمزهای آزمایشی محلی: 10 ادمین، 1/2 مدیر پروژه برج آیتا، 3 مدیر پروژه الماس.