مدیریت پلتفرم
برد داخلی کانبان
تختهی /admin/board، یک تختهی کانبان اختصاصی برای تیم پلتفرم است تا کارهای ارسالشده، فعالیتهای جاری و بکلاگهای راکد را پیگیری کنند. فقط برای استفادهی داخلی — مشتریان هرگز به آن دسترسی ندارند و از طریق پنل مدیریت مشتری نیز قابل دسترسی نیست (در صورت ورود با نقشهای دیگر، خطای ۴۰۴ نمایش داده میشود).
عمداً هیچ لینکی در منوی کناری پنل مدیریت وجود ندارد — این تخته یک ابزار داخلی برای تیم است و نیازی به نمایش آن در منو نیست. فقط از طریق آدرس مستقیم (/admin/board) یا این صفحهی مستندات قابل دسترسی است.
چرا این تخته ساخته شده؟
کارهای عقبمانده در طول ماهها جمع میشوند — بازخوردهای خریداران، یادداشتهای طراحی، قابلیتهایی که به تعویق افتادهاند. بدون یک جای ثابت و همیشگی، این موارد در پیامهای اسلک، فایلهای پراکنده یا ذهن آدمها گم میشوند. این تخته، جایگاه دائمی این موارد است. تیم توسعه در جلسات آینده از آن به عنوان نقطهی شروع استفاده میکند.
ستونها
| ستون | کاربرد |
|---|---|
| بکلاگ | هر کاری که قصد انجام آن را داریم اما هنوز شروع نکردهایم. بیشتر کارتها در اینجا قرار میگیرند. |
| در حال انجام | کارتهایی که هماکنون روی آنها کار میشود. سعی کنید این ستون را کوچک نگه دارید (۱ تا ۳ آیتم). |
| بررسی | کدنویسی تمام شده، منتظر بررسی، استقرار یا تأیید خریدار. |
| انجام شده | ارسال و تأیید شده. برای بررسیهای بعدی نگهداری میشود؛ بهطور خودکار بایگانی نمیشود. |
بروزرسانی خودکار
تخته هر ۸ ثانیه یکبار بهطور خودکار بروزرسانی میشود، بنابراین اگر دو مدیر ارشد همزمان روی تخته کار کنند، تغییرات یکدیگر را بدون نیاز به باز کردن مجدد صفحه میبینند. یک نشان کوچک "زنده · آخرین همگامسازی X ثانیه پیش" در بالای صفحه، فعال بودن بروزرسانی را تأیید میکند.
این سیستم هوشمندانه طراحی شده تا از مشکلات زیر جلوگیری کند:
- درخواستهای همزمان — اگر اینترنت کند باشد، درخواستهای تکراری روی هم انباشته نمیشوند؛ تا زمانی که یک درخواست کامل نشده، درخواست بعدی ارسال نمیشود.
- صرفهجویی در مصرف منابع — وقتی زبانهی مرورگر در پسزمینه است، تخته بروزرسانی نمیشود. با بازگشت به زبانه، بلافاصله بروزرسانی میشود.
- عدم تداخل با فرمها — وقتی فرم ایجاد یا ویرایش کارت باز است، بروزرسانی خودکار متوقف میشود تا اطلاعاتی که کاربر وارد میکند، با اطلاعات جدید جایگزین نشود.
- پاکسازی خودکار — وقتی صفحه بسته میشود، همهی تایمرها و شنوندهها بهطور خودکار پاک میشوند تا حافظهی مرورگر آزاد شود.
ترتیب نمایش در هر ستون
هر ستون قوانین مرتبسازی خاص خود را دارد تا مفیدترین کارتها در بالای صفحه نمایش داده شوند:
| ستون | ترتیب | دلیل |
|---|---|---|
| بکلاگ | قدیمیترین اول | کارتهایی که بیشتر منتظر ماندهاند، در بالای صفحه قرار میگیرند تا فراموش نشوند. |
| در حال انجام | ترتیب دستی | مدیران میتوانند کارتها را با کشیدن و رها کردن مرتب کنند. |
| بررسی | ترتیب دستی | مشابه ستون در حال انجام. |
| انجام شده | جدیدترین اول | آخرین کارتهای ارسالشده در یک نگاه مفیدترین هستند. |
ذخیرهسازی
کارتها در یک فایل JSON به مسیر storage/app/private/kanban-tasks.json ذخیره میشوند — نه در پایگاه داده. این یک تصمیم عمدی است: در زمان توسعه، وقتی پایگاه داده بازنشانی میشود، تخته از بین نمیرود. فایل در برابر بازنشانی پایگاه داده، حذف دادههای آزمایشی و تراکنشهای تست مقاوم است.
برای افزودن برچسب یا وضعیت جدید، نیازی به ایجاد جدول یا مهاجرت نیست — فقط ساختار فایل JSON را ویرایش کنید. کارتها در سمت سرور مرتب میشوند تا صفحه بتواند هر ستون را بهدرستی نمایش دهد.
برای پشتیبانگیری یا اشتراکگذاری تخته، فایل JSON را کپی کنید. برای پاک کردن تخته، فایل را حذف کنید (در خوانش بعدی، تختهی خالی نمایش داده میشود). برای بازگردانی نسخهی قبلی، فایل را دوباره قرار دهید.
پر کردن اولیه
دستور board:seed تخته را با کارهای باقیمانده از فاز ۱ و کارتهای انجامشدهی این جلسه پر میکند. اجرای مجدد آن چیزی اضافه نمیکند، بنابراین میتوان با خیال راحت آن را در مراحل استقرار اجرا کرد.
php artisan board:seed
شماره تیکتها
هر کارت یک شمارهی ترتیبی #N دارد که در زمان ایجاد به آن اختصاص مییابد (۱، ۲، ۳، ...). شمارهها هرگز دوباره استفاده نمیشوند — حتی پس از بایگانی یک کارت، کارت جدید شمارهی بعدی را دریافت میکند. این باعث میشود ارجاعات پایدار باشند: «به #۱۴ نگاه کن» همیشه کار میکند.
شماره به صورت یک نشان کوچک در کنار عنوان هر کارت نمایش داده میشود. دستورات خط فرمان شماره را به عنوان نام مستعار کارت میپذیرند — board:start 14، board:done "#14" و غیره. شمارهها روش ارجاع توصیهشده برای آینده هستند.
فرآیند خودکار خط فرمان
سه دستور artisan چرخهی حیات یک کارت را از خط فرمان پوشش میدهند. از این دستورات در ترمینال استفاده کنید؛ باز کردن رابط مدیریتی اختیاری است.
ثبت کارت جدید
قبل از شروع کدنویسی اجرا کنید. هر وظیفه — چه به تعویق افتاده و چه در شرف انجام — ابتدا یک کارت با یک برنامهی مکتوب دریافت میکند.
php artisan board:add "افزودن درگاه Paddle" --body="$(cat <<'EOT'
## چرا
خریداران اروپایی و بریتانیایی Paddle را برای مدیریت مالیات ترجیح میدهند — در حال حاضر آنها باید مالیات را جداگانه تنظیم کنند که چندین خریدار به آن اشاره کردهاند.
## برنامه
۱. ایجاد سرویس همگامسازی Paddle مشابه Stripe
۲. افزودن ستونهای مربوط به Paddle به جداول پلنها
۳. اتصال کنترلکننده پرداخت به درگاه Paddle
۴. افزودن کلید تنظیمات درگاه در بخش تنظیمات
## فایلها
- app/Services/Billing/PaddleProductSync.php (جدید)
- database/migrations/...
- app/Http/Controllers/Billing/CheckoutController.php
## محدودیتها
- همگامسازی باید قابل تکرار باشد
- الگوی ثبت درگاه مشابه درگاههای دیگر
EOT
)" --label=billing --label=eu
اگر همین دستور دوباره اجرا شود، کاری انجام نمیدهد. وضعیت پیشفرض backlog است. بخش ## برنامه قرارداد است: کاربر قبل از نوشتن کد آن را میخواند. کارتهای بدون برنامهی بدنه، کارت واقعی نیستند — فقط یادداشت هستند.
انتقال کارت به در حال انجام
# با شماره (توصیهشده):
php artisan board:start 14
# یا با عنوان دقیق:
php artisan board:start "افزودن درگاه Paddle"
قبل از تغییر کد اجرا کنید. ستون "در حال انجام" باید دقیقاً منعکسکنندهی کاری باشد که هماکنون روی آن کار میشود.
بستن کارت با برنامهی تست
php artisan board:done 14 \
--test="$(cat <<'EOT'
۱. به عنوان مدیر ارشد وارد شوید
۲. صفحهی مدیریت پلنها را باز کنید
۳. روی "همگامسازی با Paddle" کلیک کنید
۴. تأیید کنید که پیام موفقیت نمایش داده میشود
۵. صفحه را دوباره بارگذاری کنید؛ تأیید کنید که نشان سبز باقی میماند
EOT
)" \
--release=v1.1.0
--test الزامی است — دستور بدون آن کارت را نمیبندد. برنامهی تست به بدنهی کارت اضافه میشود.
برچسبهای نسخه
--release=<برچسب> نسخهی برنامهای را که کارت در آن ارسال شده، روی کارت ثبت میکند. این کار به تیم کمک میکند تا در یک نگاه ببینند "چه چیزی در نسخهی v1.1.0 ارسال شده؟"
اگر فراموش کردید در زمان بستن --release را وارد کنید، دستور زیر تمام کارتهای انجامشدهای که هنوز نسخه ندارند را برچسبگذاری میکند:
# برچسبزنی تمام کارتهای انجامشده با v1.1.0:
php artisan board:stamp-version v1.1.0 --status=done
# برچسبزنی کارتهای خاص:
php artisan board:stamp-version v1.1.0 --ref=23 --ref=34
# بازنویسی اجباری برچسب موجود:
php artisan board:stamp-version v1.1.0 --status=done --force
این تخته چه چیزی نیست
- این ابزار فقط برای استفادهی داخلی تیم است و مشتریان نباید به آن دسترسی داشته باشند.
- در نسخهی اول قابلیت کشیدن و رها کردن وجود ندارد — جابهجایی کارتها بین ستونها از طریق منوی کشویی در دیالوگ جزئیات کارت انجام میشود.
- چندتختهای نیست. فقط یک تخته برای کل پلتفرم وجود دارد. اگر بعداً کسی به تختهی شخصی برای هر فضای کاری نیاز داشت، در یک جدول جداگانه طراحی میشود.