جنگو - دوبستان


ساکنان کشور دوبستان علاقه‌ای به رعایت پروتکل‌های بهداشتی از خود نشان نمی‌دهند، برای همین مسئولین این کشور تصمیم به اجرای یک سامانه گرفته‌اند. هدف اصلی این سامانه پیدا کردن افرادیست که بدیهی‌ترین پروتکل بهداشتی را رعایت نمی‌کنند و هدف بعدی آن اطلاع‌رسانی اخبار از طریق پیامک است.

در این کشور عجیب فقط بیمارستان‌ها و شرکت‌ها وجود دارند. ساکنانش هم مثل کشورشان عجیب‌اند؛ با این‌که پروتکل‌ها را رعایت نمی‌کنند ولی از مریضی به شدت می‌ترسند، برای همین برای هر مسئله‌ای به بیمارستان مراجعه می‌کنند.

برای اجرای این سامانه مدیران‌ بیمارستان‌ها و شرکت‌ها همکاری خود را اعلام کرده‌اند. این سامانه چند کار را انجام می‌دهد:

  1. با گرفتن اسم بیمارستان، افرادی را که در این بیمارستان بستری هستند، کرونا دارند و در شرکتی کار می‌کنند را برمی‌گرداند.

  2. با گرفتن اسم شرکت، کارمندانی که به‌خاطر کرونا به بیمارستان مراجعه‌ کرده بوده‌اندرا بر می‌گرداند.

  3. این سامانه برای اطلاع‌رسانی از سرویس sms استفاده می‌کند. لیستی از کد ملی اشخاص دریافت می‌کند و با استفاده از کد ملی شماره‌ تلفنشان را پیدا کرده و برای آن‌هاsms می‌فرستد. (در این شهر هر کد ملی به یک شماره تلفن اختصاص و هر شماره تلفن به یک کد ملی اختصاص داده شده است.)

پروژه اولیه🔗

پروژه اولیه را از این لینک دانلود کنید. ساختار فایل‌های این پروژه به صورت زیر است.

دیتابیس‌ها - پیاده‌سازی شده است

دیتابیس‌ها🔗

دیتابیس default🔗

در این دیتابیس قرار است گزارش‌های مربوط به smsهای داده شده ذخیره شود.

دیتابیس hospitals🔗

در این دیتابیس اطلاعات راجع‌به بیمارستان‌ها و مریض‌های مربوط به هر بیمارستان را داریم.

دیتابیس companies🔗

در این دیتابیس اطلاعات راجع به شرکت‌ها و کارمند‌های مربوط به هر شرکت را داریم.

مدل‌ها - پیاده‌سازی شده است

مدل‌ها🔗

مدل DeliveryReport🔗

این مدل فقط شامل یک فیلد می‌باشد:

فیلد phone_number : شماره‌ی شهروندی که به او از طریق این سرویس sms داده شده در آن ذخیره می‌شود. این فیلد از نوع CharField می‌باشد.

این مدل مربوط به دیتابیس default می‌باشد.

مدل Hospital🔗

این مدل شامل سه فیلد می‌باشد:

فیلد name: نشان‌دهنده‌ی نام بیمارستان می‌باشد و unique است. این فیلد از نوع ‍CharField می‌باشد.

فیلد manager_name: نشان‌دهنده‌ی نام مدیر بیمارستان است. این فیلد از نوع CharField می‌باشد.

فیلد manager_id: نشان‌دهنده‌ی کد ملی مدیر بیمارستان است. این فیلد از نوع CharField می‌باشد.

این مدل مربوط به دیتابیس hospitals می‌باشد.

مدل Company🔗

این مدل شامل سه فیلد می‌باشد:

فیلد name: نشان‌دهنده‌ی نام شرکت می‌باشد و unique است. این فیلد از نوع ‍CharField می‌باشد.

فیلد manager_name: نشان‌دهنده‌ی نام مدیر شرکت است. این فیلد از نوع CharField می‌باشد.

فیلد manager_id: نشان‌دهنده‌ی کد ملی مدیر شرکت است. این فیلد از نوع CharField می‌باشد.

این مدل مربوط به دیتابیس companies می‌باشد.

مدل Sick🔗

این مدل شامل چهار فیلد می‌باشد:

فیلد name: نشان‌دهنده‌ی نام بیمار است. این فیلد از نوع CharField می‌باشد.

فیلد nationalID: نشان‌دهنده‌ی کدملی بیمار است. این فیلد از نوع CharField می‌باشد

فیلد illName: نشان‌دهنده‌ی نام بیماری‌ بیمار مورد نظر است. این فیلد از نوع CharField می‌باشد.

