Skip to content

Instantly share code, notes, and snippets.

@vedranjukic
vedranjukic / updateUser.js
Last active December 23, 2017 18:30
Isolated update user logic from express route
//
// Isolated update user logic from express route
// Still coupled with mongo db client
//
async function updateUser ({db, updateParams}) {
const { userId, userName, userEmail } = updateParams
// validate request params
if (!userId || !userName || !userEmail) {
throw new InvalidParamsException('Missing required params')
@vedranjukic
vedranjukic / userController.js
Last active December 29, 2017 13:47
Separated update user logic from the route
//
// Express controller with isolated
// update user logic
//
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
await updateUser({
@vedranjukic
vedranjukic / userController.js
Last active December 23, 2017 18:24
Coupled infrastructure and core logic example
//
// Express controller route example of
// coupled infrastructure with core logic
//
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
@vedranjukic
vedranjukic / userRepositoryMongo.js
Last active December 16, 2017 12:58
User repository Mongo db adapter factory
//
// UserRepositoryMongo factory implementing UserRepository interface
//
export default db => {
const users = db.get('users')
const create = async (user) => {
const { userId } = user
await users.insert(user)
}
@vedranjukic
vedranjukic / updateUser.js
Last active December 23, 2017 18:47
Implemented UserRepository interface
//
// UserRepository interface implemented instead of
// directly interfacing mongo db client
//
async function updateUser ({userRepository, updateParams}) {
const { userId, userName, userEmail } = updateParams
// validate params
if (!userId || !userName || !userEmail) {
throw new InvalidParamsException('Missing required params')
@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
@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 / 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 / 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 / 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