Laravel - فروش بلیط


می‌خواهیم یک سایت برای خودکار کردن فرایند فروش بلیت‌های سینما بنویسیم. در این سایت امکان مشاهده فیلم‌های در حال اکران وجود دارد. کاربران می‌توانند عضو سایت شوند و پس از ورود به سایت برای هر فیلم صندلی موردنظر را رزرو کند.

بخشی از این پروژه نوشته شده است. از شما می‌خواهیم این پروژه را تکمیل کنید.

پروژه اولیه🔗

پروژه اولیه را از اینجا دانلود کنید. ساختار این پروژه به شرح زیر است:

cinema
├── app
│   ├── ...
│   ├── Http
│   │   └── Controllers
│   │       ├── MovieController.php
│   │       ├── StatsController.php
│   │       └── ...
│   ├── User.php
│   ├── Movie.php
│   ├── Seat.php
│   ├── Ticket.php
├── ...
├── datbase
│   ├── ...
│   ├── seeds
│   ├── migrations
│   └── ...
├── routes
│   ├── ...
│   └── web.php
...
Plain text

جزئیات🔗

در این سوال لازم است علاوه بر ایجاد seed ها، تغییراتی در Controller ها و route ها ایجاد کنید.

سه مدل به شرح زیر وجود دارد:

۱. مدل Movie شامل فیلدهای زیر:

  • title: نام فیلم
  • release_year: سال میلادی انتشار فیلم
  • play_time: زمان اکران فیلم در سالن

۲. مدل Seat شامل فیلد زیر:

  • number: شماره صندلی

۳. مدل Ticketشامل فیلدهای زیر:

  • movie: فیلمی که این بلیت برای آن فروخته شده است
  • user: کاربری که این بلیت را خریده است
  • seat: صندلی مربوط به این بلیت
  • date_bought: تاریخی که بلیت خریده شده است

قرار است همه صندلی‌های سالن و لیست فیلم‌ها در ابتدا با استفاده از seed به پایگاه داده اضافه شود. سپس به ازای هر بلیتی که فروخته می‌شود یک شیٔ از مدل Ticket ساخته می‌شود.

مواردی که باید انجام دهید:

۱. نوشتن seed🔗

از شما میخواهیم در پوشه database/seeds دو seed با نام کلاس Movies و Seats ایجاد کنید.

  • بعد از اجرای seed ها می‌خواهیم مقادیر زیر برای مدل Movie در دیتابیس ایجاد شده باشد: زمان اکران را به صورت native (بدون TimeZone) تعریف کنید.
id نام فیلم سال انتشار تاریخ اکران ‌ ساعت اکران
1 Children of heaven 1997 2018/4/20 22:00
2 About Elly 2009 2018/4/20 20:00
3 A separation 2011 2018/4/22 18:00
4 The salesman 2016 2018/4/21 18:00
5 The Elephant king 2017 2018/4/21 20:00
  • برای Seat نیز می‌خواهیم بعد از اجرای seed مربوطه‌اش ۱۰ صندلی با آیدی ۱ تا ۱۰ و شماره‌صندلی ۳۱ تا ۴۰ ایجاد شود.

توجه کنید به هنگام داوری seed ها با دستور artisan db:seed --class=CLASS_NAME اجرا می‌شوند پس حتما اسم کلاس‌ها را مطابق اسمی که در صورت سوال گفته شده است قرار دهید.

۲. نمایش صندلی‌ها🔗

در این قسمت باید Controller مربوط به قسمت نمایش صندلی‌ها را به نحوی تغییر دهید که فقط صندلی‌هایی که برای آن فیلم هنوز رزرو نشده‌اند را نمایش دهد نه همه صندلی‌ها را.

۳. رزرو صندلی🔗

با توجه به توضیحات زیر، Controller ها را تکمیل کنید.

برای رزرو صندلی، کاربر مراحل زیر را انجام می‌دهد:

  • ابتدا از آدرس /movies بازدید می‌کند که لیست فیلم‌هایی که در حال اکران هستند را نمایش میدهد. سپس روی فیلم مورد نظر خود کلیک کرده و صفحه‌ی بعدی صندلی‌های رزرو نشده برای آن فیلم را نمایش می‌دهد. تا این مرحله کاربر نیازی به login بودن ندارد.

  • وقتی کاربر روی یکی از صندلی‌ها کلیک کرد:

    • اگر کاربر login است، صندلی برای کاربر رزرو شده و دوباره به صفحه‌ی صندلی‌های همان فیلم redirect می‌شود تا بتواند صندلی‌های دیگری را نیز رزرو کند.
    • اگر کاربر login نیست، به صفحه‌ی login هدایت می‌شود و پس از وارد شدن به سایت، بلافاصله به صفحه‌ی قبلی (صفحه لیست صندلی‌ها) redirect می‌شود، و صندلی رزرو می‌شود.
    • در صفحه‌ی login اگر کاربر روی لینک register کلیک کرد و در سایت عضو شد، باید بلافاصله پس از عضویت به طور خودکار در سایت login شود و به صفحه لیست فیلم‌ها redirect شود.

۴. گزارش گیری سایت🔗

در این قسمت شما باید view مربوط به آدرس stats را به نحوی کامل کنید که در پاسخ برای همه صندلی‌های که حداقل برای یک فیلم رزرو شده‌اند (به ترتیب id صندلی)، یک خروجی JSON به شکل زیر بازگردد:

[{"seat__number": 31, "total": 3}, {"seat__number": 32, "total": 1}, ... ]
JSON
  • مقدار total، تعداد رزروهای صندلی مشخص شده است.
  • این view تنها باید برای افرادی که لاگین کرده‌اند فعال باشد و برای سایر افراد خطای ۴۰۳ (Forbidden) برگرداند.

نکات🔗

  • برای حل سوال تنها فایل‌هایی که باید تغییر کنند فایل‌های مربوط به Controller ها و در صورت نیاز فایل مربوط به route ها هستند.
  • فایل‌های مربوط به seed ها را با اسم گفته شده در پوشه database/seeds قرار دهید.
  • اگر فایل route را تغییر دادید، نام یا آدرس route های موجود در فایل را تغییر ندهید. تغییراتی که شما روی پروژه انجام می‌دهید نباید باعث شود کاربری اصلی پروژه مختل شود.
  • همانطور که در سوال مشخص شده است، کاربر باید امکان ورود و خروج و ثبت‌نام در سایت را داشته باشد. برای این‌کار از سیستم Auth از پیش آماده شده لاراول استفاده کنید و route های مربوطه‌اش را در فایل روت‌ها اضافه کنید.
  • در قسمت‌هایی از سوال که گفته شده redirect انجام شود، حتما عملیات را به صورت redirect انجام دهید.
  • بدون پوشه‌ی vendor به صورت پس از اعمال تغییرات، کل پروژه را Zip ارسال کنید.
  • نام فایل Zip اهمیت ندارد.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.