Source: api.js

;

/**
 * API module.
 * @module modules/api
 */

/** Class representing an API module. */
export default class ApiModule {

  /**
   * Create an API module.
   * @param {HttpModule} httpModule - The http module for api requests.
   */
  constructor(httpModule) {
    this._httpModule = httpModule;
  }

  /**
   * Get the httpModule value.
   * @return {HttpModule} The http module used for api requests.
   */
  get httpModule() {
    return this._httpModule;
  }

  /**
   * Set the httpModule value.
   * @param {HttpModule} httpModule - The http module for api requests.
   */
  set httpModule(httpModule) {
    this._httpModule = httpModule;
  }

  // Authorization and Users API methods

  /**
   * Fetch api request to load user profile.
   * @access public
   * @return {Promise} A promise that resolves with the result of API request.
   */
  loadProfile() {
    if (!this._httpModule) {
      return;
    }

    return this._httpModule.fetchGet({
      path: '/profile-data'
    });
  }

  /**
   * Fetch api request to load users.
   * @access public
   * @return {Promise} A promise that resolves with the result of API request.
   */
  loadUsers(listSize = 5, listNumber = 1) {
    if (!this._httpModule) {
      return;
    }

    return this._httpModule.fetchGet({
      path: '/users?listSize=' + listSize + '&listNumber=' + listNumber
    });
  }

  /**
   * Fetch api request to load information about current user.
   * @access public
   * @return {Promise} A promise that resolves with the result of API request.
   */
  loadMe() {
    if (!this._httpModule) {
      return;
    }

    return this._httpModule.fetchGet({
      path: '/me'
    });
  }

  /**
   * Fetch api request sign up new user.
   * @access public
   * @param {FormData} user={} - New user data.
   * @return {Promise} A promise that resolves with the result of API request.
   */
  registrationUser(user = {}) {
    if (!this._httpModule) {
      return;
    }

    return this._httpModule.fetchPost({
      path: '/registration',
      formData: user
    });
  }

  /**
   * Fetch api request log in user.
   * @access public
   * @param {FormData} user={} - User data to log in.
   * @return {Promise} A promise that resolves with the result of API request.
   */
  loginUser(user = {}) {
    if (!this._httpModule) {
      return;
    }

    return this._httpModule.fetchPost({
      path: '/login',
      formData: user
    });
  }

  /**
   * Fetch api request log out current user.
   * @access public
   * @return {Promise} A promise that resolves with the result of API request.
   */
  logOut() {
    if (!this._httpModule) {
      return;
    }
    return this._httpModule.fetchGet({
      path: '/logout'
    });
  }

  /**
   * Fetch api request to change user profile information.
   * @access public
   * @param {FormData} user={} - Changed user profile data.
   * @return {Promise} A promise that resolves with the result of API request.
   */
  changeUserData(user = {}) {
    if (!this._httpModule) {
      return;
    }

    return this._httpModule.fetchPost({
      path: '/changeUserData',
      formData: user
    });
  }

};