diff --git a/src/api/HttpAuthAPI.js b/src/api/HttpAuthAPI.js index f9c201d..46396ae 100644 --- a/src/api/HttpAuthAPI.js +++ b/src/api/HttpAuthAPI.js @@ -12,6 +12,9 @@ import tokenApi from './TokenAPI'; /** * Api прикрепляет ко всем запросом заголовок с токеном авторизации. В случае, когда сервер + * возвращает ошибку 401 (Не авторизован), пытается рефрешнуть токен. В момент обновления пары токенов + * api сохраняет все запросы в очередь. Если ревреш токенов удался, то запросы будут выполнены + * в том же порядке, как и пришли, либо упадут с ошибкой, если ревреш выполнить не удалось. * @class HttpAuthApi */ class HttpAuthApi { diff --git a/src/api/UsersServiceAPI.js b/src/api/UsersServiceAPI.js new file mode 100644 index 0000000..60efcac --- /dev/null +++ b/src/api/UsersServiceAPI.js @@ -0,0 +1,74 @@ +import http from './HttpAPI'; + +const ROOT_URL = 'http://api.auth.vigdorov.ru/users'; + +/** + * Объект с полями для создания пользователя + * @interface UserCreateOptions + * @type {Object} + * @property {string} login - Логин пользователя + * @property {string} password - Пароль пользователя + * @property {string} avatar - url на аватарку пользователя + */ + +/** + * Объект с полями для обновления данных пользователя + * @interface UpdateUserOptions + * @type {Object} + * @property {string} avatar - url на аватарку пользователя + */ + + /** + * Класс для работы с api пользователей + * @class UsersService + */ +class UsersService { + /** + * Метод получения полного списка пользователей + */ + request = async () => { + const {data} = await http.get(ROOT_URL); + return data; + } + + /** + * Метод поиска пользователя по Логину + * @param {string} login - Логин пользователя + */ + find = async (login) => { + const {data} = await http.get(`${ROOT_URL}/${login}`); + return data; + } + + /** + * Метод создания пользователя + * @param {UserCreateOptions} user - настройки для создания пользователя + */ + create = async (user) => { + const {data} = await http.post(ROOT_URL, user); + return data; + } + + /** + * Метод обновления информации о пользователе + * @param {string} login - Логин пользователя + * @param {UpdateUserOptions} updateOptions - настройки для обновления пользователя + */ + update = async (login, updateOptions) => { + const {data} = await http.put(ROOT_URL, {...updateOptions, login}); + return data; + } + + /** + * Метод удаления пользователя + * @param {string} login - Логин пользователя + */ + remove = async (login) => { + const {data} = await http.delete(`${ROOT_URL}/${login}`); + return data; + } +} + +const usersServiceApi = new UsersService(); + +export default usersServiceApi;