Skip to content

Instantly share code, notes, and snippets.

@crizstian
Created February 6, 2017 18:29
Show Gist options
  • Save crizstian/5d76dbfb822e6b2aba7ff1542b2c6d1d to your computer and use it in GitHub Desktop.
Save crizstian/5d76dbfb822e6b2aba7ff1542b2c6d1d to your computer and use it in GitHub Desktop.
Example of repository
'use strict'
const repository = (container) => {
// we get the db object via the container
const {db} = container.resolve('database')
const makeBooking = (user, booking) => {
return new Promise((resolve, reject) => {
// payload to be insterted to the booking collection
const payload = {
city: booking.city,
cinema: booking.cinema,
book: {
userType: (user.membership) ? 'loyal' : 'normal',
movie: {
title: booking.movie.title,
format: booking.movie.format,
schedule: booking.schedule
}
}
}
db.collection('booking').insertOne(payload, (err, booked) => {
if (err) {
reject(new Error('An error occuered registring a user booking, err:' + err))
}
resolve(booked)
})
})
}
const generateTicket = (paid, booking) => {
return new Promise((resolve, reject) => {
// payload of ticket
const payload = Object.assign({}, {booking, orderId: paid._id})
db.collection('tickets').insertOne(payload, (err, ticket) => {
if (err) {
reject(new Error('an error occured registring a ticket, err:' + err))
}
resolve(ticket)
})
})
}
const getOrderById = (orderId) => {
return new Promise((resolve, reject) => {
const ObjectID = container.resolve('ObjectID')
const query = {_id: new ObjectID(orderId)}
const response = (err, order) => {
if (err) {
reject(new Error('An error occuered retrieving a order, err: ' + err))
}
resolve(order)
}
db.collection('booking').findOne(query, {}, response)
})
}
const disconnect = () => {
db.close()
}
return Object.create({
makeBooking,
getOrderById,
generateTicket,
disconnect
})
}
const connect = (container) => {
return new Promise((resolve, reject) => {
if (!container.resolve('database')) {
reject(new Error('connection db not supplied!'))
}
resolve(repository(container))
})
}
module.exports = Object.assign({}, {connect})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment