| Current Path : /var/node/inatote/qa_inatote/favourite/ |
| Current File : /var/node/inatote/qa_inatote/favourite/favourite-list.js |
import makeFavourite from './favourite.js'
import { UniqueConstraintError } from '../helpers/errors.js'
import makeHttpError from '../helpers/http-error.js'
export default function makeFavouriteList({ database }) {
return Object.freeze({
add,
findByEmail,
findById,
getItems,
remove,
replace,
update,
updateVendorOrProduct,
makeObjectId
})
async function makeObjectId(id){
const db = await database;
return db.makeId(id)
}
async function getItems({ max = 100, page = 1, userId } = {}) {
const db = await database
var query = {}
if (userId) {
query = { userId: db.makeId(userId) }
}
try {
//console.log("query", query);
var res = await db
.collection('favourites')
.find(query)
.limit(Number(max))
.skip(max * (page - 1))
.toArray();
//console.log("res", res);
return res
} catch (err) {
//console.log("er", err);
}
}
async function add({...rating }) {
const db = await database
try {
rating.createdDate = new Date()
rating.lastUpdatedDate = new Date()
const { result, ops } = await db
.collection('favourites')
.insertOne(rating)
.catch(mongoError => {
const [errorCode] = mongoError.message.split(' ')
if (errorCode === 'E11000') {
const [_, mongoIndex] = mongoError.message.split(':')[2].split(' ')
throw new UniqueConstraintError(
mongoIndex === 'vendorEmailIndex' ? 'emailAddress' : 'vendorId'
)
}
throw mongoError
})
return {
success: result.ok === 1,
created: rating
}
}
catch (err) {
//console.log("err", err);
return makeHttpError({
statusCode: 400,
errorMessage: err.message
})
}
// const { result, ops } = await db
// .collection('products')
// .insertOne(product)
// .catch(mongoError => {
// const [errorCode] = mongoError.message.split(' ')
// if (errorCode === 'E11000') {
// const [_, mongoIndex] = mongoError.message.split(':')[2].split(' ')
// throw new UniqueConstraintError(
// mongoIndex === 'productEmailIndex' ? 'emailAddress' : 'productId'
// )
// }
// throw mongoError
// })
}
async function findById(id) {
const db = await database
//console.log(id)
const result = await db
.collection('ratings')
.findOne({_id : db.makeId(id)})
//console.log("result" , result);
if (result) {
return result
}
return
}
async function findByEmail({ emailAddress }) {
return {
emailAddress: emailAddress
}
}
async function remove({ productId, ...product }) {
return {
productId: productId
}
}
// todo:
async function replace(product) {
}
// todo:
async function update({ userId, data }) {
const db = await database
var q = {};
// data.lastUpdatedDate = new Date();
for (var item in data) {
//console.log(item)
q[`${item}`] = data[item]
}
const query = {
$set: q
}
//console.log("query" , query);
const { result } = await db.collection('favourites').updateOne({
userId: db.makeId(userId),
}, query, { strict: false })
//console.log(result)
if (result.nModified != 1) {
return {
success: false,
error: "Something went wrong when performing this operation."
}
}
return {
success: true,
updated: data
};
}
async function updateVendorOrProduct({ id, items }) {
const db = await database
//console.log(id)
//console.log(items)
items.lastUpdatedDate = new Date();
var q = {};
for (var item in items) {
//console.log(item)
q[item] = items[item]
}
const query = {
$set: q
}
//console.log(query)
const { result } = await db.collection('vendors').updateOne({
_id: db.makeId(id)
}, query, {})
//console.log(result)
if (result.nModified != 1) {
return {
success: false,
error: "Something went wrong when performing this operation."
}
}
return {
success: true,
vendor: items
};
}
function documentToRating({ _id: productId, ...doc }, markup) {
return makeRating({ productId, ...doc })
}
}