فیلد hospital: نشان‌دهنده‌ی بیمارستانیست که این بیمار در آن بستری شده است. این فیلد از نوع ‌‍ForeignKey به مدل hospital می‌باشد.

این مدل مربوط به دیتابیس hospital می‌باشد.

مدل employee🔗

این مدل شامل سه فیلد می‌باشد:

فیلد name: نشان‌دهنده‌ی نام کارمند است. این فیلد از نوع CharField می‌باشد.

فیلد nationalID: نشان‌دهنده‌ی کد ملی کارمند است. این فیلد از نوع CharField می‌باشد.

فیلد company: نشان‌دهنده‌ی شرکتیست که این کارمند در آن کار می‌کند. این فیلد از نوع ‌ForeignKey به مدل company می‌باشد.

این مدل مربوط به دیتابیس companies می‌باشد.

ویو‌ها - توسط شما پیاده‌سازی می‌شود

ویو‌‌ها🔗

ویو get_sick_employee_by_hospital🔗

این ویو یک request می‌پذیرد که از نوع POST می‌باشد.

در request اسم بیمارستان به صورت json داده می‌شود. (NameSerializer سریالایزر مربوط به این ریکوئست می‌باشد.) به عنوان response یک دیکشنری داده می‌شود؛ به این صورت که در قسمت key اعداد ‍۱ تا n قرار دارند و در قسمت value یک رشته به صورت زیر ذخیره می‌شود: "(name, nationalID)" در واقع نام و کد ملی شخصیست که به آن بیمارستان برای کرونا مراجعه کرده و کارمند است. دقت کنید که اهمیتی ندارد کدام value به کدام key‍‍ نسبت داده شده است.

کسانی که کرونا دارند فیلد illName آن‌ها به صورت Covid19 ذخیره شده است.

ویو get_sick_employee_by_company🔗

این ویو یک request می‌پذیرد که از نوع POST می‌باشد.

در request اسم شرکت به صورت json داده می‌شود. (NameSerializer سریالایزر مربوط به این ریکوئست می‌باشد.) به عنوان response یک دیکشنری داده می‌شود؛ به این صورت که در قسمت key اعداد ‍۱ تا n قرار دارد و در قسمت value یک رشته به این صورت ذخیره می‌شود: (name, nationalID)(دقت کنید که این رشته است و نه تاپل.) در واقع نام و کدملی شخصیست که در آن شرکت کار می‌کند و برای کرونا به بیمارستان مراجعه کرده است. دقت کنید که اهمیتی ندارد کدام value به کدام key‍‍ نسبت داده شده است.

کسانی که کرونا دارند فیلد illName آن‌ها به صورت Covid19 ذخیره شده است.

این ویو یک request می‌پذیرد که از نوع POST می‌باشد.

در request کد ملی کسانی که قرار است برای آن‌ها sms فرستاده شود به صورت json داده می‌شود.(NationalIDSerializer سریالایزر مربوط به این ریکوئست می‌باشد.)

در فایل SMS.py دو تابع داریم:

تابع sms: به عنوان ورودی یک شماره تلفن می‌گیرد(phone_number) و برای آن sms می‌فرستد.

تابع ‍get_phone_number: به عنوان ورودی کد ملی می‌گیرد(number) و به عنوان خروجی شماره تلفن اختصاص داده شده به آن را می‌دهد.

ویو sms_link با استفاده از توابع فایل SMS.py‍‍ برای شماره‌های اختصاص داده شده به کد‌های ملی دریافتی sms می‌فرستد و در دیتابیس به ازای هر sms فرستاده شده، یک شیءDeliveryReport با شماره‌ی شخص را ذخیره‌ می‌کند.

دقت کنید که تابع sms از نوع async می‌باشد.

در نهایت به عنوان response کد استاتوس ۲۰۰ برگردانده می‌شود..

فایل روتر - توسط شما پیاده می‌شود

فایل db_Router.py🔗

در این فایل دو کلاس مربوط به لیست DATABASE_ROUTERS (تعریف شده در settings.py) باید توسط شما پیاده‌سازی شود.

نکات🔗

  • توجه کنید که اگر هر request مشکلی داشته باشد، ویوی مربوط به آن باید کداستاتوس ۴۰۰ را برگرداند.
  • هر کد ملی برای یک نفر است.
  • شما فقط مجاز به تغییر دادن فایل‌های views.py و db_Router.py هستید. باقی تغییرات در سیستم داوری نادیده گرفته می‌شود.

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

یک فایل ZIP شامل پروژه جنگو خود آپلود کنید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.