Commit Graph
11 Commits
Author SHA1 Message Date
MMD 5ed082631e فرانت‌اند: ویرایش زنده درجا — دوقلوی دیجیتال سایت برای ادمین
لایه ویرایش بصری روی سایت واقعی (بدون داشبورد جدا):

- ورود ادمین از مسیر پنهان /admin/login با توکن JWT (localStorage) و
  AdminContext شامل isEditMode و وضعیت ذخیره (همگام/در حال ذخیره/خطا)
- AdminBar شناور پایین صفحه (فقط برای کاربر واردشده): کلید حالت ویرایش،
  وضعیت ذخیره، خروج — حالت ویرایش در sessionStorage می‌ماند
- InlineEdit: در حالت عادی دقیقاً همان HTML قبلی (بدون تغییر چیدمان)؛
  در حالت ویرایش کادرخط‌چین + contentEditable با ذخیره خودکار در blur
  (Enter ذخیره، Esc لغو) — وایرایش‌شده روی همه متن‌های سایت: هیرو،
  تیتر بخش‌ها، هیرو صفحات، داستان، فرم تماس، خبرنامه، فوتر، منو،
  برچسب‌های وضعیت پروژه و...
- کشوی عمومی EntityDrawer با پیکربندی متمرکز برای ۱۴ مجموعه (خدمات،
  پروژه‌ها، مقالات، نظرات، سوالات، تیم، تایم‌لاین، آمار، چرا آرامش،
  مدل‌های سرمایه‌گذاری، مراحل کار، دفاتر، گالری، منو): ویرایش چندفیلدی،
  افزودن، حذف و جابه‌جایی ترتیب (▲▼) با ذخیره خودکار هر فیلد
- دکمه‌های شناور ویرایش/حذف/ترتیب فقط در حالت ویرایش روی آیتم‌ها
- کشوهای یگانه: برند و لوگو، تنظیمات هیرو، فرم تماس، خبرنامه، فوتر،
  قبل/بعد و نقل‌قول داستان — آپلود تصویر به MinIO از همان‌جا
- به‌روزرسانی خوش‌بینانه SiteContext (updateSite) پس از هر PATCH؛
  مسیرها در حالت ویرایش کلیک نمی‌شوند؛ breadcrumb محافظ beforeunload
2026-09-06 21:57:46 +03:30
MMD 6e422ec3dc بک‌اند: ویرایش جزئی (PATCH) و ترتیب‌بندی مجموعه‌ها برای ویرایش زنده
- PATCH /api/admin/{resource}/{id} — ویرایش جزئی؛ فقط فیلدهای ارسال‌شده
  به‌روزرسانی می‌شوند (PUT قبلاً کل رکورد را جایگزین می‌کرد و برای
  ویرایش زنده قابل استفاده نبود). اسکیماهای Patch به‌صورت خودکار از
  اسکیماهای In با create_model ساخته می‌شوند (هر ۲۴ منبع).
- ستون position برای ۱۴ جدول مجموعه‌ای (خدمات، پروژه‌ها، مقالات، نظرات،
  سوالات، تیم، تایم‌لاین، آمار، چرا آرامش، مدل‌های سرمایه‌گذاری، مراحل کار،
  دفاتر، گالری، منو) — مهاجرت سبک idempotent در startup و seed
  (ALTER TABLE ADD COLUMN IF NOT EXISTS) تا دیتابیس‌های موجود هم ارتقا یابند
- POST /api/admin/{resource}/reorder — ذخیره ترتیب جدید بر اساس لیست id
- خواندن عمومی بر اساس (position, id) مرتب می‌شود؛ رکورد جدید در انتهای لیست
- seed فقط جدول‌های خالی را با position صحیح پر می‌کند
2026-09-06 21:57:07 +03:30
MMD bf3c67f405 به‌روزرسانی README ریشه: معماری جدید (Traefik + Caddy + MinIO)
- نمودار مسیریابی Traefik (/ و /api و /media) جایگزین توضیحات nginx
- مستندسازی «همه متن‌ها در دیتابیس» و آپلود تصویر به MinIO
- پورت‌های جدید: سایت ۵۱۷۳ (Traefik)، کنسول MinIO ۹۰۰۱
- رفتار seed در ارتقا (فقط جدول‌های خالی) و پروکسی dev فرانت‌اند
2026-09-06 20:51:26 +03:30
MMD 3a7c7b0908 زیرساخت: Traefik به‌جای nginx به‌عنوان نقطه ورود واحد + سرو MinIO
- سرویس traefik:v3 روی پورت ۵۱۷۳ (پورت هاست) — تنها نقطه ورود استک:
  /       → frontend (فایل‌های استاتیک SPA)
  /api    → backend:8000
  /media  → MinIO:9000 با rewrite به باکت aramesh-media
  مسیریابی با Docker labels در docker-compose.yml
