Skip to content

Instantly share code, notes, and snippets.

@vedranjukic
vedranjukic / userController.js
Last active December 29, 2017 13:46
Implemented EmailServiceSES adapter
//
// Express controller
// EmailServiceSES adapter
//
router.put('/user', async (req, res) => {
const conn = req.conn
// ses - aws ses instance (AWS.SES)
const ses = req.ses
const { userId, userName, userEmail } = req.body
@vedranjukic
vedranjukic / emailServiceSES.js
Created December 23, 2017 19:06
Email service SES adapter factory
export default ses => {
const send = params => {
return new Promise((resolve, reject) => {
const params = {
Destination: {
ToAddresses: [params.to]
},
Message: {
Body: {
Text: {
@vedranjukic
vedranjukic / updateUser.js
Created December 23, 2017 19:00
Email service interface
//
// Email service interface implemented
//
async function updateUser ({userRepository, emailService, updateParams}) {
const { userId, userName, userEmail } = updateParams
// validate params
if (!userId || !userName || !userEmail) {
throw new InvalidParamsException('Missing required params')
}
@vedranjukic
vedranjukic / deepstreamExample.js
Last active December 23, 2017 18:47
websocket implementation using deepstream client
//
// websocket implementation using deepstream client
//
const db = new Db('testdb')
const ds = deepstream( '<DEEPSTREAM SERVER URL>' )
ds.login()
const userRepository = UserRepositoryMongo(db)
@vedranjukic
vedranjukic / userRepositoryDynamoDB.js
Last active December 14, 2017 23:21
User repository DynamoDB adapter factory
export default client => {
const create = user => {
return new Promise((resolve, reject) => {
client.put({
TableName: 'users',
Item: user
}, (err, data) => {
if (err) {
return reject(err)
}
@vedranjukic
vedranjukic / userController.js
Last active December 29, 2017 13:47
Implemented UserRepositoryMySQL adapter
//
// Express controller
// User repository using mysql database instead of mongo
//
router.put('/user', async (req, res) => {
// mysql conn object is already added to req object when express is initialised
const conn = req.conn;
const { userId, userName, userEmail } = req.body
// get userRepository instance from factory
@vedranjukic
vedranjukic / userRepositoryMySQL.js
Last active December 16, 2017 12:44
UserRepository MySQL db adapter factory
//
// UserRepositoryMySQL factory implementing UserRepository interface
//
export default conn => {
const create = user => {
const { userId, userName, userEmail } = user
return new Promise((resolve, reject) => {
conn.query(`INSERT INTO users (userId, userName, userEmail) VALUES (${userId}, '${userName}', '${userEmail}')`, function (error) {
if (error) {
return reject(error)
@vedranjukic
vedranjukic / updateUser.test.js
Last active December 23, 2017 18:43
Simple updateUserService test
// get userRepository instance from factory
const userRepository = UserRepositoryInMemory()
const USER_ID = 1
const USER_NAME_BEFORE = 'user1'
const USER_EMAIL_BEFORE = 'email1@test.com'
const USER_NAME_AFTER = 'user1_updated'
const USER_EMAIL_AFRTER = 'email1.updated@test.com'
@vedranjukic
vedranjukic / userRepositoryInMemory.js
Last active December 16, 2017 12:47
UserRepository in-memory adapter factory for testing
//
// UserRepositoryInMemory factory implementing UserRepository interface
// used for mocking the infrastructure for running tests
//
export default () => {
const users = new Map()
const create = async (user) => {
const { userId } = user
users.set(userId, user)
@vedranjukic
vedranjukic / userController.js
Last active December 29, 2017 13:47
Implemented UserRepositoryMongo adapter
//
// Express controller with UserRepositoryMongo instantiated
// and passed to updateUser
//
router.put('/user', async (req, res) => {
// db object is already added to req object when express is initialised
const db = req.db;
const { userId, userName, userEmail } = req.body
// get userRepository instance from factory