کوئرا بهتازگی میخواهد یک فروشگاه برای خرید و فروش تجهیزات کامپیوتری تأسیس کند و از شما میخواهد که با استفاده از جنگو یک سیستم مدیریت فروشگاه آنلاین برای او پیادهسازی کنید.
پروژهی اولیه را میتوانید از این لینک دانلود کنید. ساختار پروژه به شرح زیر است و شما باید قسمتهای مشخص شده را پیادهسازی کنید.
کاربر: مدل کاربر سفارشی که از AbstractUser
جنگو به ارث میبرد و نقشهایی (مشتری، مدیر فروشگاه، مدیر کل) دارد. که این مدل برای شما پیادهسازی شده است و نیاز به پیادهسازی آن نیست.
محصول:
name
که نام محصول است.description
که توضیحات مرتبط به محصول است.price
که یک عدد تنها با دو رقم اعشار است.inventory
تعداد محصولات موجود در انبار را نگه میدارد.(مقدار پیش فرض 0 عدد)rating
میانگین نمرات مشتریان را در یک عدد با دو رقم اعشار نگه میدارد که با تابع update_rating
همواره پس از save شدن مدل محاسبه میشود.discounted_price
که قیمت محصول پس از اعمال اولین تخفیف را نگه میدارد.سفارش:
customer
که user خریدار است.products
که یک ارتباط چند به چند به محصول است.total_price
که مجموع خرید را در یک عدد با دو رقم اعشار نگه میدارد.(مقدار پیش فرض: 0)status
که شامل یکی از گزینههایی است که در صورت پروژه آمده است.quantity
یک عدد که تعداد کل محصولات خریداری شده را نگه میدارد. (مقدار پیشفرض یک عدد خواهد بود)order_date
که تاریخ ساخت سفارش را نگه میدارد.نقد و بررسی (Review):
user
که کاربر ثبت کننده نقد است.product
که محصول مورد بررسی است.rating
که یک عدد صحیح بین ۱ تا ۵ است که امتیاز کاربر به آن محصول است.comment
که کامنت کاربر راجع به محصول است.created_at
که تاریخ ساخت این نقد است.تخفیف (Discount):
product
که محصول دارای تخفیف است.discount_percentage
که درصد تخفیف تا دو رقم اعشار است.start_date
که زمان شروع تخفیف است.end_date
که زمان پایان تخفیف است.is_active
که فعال بودن تخفیف را مشخص میکند.نکته: بعد از تکمیل پیادهسازی مدلها، حتما باید دستورهای مایگرشن اجرا شود تا فایلهای مایگرشن در پروژه ایجاد شوند.
get_top_selling
را پیادهسازی و یک اندپوینت /api/products/top-selling/
بسازید که ۵ محصول پرفروش بر اساس تعداد فروش (quantity
) را بازگرداند. از کوئریهای annotation برای محاسبه تعداد کل فروش هر محصول استفاده کنید.get_monthly_income
را پیادهسازی کنید که درآمد کل تولید شده در ۳۰ روز گذشته را محاسبه کرده و سه مشتری برتر را بر اساس کل مبلغ خرجشده بازگرداند.get_customers_orders
را پیادهسازی و یک اندپوینت /api/orders/customer_orders/
ارائه دهید که سفارشات قبلی مشتری را شامل قیمت کل، محصولات سفارش دادهشده و وضعیت سفارش لیست کند. از سابکوئری برای محاسبه کل مبلغ خرجشده توسط مشتری در پاسخ استفاده کنید.get_top_rated_products
را پیادهسازی کنید و یک اندپوینت /api/products/top-rated/
برای نمایش ۵ محصول با بیشترین امتیاز ایجاد کنید. از سابکوئریها برای محاسبه امتیاز میانگین و تعداد کل نظرات برای هر محصول استفاده کنید.recent_orders
را پیادهسازی کنید و از آن در یک اندپوینت /api/orders/recent/
استفاده کنید که جدیدترین سفارش هر مشتری را بازگرداند.permissions.py
را برای هندل کردن این مجوزها باید پیادهسازی کنید.توجه داشته باشید که جز بخش تحلیلها، فرمت پاسخ هر بخش به شکل serializer آن بخش است.
• POST /api/token-auth/
: تولید توکن احراز هویت که username
و password
از کاربر دریافت میکند و در صورت احراز هویت token
را در پاسخ برمیگرداند.
• GET /api/products/
: لیست همه محصولات.
• GET /api/products/<id>/
: دریافت جزئیات یک محصول.
• POST /api/products/
: اضافه کردن یک محصول جدید (فقط مدیر فروشگاه/مدیر کل).
• PUT /api/products/<id>/
: بهروزرسانی یک محصول (فقط مدیر فروشگاه/مدیر کل).
• DELETE /api/products/<id>/
: حذف یک محصول (فقط مدیر کل).
• GET /api/products/top-selling/
: دریافت محصولات پرفروش (فقط مدیر کل).
• GET /api/products/top-rated/
: دریافت محصولات با بیشترین امتیاز (مشتریان).
• POST /api/orders/
: ثبت سفارش جدید (مشتریان).
• GET /api/orders/<id>/
: دریافت جزئیات سفارش (مشتری/مدیر فروشگاه).
• GET /api/orders/recent/
: دریافت سفارشات اخیر هر مشتری (مدیر فروشگاه/مدیر کل).
• GET /api/orders/customer_orders/
: دریافت تاریخچه سفارشات مشتری (مشتریان).
• POST /api/products/<id>/reviews/
: ارسال نظر برای محصول (مشتریان).
• GET /api/products/<id>/reviews/
: دریافت نظرات یک محصول (مشتریان).
• PUT /api/reviews/<id>/
: بهروزرسانی یک نظر (مشتریان).
• DELETE /api/reviews/<id>/
: حذف یک نظر (مدیر کل/مشتریای که نظر را ایجاد کرده).
• POST /api/discounts/
: ایجاد تخفیف (فقط مدیر کل).
• GET /api/discounts/
: لیست همه تخفیفهای فعال (فقط مدیر کل).
• DELETE /api/discounts/<id>/
: حذف یک تخفیف فعال (فقط مدیر کل).
• GET /api/analytics/revenue/
: دریافت کل درآمد و سه مشتری برتر (فقط مدیر کل). مانند زیر:
• GET /api/analytics/orders/
: این API صرفا یک جواب به مدیر کل برگرداند که در آن تعداد کل رکوردهای order باشد. به شکل زیر:
شما باید یک فایل ZIP با ساختار مشابه با پروژه اولیه را آپلود کنید.