diff --git a/src/api/address.ts b/src/api/address.ts new file mode 100644 index 0000000..234389b --- /dev/null +++ b/src/api/address.ts @@ -0,0 +1,53 @@ +import { Router } from 'express'; +import { AddressModel } from '../models'; +import { ObjectID } from 'mongodb'; +import requireApiAuth from '../requireApiAuth'; + +export const router = Router(); + +router.get('/pool/:poolID', async (req, res) => { + let pool = req.params.poolID; + let addresses = await AddressModel.find({ pool: pool }).exec(); + + res.json({ status: 'success', data: addresses }); +}); + +router.get('/user/:userID', async (req, res) => { + const userID = req.session.accountID; + let addresses = await AddressModel.find({ user: userID }).exec(); + + res.json({ status: 'success', data: addresses }); +}); + +router.post('/remove', async (req, res) => { + const userID = req.session.accountID; + const poolID = req.body.pool; + let addresses = await AddressModel.deleteOne({ + user: userID, + pool: poolID, + }).exec(); + + res.json({ status: 'success', data: addresses }); +}); + +router.post('/', async (req, res) => { + const userID = req.session.accountID; + const poolID = req.body.pool; + const location = req.body.location; + + const address = new AddressModel(); + Object.assign(address, { + user: userID, + pool: poolID, + location: location, + }); + address + .save() + .then((address) => { + res.json({ status: 'success', id: address._id }); + }) + .catch((err) => { + console.error('Error when creating address:', err); + res.json({ status: 'error' }); + }); +}); diff --git a/src/api/index.ts b/src/api/index.ts index 120b3a7..6ea3c23 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -4,6 +4,7 @@ import { createSessionFromCodeAndProvider } from '../auth'; import * as browse from './browse'; import * as group from './group'; import * as pool from './pool'; +import * as address from './address'; import * as user from './user'; export const router = Router(); @@ -12,6 +13,7 @@ router.use('/browse', browse.router); router.use('/users', user.router); router.use('/pools', pool.router); router.use('/groups', group.router); +router.use('/addresses', address.router); router.post('/create_session', (req, res) => { const { code, provider } = req.body; diff --git a/src/models.ts b/src/models.ts index f1157da..0162731 100644 --- a/src/models.ts +++ b/src/models.ts @@ -79,4 +79,18 @@ const PoolSchema: Schema = new Schema({ const PoolModel: Model = model('Pool', PoolSchema); -export { UserModel, GroupModel, CommentModel, PoolModel }; +export interface Address extends Document { + user: string; + pool: string; + location: string; +} + +const AddressSchema: Schema = new Schema({ + user: { type: String, required: true }, + pool: { type: String, required: true }, + location: { type: String, required: true }, +}); + +const AddressModel: Model = model('Address', AddressSchema); + +export { UserModel, GroupModel, CommentModel, PoolModel, AddressModel };