میخواهیم یک سایت برای خودکار کردن فرایند فروش بلیتهای سینما بنویسیم. در این سایت امکان مشاهده فیلمهای در حال اکران وجود دارد. کاربران میتوانند عضو سایت شوند و پس از ورود به سایت برای هر فیلم صندلی موردنظر را رزرو کند.
بخشی از این پروژه نوشته شده است. از شما میخواهیم این پروژه را تکمیل کنید.
پروژه اولیه
پروژه اولیه را از اینجا دانلود کنید. ساختار این پروژه به شرح زیر است:
cinema
├── app
│ ├── ...
│ ├── Http
│ │ └── Controllers
│ │ ├── MovieController.php
│ │ ├── StatsController.php
│ │ └── ...
│ ├── User.php
│ ├── Movie.php
│ ├── Seat.php
│ ├── Ticket.php
├── ...
├── datbase
│ ├── ...
│ ├── seeds
│ ├── migrations
│ └── ...
├── routes
│ ├── ...
│ └── web.php
...
جزئیات
در این سوال لازم است علاوه بر ایجاد 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}, ... ]
- مقدار total، تعداد رزروهای صندلی مشخص شده است.
- این view تنها باید برای افرادی که لاگین کردهاند فعال باشد و برای سایر افراد خطای ۴۰۳ (Forbidden) برگرداند.
نکات
- برای حل سوال تنها فایلهایی که باید تغییر کنند فایلهای مربوط به
Controller
ها و در صورت نیاز فایل مربوط بهroute
ها هستند. - فایلهای مربوط به
seed
ها را با اسم گفته شده در پوشهdatabase/seeds
قرار دهید. - اگر فایل
route
را تغییر دادید، نام یا آدرسroute
های موجود در فایل را تغییر ندهید. تغییراتی که شما روی پروژه انجام میدهید نباید باعث شود کاربری اصلی پروژه مختل شود. - همانطور که در سوال مشخص شده است، کاربر باید امکان ورود و خروج و ثبتنام در سایت را داشته باشد. برای اینکار از سیستم
Auth
از پیش آماده شده لاراول استفاده کنید وroute
های مربوطهاش را در فایل روتها اضافه کنید. - در قسمتهایی از سوال که گفته شده
redirect
انجام شود، حتما عملیات را به صورتredirect
انجام دهید. - بدون پوشهی vendor به صورت پس از اعمال تغییرات، کل پروژه را Zip ارسال کنید.
- نام فایل Zip اهمیت ندارد.
ارسال پاسخ برای این سؤال