api/v1/memberships/controller.js

import get from "lodash/get"

import BaseController from "../../BaseController"
import UserModel from "../users/model"

/**
 * Controller for the @namespace /memberships
 *
 * @class ConnectionsController
 * @extends {BaseController}
 */
class ConnectionsController extends BaseController {
    constructor() {
        super()

        this.validate = this.validate.bind(this)
    }

    /**
     * POST /validate Validate the memebership of a user by email address
     *
     * @param {string} emailAddress
     * @memberof ConnectionsController
     */
    async validate(req, res) {
        const {
            success, notFound, unprocessableEntity, forbidden,
        } = this.codes
        const { emailAddress } = req.body

        const user = new UserModel()
        const result = await user.find({ emailAddress }).catch((error) => {
            res.status(unprocessableEntity).send({
                success: "false",
                message: "membership_error",
                error,
            })

            throw error
        })

        user.set(get(result, "rows[0]"))

        if (user.error) {
            res.status(notFound).send({
                success: "false",
                message: "user_not_found",
                error: user.error,
            })

            return
        }

        const member = await user.validateMembership()

        if (!member) {
            res.status(forbidden).send({
                success: "false",
                message: "user_not_subscribed",
                error: user.error,
            })

            return
        }

        res.status(success).send({
            success: "true",
            message: "user_subscribed",
            member,
        })
    }
}

export default ConnectionsController