Your IP : 216.73.216.91


Current Path : /var/node/inatote/Inatote-Backend/address/
Upload File :
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 })
    }
}