سلام دوست عزیز😃👋
به مسابقه «المپیک فناوری: Python/Django» خوش آمدی!
لینکهای مفید برای شرکت در مسابقه:
نوع داوری سوالات مسابقه:
هرگونه ارتباط با سایر شرکتکنندگان و یا استفاده از ابزارهای تولید کد، مثل chatGPT و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکتکنندگان مسابقه حذف میشوید.
در طول مسابقه، میتوانید سؤالات خود را از قسمت «سوال بپرسید» مطرح کنید.
موفق باشید 😉✌
کوئرا تصمیم دارد تا برای کاربران فعال خود چالشی برگزار کند. فرایند این چالش به این صورت است که هرروزه تعدادی مأموریت توسط کوئرا تعیین میشوند و کاربران با انجام دادن آنها، امتیاز و جایزه دریافت خواهند کرد. حال کوئرا برای پیادهسازی فرایند این چالش از شما میخواهد تا به کمکش بیایید.
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای این پروژه بهصورت زیر است.
جایزه (Award
)
name
): نام جایزهdescription
): توضیحاتی درباره جایزهتراکنش جایزه (AwardTransaction
)
Award
): جایزه مرتبط با تراکنشUser
): کاربر دریافت کننده جایزهcreated_at
): تاریخ و زمان ایجاد تراکنشچالش (Challenge
)
title
): عنوان چالشdescription
): توضیحات چالشpoint
): امتیاز چالشAward
): جایزه مرتبط با چالشمورد چالش (ChallengeItem
)
Challenge
): چالش مرتبط با موردtitle
): عنوان مورد چالشdescritption
): توضیحات مورد چالشdate_to_display
): تاریخی که چالش باید به کاربران نمایش داده شود.تراکنش چالش (ChallengeTransaction
)
ChallengeItem
): مورد چالش مرتبط با تراکنشcreated_at
): تاریخ و زمان ایجاد تراکنشupdated_at
): تاریخ و زمان بهروزرسانی تراکنشUser
): کاربر انجام دهنده تراکنشکاربر (User
)
point_earned
): امتیاز کسب شده توسط کاربرChallengeListAPIView
ChallengeListAPIView
ارسال شود، لیستی از چالشها بازگردانده میشود.is_done
: بهطور داینامیک برای هر آیتم چالش تعیین میشود. اگر کاربر برای آیتم چالش خاصی، تراکنش داشته باشد، این فیلد True
را نشان میدهد؛ در غیر این صورت، False
است. این ویژگی به کاربران کمک میکند تا بهراحتی ببینند کدام چالشها را قبلاً تکمیل کردهاند و کدامها را هنوز باید انجام دهند.jalali_date_to_display
: تمامی چالشها براساس اینکه مقدار date_to_display
آنها برابر تاریخ امروز باشد فیلتر و به کلاینت ارسال میشوند. و دقت کنید که این تاریخ با نام jalali_date_to_display
بهصورت شمسی و فرمت Y/m/d
در دیتا قرار میگیرد. برای انجام اینکار حتما باید از کتابخانه jdatetime
کمک بگیرید.CreateChallengeTransactionView
challenge_item_ids
در بدنهی درخواست ارسال میکند. فرمت کلی دیتای ارسالی بهصورت {"challenge_item_ids": []}
است.challenge_item_ids
ارائه شدهاست یا خیر. اگر ارائه نشده باشد، پاسخ HTTP_400_BAD_REQUEST
برمیگرداند.ChallengeItem
مربوط به ID
های ارائهشده را بازیابی میکند و اطمینان حاصل میکند که کاربر قبلاً در این چالشها شرکت نکردهاست.ChallengeTransaction
ایجاد میشود.HTTP_201_CREATED
بازگردانده میشود.برنامه، پس از ذخیره شدن یک ChallengeTransaction
بررسی میکند که آیا کاربر تمام موارد چالش مربوط به یک چالش خاص را تکمیل کردهاست یا خیر. در صورتی که کاربر تمام موارد یک چالش را گذرانده باشد به وی جایزه و امتیازی که در آبجکت آن چالش تعیین شده، تعلق خواهد گرفت.
اختصاص جایزه و امتیاز به این صورت است که یک AwardTransaction
برای کاربر ایجاد میشود و امتیازهای کاربر بهروزرسانی میشود.
نکته: استفاده از سیگنال در فرایند مدیریت امتیاز و اختصاص جوایز الزامیست.
views.py
، serializers.py
و signals.py
را دارید و تمامی تغییرات دیگر شما در فایلهای پروژه نادیده گرفته خواهند شد.ChallengeListAPIView
باید حداکثر دو کوئری به پایگاه داده ارسال کند. url
های آن از قبل پیادهسازی شدهاست.transaction.atomic
در سیگنال الزامیست.