@@ -1,4 +1,6 @@
import React from 'react';
import Nav from '../components/Nav';
import Buckets from '../components/buckets/Buckets';

class App extends React.Component {
componentDidMount() {
@@ -7,18 +9,12 @@ class App extends React.Component {

render() {
return (
<nav>
<div className="nav-wrapper">
<a href="#!" className="brand-logo">Logo</a>
<a href="#" data-activates="mobile" className="button-collapse"><i className="material-icons">menu</i></a>
<ul className="right hide-on-med-and-down">
<li><a href="/">Home</a></li>
</ul>
<ul className="side-nav" id="mobile">
<li><a href="/">Home</a></li>
</ul>
<div>
<Nav />
<div className="container">
<Buckets />
</div>
</nav>
</div>
);
}
}
@@ -0,0 +1,22 @@
import React from 'react';
import Nav from '../components/Nav';
import Lists from '../components/lists/Lists';

const BucketPage = () => {
let { id, name } = document.getElementById('app').dataset
return (
<div>
<Nav />
<div className="container">

<h2 className="center">{name}</h2>
<hr />

<Lists bucketId={id} />
</div>

</div>
)
}

export default BucketPage;
@@ -5,7 +5,8 @@ var ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
entry: {
vendor: path.join(__dirname, '../client/vendor.js'),
application: path.join(__dirname, '../client/index.js')
application: path.join(__dirname, '../client/index.js'),
bucket: path.join(__dirname, '../client/bucket.js')
},
output: {
filename: "[name].js",
@@ -0,0 +1,8 @@
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const Bucket = new Schema({
name: { type: String, required: true }
});

module.exports = mongoose.model( 'Bucket', Bucket );
@@ -0,0 +1,9 @@
const mongoose = require( 'mongoose' );
const Schema = mongoose.Schema;

const Card = new Schema({
name: { type: String, required: true },
listId: { type: String, required: true }
});

module.exports = mongoose.model( 'Card', Card );
@@ -0,0 +1,9 @@
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const List = new Schema({
name: { type: String, required: true },
bucketId: { type: String, required: true }
});

module.exports = mongoose.model( 'List', List );

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

@@ -0,0 +1,52 @@
const express = require('express');
const router = express.Router();
const Bucket = require('../models/bucket');
const List = require('../models/list');
const Card = require('../models/card');

router.get('/', (req, res) => {
Bucket.find( ( err, buckets ) => {
res.json(buckets);
});
});

router.post('/', (req, res) => {
new Bucket({
name: req.body.name
}).save( (err, bucket) => {
res.json(bucket);
});
});

router.put('/:id', ( req, res ) => {
let { name } = req.body;
Bucket.findByIdAndUpdate(
req.params.id,
{ $set: { name }},
{ new: true },
(err, bucket) => {
res.json(bucket);
});
});

router.delete('/:id', (req, res) => {
let bucketId = req.params.id;
Bucket.findById(bucketId, (err, bucket) => {
bucket.remove();
List.find({ bucketId }, (err, lists) => {
lists.forEach( list => {
Card.find({'listId': list._id}).remove().exec();
list.remove()
} );
});
res.status(200).send({success: true});
});
});

router.get('/:id', (req, res) => {
Bucket.findById(req.params.id, (err, bucket) => {
res.render('bucket', { bucket })
})
});

module.exports = router;
@@ -0,0 +1,28 @@
const express = require('express');
const router = express.Router();
const Card = require('../models/card');

router.get('/', (req, res) => {
Card.find({ listId: req.query.listId }, ( err, cards ) => {
res.json(cards);
});
});

router.post('/', (req, res) => {
let { listId, name } = req.body;
new Card({
name,
listId
}).save( (err, list) => {
res.json(list);
});
});

router.delete('/:id', (req, res) => {
Card.findById(req.params.id, (err, card) => {
card.remove();
res.status(200).send({success: true});
});
});

module.exports = router;
@@ -0,0 +1,30 @@
const express = require('express');
const router = express.Router();
const List = require('../models/list');
const Card = require('../models/card');

router.get('/', (req, res) => {
List.find({ bucketId: req.query.bucketId }, ( err, buckets ) => {
res.json(buckets);
});
});

router.post('/', (req, res) => {
let { bucketId, name } = req.body;
new List({
name,
bucketId
}).save( (err, list) => {
res.json(list);
});
});

router.delete('/:id', (req, res) => {
List.findById(req.params.id, (err, list) => {
list.remove();
Card.find({'listId': req.query.id}).remove().exec( (err, list) => {
res.status(200).send({success: true});
});
});
});
module.exports = router;
@@ -0,0 +1,5 @@
extends layout
block content
#app(data-id = bucket._id, data-name = bucket.name)
- src = process.env.NODE_ENV === 'production' ? 'bucket.js' : 'http://localhost:8080/bucket.js'
script(src=src)