| Current Path : /var/node/inatote/Inatote-Backend/configurations/ |
| Current File : /var/node/inatote/Inatote-Backend/configurations/configuration-list.js |
import makeConfiguration from './configuration.js'
import { UniqueConstraintError } from '../helpers/errors.js'
import makeHttpError from '../helpers/http-error.js'
export default function makeConfigurationList({ database }) {
return Object.freeze({
add,
findByEmail,
findById,
getItems,
remove,
replace,
update
})
async function getItems({ max = 100, before, after } = {}) {
const db = await database
const query = {}
if (before || after) {
query._id = {}
query._id = before ? { ...query._id, $lt: db.makeId(before) } : query._id
query._id = after ? { ...query._id, $gt: db.makeId(after) } : query._id
}
return (await db
.collection('configurations')
.find(query)
.limit(Number(max))
.toArray()).map(documentConfiguration)
}
async function add({ configurationId, ...configuration }) {
const db = await database
if (configurationId) {
configuration._id = db.makeId(configurationId)
}
configuration.createdDate = new Date()
configuration.lastUpdatedDate = new Date()
let configurations_count = await db
.collection('configurations').count();
//console.log("configurations_count" ,configurations_count);
if(configurations_count >= 1){
// return "Can not add more than one configurations you can update exsisting configurations"
return makeHttpError({
statusCode: 400,
errorMessage:"Can not add more than one configurations you can update exsisting configurations"
})
}
const { result, ops } = await db
.collection('configurations')
.insertOne(configuration)
.catch(mongoError => {
const [errorCode] = mongoError.message.split(' ')
if (errorCode === 'E11000') {
const [_, mongoIndex] = mongoError.message.split(':')[2].split(' ')
throw new UniqueConstraintError(
mongoIndex === 'rateChargeEmailIndex' ? 'emailAddress' : 'rateChargeId'
)
}
throw mongoError
})
return {
success: result.ok === 1,
created: documentConfiguration(ops[0])
}
}
async function findById({ configurationId }) {
const db = await database
const found = await db
.collection('configurations')
.findOne({ _id: db.makeId(configurationId) })
if (found) {
return documentConfiguration(found)
}
return null
}
async function findByEmail({ emailAddress }) {
const db = await database
const results = await db
.collection('configurations')
.find({ emailAddress })
.toArray()
return results.map(documentConfiguration)
}
async function remove({ configurationId, ...configuration }) {
const db = await database
if (configuration) {
configuration._id = db.makeId(configurationId)
}
const { result } = await db.collection('configurations').deleteMany(configuration)
return result.n
}
// todo:
async function replace(rateCharge) { }
// todo:
async function update({configurationId, configuration}) {
const db = await database
//console.log(configurationId)
//console.log(configuration)
configuration.lastUpdatedDate = new Date()
var q = {};
for (var item in configuration) {
//console.log(item)
q[item] = configuration[item]
}
const query = {
$set: q
}
//console.log(query)
const { result } = await db.collection('configurations').updateOne({
_id: db.makeId(configurationId)
}, query, {})
//console.log(result)
if (result.nModified != 1) {
return {
success: false,
error: "Something went wrong when performing this operation."
}
}
return {
success: true,
configuration: configuration
};
}
function documentConfiguration({ ...doc }) {
return makeConfiguration({ ...doc })
}
}