شهرام و بهرام بعد از تصادف سنگینی که منجر به خسارت بسیار سنگینی که برای آنها شد تصمیم گرفتند تا شرکت بیمهای را تاسیس کنند. این دو با شرکتهای مختلف بیمه وارد مذاکره شدند و قول همکاری با آنها را گرفتهاند.
این دو قصد دارند برای شروع *API*هایی را طراحی و در معرض استفاده عموم قرار دهند اما از آنجا که این دو نفر هیچ تجربهای در زمینه برنامهنویسی ندارند، برای این کار از شما کمک خواستهاند.
نیازمندیهای این دو برای این پروژه عبارت است از:
1. تعریف شرکت بیمه
2. تعریف انواع بیمه توسط یک شرکت خاص
3. دریافت اطلاعات شرکت بیمه
4. دریافت اطلاعات بیمه
مطابق با این نیازمندیها، وبسرویسهای زیر باید پیادهسازی شوند:
| عنوان | آدرس |
|:---------------------:|:----------------------: |
| تعریف شرکت بیمه | POST /companies/save |
| تعریف انواع بیمه توسط یک شرکت خاص | POST /insurances/save |
| دریافت اطلاعات شرکت بیمه | GET /companies/get/{id} |
| دریافت اطلاعات بیمه | GET /insurances/get/{id} |
# جزئیات پروژه
ابتدا پروژهی اولیه و خام اسپرینگ بوتی را از [این لینک](/contest/assignments/45415/download_problem_initial_project/157740/) دانلود کنید. سپس شما باید به پیادهسازی نیازمندیهای ذکر شده بپردازید.
### تعریف شرکت بیمه
در برنامه شما باید بتوان شرکت جدیدی ثبت کرد. شرکتها باید در جدولی به نام `companies` ذخیره شوند و اطلاعات این جدول بهصورت زیر است:
| نام ستون | نوع |
|:----------:|:------------------:|
| name | String |
همچنین این شرکت میتواند **چندین** بیمه *(insurances)* ایجاد کند.
برای ایجاد شرکت بیمه شما باید اندپوینتی با اطلاعات زیر ایجاد کنید:
```json
URL:
"POST /companies/save"
Request:
content-type: "application/json"
{
"name": "shahram"
}
```
اگر شرکت ذخیره شد باید عبارت `Company saved.` و اگر هر خطایی رخ داد، عبارت `Company saving problem!` را با وضعیت `BAD_REQUEST` برگردانید.
### تعریف انواع بیمه توسط یک شرکت خاص
در برنامه شما باید بتوان برای هر شرکت تعدادی بیمه ثبت کرد. برای شروع برنامه شما باید از دو نوع بیمه افراد و وسایل نقلیه پشتیبانی کند. بیمهها باید در جدولی به نام `insurances` ذخیره شوند و اطلاعات این جدول بهصورت زیر است:
| نام ستون | نوع |
|:----------:|:------------------:|
| type | ENUM |
| name | String |
| price | Double |
| created_at | LocalDateTime |
همچنین این جدول به **شرکتی** *(company)* که آن را ایجاد کرده، مرتبط است و ستون `created_at` زمان درج ردیف را نگه میدارد و `type` هم *ENUM* ای است که میتواند `PERSON` یا `VEHICLE` باشد.
جدولهای `vehicles_insurance` و `persons_insurance` نیز باید در پروژه شما وجود داشته باشند که اطلاعات تکمیلی بیمهها را در خود نگه میدارند تا اگر شرکتی این نوع بیمهها را ثبت کرد، اطلاعات تکمیلی در این جداول ذخیره شود.
ساختار جدول `vehicles_insurance`:
| نام ستون | نوع |
|:----------:|:------------------:|
| usage | String |
ساختار جدول `persons_insurance`:
| نام ستون | نوع |
|:----------:|:------------------:|
| min_age | int |
برای ایجاد بیمهها شما باید اندپوینتی با اطلاعات زیر ایجاد کنید:
```json
URL:
"POST /insurances/save"
Request:
content-type: "application/json"
{
"type": "PERSON",
"name": "shakhs",
"price": 300000,
"company_id": 1,
"minAge": 20
}
```
اگر بیمه ذخیره شد باید عبارت `Insurance saved.` و اگر هر خطایی رخ داد، عبارت `Insurance saving problem!` را با وضعیت `BAD_REQUEST` برگردانید.
همانطور که میبینید در مثال بالا بیمه افراد با نام دلخواه برای یک شرکت ایجاد میشود. حال فرض کنید قصد دارد تا بیمه وسایل نقلیه را نیز برای این شرکت ایجاد کنیم، برای این کار همین اندپوینت را با اطلاعات زیر صدا میزنیم:
```json
{
"type": "VEHICLE",
"name": "mashin",
"price": 220000,
"company_id": 1,
"usage": "for car"
}
```
بنابراین باید اندپوینت و جداول شما برای انواع بیمهها بهخوبی پیادهسازی شوند.
### دریافت اطلاعات شرکت بیمه
برای این قسمت اندپوینتی ایجاد کنید تا بتوان اطلاعات یک شرکت بیمه خاص را دریافت کرد، اطلاعات این اندپوینت باید بهصورت زیر باشد:
```json
URL:
"POST /companies/get/{id}"
Response:
{
"name": "shahram",
"insurances": [
{
"type": "PERSON",
"name": "shakhs",
"price": 200000,
"company_id": 1,
"minAge": 20
},
{
"type": "VEHICLE",
"name": "mashin",
"price": 220000,
"company_id": 1,
"usage": "for car"
}
]
}
```
### دریافت اطلاعات بیمه
برای این قسمت اندپوینتی ایجاد کنید تا بتوان اطلاعات یک بیمه خاص را دریافت کرد، اطلاعات این اندپوینت باید بهصورت زیر باشد:
```json
URL:
"POST /insurances/get/{id}"
Response:
{
"type": "PERSON",
"name": "shakhs",
"price": 200000,
"company_id": 1,
"minAge": 20
}
```
# نکات
+ برای این پروژه از دیتابیس `h2` استفاده شده است.
+ شما مجاز به ایجاد هر کلاسی در مسیر `org/quera/bime` هستید، فقط باید پروژه شما خواستههای مسئله را بهخوبی پیادهسازی کرده باشد.
# آنچه باید آپلود کنید
پس از پیادهسازی موارد خواستهشده، این پروژه را زیپ کرده و ارسال کنید.