مدیریت پروژه


در این تمرین از شما می‌خواهیم چند مدل ساده را پیاده‌سازی کنید.

پروژه‌ی اولیه🔗

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

quera_challenge/
├── manage.py
├── requirements.txt
├── app
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   ├── __init__.py
│   │   └── 0001_initial.py
│   ├──  > models.py< 
│   ├──  > serializers.py< 
│   ├── tests.py
│   ├── urls.py
│   └──  > views.py < 
├── config
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py
│   └── auth.py
Plain text

پایگاه‌داده و مدل‌هایی که باید تکمیل شوند🔗

پروژه (Project)🔗

  • عنوان (رشته‌ی title): عنوان پروژه
  • شرح (رشته‌ی description): توضیحات پروژه
  • اعضاء (رابطه چندبه‌چند (ManyToMany) با User از طریق مدل شخصی‌سازی‌شده‌ی Membership): اعضای شرکت‌کننده در پروژه
  • دسته‌بندی (کلید خارجی به Category): دسته‌بندی مرتبط با پروژه
  • تاریخ ایجاد (زمان created_at): زمان ایجاد پروژه
  • تاریخ آخرین به‌روزرسانی (زمان updated_at): زمان آخرین به‌روزرسانی پروژه

دسته‌بندی (Category)🔗

  • نام (رشته name): نام دسته‌بندی
  • والد (این کلید با نام ‌parent به خود مدل Category وصل می‌شود)

نقش (RoleType)🔗

  • این مدل به صورت IntegerChoices پیاده‌سازی می‌شود.
  • "MEMBER" = 0, "member": عضوی که دسترسی معمولی دارد و تنها به‌عنوان شرکت‌کننده در پروژه حضور دارد.
  • "OWNER" = 1, "owner": مالک پروژه که دسترسی مدیریتی و تصمیم‌گیری در پروژه را دارد.

عضویت (Membership)🔗

  • person (کلید خارجی به User): فرد شرکت‌کننده در پروژه
  • project (کلید خارجی به Project): پروژه‌ای که فرد در آن شرکت دارد
  • نقش (عدد صحیح role): نقش فرد در پروژه (عضو یا مالک) که از بین گزینه‌های مدل Roletype انتخاب می‌شود.

سریالایزر و ویو🔗

سریالایزر ProjectSerializer🔗

  • فیلدها:

    • title: عنوان پروژه
    • description: توضیحات پروژه
    • category: دسته‌بندی پروژه
    • members: فهرستی از id اعضای پروژه
    • created_at: تاریخ ایجاد پروژه
    • updated_at: تاریخ آخرین به‌روزرسانی پروژه

ویوی ProjectListView🔗

این کلاس یک ویوی لیستی از پروژه‌ها را فراهم می‌کند که در آن کاربران احرازهویت‌شده می‌توانند پروژه‌های موجود را مشاهده کنند.

  • از ListAPIView از جنگو رست فریم‌ورک برای ارائه یک لیست از اشیاء مدل‌ها استفاده می‌شود.
  • تنها کاربران احرازهویت‌شده با استفاده از کلاس IsAuthenticated اجازه‌ی دسترسی به این ویو را دارند.
  • تمامی پروژه‌های ذخیره‌شده در دیتابیس بازگردانده می‌شوند.
  • این ویو از ProjectSerializer برای تبدیل داده‌های مدل به فرمت مناسب JSON استفاده می‌کند.

نکات مهم🔗

  • شما تنها مجوز ایجاد تغییرات در فایل‌های models.py، views.py، serializers.py و را دارید و تمامی تغییرات دیگر شما در فایل‌های پروژه نادیده گرفته خواهند شد.
  • فیلدهای project و personدر مدل MemberShip باید unique باشند.
  • رکوردها در مدل Project براساس تاریخ آخرین تغییر order می‌شوند.
  • مدل‌های User و Project از طریق مدل MemberShip رابطه‌ی ManyToMany برقرار می‌کنند.

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

شما باید یک فایل ZIP با ساختار مشابه با پروژه اولیه را آپلود کنید.