Created
February 6, 2017 18:29
-
-
Save crizstian/5d76dbfb822e6b2aba7ff1542b2c6d1d to your computer and use it in GitHub Desktop.
Example of repository
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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