diff --git a/app/controllers/index.js b/app/controllers/index.js index 138a17e..88ccbc3 100644 --- a/app/controllers/index.js +++ b/app/controllers/index.js @@ -10,5 +10,6 @@ module.exports = { auth: require('./auth.controller'), charge: require('./charge.controller'), project: require('./project.controller'), - image: require('./image.controller') + image: require('./image.controller'), + post: require('./post.controller') }; diff --git a/app/controllers/post.controller.js b/app/controllers/post.controller.js new file mode 100644 index 0000000..89e8800 --- /dev/null +++ b/app/controllers/post.controller.js @@ -0,0 +1,54 @@ +const db = require('../../models'), + errorMaker = require('../helpers/error.maker'), + textCleaner = require('../helpers/text_cleaner'); + +const { Post, sequelize } = db; + +exports.createStatusUpdate = async (req, res, next) => { + const { text } = req.body; + + try { + const organization_id = req.user.id; + console.log(organization_id); + + const post = await Post.create({ text, organization_id }); + + return res.status(201).json(post); + } catch (error) { + next(error); + } +}; + +// query params: {postId} +exports.addRibbon = async (req, res, next) => { + const { update_id } = req.params; + + try { + const posts = await sequelize.query( + ` + SELECT num_ribbons + FROM posts + WHERE id = :update_id`, + { type: db.Sequelize.QueryTypes.SELECT, replacements: { update_id } } + ); + + const newNumRibbons = posts[0].num_ribbons + 1; + + const update = await sequelize.query( + ` + UPDATE posts + SET num_ribbons = :newNumRibbons + WHERE id = :update_id`, + { + type: db.Sequelize.QueryTypes.UPDATE, + replacements: { newNumRibbons, update_id } + } + ); + + return res + .status(200) + .json({ message: 'Successfully added ribbon to post!' }); + } catch (error) { + next(error); + } +}; diff --git a/app/routes/donor.route.js b/app/routes/donor.route.js index 264c10f..2a5d16e 100644 --- a/app/routes/donor.route.js +++ b/app/routes/donor.route.js @@ -8,7 +8,8 @@ const { grant, stripe, organization, - charge + charge, + post } = require('../controllers'); // POST donor signup @@ -54,6 +55,12 @@ router.get('/dashboard', checkAuth(roles.DONOR), donor.getDashboardData); router.get('/charges', checkAuth(roles.DONOR), charge.getAllChargesbyDonor); +router.put( + '/statusupdate/ribbon/:update_id', + checkAuth(roles.DONOR), + post.addRibbon +); + // // Retrieve a single Donor by Id // router.get('/:donor_id', donor.findById); diff --git a/app/routes/organization.route.js b/app/routes/organization.route.js index 3d5fb99..673aac6 100644 --- a/app/routes/organization.route.js +++ b/app/routes/organization.route.js @@ -9,7 +9,8 @@ const { region, stripe, project, - image + image, + post } = require('../controllers'); // Charity signup route @@ -34,6 +35,12 @@ router.get( router.post('/project', checkAuth(roles.ORGANIZATION), project.createProject); +router.post( + '/statusupdate', + checkAuth(roles.ORGANIZATION), + post.createStatusUpdate +); + // // Add cause // router.post('/cause', checkAuth(roles.ORGANIZATION), cause.createCause); diff --git a/models/Post.js b/models/Post.js new file mode 100644 index 0000000..1538469 --- /dev/null +++ b/models/Post.js @@ -0,0 +1,28 @@ +const Organization = require('./Organization'); + +module.exports = (sequelize, DataTypes) => { + const Post = sequelize.define('Post', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true + }, + text: { + type: DataTypes.STRING(350), + allowNull: false + }, + organization_id: { + type: DataTypes.UUID, + allowNull: false, + references: { + model: Organization(sequelize, DataTypes), + key: 'id' + } + }, + num_ribbons: { + type: DataTypes.INTEGER, + defaultValue: 0 + } + }); + return Post; +};