HM-32. Пропатчить api под новый бекенд (#7)

This commit is contained in:
Nikolay
2020-07-11 08:48:11 +03:00
committed by GitHub
parent d3ac6c730b
commit a3748f519a
4 changed files with 110 additions and 25 deletions

View File

@ -45,7 +45,6 @@
"array-bracket-spacing": ["error", "never"],
"block-spacing": ["error", "never"],
"brace-style": ["error", "1tbs", {"allowSingleLine": true}],
"camelcase": "error",
"capitalized-comments": ["error"],
"comma-dangle": ["error", "only-multiline"],
"comma-spacing": ["error", {"before": false, "after": true}],

View File

@ -2,20 +2,45 @@ import {v4 as uuidv4} from 'uuid';
import StorageServiceApi from './StorageServiceAPI';
/**
* @interface StoreListElement
* @type {Object}
* @property {string} _id - уникальный id элемента
*/
/**
* Класс создания api для списков данных
*
* @class StorageListApi
* @param {string} key - уникальный ключ для api, который будет записан в сервисе
* @param {string} description - описание api
* @param {string} author - автор api
* @param {string} service_name - имя сервиса, для которого используется api
*/
class StorageListApi {
constructor (key) {
constructor (key, description, author, service_name) {
/**
* Ключ api
* @type {string}
*/
this.key = key;
/**
* @type {StorageServiceApi}
*/
this.api = new StorageServiceApi();
this.api.create({key, description, author, service_name, value: []});
/**
* @type {Object}
* @property {string} description - описание api
* @property {string} author - автор api
* @property {string} service_name - имя сервиса, для которого используется api
*/
this.metaInfo = {
description, author, service_name
};
}
/**
* @param {Array<{_id: string}>} list - список элементов по которым осуществялется поиск
* @param {StoreListElement[]} list - список элементов по которым осуществялется поиск
* @param {string} _id - _id искомого элемента
* @returns {number} - Возвращает индекс искомого эллемента по _id
*/
@ -24,15 +49,15 @@ class StorageListApi {
}
/**
* @param {Array<{_id: string}>} list - новый список элементов
* @returns {Promise<Array<{_id: string}>>} - возвращает обновленный список элементов
* @param {StoreListElement[]} list - новый список элементов
* @returns {Promise<Array<StoreListElement[]>} - возвращает обновленный список элементов
*/
_updateList = async (list) => {
return await this.api.createOrUpdate(this.key, list);
return await this.api.update(this.key, list);
}
/**
* @returns {Promise<Array<{_id: string}>>} - возвращает все элементы списка
* @returns {Promise<StoreListElement[]>} - возвращает все элементы списка
*/
request = async () => {
const data = await this.api.find(this.key);
@ -41,7 +66,7 @@ class StorageListApi {
/**
* @param {string} _id - _id искомого элемента списка
* @returns {Promise<{_id: string}>} - возвращает элемент списка или генерит ошибку
* @returns {Promise<StoreListElement>} - возвращает элемент списка или генерит ошибку
*/
find = async (_id) => {
const list = await this.request();
@ -53,8 +78,8 @@ class StorageListApi {
}
/**
* @param {object} data - элемент списка
* @returns {Promise<{_id: string}>} - Возвращает вновь созданный элемент с уникальным полем _id
* @param {Object} data - элемент списка
* @returns {Promise<StoreListElement>} - Возвращает вновь созданный элемент с уникальным полем _id
*/
create = async (data) => {
const list = await this.request();
@ -68,8 +93,8 @@ class StorageListApi {
}
/**
* @param {{_id: string}} data - элемент списка
* @returns {Promise<{_id: string}>} - Возвращает обновленный элемент списка
* @param {StoreListElement} data - элемент списка
* @returns {Promise<StoreListElement>} - Возвращает обновленный элемент списка
*/
update = async (data) => {
const list = await this.request();

View File

@ -2,6 +2,16 @@ import axios from 'axios';
import {API_URL, ENDPOINT} from './consts';
/**
* @interface Store
* @type {Object}
* @property {string} key - ключ апи
* @property {unknown} value - любое значение апи
* @property {string} description - описание апи
* @property {string} service_name - имя сервиса в котором используется апи
* @property {string} author - автор, который создал апи
*/
/**
* Класс для работы с store-service api
* @class
@ -10,8 +20,8 @@ class StorageServiceApi {
URL = `${API_URL}${ENDPOINT}`;
/**
* Запрос полного списка всех пар ключ-значение
* @returns {Promise<Array<{key: string, value: unknown}>>} - Возвращает список всех пар ключ-значение
* Запрос полного списка всех api
* @returns {Promise<Store[]>} - Возвращает список всех api
*/
request = async () => {
const {data} = await axios.get(this.URL);
@ -19,9 +29,9 @@ class StorageServiceApi {
}
/**
* Запрос одной пары ключ-значение
* Запрос api по ключу
* @param {string} key - ключ хранилища в api
* @returns {Promise<unknown>} - Возвращает значение по указанному ключу
* @returns {Promise<Store>} - Возвращает api по указанному ключу
*/
find = async (key) => {
const {data} = await axios.get(`${this.URL}/${key}`);
@ -29,20 +39,29 @@ class StorageServiceApi {
}
/**
* Создание или обновление пары ключ-значение
* @param {string} key - ключ хранилища в api
* @param {unknown} value - значение, которое будет хранится под указанным ключом
* @returns {Promise<unknown>} - возвращает вновь созданный элемент
* Создание api
* @param {Store} createData - объект создания api
* @returns {Promise<Store>} - Возвращает вновь созданный элемент
*/
createOrUpdate = async (key, value) => {
const {data} = await axios.post(this.URL, {key, value});
create = async (createData) => {
const {data} = await axios.post(this.URL, createData);
return data;
}
/**
* Удаление пары ключ-значение
* Обновление api
* @param {Store} updateData - объект обновления api
* @returns {Promise<Store>} - Возвращает обновленный элемент
*/
update = async (updateData) => {
const {data} = await axios.put(this.URL, updateData);
return data;
}
/**
* Удаление api по ключу
* @param {string} key - ключ хранилища api
* @returns {Promise<string>} - возвращает 'ok', если удаление было выполнено
* @returns {Promise<Store>} - Возвращает удаленный элемент
*/
remove = async (key) => {
const {data} = await axios.delete(`${this.URL}/${key}`);

42
store.http Normal file
View File

@ -0,0 +1,42 @@
// Запрос всех пар ключей апи
GET http://vigdorov.ru:4001/store HTTP/1.1
###
// Запрос апи по ключу
GET http://vigdorov.ru:4001/store/testApi HTTP/1.1
###
// Создание нового апи
POST http://vigdorov.ru:4001/store HTTP/1.1
content-type: application/json
{
"key": "testApi",
"value": {
"name": "ivan",
"age": 16
},
"description": "тестовое апи",
"service_name": "test-api",
"author": "vigdorov"
}
###
// Обновление существующего апи
PUT http://vigdorov.ru:4001/store HTTP/1.1
content-type: application/json
{
"key": "testApi",
"value": {
"name": "ivan23",
"age": 22
},
"description": "тестовое апи",
"service_name": "test-api",
"author": "vigdorov23422"
}
###
// Удаление апи
DELETE http://vigdorov.ru:4001/store/testApi HTTP/1.1