سامانه دانیال همراه
یکی از شرکت های معتبر واردات قعطات کامپیوتری (به نام دانیال همراه) هر ماه قطعاتی را از کشورهای مختلف وارد می کند. این شرکت اخیرا با مشکلات متعددی برای امور گارانتی خود مواجه شده است. روال گارانتی به این صورت است که الزاما بایستی شماره سریال قطعه مورد نظر توسط خریدار نهایی به شرکت اعلام شود. به همین دلیل شرکت برای هر دستگاه یک کارت گارانتی چاپ کرده که بر روی کارت شماره سریال قطعه و همچنین کد فعالسازی گارانتی چاپ شده است. کد فعالسازی به صورت مخفی و تحت یک scratch code بر روی کارت چاپ می شود.
حال می خواهیم سیستمی با مشخصات زیر برای ارائه کدهای گارانتی به مشتریان شرکت پیاده سازی کنیم.
پروژه اولیه
فایل های پروژه اولیه را می توانید از اینجا دانلود کنید. این پروژه بر اساس کتابخانه لاراول نسخه 5.8.* پیاده سازی خواهد شد.
فایل هایی که اضافه بر ساختار معمول پروژه های لاراول در اختیار شما قرار شده است عبارتند از :
-
فایل
input.xlsxکه در مسیرstorage/app/input.xlsxقرار داده شده است. این فایل از طرف شرکت به ما داده می شود و شامل دو ستون است. ستون اول یاAکد یکتای شناسایی محصولات (شبیه به شماره سریال) بوده و ستون دوم کد فعالسازی است که شرکت به صورت تصادفی برای هر قطعه مشخص کرده. -
فایل
CValidator.phpکه در مسیرapp/CValidator.phpقرار داده شده است و شامل تابع اعبتارسنجی کد ملی است که برای قسمت اعتبارسنجی می توانید از آن استفاده کنید. -
فایل های مورد نیاز برای قسمت
Frontendکه در پوشه هایresource/views/homeوpublic/cssقرار داده اند تا نیازی به توسعهcss/htmlاز سمت شما به حداقل ممکن برسد.
لیست نیازمندی ها
-
با توجه با اینکه مدیریت شرکت نسبت به امنیت سامانه بسیار حساس است، مخالفت بسیار زیادی با این پروژه داشته است. لذا به ایشان اطمینان دادیم که امنیت سامانه به نحوی تامین شود که اگر حتی کل فایل ها و پایگاه داده برنامه مورد حمله واقع شد اطلاعات کد های فعالسازی دچار مشکل و دستبرد نشود. به همین دلیل امکان استفاده مستقیم از فایل اکسل ورودی را نداریم. بایستی یک دستور
Artisanبه نامGenerateFileایجاد کنید تا با فراخوانی این دستور یک فایلcsvبه این صورت ایجاد شود که هر سطر آن معادل یک سطر در فایل اکسل بوده با این تفاوت که فیلد شماره سریال ها (فیلد اول) به صورتhashشده با الگوریتمsha1ذخیره شود و فیلد دوم با استفاده از کلاسCryptoلاراول رمز نگاری شود. در اینصورت حتی اگر کل اطلاعات در دسترس نفر دیگری قرار بگیرد بدون داشتن شماره سریال ها به صورتpalin textنمی تواند از کدهای گارانتی استفاده کند. برای انجام این قسمت در نظر داشته باشید که فایلcsvبا نامdata.csvدر آدرسstorage/app/data.csvباید ساخته شود و کاراکترdelimiterحتما بایستی,باشد اما خط ابتدای فایل که نامfieldها در آن نوشته می شود مورد داوری قرار نمیگیرد و مختارید که از هر نامی استفاده کنید ولی وجود آن الزامی است. -
لیست
routeهای مورد نیاز در فایلroutes/web.phpاز قبل نوشته شده است. برنامه به صورت یک فرم ۳ مرحله ای بوده و در هر مرحله اطلاعات مورد نیاز دریافت و اعتبارسنجی (validate) می شوند.-
در مرحله اول فیلدهای نام و نام خانوداگی صرفا خالی یا پر بودنشان ملاک بررسی است. هیچ شرط اضافه ای نخواهند داشت.
-
فیلد کد ملی علاوه بر شرط پر بودن باید با توجه به تابع موجود در فایل
CValidatorمورد بررسی قرار گرفته تا از اعتبار اولیه آن مطمئن شویم. -
منظور از فیلد کد گارانتی همان فیلد
serial_numberدر فایل اکسل است که علاوه بر شرط پر بودن باید در لیست ارائه شده نیز موجود باشد. یعنی مقدار وارد شده توسط کاربر را بررسی خواهیم کرد که آیا در محتویات ستون اول فایل اکسل وجود دارد یا نه؟. ضمنا این فیلد بایستی از نظر تعداد کاراکتر ها (که ۲ کاراکتر عددی می باشد) نیز مورد بررسی قرار بگیرد -
در صورتیکه کلیه اطلاعات به درستی وارد شد، کاربر را به صفحه دوم منتقل میکنیم و قبل از آن دو کلید در
sessionست می کنیم. اول کلیدgidکه همان کد گارانتی است که کاربر به درستی وارد کرده و دوم کلیدcodeکه محتوی کد موقتی است که برای اعتبار سنجی کاربر مورد استفاده قرار خواهد گرفت. -
کد موقت تولید شده قبلا از طریق پیامک به دست کاربر می رسید اما به دلیل شرایط مسابقه فعلا تصمیم گرفتیم که کد را مستقیما در مرحله دوم به کاربر نشان بدهیم.
-
با ارسال فرم در مرحله دوم اولا بررسی خواهیم کرد که کلید های
sessionکه در مرحله اول ست شده بودند همچنان وجود داشته و مقادیر آنها معتبر باشند (در صورت عدم وجود کلید ها بایستی کاربر به مرحله قبل منتقل شود) و دوما مقدارcodeکه کاربر وارد میکند با کدی که در مرحله ۱ تولید شده است یکسان و همخوان باشد. ضمنا فیلدcodeبایستی از نظر تعداد کاراکتر ها (که ۶ کاراکتر عددی می باشد) نیز مورد بررسی قرار بگیرد -
در صورتیکه کد موقت به درستی وارد شود، کاربر را به مرحله سوم منتقل میکنیم و کد فعالسازی متناظر با کد گارانتی وارد شده را رمزگشایی کرده و به او نمایش میدهیم.
-
-
لطفا نکات زیر را برای داوری صحیح پاسخ هایتان در نظر داشته باشید :
-ملاک بررسی صحت اعتبارسنجی های انجام شده کلید
errorsدرsessionمی باشد که به صورت عادی توسط لاراول ست می شود. به بیان دیگر حتما سعی کنید از توابع و کلاس های موجود در لاراول برای اعتبارسنجی و تولید خطاهای احتمالی استفاده کنید تا کمترین میزان مغایرت با داوری را داشته باشید. به این منظور می توانید از قسمتValidationکمک بگیرید.-پیغام های تولید شده در اعتبار سنجی ها کاملا باید مطابق لیست زیر باشد (واضح است که حتی ۱ کاراکتر اختلاف باعث رد شدن جواب خواهد شد) :
پر کردن فیلد نام اجباری می باشد پر کردن فیلد نام خانوادگی اجباری می باشد پر کردن فیلد کد ملی اجباری می باشد کد ملی وارد شده صحیح نمی باشد پر کردن فیلد کد گارانتی اجباری می باشد کد گارانتی وارد شده معتبر نمی باشد تعداد رقم های وارد شده برای کد گارانتی صحیح نمی باشد پر کردن فیلد کد موقت اجباری می باشد تعداد رقم های وارد شده برای کد موقت صحیح نمی باشد کد موقت وارد شده صحیح نمی باشد کد فعالسازی شما عبارت است از : 13 -
در نظر داشته باشید که در طول برنامه پس از تولید فایل
data.csvفایل ورودی اکسل اولیه حذف خواهد شد و دیگر در دسترس نخواهد بود. لذا در ادامه بایستی همه چیز با استفاده از اطلاعات فایل تولید شده بررسی و ارائه شود. -
برای استخراج اطلاعات از فایل اکسل می توانید از کتابخانه های آماده استفاده کنید و فایل
composer.jsonرا همراه پاسخ خود آپلود کنید. -
در صفحات مختلف، نسبت به مرحله ای که فعال می باشد، بایستی وضعیت نمایش داده شده در بالای فرم (که مراحل را به صورت فعال و غیر فعال نمایش می دهد) صحیح باشد. مثلا در صفحه ای که آدرس آن
/step2است باید مراحل ۱ و ۲ هردو فعال باشند (کلاسactiveبه عنصرliداده شود).
آنچه باید آپلود کنید
پوشه های زیر را در یک فایل فشرده با فرمت zip آپلود کنید :
app
config
resources
routes
composer.json
تصحیح
- گویا فایل
input.xlsxکه در پروژه اولیه قرار داده شده با نرم افزار اکسل مشکل دارد و باز نمیشود. اول این که فایل از نظر محتوایی سالمه و با کدهای php میشه محتواش رو خوند و دوم اینکه میتونید همون فایل رو با google sheet باز کنید یا اینکه فایل جدید رو از این آدرس دانلود کنید و جایگزین کنید. - در مرحله دوم در صورتیکه همه چیز صحیح باشد، بایستی کد فعالسازی به صورت رمزگشایی شده در یک متغیر
sessionبا کلیدactivation_codeقرار بگیرد و کاربر به مرحله سوم منتقل شده و کد فعالسازی به کاربر نشان داده شود.
ارسال پاسخ برای این سؤال