Source: services/resetTokens/find.service.js

import { statusCodes } from '../../configs';
import { ResetToken } from '../../database';

/**
 * Find and return all reset tokens in the database table
 *
 * @memberof module:services/resetTokens
 * @param {Number} [offset] Number of pages to offset based on limit.
 * @param {Number} [limit] Limit the number of rows returned.
 * @param {String} [where] Filter records by.
 * @returns {JSON} Returns a JSON array of found tokens.
 * @throws Will throw an error if foundResetTokens is not created.
 * @example
 * import { resetTokens as resetTokensService } from '/src/services';
 * const foundResetTokens = await resetTokensService.findAll();
 */
const findAll = async (offset, limit, where) => {
  try {
    // Find reset tokens at a given offset and within a limit where equal to
    const foundResetTokens = await ResetToken.findAll({
      limit: limit,
      offset: offset,
      where: where,
    });

    // Check we have reset tokens to return
    if (!foundResetTokens) {
      const error = new Error(`SERVICE ERROR: Unable to find reset tokens.`);
      error.statusCode = statusCodes.INTERNAL_SERVER_ERROR;
      throw error;
    }

    return foundResetTokens;
  } catch (error) {
    return error;
  }
};

/**
 * Find a reset token with a given primary key (ID)
 *
 * @memberof module:services/resetTokens
 * @param {Number} id The primary key for token row.
 * @returns {JSON} Return found token record.
 * @throws Will throw an error if no primary key id passed in.
 * @throws Will throw an error if no foundResetToken is created.
 * @example
 * import { resetTokens as resetTokensService } from '/src/services';
 * const id = 1;
 * const foundResetToken = await resetTokensService.findOneByPk(id);
 */
const findOneByPk = async (id) => {
  try {
    // Check there is a primary key id to find
    if (!id) {
      const error = new Error('SERVICE ERROR: No id provided in reset token find request.');
      error.statusCode = statusCodes.INTERNAL_SERVER_ERROR;
      throw error;
    }

    // Find reset token instance
    const foundResetToken = await ResetToken.findOne({
      where: { id: id },
    });

    // Check we have a reset token instance to return
    if (!foundResetToken) {
      const error = new Error(`SERVICE ERROR: Reset token ${id} was not found.`);
      error.statusCode = statusCodes.INTERNAL_SERVER_ERROR;
      throw error;
    }

    return foundResetToken;
  } catch (error) {
    throw error;
  }
};

/**
 * Find a record with a given reset token value
 *
 * @memberof module:services/resetTokens
 * @param {String} token Token string to search table.
 * @returns {JSON} JSON array of first found record.
 * @throws Will throw an error if no resetToken string is passed in.
 * @throws Will throw an error if no foundResetToken is created.
 * @example
 * import { resetTokens as resetTokensService } from '/src/services';
 * const resetToken = kljkDSOIJndkfo98u34nlkndio8dfknkjdf09ujkl;
 * const foundResetToken = await resetTokensService.findOneByPk(resetToken);
 */
const findOneByToken = async (token) => {
  try {
    // Check a reset token value has been passed in
    if (!token) {
      const error = new Error('SERVICE ERROR: No token value provided in reset token find request.');
      error.statusCode = statusCodes.INTERNAL_SERVER_ERROR;
      throw error;
    }

    // Find a given reset token instance
    const foundResetToken = await ResetToken.findOne({
      where: { token: token },
    });

    // Check we have reset token instance to return
    if (!foundResetToken) {
      const error = new Error(`SERVICE ERROR: Reset token ${token} was not found.`);
      error.statusCode = statusCodes.INTERNAL_SERVER_ERROR;
      throw error;
    }

    return foundResetToken;
  } catch (error) {
    throw error;
  }
};

export { findAll, findOneByPk, findOneByToken };

export default { all: findAll, oneByPk: findOneByPk, oneByToken: findOneByToken };