میثم که به تازگی استخدام شده است، سعی دارد که در اولین تسکی که به او محول شده به خوبی عمل کند. و با اولین *Push Request* موفق به *Merge* کدش شود. اما سعید هنوز تجربهی کافی ندارد. به همین دلیل روی کمک شما برای انجام این تسک حساب کرده است.
## پروژه اولیه
پروژه اولیه را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/14744/) دانلود کنید. ساختار فایلهای این پروژه به صورت زیر است:
```
.
├── app
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── <mark class="yellow" title="این فایل را تغییر دهید"> > views.py < </mark>
├── library
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── <mark class="yellow" title="این فایل را تغییر دهید"> > urls.py < </mark>
│ └── wsgi.py
├── manage.py
├── requirements.txt
└── tests
└── testsample.py
```
## جزئیات
در این پروژه یک مدلِ کتاب داریم. این مدل دو تابع `borrow_book` و `return_book` دارد. اولی برای قرض گرفتن کتاب و دومی برای پس دادن کتاب استفاده میشود.
از شما خواسته شده که تسک زیر را انجام دهید.
- با صدا زدن آدرس `/get_book_users/<book_id>/` پاسخی مانند زیر دریافت شود که تاریخچه زمانی افرادی است که تاکنون کتاب را قرض گرفتهاند. تاریخ به صورت `iso_format` نشان داده شود **که تاریخ قرض گرفته شدن کتاب را نشان میدهد.** در صورتی که کتابی وجود نداشت لیست خالی برگردانده شود.
```
[
{ "username": "user_name_1", "date": "2018-02-08T14:13:22.142497"},
]
```
- آدرس `/borrow_book/<book_id>/<user_name>/` صدا زده شد پاسخهای زیر برگردانده شود.
```
{ "status": status_code }
```
مقادیر status_code (ترتیب مهم است):
- در صورتی که کتاب قبلا قرض داده شده بود ۱ باشد.
- در صورتی که قرض گیرنده قبلا کتاب قرض گرفته است ۲ باشد.
- در صورتی که کتاب یا کاربر وجود ندارد مقدار ۳ باشد.
- در صورت هر غلط دیگر مقدار ۴ باشد.
- در صورت انجام صحیح مقدار ۰ باشد.
- آدرس `/return_book/<book_id>/` صدا زده شد پاسخهای زیر برگردانده شود.
```
{ "status": status_code }
```
مقادیر status_code (ترتیب مهم است):
- در صورتی که کتاب قبلا پس داده شده بود ۱ باشد.
- در صورتی که کتاب وجود ندارد مقدار ۲ باشد.
- در صورت هر غلط دیگر مقدار ۳ باشد.
- در صورت انجام صحیح مقدار ۰ باشد.
## تست نمونه
در فایلهای اولیهای که دانلود کردید یکسری داده اولیه به عنوان نمونه قرار داده شده است. میتوانید قبل از فرستادن سوال در سایت، این تستها را ببینید تا با نحوه داوری ما آشنا شوید و از پاسخ خود اطمینان حاصل نمایید.
تستها را میتوانید با دستور زیر اجرا کنید:
```shell terminal terminal
python manage.py test
```
## نکات
* شما تنها مجوز ایجاد تغییرات در فایلهای `app/views.py` و `library/urls.py` را دارید و **تمامی تغییرات دیگر شما** در فایلهای پروژه **نادیده گرفته خواهد شد.**
* فراموش نکنید که میتوانید با مطالعهی `testsample.py` با روش تست کردن سوال آشنا شوید.
## نحوه ارسال
یک فایل *ZIP* حاوی همهی فایلهای پروژه، آپلود کنید. نام فایل *ZIP* اهمیتی ندارد.