⚡
چالشها
ادغام دو سرویس مستقل فروشگاهی و نوبتدهی در یک پلتفرم واحد، نیازمند معماری ماژولار با مدل User مشترک بود. مدیریت موجودی پیچیده در حالت چندفروشندگی با تنوع رنگ، سایز و رایحه، با طراحی مدل Owners بهصورت مستقل برای هر ترکیب حل شد.
پیادهسازی همزمان دو درگاه پرداخت سپهر و زرینپال با ساختارهای متفاوت، از طریق Service Layer مستقل و مدیریت اختصاصی Callback انجام شد. پشتیبانی کامل از تاریخ شمسی در تمام بخشها با کتابخانههای persiantools و ذخیرهسازی دوگانه (میلادی + شمسی) پیادهسازی گردید.
سیستم احراز هویت با OTP پیامکی از طریق سرویس قاصدک، و مدیریت ۵ سطح دسترسی با فیلدهای Boolean و بررسی دقیق Permission در هر view، امنیت و انعطافپذیری لازم را فراهم کرد. طراحی ۳ Layout مستقل (پنل، سایت، سئو) و مدیریت ۴ نوع محتوای متفاوت (مقاله، سوال، ویدئو، تجربه) در یک مدل واحد با فیلد type، از دیگر چالشهای مهم پروژه بودند.
امنیت تراکنشهای مالی با بررسی تکراری نبودن کد پیگیری، استفاده از UUID برای InvoiceID و تطبیق مبلغ در مرحله Advice تأمین شد. مقیاسپذیری نیز با بهینهسازی کوئریها، استفاده از select_related و کش کردن نتایج پرتکرار محقق گردید.
💡
راهحلها
پروژه بر پایه معماری ماژولار با ۱۰ اپلیکیشن مستقل Django طراحی شده و مدل User بهعنوان نقطه اتصال مرکزی بین تمام سرویسها عمل میکند. سیستم احراز هویت با OTP پیامکی ۴ رقمی از طریق سرویس قاصدک و ذخیره کد در فیلد random_pass پیادهسازی شده است.
مدیریت ۵ سطح دسترسی با فیلدهای Boolean در مدل User و بررسی دقیق Permission در ابتدای هر view انجام میشود. تمام viewها از الگوی یکپارچه @login_required + is_ajax() + پارامتر i=action_name + JsonResponse پیروی میکنند که نگهداری کد را ساده میکند.
موجودی محصولات در حالت Multi-Vendor با مدل Owners و فیلدهای owner_id، color، size و scent بهصورت مستقل برای هر ترکیب مدیریت میشود. درگاههای پرداخت سپهر و زرینپال با Service Layer مستقل، مدیریت Session، تأیید Advice و بررسی تطابق مبلغ پیادهسازی شدهاند.
پشتیبانی از تاریخ شمسی با کتابخانههای persiantools و ذخیره دوگانه (میلادی + شمسی) در فیلد jalil_record_data انجام میشود. سیستم پیامک خودکار با توابع مستقل برای هر موقعیت (ثبتنام، ورود، سفارش، واریز) و قالبهای پویا در myclass.py طراحی شده است.
سیستم مشاوره گفتگویی چندمرحلهای با مدل Counseling و اتصال ManyToMany به Conversation، امکان ارسال فایل، ادامه گفتگو و آرشیو خودکار را فراهم میکند. سیستم سئو با مدل واحد Seo و فیلد type (مقاله، سوال، تجربه، ویدئو) و فیلدهای اختصاصی هر نوع، مدیریت محتوا را یکپارچه کرده است.
سه Layout اختصاصی (shared_panel, shared_index, shared_seo) با کامپوننتهای مشترک، تنوع بصری را بدون تکرار کد فراهم میکنند. امنیت مالی با UUID برای InvoiceID، بررسی تکراری نبودن کد پیگیری و تطبیق مبلغ در مرحله Advice تأمین شده است.
📚
دستاوردها
پروژه مهدیس بهصورت کامل و آنلاین در آدرس mahdiss.com راهاندازی شده و یک پلتفرم یکپارچه برای فروش لوازم آرایشی و نوبتدهی آرایشگاه ارائه میدهد. این پروژه شامل ۱۰ اپلیکیشن ماژولار Django، بیش از ۵۰ صفحه اختصاصی، ۲۵+ مدل دادهای و ۵ سطح دسترسی کاربری است که در قالب ۳ Layout متفاوت پیادهسازی شدهاند.
از نظر فنی، دو درگاه پرداخت معتبر (سپهر و زرینپال) با موفقیت ادغام شدهاند، سیستم احراز هویت OTP پیامکی فعال است، و امکاناتی نظیر کیف پول، مشاوره آنلاین، سئو، گزارشگیری Excel و پیامک خودکار بهطور کامل پیادهسازی شدهاند. امنیت سیستم با رعایت اصول CSRF Protection، XSS Prevention و SQL Injection Prevention در تمام بخشها تأمین شده است.
معماری پروژه بهصورت ماژولار و مقیاسپذیر طراحی شده که توسعه قابلیتهای آینده را ساده میکند. این پروژه توانسته چالشهای پیچیدهای مانند ادغام دو سرویس مستقل، مدیریت موجودی چندفروشندگی و پردازش همزمان دو درگاه پرداخت را با موفقیت حل کند و به یک محصول آمادهی Production تبدیل شود.
🔧
نکات فنی برجسته
پروژه مهدیس بر پایه Django 4.2.6 (LTS) با دیتابیس MySQL و رابط کاربری Bootstrap 5 (RTL) پیادهسازی شده و از معماری ماژولار با ۱۰ اپلیکیشن مستقل بهره میبرد. تمام viewها از الگوی یکپارچه @login_required + is_ajax() + پارامتر i=action_name + JsonResponse پیروی میکنند که توسعه و نگهداری را سادهتر میکند.
سیستم احراز هویت بر پایه OTP پیامکی با سرویس قاصدک و ذخیره کد در فیلد random_pass طراحی شده، و مدیریت دسترسیها با ۵ سطح Boolean Flag (admin_access, shop_access, barber_access, response_access, is_superuser) در ابتدای هر view بررسی میشود. درگاههای پرداخت سپهر (با GetToken/Advice/Session) و زرینپال (با Authority/Verify) هرکدام در Service Layer مستقل پیادهسازی شدهاند.
پشتیبانی از تاریخ شمسی با کتابخانههای persiantools و django-jalali بهصورت ذخیره دوگانه (میلادی + شمسی در jalil_record_data) انجام میشود. سیستم پیامک خودکار با توابع مستقل در myclass.py برای هر موقعیت (ثبتنام، ورود، سفارش، واریز) و قالبهای پویا طراحی شده است.
در بخش سئو، از مدل واحد Seo با فیلد type برای تفکیک چهار نوع محتوا (مقاله، سوال، تجربه، ویدئو) استفاده شده و فیلدهای اختصاصی هر نوع (نتیجه پرونده، video_id، state، city) بهصورت شرطی بهکار میروند. سه Layout اختصاصی (shared_panel, shared_index, shared_seo) با کامپوننتهای مشترک، تنوع بصری را بدون تکرار کد فراهم میکنند.
امنیت مالی با استفاده از UUID برای InvoiceID یکتا، بررسی تکراری نبودن کد پیگیری (digitalreceipt/ref_id)، تطبیق مبلغ در مرحله Advice و استفاده از csrf_exempt فقط برای Callback درگاه تأمین شده است. مقیاسپذیری نیز با بهینهسازی کوئریها (select_related، prefetch_related) و کش کردن نتایج پرتکرار محقق گردیده است.
🏗️
معماری پروژه
پروژه مهدیس بر پایه معماری ماژولار (Modular Architecture) طراحی شده و به ۱۰ اپلیکیشن مستقل Django تقسیم شده است: account (کاربران)، barber (آرایشگاهها)، product (محصولات)، cart (سبد خرید)، marketing (بازاریابی)، payment (درگاه سپهر)، zarinpal (درگاه زرینپال)، site_profile (پروفایل سایت)، seo (مدیریت محتوا) و resume (رزومهها). هر اپ مسئولیت مشخصی دارد و مدل User بهعنوان نقطه اتصال مرکزی بین تمام سرویسها عمل میکند.
ارتباط بین اپلیکیشنها از طریق ForeignKey و ManyToMany برقرار میشود؛ مثلاً Products از طریق owner_shoper_id به User متصل است و موجودی آن در مدل Owners با فیلدهای owner_id، color، size و scent نگهداری میشود. لایه نمایش با ۳ Layout اختصاصی (shared_panel، shared_index، shared_seo) و کامپوننتهای مشترک (header_component، side_bar_component، footer_component، left_pop_up) پیادهسازی شده است.
لایه منطق کسبوکار در viewها با الگوی یکپارچه @login_required + بررسی Permission + is_ajax() + i=action_name + JsonResponse طراحی شده که نگهداری و توسعه را ساده میکند. درگاههای پرداخت هرکدام در Service Layer مستقل با منطق اختصاصی (GetToken/Advice برای سپهر و Authority/Verify برای زرینپال) پیادهسازی شدهاند.
امنیت با رعایت اصول CSRF Protection، XSS Prevention و SQL Injection Prevention تأمین شده و مقیاسپذیری با بهینهسازی کوئریها (select_related، prefetch_related) و کش کردن نتایج پرتکرار محقق گردیده است. طراحی کلی بهگونهای است که افزودن اپلیکیشن جدید یا قابلیت تازه، بدون تأثیر بر سایر بخشها امکانپذیر باشد.
📐
مقیاس پروژه
پروژه مهدیس از نظر مقیاس، یک پلتفرم متوسط تا بزرگ محسوب میشود که شامل ۱۰ اپلیکیشن مستقل Django، بیش از ۲۵ مدل دادهای و حدود ۸۰+ view است. رابط کاربری شامل بیش از ۵۰ صفحه اختصاصی HTML است که در قالب ۳ Layout متفاوت (shared_panel، shared_index، shared_seo) پیادهسازی شدهاند.
سیستم دارای ۵ سطح دسترسی کاربری (مدیر کل، فروشنده، آرایشگر، پاسخگو، کاربر عادی) و ۲ درگاه پرداخت فعال (سپهر و زرینپال) است. بخش سئو شامل ۴ نوع محتوا (مقاله، سوال، تجربه، ویدئو) با مدیریت کاملاً مجزا، و پنل مدیریت جامع شامل گزارشگیری Excel و کنترل کاربران، محصولات، سفارشات، فروشگاهها و آرایشگاههاست.
از نظر کدنویسی، پروژه شامل بیش از ۱۵,۰۰۰ خط کد در بخش Python و بیش از ۲۰,۰۰۰ خط کد در بخش Templates و Frontend است. دیتابیس شامل بیش از ۳۰ جدول است که با روابط پیچیده ForeignKey و ManyToMany به هم متصل میشوند. این پروژه در حال حاضر آنلاین و فعال در آدرس mahdiss.com بوده و آمادهی بهرهبرداری تجاری است.