| Current Path : /var/node/inatote/Inatote-Backend/address/ |
| Current File : /var/node/inatote/Inatote-Backend/address/address-list.js |
// import makeproduct from './product.js'
import { UniqueConstraintError } from '../helpers/errors.js'
export default function makeaddressList({ database }) {
return Object.freeze({
add,
findByEmail,
findById,
getItems,
remove,
update,
updateDefaultAddress
})
async function getItems({ max = 100, page = 1, _id } = {}) {
const db = await database
var query = {}
if (_id) {
query = { user_id: db.makeId(_id) };
}
try{
//console.log("LIST" , query);
var res = await db
.collection('addresses')
.find(query)
.toArray();
return res
// [0].products.map(documentToproduct)
}catch(err){
//console.log("er" , err);
}
}
async function add({ addressId, ...address }) {
const db = await database
address.user_id = db.makeId(address.user_id)
address.createdDate = new Date()
address.lastUpdatedDate = new Date()
if(address.is_default){
const update_address = await db.collection("addresses").update({
is_default : true
}, { $set : { is_default : false}})
}
const { result, ops } = await db.collection('addresses').
insertOne(address)
.catch(mongoError => {
const [errorCode] = mongoError.message.split(' ')
if (errorCode === 'E11000') {
const [_, mongoIndex] = mongoError.message.split(':')[2].split(' ')
throw new UniqueConstraintError(
mongoIndex === 'categoryEmailIndex' ? 'emailAddress' : 'categoryId'
)
}
throw mongoError
})
//console.log(result)
//console.log(ops)
return {
success: result.ok === 1,
created: address
}
}
async function findById(addressId ) {
const db = await database
//console.log("id",addressId)
addressId._id = db.makeId(addressId._id)
// addressId = db.makeId(addressId)
const result = await db
.collection('addresses')
.findOne( addressId);
//console.log("resulyt", result);
if (result && result._id ) {
return result
// documentToproduct(product)
}else{
return {}
}
}
async function findByEmail({ emailAddress }) {
return {
emailAddress: emailAddress
}
}
async function remove(address) {
const db = await database
//console.log("address" , address);
address._id = db.makeId(address._id)
const {result} = await db.collection("addresses").remove(address)
//console.log("result" , result);
return result.n != 0 ? "Address Successfully deleted" : "Address not found"
}
// todo:
async function update({addressId, address }) {
const db = await database
var q = {};
address.lastUpdatedDate = new Date();
const {result} = await db.collection('addresses').updateOne({
_id: db.makeId(addressId)
}, { $set : address})
//console.log(result)
if (result.nModified != 1) {
return {
success: false,
error: "Something went wrong when performing this operation."
}
}
return address
}
async function updateDefaultAddress({user_id , _id}){
try{
const db = await database
console.log("user_id" , user_id , _id);
const {result} = await db.collection("users")
.updateOne({_id : db.makeId(user_id)}, {$set : {address : db.makeId(_id)}});
console.log("tres" , result);
const pre_update_address = await db.collection("addresses")
.updateOne({is_default : true}, {$set : {is_default : false}});
const update_address = await db.collection("addresses")
.updateOne({_id : _id}, {$set : {is_default : true}});
//console.log("result" , result);
return result.ok == 1 ? "This Address is become your default address" : "Something went wrong"
}catch(err){
console.log("err" , err);
return err
}
}
function documentToproduct({ _id: productId, ...doc }) {
return makeproduct({ productId, ...doc })
}
}