- حذف کامل nginx: Caddy فقط فایل‌های استاتیک را سرو می‌کند
  (fallback به index.html برای SPA، کش یک‌ساله immutable برای assets/)
- سرویس minio + minio-setup (ساخت خودکار باکت و دسترسی عمومی خواندن —
  یک‌بار در اولین اجرا)؛ کنسول MinIO روی پورت ۹۰۰۱
- وابستگی backend به سلامت db و minio
- vite dev: پروکسی /api و /media به Traefik برای هم‌مبدأ بودن در توسعه
2026-09-06 20:49:17 +03:30
MMD 897fac4f15 ذخیره‌سازی تصاویر با MinIO (S3) و انتهای‌نقطه آپلود ادمین
- POST /api/admin/upload با احراز هویت JWT: ذخیره فایل در باکت S3 و
  برگرداندن URL نسبی /media/<سال>/<ماه>/<uuid>.<پسوند>
- فرمت‌های مجاز: jpg، png، webp، gif، avif — حداکثر ۱۰ مگابایت (قابل تنظیم)
- افزودن boto3 و python-multipart به وابستگی‌ها
- تنظیمات جدید: S3_ENDPOINT، S3_ACCESS_KEY، S3_SECRET_KEY، S3_BUCKET،
  MEDIA_PUBLIC_BASE، MEDIA_MAX_UPLOAD_MB (قابل تعریف در .env)
- URL نسبی برمی‌گردد تا بک‌اند ذخیره‌سازی (MinIO/R2/هر S3) بدون تغییر
  محتوای دیتابیس قابل تعویض باشد
- به‌روزرسانی .env.example و README (بخش تصاویر و MinIO)
2026-09-06 20:49:01 +03:30
MMD 1fde4e30fc انتقال تمام محتوای متنی سایت به دیتابیس — همه متن‌های فرانت‌اند از GET /api/site خوانده می‌شوند 2026-09-06 20:16:17 +03:30
MMD 8bb303dda2 ری‌برند: تغییر نام «آرامش پلازا» به «گروه ساختمانی آرامش» در بک‌اند و مستندات
- main.py: عنوان و توضیحات اپ FastAPI و نام اپ در پاسخ سلامت (ArameshPlaza API به Aramesh Building Group API)
- api/public.py: نام اپ در پاسخ سلامت
- seed.py و seed_data.py: توضیحات اسکریپت و داده‌های اولیه (نام برند، ایمیل، تایم‌لاین، تستیمونیال، FAQ)
- README و README بک‌اند: متن‌های مرتبط با برند

شناسه‌های داخلی دیتابیس (نام دیتابیس arameshplaza) بدون تغییر باقی مانده‌اند.
2026-08-31 17:52:36 +03:30
MMD 40ed7b5caf ری‌برند: تغییر نام «آرامش پلازا» به «گروه ساختمانی آرامش» در فرانت‌اند
- data/site.ts: نام برند، ایمیل تماس (info@arameshplaza.com به info@arameshbuildinggroup.com)، تیتر تایم‌لاین، نقل‌قول تستیمونیال و سؤال FAQ
- کامپوننت‌ها: کپی فوتر و کپی‌رایت، aria-label تماس شناور، معرفی و alt تصویر هیرو، لید و alt گالری، کپی بخش داستان، تیتر خبرنامه، تیتر «چرا گروه ساختمانی آرامش»، لید مقالات
- صفحات: لید درباره ما، کپی مشارکت در سرمایه‌گذاری، لید وبلاگ
- index.html: عنوان صفحه
2026-08-31 17:52:36 +03:30
Behrad ad75f7a7bd پروژه کامل: فرانت متصل به API + داکرایز
- اتصال کامل فرانت به API: همه محتوای سایت (پروژه‌ها، مقالات، خدمات، برند و...) از بک‌اند خوانده می‌شود (SiteProvider + useSite)
- فرم تماس و خبرنامه متصل به بک‌اند و تست‌شده در مرورگر
- ساختار مونوریپو: frontend/ + backend/
- Dockerfile برای هر دو بخش + docker-compose (PostgreSQL + FastAPI + nginx)
- nginx با پروکسی /api — بدون نیاز به CORS در حالت داکر
- README کامل فارسی
2026-08-29 13:26:58 +03:30
Behrad ed14435485 نسخه ۲ بک‌اند آرامش پلازا — بازنویسی کامل
- API عمومی محتوای سایت (پروژه‌ها، مقالات، خدمات و...)
- فرم تماس و خبرنامه با اعتبارسنجی سرور
- پنل مدیریت با JWT و CRUD کامل + مدیریت پیام‌ها و مشترکین
- اسکریپت seed با داده‌های واقعی سایت
- تست‌شده: ۳۶/۳۶ انتهاپوینت
2026-08-29 12:55:13 +03:30
Behrad 854309f976 اولین نسخه بک‌اند آرامش پلازا 2026-08-27 15:15:12 +03:30