Skip to content

Commit

Permalink
MVP2-6 - Allow non-logged in user to fetch events and latest chat mes…
Browse files Browse the repository at this point in the history
…sages
  • Loading branch information
wholespace214 committed Aug 10, 2021
1 parent 16f570f commit a28b272
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 96 deletions.
11 changes: 7 additions & 4 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,15 +104,18 @@ server.get('/', (req, res) => {
});

// Import Routes
const userRoute = require('./routes/users/users-routes');
const eventRoute = require('./routes/users/events-routes');
const secureUserRoute = require('./routes/users/secure-users-routes');
const userRoute = require('./routes/users/users-routes');
const secureEventRoutes = require('./routes/users/secure-events-routes');
const eventRoutes = require('./routes/users/events-routes');
const secureUserRoute = require('./routes/users/secure-users-routes');

server.use(cors());

// Using Routes
server.use('/api/event', eventRoutes);
server.use('/api/event', passport.authenticate('jwt', { session: false }), secureEventRoutes);

server.use('/api/user', userRoute);
server.use('/api/event', passport.authenticate('jwt', { session: false }), eventRoute);
server.use('/api/user', passport.authenticate('jwt', { session: false }), secureUserRoute);

io.use(socketioJwt.authorize({
Expand Down
92 changes: 1 addition & 91 deletions routes/users/events-routes.js
Original file line number Diff line number Diff line change
@@ -1,103 +1,13 @@
// Import the express Router to create routes
const router = require("express").Router();

// Imports from express validator to validate user input
const { check } = require("express-validator");

// Import controllers
const eventController = require("../../controllers/events-controller");
const betController = require("../../controllers/bets-controller");

//Login does register & login
router.get(
"/list",
eventController.listEvents
);

router.get(
"/list/:type/:category/:count/:page/:sortby",
eventController.filterEvents
);

router.get(
"/list/:type/:category/:count/:page/:sortby/:searchQuery",
eventController.filterEvents
);

router.get(
"/get/:id",
[
check("id").notEmpty()
],
eventController.getEvent
);

router.post(
"/create",
[
check("name"),
check("tags"),
check("streamUrl"),
check("previewImageUrl"),
check("date"),
],
eventController.createEvent
);

router.post(
"/bet/create",
[
check("eventId").notEmpty(),
check("marketQuestion").notEmpty(),
check("description"),
check("hot"),
check("outcomes").isArray(),
check("endDate")
],
betController.createBet
);

router.post(
"/bet/:id/place",
[
check("amount").isNumeric(),
check("outcome").isNumeric(),
check("minOutcomeTokens").isNumeric().default(0).optional()
],
betController.placeBet
);

router.post(
"/bet/:id/pullout",
[
check("amount").isNumeric(),
check("outcome").isNumeric(),
check("minReturnAmount").isNumeric().default(Number.MAX_SAFE_INTEGER).optional()
],
betController.pullOutBet
);

router.post(
"/bet/:id/outcomes/buy",
[
check("amount").isNumeric()
],
betController.calculateBuyOutcome
);

router.post(
"/bet/:id/outcomes/sell",
[
check("amount").isNumeric()
],
betController.calculateSellOutcome
);

router.get(
"/bet/:id/payout",
betController.payoutBet
);

router.get(
"/chat-messages/:id",
[
Expand All @@ -106,4 +16,4 @@ router.get(
eventController.getChatMessagesByEventId
);

module.exports = router;
module.exports = router;
96 changes: 96 additions & 0 deletions routes/users/secure-events-routes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
// Import the express Router to create routes
const router = require("express").Router();

// Imports from express validator to validate user input
const { check } = require("express-validator");

// Import controllers
const eventController = require("../../controllers/events-controller");
const betController = require("../../controllers/bets-controller");

//Login does register & login
router.get(
"/list/:type/:category/:count/:page/:sortby",
eventController.filterEvents
);

router.get(
"/list/:type/:category/:count/:page/:sortby/:searchQuery",
eventController.filterEvents
);

router.get(
"/get/:id",
[
check("id").notEmpty()
],
eventController.getEvent
);

router.post(
"/create",
[
check("name"),
check("tags"),
check("streamUrl"),
check("previewImageUrl"),
check("date"),
],
eventController.createEvent
);

router.post(
"/bet/create",
[
check("eventId").notEmpty(),
check("marketQuestion").notEmpty(),
check("description"),
check("hot"),
check("outcomes").isArray(),
check("endDate")
],
betController.createBet
);

router.post(
"/bet/:id/place",
[
check("amount").isNumeric(),
check("outcome").isNumeric(),
check("minOutcomeTokens").isNumeric().default(0).optional()
],
betController.placeBet
);

router.post(
"/bet/:id/pullout",
[
check("amount").isNumeric(),
check("outcome").isNumeric(),
check("minReturnAmount").isNumeric().default(Number.MAX_SAFE_INTEGER).optional()
],
betController.pullOutBet
);

router.post(
"/bet/:id/outcomes/buy",
[
check("amount").isNumeric()
],
betController.calculateBuyOutcome
);

router.post(
"/bet/:id/outcomes/sell",
[
check("amount").isNumeric()
],
betController.calculateSellOutcome
);

router.get(
"/bet/:id/payout",
betController.payoutBet
);

module.exports = router;
40 changes: 39 additions & 1 deletion services/chat-message-service.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const mongoose = require("mongoose");
// Import ChatMessage model
const ChatMessage = require("../models/ChatMessage");

Expand All @@ -6,7 +7,44 @@ exports.getChatMessagesByEvent = async (eventId) => {
};

exports.getNewestChatMessagesByEvent = async (eventId, limit=100, skip=0) => {
return ChatMessage.find({eventId}, null, {sort: {date: -1}, limit, skip});
return ChatMessage.aggregate([
{
$match: { eventId: mongoose.Types.ObjectId(eventId) }
},
{ $sort: { date: -1 }},
{ $limit : limit },
{ $skip : skip },
{
$lookup: {
localField: "userId",
from: "users",
foreignField: "_id",
as: "user"
}
},
{
$replaceRoot: {
newRoot: {
$mergeObjects: [
{
$arrayElemAt: [ "$user", 0 ]
},
"$$ROOT"
]
}
}
},
{ $project:
{
userId: 1,
eventId: 1,
type: 1,
message: 1,
date: 1,
name: 1
}
}
])
};

exports.createChatMessage = async (data) => {
Expand Down

0 comments on commit a28b272

Please sign in to comment.