میخواهیم یک فروشگاه آنلاین را پیادهسازی کنیم که در آن کالاهایی برای بفروش بگذاریم و کاربران آنها را خریداری کنند و نظرات خود را راجع به کالاها بگذارند. بخشی از کد فروشگاه توسط فردی زده شدهاست و در حال حاضر در دسترس نیست. شما باید به آن امکاناتی اضافه کنید.
کد پروژه را میتوانید از این [لینک](http://s9.picofile.com/file/8339074692/digikala_initial.zip.html) دریافت کنید.
داخل پروژه ۲ فایل پایتون با نامهای `models.py` و `store.py` است. شما باید توابع ناقص فایل `store.py` را تکمیل کنید.
### جزئیات پروژه
داخل کلاس `Store` چند تابع وجود دارد که نیاز به تکمیل دارند. همچنین `object` آن دارای کالاهای موجود و کاربران ثبت نام شدهاست. کالاها به صورت `dictonary` ذخیره شدهاند که هر `key` آن یک کالا(`Product`) است و هر `value` آن تعداد موجودی آن کالاست. کاربران هم به صورت `list` ذخیره شدهاند.
وظیفهی شما این است که توابع زیر را برای کلاس `Store` پیادهسازی کنید.
+ تابع `remove_product`
این تابع وظیفهی حذف کالا از فروشگاه را دارد.در صورت موجود نبود این تعداد کالا، استثایی با پیام `Not Enough Products` پرتاب شود و هیچ کالایی از فروشگاه حذف نشود. در صورتی که موجودی یک کالا به صفر برسد باید از دیکشنری کالاها حذف شود.
+ تابع `add_user`
این تابع یک کاربر را به کاربران اضافه میکند. در صورتی که نام کاربری تکراری باشد کاربری اضافه نمیکند و مقدار `None` بر میگرداند؛ در غیر این صورت، رشتهی نام کاربری آن کاربر را برمیگرداند.
+ تابع `get_total_asset`
این تابع جمع کل داراییهای فروشگاه را برمیگرداند (دارایی فروشگاه برابر مجموع قیمت کالاهای موجود است.)
+ تابع `get_total_profit`
این تابع مقدار سودی که فروشگاه کردهاست را برمیگرداند. مقدار سود فروشگاه برابر جمع قیمت کالاهای فروختهشده است. ( تعداد هریک از کالاهای لیست `bought_products` در کلاس `User` یک است.)
+ تابع `get_comments_by_user`
این تابع لیست **متن** نظراتی که یک کاربر خاص روی محصولات موجود در فروشگاه گذاشتهاست را بر میگرداند (ترتیب آنها مهم نیست)
+ تابع `get_inflation_affected_product_names`
این تابع لیستی از **نام** کالاهایی که تورم روی آنها تاثیر گذاشتهاست را برمیگرداند. (تورم روی کالاهایی اثر گذاشتهاست که کالایی هم اسم آنها ولی با قیمت کمتر داخل فروشگاه وجود داشتهباشد). توجه کنید که اگر چند قیمت از یک کالا موجود باشد، نام آن فقط یک بار باید در لیست بیاید. ترتیب اعضای لیست اهمیتی ندارد.
+ تابع `clean_old_comments`
این تابع ورودی یک تاریخ از نوع `datetime` میگیرد و همهی نظراتی که قبل از آن تاریخ روی پستها گذاشته شدهاند را حذف میکند.
+ تابع `get_comments_by_bought_users`
این تابع لیستی از **متن** نظراتی را بر میگرداند که صاحب آن، کالا را خریداری کردهاست.
### نکات
+ توجه کنید که ممکن است از یک کالا چند عدد موجود باشد.
+ شما تنها مجاز به تغییر فایل `store.py` هستید.
#### آنچه باید آپلود کنید:
+ یک فایل *Zip* شامل یک فایل به نام `store.py` که کلاس `Store` در آن قرار دارد آپلود کنید.
+ نام فایل *Zip* اهمیت ندارد.