Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 8 additions & 10 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,20 @@ module.exports = {
browser: true,
commonjs: true,
es2021: true,
node: true
node: true,
},
extends: [
'plugin:react/recommended',
'plugin:jest/recommended',
'standard'
'standard',
'plugin:prettier/recommended',
],
parserOptions: {
ecmaFeatures: {
jsx: true
jsx: true,
},
ecmaVersion: 12
ecmaVersion: 12,
},
plugins: [
'react', 'react-hooks', 'jest'
],
rules: {
}
}
plugins: ['react', 'react-hooks', 'jest'],
rules: {},
};
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules/*
9 changes: 9 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": true,
"trailingComma": "all",
"bracketSpacing": true
}
25 changes: 16 additions & 9 deletions 01-basic-cs/index.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,26 @@
'use strict'
'use strict';

const _ = require('lodash') // https://lodash.com/docs/4.17.4
const assert = require('assert')
const _ = require('lodash'); // https://lodash.com/docs/4.17.4
const assert = require('assert');

const database = require('./database.json')
const database = require('./database.json');

const total = 0 // TODO
const hats = _.flatMap(database, 'hats');
const countOfHats = _.countBy(hats, 'id');
const mostTopSelling = _(Object.values(countOfHats))
.sortBy()
.takeRight(3)
.value();

const total = _(mostTopSelling).sum();

// Throws error on failure
assert.equal(total, 23, `Invalid result: ${total} != 23`)
assert.equal(total, 23, `Invalid result: ${total} != 23`);

console.log('Success!')
console.log('Success!');

/**
* Time and space complexity in O() notation is:
* - time complexity: TODO
* - space complexity: TODO
* - time complexity: O(n log n)
* - space complexity: O(n)
*/
24 changes: 12 additions & 12 deletions 01-basic-cs/utils/seed.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
'use strict'
'use strict';

const faker = require('faker')
const _ = require('lodash')
const faker = require('faker');
const _ = require('lodash');

const AMMOUNT = {
USERS: 50,
HATS: 30
}
HATS: 30,
};

const hats = _.times(AMMOUNT.HATS, n => ({
const hats = _.times(AMMOUNT.HATS, (n) => ({
id: faker.random.uuid(),
name: faker.commerce.productName(),
material: faker.commerce.productMaterial(),
price: faker.commerce.price()
}))
price: faker.commerce.price(),
}));

const users = _.times(AMMOUNT.USERS, n => ({
const users = _.times(AMMOUNT.USERS, (n) => ({
id: faker.random.uuid(),
email: faker.internet.email(),
hats: _.sampleSize(hats, _.random(0, 5))
}))
hats: _.sampleSize(hats, _.random(0, 5)),
}));

console.log(JSON.stringify(users, null, 2))
console.log(JSON.stringify(users, null, 2));
36 changes: 31 additions & 5 deletions 02-nodejs/index.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,38 @@
'use strict'
'use strict';

const express = require('express')
const express = require('express');
const fastcsv = require('fast-csv');

const User = require('./models/User')
const User = require('./models/User');

// Setup Express.js app
const app = express()
const app = express();

// TODO: everything else

app.listen(3000)
app.get('/users', async (req, res) => {
try {
const users = await User.find({}).select('name email').lean();

if (users.length > 0) {
res.setHeader('Content-Type', 'text/csv');
res.setHeader('Content-Disposition', 'attachment; filename=users.csv');
const csvStream = fastcsv.format({ headers: true });

csvStream.pipe(res);

users.forEach((user) => {
csvStream.write(user);
});

csvStream.end();
} else {
res.status(404).send('No data to export');
}
} catch (error) {
console.error(error);
res.status(500).send('Server Error');
}
});

app.listen(3000);
12 changes: 6 additions & 6 deletions 02-nodejs/models/User.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
const mongoose = require('mongoose')
const mongoose = require('mongoose');

// Setup database
mongoose.Promise = Promise
mongoose.connect('mongodb://localhost/mediastream-challenge')
mongoose.Promise = Promise;
mongoose.connect('mongodb://localhost/mediastream-challenge');

const User = mongoose.model('User', {
name: String,
email: String
})
email: String,
});

module.exports = User
module.exports = User;
24 changes: 12 additions & 12 deletions 02-nodejs/utils/seed.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
'use strict'
'use strict';

const faker = require('faker')
const _ = require('lodash')
const User = require('../models/User')
const faker = require('faker');
const _ = require('lodash');
const User = require('../models/User');

const AMMOUNT = {
USERS: 100000
}
USERS: 100000,
};

const users = _.times(AMMOUNT.USERS, n => ({
const users = _.times(AMMOUNT.USERS, (n) => ({
name: faker.name.findName(),
email: faker.internet.email()
}))
email: faker.internet.email(),
}));

User.insertMany(users).then(() => {
console.log('Seed complete')
process.exit(0)
}, console.error.bind(console))
console.log('Seed complete');
process.exit(0);
}, console.error.bind(console));
Loading