Your IP : 216.73.216.91


Current Path : /var/node/inatote/Inatote-Backend/vouchers/
Upload File :
Current File : /var/node/inatote/Inatote-Backend/vouchers/voucher-list.js

import makeVoucher from './vouchers.js'
import { UniqueConstraintError } from '../helpers/errors.js'

export default function makeVoucherList({ database }) {
    return Object.freeze({
        add,
        findById,
        getItems,
        remove,
        replace,
        update,
        })

    async function getItems({ max = 100, before, after } = {}) {
        const db = await database
        const query = { status: true }
   

        return (await db
            .collection('vouchers')
            .find(query)
            .limit(Number(max))
            .toArray())
    }

    async function add({ ...voucher }) {
        const db = await database
        
        voucher.createdDate = new Date()
        voucher.lastUpdatedDate = new Date()

        const { result, ops } = await db
            .collection('vouchers')
            .insertOne(voucher)
            .catch(mongoError => {
                const [errorCode] = mongoError.message.split(' ')
                if (errorCode === 'E11000') {
                    const [_, mongoIndex] = mongoError.message.split(':')[2].split(' ')
                    throw new UniqueConstraintError(
                        mongoIndex === 'orderEmailIndex' ? 'emailAddress' : 'orderId'
                    )
                }
                throw mongoError
            })
        return {
            success: result.ok === 1,
            created:ops[0]
        }
    }

    async function findById(id) {
        const db = await database
        const found = await db
            .collection('vouchers')
            .findOne({ _id: db.makeId(id) })
      
        return found
    }

    async function findByEmail({ emailAddress }) {
        const db = await database
        const results = await db
            .collection('orders')
            .find({ emailAddress })
            .toArray()
        return results.map(documentToorder)
    }

    async function remove({ orderId }) {
        const db = await database
        const query = {
            $set: { show: false }
        }

        const { result } = await db.collection('orders').updateOne({
            _id: db.makeId(orderId),
        }, query, { strict: false })


        return result
    }

    // todo:
    async function replace(order) { }

    // todo:
    async function update(id, order) {
        order.lastUpdatedDate = new Date()
        const db = await database
        var q = {};

        for (var item in order) {
            //console.log(item)
            q[item] = order[item]
        }

        const query = {
            $set: q
        }

        const { result } = await db.collection('vouchers').updateOne({
            _id: db.makeId(id),
        }, query, { strict: false })

        //console.log(result)

        if (result.nModified != 1) {
            return {
                success: false,
                error: "Something went wrong when performing this operation."
            }
        }

        return order
    }

    async function findLastOrder() {
        const db = await database;
        let data = await db.collection("orders").findOne();
        //console.log("data", data);
        return data
    }

    async function configrations() {
        const db = await database;
        let configrations = await db
            .collection('configurations')
            .findOne();
        //console.log("configurations", configrations)
        return configrations
    }

    function documentToorder({ _id: orderId, show, ...doc }) {
        return makeorder({ orderId, ...doc })

        // else{
        //     return {success : false , errormsg : "Order has been deleted"}
        // } 

    }
}