ساعت
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ساعت
دقیقه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
دقیقه
ثانیه
۹۰۱۲۳۴۵۶۷۸۹۰۹۰۱۲۳۴۵۶۷۸۹۰
ثانیه

سامانه دانیال همراه

یکی از شرکت های معتبر واردات قعطات کامپیوتری (به نام دانیال همراه) هر ماه قطعاتی را از کشورهای مختلف وارد می کند. این شرکت اخیرا با مشکلات متعددی برای امور گارانتی خود مواجه شده است. روال گارانتی به این صورت است که الزاما بایستی شماره سریال قطعه مورد نظر توسط خریدار نهایی به شرکت اعلام شود. به همین دلیل شرکت برای هر دستگاه یک کارت گارانتی چاپ کرده که بر روی کارت شماره سریال قطعه و همچنین کد فعالسازی گارانتی چاپ شده است. کد فعالسازی به صورت مخفی و تحت یک 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
    
    
    Plain text
  • در نظر داشته باشید که در طول برنامه پس از تولید فایل data.csv فایل ورودی اکسل اولیه حذف خواهد شد و دیگر در دسترس نخواهد بود. لذا در ادامه بایستی همه چیز با استفاده از اطلاعات فایل تولید شده بررسی و ارائه شود.

  • برای استخراج اطلاعات از فایل اکسل می توانید از کتابخانه های آماده استفاده کنید و فایل composer.json را همراه پاسخ خود آپلود کنید.

  • در صفحات مختلف، نسبت به مرحله ای که فعال می باشد، بایستی وضعیت نمایش داده شده در بالای فرم (که مراحل را به صورت فعال و غیر فعال نمایش می دهد) صحیح باشد. مثلا در صفحه ای که آدرس آن /step2 است باید مراحل ۱ و ۲ هردو فعال باشند (کلاس active به عنصر li داده شود).

آنچه باید آپلود کنید

پوشه های زیر را در یک فایل فشرده با فرمت zip آپلود کنید :


app

config

resources

routes

composer.json

Plain text

تصحیح

  • گویا فایل input.xlsx که در پروژه اولیه قرار داده شده با نرم افزار اکسل مشکل دارد و باز نمی‌شود. اول این که فایل از نظر محتوایی سالمه و با کدهای php میشه محتواش رو خوند و دوم اینکه می‌تونید همون فایل رو با google sheet باز کنید یا اینکه فایل جدید رو از این آدرس دانلود کنید و جایگزین کنید.
  • در مرحله دوم در صورتیکه همه چیز صحیح باشد، بایستی کد فعالسازی به صورت رمزگشایی شده در یک متغیر session با کلید activation_code قرار بگیرد و کاربر به مرحله سوم منتقل شده و کد فعالسازی به کاربر نشان داده شود.

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.