# findfreelancer.ru API
- `POST /profile` - [регистрация (создать профиль)](#`POST-/profile`---регистрация)
- `POST /login` - [авторизация (логин)](#`POST-/login`---авторизация)
- `DELETE /logout` - [выйти из профиля](#`DELETE-/logout---выйти-из-профиля`)
- `PUT /profile/id:[0-9]+` - [изменить профиль](#`PUT-/profile/id:[0-9]+`---изменить-профиль)
- `POST /profile/avatar` - [загрузить фотку (аватарку)](#`POST-/profile/avatar`---загрузить-фотку)
- `POST /profile/id[0-9]+/specialize` - [добавить специализацию](#`POST-/profile/id[0-9]+/specialize`---добавить-специализацию)
- `DELETE /profile/id[0-9]+/specialize` - [удалить специализацию](#`DELETE-/profile/id[0-9]+/specialize`---удалить-специализацию)
- `GET /profile/id:[0-9]+` - [получить всю информацию о юзере](#`GET-/profile/id:[0-9]+`---получить-всю-информацию-о-юзере)
- `GET profile/authorized` - [проверить аторизован ли пользователь](#`GET-profile/authorized`---проверить-аторизован-ли-пользователь)
- `POST /order` - [создать заказ](#`POST-/order`---создать-заказ)
- `GET /order/id:[0-9]+` - [получить всю информация о заказе](#`GET-/order/id:[0-9]+`---получить-всю-информация-о-заказе)
- `POST /order/id:[0-9]+/response` - [добавить отклик](#`POST-/order/id:[0-9]+/response`---добавить-отклик)
- `GET /order/id:[0-9]+/response` - [получить все отклики на текущий заказ](#`GET-/order/id:[0-9]+/response`---получить-все-отклики-на-текущий-заказ`)
- `PUT /order/id:[0-9]+/response` - [изменить отклик](#`PUT-/order/id:[0-9]+/response`---изменить-отклик)
- `DELETE /order/id:[0-9]+/response` - [удалить отклик](#`DELETE-/order/id:[0-9]+/response`---удалить-отклик)
- `GET /order` - [получить все актуальные заказы](#`GET-/order`---получить-все-актуальные-заказы)
- `GET /order/profile/id:[0-9]` - [получить все заказы пользователя](#`GET-/order/profile/id:[0-9]`---получить-все-заказы-пользователя)
- `PUT /order/id:[0-9]` - [изменить заказ](#`PUT-/order/id:[0-9]`---изменить-заказ)
- `POST /vacancy` - [создать вакансию](#`POST-/vacancy`---создать-вакансию)
- `GET /vacancy/id:[0-9]+` - [получить всю информацию о вакансии](#`GET-/vacancy/id:[0-9]+`---получить-всю-информацию-о-вакансии)
- `POST /vacancy/id:[0-9]+/response` - [добавить отклик](#`POST-/order/id:[0-9]+/response`---добавить-отклик)
- `GET /vacancy/id:[0-9]+/response` - [получить отклик](#`GET-/order/id:[0-9]+/response`---получить-отклик)
1. ### `POST /profile` - регистрация
- Тело запроса:
```json
{
"email": "kek@mem.ru",
"password": "2283221488", // не менее 6ти символов
"login": "AleXDarkstalker98",
"name_surname": "Глад Валакас",
"about": "Я пожилой шалунишка, я стесняшка, я улыбашка. Я енотик полоскун, полоскаю свой ",
"specializes": [ "Фронтенд", "Бекенд", "Кашеварение" ] // для исполнителя
}
```
- Ответы:
- 201 created
```json
{
"id": 322,
"email": "kek@mem.ru",
"login": "AleXDarkstalker98",
"name_surname": "Глад Валакас",
"about": "Я пожилой шалунишка, я стесняшка, я улыбашка. Я енотик полоскун, полоскаю свой ",
"executor": true/false,
"specializes": ["Фронтенд", "Бекенд", "Кашеварение"] // для исполнителя
}
```
- 400 Ошибка в json
```json
{
"error": "Bad json"
}
```
- 400 Невалидные данные в запросе
```json
{
"error": "Invalid data"
}
```
- 400 Пользователь с таким имейлом уже существует
```json
{
"error": "Email duplicate"
}
```
- 500 Ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
2. ### `POST /login` - авторизация
- Тело запроса:
```json
{
"email": "kek@mem.ru",
"password": "2283221488"
}
```
- Ответы:
- 201 Created
```json
{
"id": 1488,
"email": "kek@mem.ru",
"login": "AleXDarkstalker98",
"name_surname": "Глад Валакас",
"executor": true/false,
"about": "Я пожилой шалунишка, я стесняшка, я улыбашка. Я енотик полоскун, полоскаю свой "
"specializes": ["Фронтенд", "Бекенд", "Кашеварение"] // для исполнителя
}
```
- 400 Ошибка в json
```json
{
"error": "Bad json"
}
```
- 401 Пользователь с таким имейлом не найден
```json
{
"error": "Unauthorized"
}
```
- 401 Неверный пароль
```json
{
"error": "Bad password"
}
```
- 500 Ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
3. ### `DELETE /logout` - выйти из профиля
- Ответы:
- 200 OK
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 404 - профиль не найден
```json
{
"error": "user not found"
}
```
- 500 Ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
4. ### `PUT /profile/id:[0-9]+` - изменить профиль
- Тело запроса:
```json
Все поля опциональны!
Имейл не меняется!
Заказчика исполнителем тоже сделать пока нельзя, если будет надо напишите мне
{
"old_password": "2283221488", // не менее 6ти символов
"login": "AleXDarkstalker98",
"name_surname": "Глад Валакас",
"about": "Я старая няшка, пожилая я стесняшка. Я енотик полоскун, полоскаю свой ",
"new-password": "alex1488"
}
```
- Ответы:
- 200 OK
```json
{
"id": 228,
"email": "kek@mem.ru",
"login": "AleXDarkstalker98",
"name_surname": "Глад Валакас",
"executor": true, // для заказчика поле не вернется
"specializes": [ "Фронтенд", "Бекенд", "Кашеварение" ], // для исполнителя
"about": "Я старая няшка, пожилая я стесняшка. Я енотик полоскун, полоскаю свой "
}
```
- 400 Ошибка в json
```json
{
"error": "Bad json"
}
```
- 400 Некорректные данные о пользователе
```json
{
"error": "Incorrect user data"
}
```
- 400 - некорректный айди в урле
```json
{
"error": "Bad id"
}
```
- 400 - айди в урле и в куках не совпали
```json
{
"error": "No right to modify"
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 404 - профиль не найден
```json
{
"error": "user not found"
}
```
- 500 Ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
5. ### `POST /profile/id[0-9]+/specialize` - добавить специализацию
- Тело запроса:
```json
{
"specialize": "Бекенд"
}
```
- Ответы:
- 201 Created
```json
{
"id": 322,
"email": "kek@mem.ru",
"login": "AleXDarkstalker98",
"name_surname": "Глад Валакас",
"executor": true/false,
"about": "Я старая няшка, пожилая я стесняшка. Я енотик полоскун, полоскаю свой ",
"specializes": ["Бекенд"],
"img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
}
```
- 400 - нет тела запроса
```json
{
"error": "No body"
}
```
- 400 - ошибка в json
```json
{
"error": "Bad json"
}
```
- 400 - неправильное название специализации
```json
{
"error": "Bad specialize name"
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
6. ### `DELETE /profile/id[0-9]+/specialize` - удалить специализацию
- Тело запроса:
```json
{
"specialize": "Бекенд"
}
```
- Ответы:
- 200 Ok
```json
{}
```
- 400 - нет тела запроса
```json
{
"error": "No body"
}
```
- 400 - ошибка в json
```json
{
"error": "Bad json"
}
```
- 400 - неправильное название специализации
```json
{
"error": "Bad specialize name"
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 403 - видимо что-то с куками
```json
{
"error": "Bad id"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
8. ### `POST /profile/avatar` - загрузить фотку
- Тело запроса:
```json
{
"img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
}
```
- Ответы:
- 201 Created
```json
{
"id": 322,
"email": "kek@mem.ru",
"login": "AleXDarkstalker98",
"name_surname": "Глад Валакас",
"executor": true/false,
"about": "Я старая няшка, пожилая я стесняшка. Я енотик полоскун, полоскаю свой ",
"specializes": ["Бекенд разработчик"], //только для исполнителей
"img":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
}
```
- 400 - нет тела запроса
```json
{
"error": "No body"
}
```
- 400 - ошибка в json
```json
{
"error": "Bad json"
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 403 - видимо что-то с куками
```json
{
"error": "Bad id"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
6. ### `GET /profile/id:[0-9]+` - получить всю информацию о юзере
- Ответы:
- 200 ОК
```json
{
"id": 228,
"login": "AleXDarkstalker98",
"name_surname": "Глад Валакас",
"executor": true, // для заказчика поле не вернется
"specializes": [ // только для исполнителей
"Фронтенд",
"Бекенд"
]
"img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
"about": "Я старая няшка, пожилая я стесняшка. Я енотик полоскун, полоскаю свой ",
}
```
- 400 - некорректный айди в урле
```json
{
"error": "Bad id"
}
```
- 404 - пользователя не существует
``` json
{
"error": "user not found"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
7. ### `GET profile/authorized` - проверить аторизован ли пользователь
- Ответы:
- 200 ОК
```json
{
"id": 228,
"executor": true/false
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 403 - видимо что-то с куками
```json
{
"error": "Bad id"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
8. ### `POST /order` - создать заказ
- Тело запроса:
```json
{
"order_name": "Сверстать профиль",
"category": "Верстка",
"description": "Нужен профиль, чтобы в нем была вся необходимая информация, ничего не уезжало, и все было красиво и аккуратно",
"budget": 1488,
"deadline": 1617004533, //unix-time
}
```
- Ответы:
- 201 Created
```json
{
"id": 228, //id заказа
"order_name": "сверстать профиль",
"category": "Верстка"
"customer_id": 322, //id создателя
"budget": 1488,
"deadline": 1617004533, //unix-time
"description": "Нужен профиль, чтобы в нем была вся необходимая информация, ничего не уезжало, и все было красиво и аккуратно",
}
````
- 400 Ошибка в json
```json
{
"error": "Bad json"
}
```
- 400 Невалидные данные в запросе
```json
{
"error": "Invalid data"
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 403 - видимо что-то с куками
```json
{
"error": "Bad id"
}
```
- 500 Ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
9. ### `GET /order/id:[0-9]+` - получить всю информация о заказе
- Ответы:
- 200 OK
```json
{
"id": 228, //id заказа
"category": "Верстка",
"order_name": "сверстать профиль",
"customer_id": 322, //id создателя
"budget": 1488,
"deadline": 1617004533, //unix-time
"description": "Нужен профиль, чтобы в нем была вся необходимая информация, ничего не уезжало, и все было красиво и аккуратно",
"login": "AlexDarkStalker",
"img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
}
```
- 400 - некорретный айди в урле
```json
{
"error": "Bad id"
}
```
- 404 - заказа не существует
``` json
{
"error": "order not found"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
10. ### `POST /order/id:[0-9]+/response` - добавить отклик
- Тело запроса:
```json
{
"user_id": 322,
"rate": 1488,
"time": 1617952689, // время отклика
}
```
- Ответы:
- 201 Created
```json
{
"id": 1,
"order_id": 228,
"user_id": 322,
"rate": 1488,
"user_login": "AlexDarkStalker98",
"user_img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/",
"time": 1617952689, // время отклика
}
```
- 400 - нет тела запроса
```json
{
"error": "No body"
}
```
- 400 - ошибка в json
```json
{
"error": "Bad json"
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 404 - заказ не найден
```json
{
"error": "Order not found"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
11. ### `GET /order/id:[0-9]+/response` - получить все отклики на текущий заказ
- Ответы:
- 200 OK
```json
{
[
{
"id": 1,
"order_id": 228,
"user_id": 322,
"rate": 1488,
"user_login": "AlexDarkStalker98",
"user_img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/",
"time": 1617952689 // время отклика
},
{
"id": 1,
"order_id": 228,
"user_id": 322,
"rate": 1488,
"user_login": "AlexDarkStalker98",
"user_img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
"time": 1617952689 // время отклика
},
]
}
```
- 404 - заказ не найден
```json
{
"error": "Order not found"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
12. ### `PUT /order/id:[0-9]+/response` - изменить отклик
- Тело запроса:
```json
{
"user_id": 322,
"rate": 1488,
"time": 1617952689, // время отклика
}
```
- Ответы:
- 200 OK
```json
{
"id": 1,
"order_id": 228,
"user_id": 322,
"rate": 1488,
"user_login": "AlexDarkStalker98",
"user_img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/",
"time": 1617952689, // время отклика
}
```
- 400 - нет тела запроса
```json
{
"error": "No body"
}
```
- 400 - ошибка в json
```json
{
"error": "Bad json"
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 404 - заказ не найден
```json
{
"error": "Order not found"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
13. ### `DELETE /order/id:[0-9]+/response` - удалить отклик
- Ответы:
- 200 OK
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 404 - отклик не найден
```json
{
"error": "response not found"
}
```
- 404 - заказ не найден
```json
{
"error": "order not found"
}
```
- 500 Ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
12. ### `GET /order` - получить все актуальные заказы
- Ответы:
- 200 OK
```json
{
[
{
"id": 228, //id заказа
"category": "Верстка",
"order_name": "сверстать профиль",
"customer_id": 322, //id создателя
"budget": 1488,
"deadline": 1617004533, //unix-time
"description": "Нужен профиль, чтобы в нем была вся необходимая информация, ничего не уезжало, и все было красиво и аккуратно",
"login": "AlexDarkStalker",
"img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
}
{
"id": 322, //id заказа
"category": "Программирование",
"order_name": "сделать наконец нормальный апи",
"customer_id": 228, //id создателя
"budget": 3228,
"deadline": 1617004533, //unix-time
"description": "Сделать нормальное апи для сайта поиска фрилансеров",
"login": "AlexDarkStalker",
"img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
},
]
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
13. ### `GET /order/profile/id:[0-9]` - получить все заказы пользователя
- Ответы:
- 200 OK
```json
{
[
{
"id": 228, //id заказа
"category": "Верстка",
"order_name": "сверстать профиль",
"customer_id": 322, //id создателя
"budget": 1488,
"deadline": 1617004533, //unix-time
"description": "Нужен профиль, чтобы в нем была вся необходимая информация, ничего не уезжало, и все было красиво и аккуратно",
"login": "AlexDarkStalker",
"img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
}
{
"id": 322, //id заказа
"category": "Программирование",
"order_name": "сделать наконец нормальный апи",
"customer_id": 228, //id создателя
"budget": 3228,
"deadline": 1617004533, //unix-time
"description": "Сделать нормальное апи для сайта поиска фрилансеров",
"login": "AlexDarkStalker",
"img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
},
]
}
```
- 400 - плохой айди в урле
```json
{
"error": "Bad id"
}
```
- 404 - пользователь не найден не найден
```json
{
"error": "User not found"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
11. ### `PUT /order/id:[0-9]` - изменить заказ
- Тело запроса:
```json
Все поля опциональны!
{
"id": 228,
"category": "Верстка",
"order_name": "Сверстать профиль",
"description": "Нужен профиль, чтобы в нем была вся необходимая информация, ничего не уезжало, и все было красиво и аккуратно",
"budget": 1488,
"deadline": 1617004533, //unix-time
}
```
- Ответы:
- 200 OK
```json
{
"id": 228, //id заказа
"category": "Верстка",
"order_name": "сверстать профиль",
"customer_id": 322, //id создателя
"budget": 1488,
"deadline": 1617004533, //unix-time
"description": "Нужен профиль, чтобы в нем была вся необходимая информация, ничего не уезжало, и все было красиво и аккуратно"
}
```
- 400 Ошибка в json
```json
{
"error": "Bad json"
}
```
- 400 Некорректные данные о заказе
```json
{
"error": "Incorrect order data"
}
```
- 400 Недостаточно прав для изменения
```json
{
"error": "Operation not permitted"
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 404 - заказ не найден
```json
{
"error": "order not found"
}
```
- 500 Ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
12. ### `POST /vacancy` - создать вакансию
- Тело запроса:
```json
{
"category": "Фронтенд",
"vacancy_name": "Junior фронтенд разработчик",
"description": "В супер компанию требуется джун фронтенд разработчик",
"salary": 228322,
}
```
- Ответы:
- 201 Created
```json
{
"id": 228,
"category": "Фронтенд",
"vacancy_name": "Junior фронтенд разработчик",
"description": "В супер компанию требуется джун фронтенд разработчик",
"salary": 228322,
}
```
- 400 Ошибка в json
```json
{
"error": "Bad json"
}
```
- 400 Невалидные данные в запросе
```json
{
"error": "Invalid data"
}
```
- 401 - неавторизованный пользователь
```json
{
"error": "Unauthorized"
}
```
- 403 - видимо что-то с куками
```json
{
"error": "Bad id"
}
```
- 500 Ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```
13. ### `GET /vacancy/id:[0-9]+` - получить всю информацию о вакансии
- Ответы:
- 200 OK
```json
{
"id": 228,
"category": "Фронтенд",
"vacancy_name": "Junior фронтенд разработчик",
"description": "В супер компанию требуется джун фронтенд разработчик",
"salary": 228322,
"login": "AlexDarkStalker",
"img": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/"
}
```
- 404 - вакансии не существует
``` json
{
"error": "vacancy not found"
}
```
- 500 - ошибка на стороне сервера
```json
{
"error": "Internal server error"
}
```