در این سؤال، باید سامانهی فروش بلیت مسابقات فوتبال در استادیومهای مختلف را پیادهسازی کنید!
پروژهی اولیه را از این لینک دانلود کنید.
org.quera.ticket
شامل موجودیتهای JPA برنامه است که مطابق با schema دیتابیس طراحی شدهاند. شناسه (id
) موجودیتها بهصورت خودکار توسط Hibernate تولید میشود.org.quera.ticket.security
شامل کلاسهایی برای مدیریت احراز هویت است.تعدادی وبسرویس REST مطابق نیازمندیهای زیر باید پیادهسازی شود:
آدرس | عنوان |
---|---|
GET /api/ping |
بررسی صحت برنامه |
POST /api/users/{id}/update_balance |
تغییر موجودی یک کاربر |
GET /api/stadiums |
دریافت اطلاعات استادیومها |
POST /api/stadiums |
ایجاد استادیوم جدید |
GET /api/stadiums/{id} |
دریافت اطلاعات یک استادیوم |
DELETE /api/stadiums/{id} |
حذف یک استادیوم |
GET /api/teams |
دریافت اطلاعات تیمها |
POST /api/teams |
ایجاد تیم جدید |
GET /api/teams/{id} |
دریافت اطلاعات یک تیم |
DELETE /api/teams/{id} |
حذف یک تیم |
GET /api/matches |
دریافت اطلاعات مسابقات |
POST /api/matches |
ایجاد مسابقهی جدید |
GET /api/matches/{id} |
دریافت اطلاعات یک مسابقه |
DELETE /api/matches/{id} |
حذف یک مسابقه |
GET /api/seat_classes |
دریافت اطلاعات مجموعه جایگاهها |
POST /api/seat_classes |
ایجاد مجموعه جایگاه جدید |
GET /api/seat_classes/{id} |
دریافت اطلاعات یک مجموعه جایگاه |
DELETE /api/seat_classes/{id} |
حذف یک مجموعه جایگاه |
GET /api/tickets |
دریافت لیست بلیتهای کاربر فعلی |
POST /api/tickets |
خرید بلیت برای یک صندلی |
با ارسال درخواست به این endpoint ، پاسخ زیر باید برگردانده شود:
این endpoint باید تنها برای کاربرانی قابل دسترس باشد که نقششان ADMIN
است. با ارسال درخواست به این endpoint بههمراه پارامتر balance
در بدنهی درخواست، مقدار موجودی کاربر ورودی باید بهروز شود.
با ارسال درخواست به این endpoint ، اطلاعات همهی استادیومها در قالب یک آرایه باید برگردانده شوند.
این endpoint باید تنها برای کاربرانی قابل دسترس باشد که نقششان ADMIN
است. یک استادیوم با اطلاعات اولیهی دادهشده ایجاد میشود و مشخصات آن برگردانده میشود. مقادیر name
و capacity
در بدنهی درخواست ارسال میشوند. در صورتی که مقدار balance
واردشده منفی باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که کاربری با شناسهی واردشده موجود نباشد، کد پاسخ باید 404
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
با ارسال درخواست به این endpoint ، اطلاعات استادیومی که شناسهی آن وارد شده است باید برگردانده شود. در صورتی که استادیومی با شناسهی واردشده وجود نداشته باشد، کد پاسخ باید 404
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
این endpoint باید تنها برای کاربرانی قابل دسترس باشد که نقششان ADMIN
است. با ارسال درخواست به این endpoint ، استادیومی که شناسهی آن وارد شده است باید حذف شود. در صورتی که استادیومی با شناسهی واردشده وجود نداشته باشد، کد پاسخ باید 404
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
با ارسال درخواست به این endpoint ، اطلاعات همهی تیمها در قالب یک آرایه باید برگردانده شوند.
این endpoint باید تنها برای کاربرانی قابل دسترس باشد که نقششان ADMIN
است. با ارسال درخواست به این endpoint ، یک تیم با اطلاعات اولیهی دادهشده ایجاد میشود و مشخصات آن برگردانده میشود. مقدار name
در بدنهی درخواست ارسال میشوند. در صورتی که تیمی با نام واردشده از قبل وجود داشته باشد، کد پاسخ باید 400
باشد.
با ارسال درخواست به این endpoint ، اطلاعات تیمی که شناسهی آن وارد شده است باید برگردانده شود. در صورتی که تیمی با شناسهی واردشده وجود نداشته باشد، کد پاسخ باید 404
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
این endpoint باید تنها برای کاربرانی قابل دسترس باشد که نقششان ADMIN
است. با ارسال درخواست به این endpoint ، تیمی که شناسهی آن وارد شده است باید حذف شود. در صورتی که تیمی با شناسهی واردشده وجود نداشته باشد، کد پاسخ باید 404
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
با ارسال درخواست به این endpoint ، اطلاعات همهی مسابقات در قالب یک آرایه باید برگردانده شوند.
این endpoint باید تنها برای کاربرانی قابل دسترس باشد که نقششان ADMIN
است. یک مسابقه با اطلاعات اولیهی دادهشده ایجاد میشود و مشخصات آن برگردانده میشود. مقادیر زیر در بدنهی درخواست ارسال میشوند:
home_id
)away_id
)stadium_id
)date
) با فرمت yyyy-MM-dd
اگر از تاریخ مسابقه گذشته باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که شناسهی تیم میزبان معتبر نباشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که شناسهی تیم میهمان معتبر نباشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که شناسهی استادیوم معتبر نباشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
اگر استادیوم در تاریخ ذکرشده رزرو باشد (مسابقهی دیگری در آن روز در استادیوم وجود داشته باشد)، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
با ارسال درخواست به این endpoint ، اطلاعات مسابقهای که شناسهی آن وارد شده است باید برگردانده شود. در صورتی که مسابقهای با شناسهی واردشده وجود داشته باشد، کد پاسخ باید 404
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
این endpoint باید تنها برای کاربرانی قابل دسترس باشد که نقششان ADMIN
است. با ارسال درخواست به این endpoint ، مسابقهای که شناسهی آن وارد شده است باید حذف شود. در صورتی که مسابقهای با شناسهی واردشده وجود نداشته باشد، کد پاسخ باید 404
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
با ارسال درخواست به این endpoint ، اطلاعات همهی مجموعه جایگاهها در قالب یک آرایه باید برگردانده شوند.
این endpoint باید تنها برای کاربرانی قابل دسترس باشد که نقششان ADMIN
است. یک مجموعه جایگاه با اطلاعات اولیهی دادهشده ایجاد میشود و مشخصات آن برگردانده میشود. مقادیر زیر در بدنهی درخواست ارسال میشوند:
min_number
)max_number
)match_id
)price
)در صورتی که مسابقهای با شناسهی واردشده موجود نباشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که مقدار min_number
کوچکتر از ۱ باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که مقدار max_number
کوچکتر از min_number
باشد یا بزرگتر از ظرفیت استادیوم باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که مقدار price
منفی باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
اگر مجموعه جایگاهی برای بازی موردنظر وجود داشته باشد که شماره صندلی مشترکی با مجموعه جایگاه فعلی داشته باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
با ارسال درخواست به این endpoint ، اطلاعات مجموعه جایگاهی که شناسهی آن وارد شده است باید برگردانده شود. در صورتی که مجموعه جایگاهی با شناسهی واردشده وجود نداشته باشد، کد پاسخ باید 404
باشد.
این endpoint باید تنها برای کاربرانی قابل دسترس باشد که نقششان ADMIN
است. با ارسال درخواست به این endpoint ، مجموعه جایگاهی که شناسهی آن وارد شده است باید حذف شود. در صورتی که مجموعه جایگاهی با شناسهی واردشده وجود نداشته باشد، کد پاسخ باید 404
باشد.
با ارسال درخواست به این endpoint ، لیست بلیتهای کاربر واردشدهی فعلی باید در قالب یک آرایه برگردانده شود.
با ارسال درخواست به این endpoint ، عملیات خرید بلیت یک صندلی برای کاربر فعلی باید انجام شود. مقادیر match_id
و seat_number
در بدنهی درخواست موجود خواهند بود.
در صورتی که مسابقهای با شناسهی واردشده موجود نباشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که از تاریخ مسابقه گذشته باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که مقدار seat_number
کوچکتر از ۱ باشد یا بزرگتر از ظرفیت استادیوم بازی باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که مجموعه جایگاهی برای شماره صندلی موردنظر تعریف نشده باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که کاربر فعلی، صندلی فعلی را از قبل خریده باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که کاربر دیگری صندلی فعلی را از قبل خریده باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
در صورتی که میزان موجودی کاربر کمتر از قیمت صندلی باشد، کد پاسخ باید 400
باشد و بدنهی پاسخ باید بهصورت زیر باشد:
403
باید برگردانده شود. در صورتی که هیچ کاربری وارد برنامه نشده باشد، کد پاسخ 401
باید برگردانده شود.پس از پیادهسازی موارد خواستهشده، پوشهی src
پروژه را زیپ کرده و ارسال کنید. توجه داشته باشید که فقط تغییرات اعمالشده در پوشهی src/main/java/org/quera/ticket
در نظر گرفته میشوند.