سلام دوست عزیز😃👋
به «مسابقه استخدامی ایرانسرور» خوش آمدی!
هرگونه ارتباط با سایر شرکتکنندگان و یا استفاده از ابزارهای تولید کد، مثل ChatGPT
و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکتکنندگان مسابقه حذف میشوید.
لینکهای مفید برای شرکت در مسابقه:
سوالات و مشکلات خودتان را میتوانید از طریق قسمت «سوال بپرسید» با ما در میان بگذارید.
سوالات «چالشهای نام ایرانسرور»، «میزگرد بزرگ» و «معین سخنور» مربوط به تکنولوژی PHP
و سوالات «میعین فیراری» و «ایرانگیت» مربوط به تکنولوژیLaravel
است.
موفق باشید و بهتون خوش بگذره 😉✌
لیست سوالات را میتوانید از نوار سمت راست این صفحه مشاهده کنید.
میعین (Miein) که به تازگی از کوئرا (Quera) به جونیورا (Juniora) فرار کرده است، پس از مدتی متوجه شده است که حتی جونیورا نیز نمیتواند میزبان رویاهای بلندپروازانهی او باشد! او که پس از دیدن بنر مسابقه استخدامی ایرانسرور (IranServer) در کوئرا و مراجعه به وبسایت آن، با شعار "سریع، امن و همیشه همراه در مسیر رشد کسب و کار" مواجه شده است حالا مطمئن شده که ایرانسرور همان سرزمین رویاهای او خواهد بود.
از آنجایی که رسیدن به هیچ سرزمین رویاهایی بدون چالش و دشواری امکان پذیر نیست، میعین باید چالش ایرانسروری زیر را حل کند تا بتواند مراحل استخدام در این مجموعه را با موفقیت طی کند!
پروژهی اولیه را از این لینک دانلود کنید.
برای اجرای پروژه، باید php
و composer
را از قبل نصب کرده باشید.
composer install
را در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید.php artisan migrate
استفاده کنید.میعین در چالش ایرانسروری باید بخشی از مدلها، مایگریشنها، سیدر و فکتوریهای ایرانسرور را در یک پروژه لاراولی پیادهسازی کند. همچنین او در نهایت قرار است تا یک مشکل رایج در کار با دیتابیسها را در بخشی از یکی از کنترلرهایی که از قبل در وبسایت ایرانسرور وجود دارد را برطرف کند! توضیح مواردی که باید پیادهسازی شوند به شکل زیر میباشد:
در این بخش میعین باید مایگریشنهای مربوط به ایجاد جداول users
، services
، invoices
و tickets
را که به ترتیب مربوط به اطلاعات کاربران، سرویسهای ارائهشده توسط ایرانسرور به هر کاربر، صورتحسابهای سرویسها و تیکتهای پشتیبانی ارسالی کاربران میباشند را پیادهسازی کند. ساختار مربوط به هر کدام از جداول در بخش زیر مشخص است:
users
و پیادهسازی مایگریشن create_users_table
users
🔗نام ستون | نوع داده | توضیحات |
---|---|---|
id |
bigint |
کلید اصلی |
name |
string |
نام کاربر |
email |
string |
ایمیل (منحصربهفرد) |
email_verified_at |
timestamp |
زمان تأیید ایمیل |
password |
string |
رمز عبور |
remember_token |
string |
توکن احراز هویت |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
services
و پیادهسازی مایگریشن create_services_table
services
🔗نام ستون | نوع داده | توضیحات |
---|---|---|
id |
bigint |
کلید اصلی |
user_id |
bigint |
کلید خارجی به جدول users |
name |
string |
نام سرویس |
price |
decimal(8,2) |
قیمت سرویس |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
invoices
و پیادهسازی مایگریشن create_invoices_table
invoices
🔗نام ستون | نوع داده | توضیحات |
---|---|---|
id |
bigint |
کلید اصلی |
service_id |
bigint |
کلید خارجی به جدول services |
amount |
decimal(8,2) |
مبلغ صورتحساب |
paid_at |
timestamp |
زمان پرداخت |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
tickets
و پیادهسازی مایگریشن create_tickets_table
tickets
🔗نام ستون | نوع داده | توضیحات |
---|---|---|
id |
bigint |
کلید اصلی |
user_id |
bigint |
کلید خارجی به جدول users |
subject |
string |
موضوع تیکت |
description |
text |
توضیحات تیکت |
status |
string |
وضعیت (open یا closed ) |
created_at |
timestamp |
زمان ایجاد |
updated_at |
timestamp |
زمان آخرین بهروزرسانی |
لیست بخشی از مدلهای ایرانسرور به شرح زیر است که باید به همراه روابطشان در پروژه پیادهسازی شوند:
User
: کاربران ایرانسرورService
: سرویسهایی که ایرانسرور به هر کاربر ارائه میدهدInvoice
: صورتحسابهای پرداختی مربوط به سرویسهای ارائه شدهTicket
: تیکتهای پشتیبانی ارسال شده توسط کاربرانمیعین باید فکتوریهای زیر را در این چالش پیادهسازی کند تا در مرحله بعد با استفاده از یک دیتابیس سیدر (Seeder) دادههای تصادفی برای تست برنامه نوشته شده ایجاد کند. برای بررسی بیشتر هر کدام از فکتوریها روی بخشهای زیر کلیک کنید:
InvoiceFactory
InvoiceFactory
🔗نام ستون | توضیحات | مقادیر ممکن |
---|---|---|
service_id |
کلید خارجی به جدول services |
مقدار یک service_id معتبر |
amount |
مبلغ صورت حساب | عدد اعشاری بین ۱۰ تا ۱۰۰ |
paid_at |
زمان پرداخت | null یا یک تاریخ تصادفی |
ServiceFactory
ServiceFactory
🔗نام ستون | توضیحات | مقادیر ممکن |
---|---|---|
user_id |
کلید خارجی به جدول users |
مقدار یک user_id معتبر |
name |
نام سرویس | یک کلمه تصادفی |
price |
قیمت سرویس | عدد اعشاری بین ۱۰ تا ۱۰۰ |
TicketFactory
TicketFactory
🔗نام ستون | توضیحات | مقادیر ممکن |
---|---|---|
user_id |
کلید خارجی به جدول users |
مقدار یک user_id معتبر |
subject |
موضوع تیکت | یک جمله تصادفی |
description |
توضیحات تیکت | یک پاراگراف تصادفی |
status |
وضعیت تیکت | open یا closed |
UserFactory
UserFactory
🔗نام ستون | توضیحات | مقادیر ممکن |
---|---|---|
name |
نام کاربر | نام تصادفی |
email |
ایمیل کاربر (یونیک) | ایمیل تصادفی معتبر |
email_verified_at |
زمان تأیید ایمیل | زمان فعلی |
password |
رمز عبور | کلمه password به صورت هش شده |
remember_token |
توکن یادآوری | رشته ۱۰ کاراکتری تصادفی |
یک سیدر (Seeder) با عنوان DatabaseSeeder
در پروژه اولیه وجود دارد که باید به شکل زیر برای ایجاد دادهها در دیتابیس با استفاده از فکتوریهای پیادهسازی شده مورد استفاده قرار بگیرد:
User
ایجاد میشوند.Service
خواهد داشت، پس در نهایت باید ۵۰ سرویس ثبت شود.Invoice
برای سرویسهای مختلف خود دارد. توجه داشته باشید که تعداد کل صورتحسابهای کاربر بین ۳ تا ۵ صورتحساب میباشد و این مقدار به ازای هر کدام از سرویسهای کاربر نیست.Ticket
دارد.UserController
🔗کنترلر UserController
به شکل زیر از قبل در فایلهای پروژه اولیه پیادهسازی شده است که با دریافت تمامی کاربران موجود در برنامه در ویو users.index
لیست کاربران به همراه هر کدام از سرویسهای مربوط به آنها و هر کدام از صورتحسابهای مربوط به هر کدام از آن سرویسها را نمایش میدهد. پیادهسازی انجام شده به شکل بهینهای نیست و دارای مشکل است که میعین باید این مشکل را نیز در پروژه ارسالی خود برطرف سازد:
vendor
را زیپ کرده و ارسال کنید.