| Current Path : /var/node/inatote/qa_inatote/vouchers/ |
| Current File : /var/node/inatote/qa_inatote/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"}
// }
}
}