diff --git a/.eslintrc.json b/.eslintrc.json index ce7b33d..b798d9c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -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}], diff --git a/src/api/StorageListAPI.js b/src/api/StorageListAPI.js index 3d21453..bdd209c 100644 --- a/src/api/StorageListAPI.js +++ b/src/api/StorageListAPI.js @@ -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>} - возвращает обновленный список элементов + * @param {StoreListElement[]} list - новый список элементов + * @returns {Promise} - возвращает обновленный список элементов */ _updateList = async (list) => { - return await this.api.createOrUpdate(this.key, list); + return await this.api.update(this.key, list); } /** - * @returns {Promise>} - возвращает все элементы списка + * @returns {Promise} - возвращает все элементы списка */ 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} - возвращает элемент списка или генерит ошибку */ 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} - Возвращает вновь созданный элемент с уникальным полем _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} - Возвращает обновленный элемент списка */ update = async (data) => { const list = await this.request(); diff --git a/src/api/StorageServiceAPI.js b/src/api/StorageServiceAPI.js index b7f27b8..cdaa2b5 100644 --- a/src/api/StorageServiceAPI.js +++ b/src/api/StorageServiceAPI.js @@ -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>} - Возвращает список всех пар ключ-значение + * Запрос полного списка всех api + * @returns {Promise} - Возвращает список всех api */ request = async () => { const {data} = await axios.get(this.URL); @@ -19,9 +29,9 @@ class StorageServiceApi { } /** - * Запрос одной пары ключ-значение + * Запрос api по ключу * @param {string} key - ключ хранилища в api - * @returns {Promise} - Возвращает значение по указанному ключу + * @returns {Promise} - Возвращает 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} - возвращает вновь созданный элемент + * Создание api + * @param {Store} createData - объект создания api + * @returns {Promise} - Возвращает вновь созданный элемент */ - 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} - Возвращает обновленный элемент + */ + update = async (updateData) => { + const {data} = await axios.put(this.URL, updateData); + return data; + } + + /** + * Удаление api по ключу * @param {string} key - ключ хранилища api - * @returns {Promise} - возвращает 'ok', если удаление было выполнено + * @returns {Promise} - Возвращает удаленный элемент */ remove = async (key) => { const {data} = await axios.delete(`${this.URL}/${key}`); diff --git a/store.http b/store.http new file mode 100644 index 0000000..360cf3f --- /dev/null +++ b/store.http @@ -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 \ No newline at end of file