diff --git a/sports-matcher/client/src/pages/Signup.js b/sports-matcher/client/src/pages/Signup.js index 6ea309f..55095e2 100644 --- a/sports-matcher/client/src/pages/Signup.js +++ b/sports-matcher/client/src/pages/Signup.js @@ -2,6 +2,7 @@ import React from "react"; import { Alert, Button, Card, Container, Form } from "react-bootstrap"; import { Link } from "react-router-dom"; import validator from "validator"; +import globals from "../globals"; import { apiClient } from "../utils/httpClients"; export default class Signup extends React.Component { @@ -27,9 +28,10 @@ export default class Signup extends React.Component { this.setUserState = this.setUserState.bind(this); } + static contextType = globals; async registerUser(event) { - event.preventDefault(); // We need this so that the page doesn't refresh. + event.preventDefault(); let formIssues = this.validateCurrentForm(); if (formIssues.length > 0) { this.notifyUser("Oops there were issue(s)", ( @@ -47,7 +49,10 @@ export default class Signup extends React.Component { const res = await apiClient.post("/user", this.state.user); console.log(res.data); if (res.status === 201) { - this.notifyUser("Success!",
You are successfully signed up! You can now go log in.
, "success"); + this.notifyUser("Success!",
You are successfully signed up! You wil be directed to login now.
, "success"); + this.redirectTimer = setTimeout(() => { + this.context.navigate("/signin", { replace: true }); + }, 1000); } else if (res.status === 409) { this.notifyUser("User exists!",
This user already exists. Try logging in instead.
, "danger"); } else if (res.status === 400) { @@ -57,6 +62,10 @@ export default class Signup extends React.Component { } } + componentWillUnmount() { + clearTimeout(this.redirectTimer); + } + validateCurrentForm() { console.log(this.state); let formIssues = []; @@ -104,8 +113,8 @@ export default class Signup extends React.Component { - Login - Welcome to Sports Matcher! + Sign up! + Welcome to Sports Matcher! Already have an account?
First name diff --git a/sports-matcher/server/controllers/matchController.js b/sports-matcher/server/controllers/matchController.js index 66f993d..6667744 100644 --- a/sports-matcher/server/controllers/matchController.js +++ b/sports-matcher/server/controllers/matchController.js @@ -1,5 +1,5 @@ import express from "express"; -import { requireAuthenticated } from "../middleware/authority.js"; +import { requireAdmin, requireAuthenticated } from "../middleware/authority.js"; import { needDatabase } from "../middleware/database.js"; import matchModel from "../schemas/matchModel.js"; import sportModel from "../schemas/sportModel.js"; @@ -46,6 +46,16 @@ MatchController.get("/recent/:limit?", needDatabase, async (req, res) => { } }); +MatchController.get("/all", requireAdmin, async (req, res) => { + try { + const allmatches = await matchModel.find().populate("sport"); + res.status(200).send({ all: allmatches }); + } catch (error) { + console.error(error); + res.status(500).send("Internal server error."); + } +}); + MatchController.get("/recent/user/:limit", needDatabase, requireAuthenticated, async (req, res) => { try { let user = req.user; diff --git a/sports-matcher/server/controllers/userController.js b/sports-matcher/server/controllers/userController.js index 3d589ca..47029b3 100644 --- a/sports-matcher/server/controllers/userController.js +++ b/sports-matcher/server/controllers/userController.js @@ -1,5 +1,4 @@ import express from "express"; -import validator from "validator"; import { requireAdmin, requireAuthenticated } from "../middleware/authority.js"; import { needDatabase } from "../middleware/database.js"; import userModel from "../schemas/userModel.js"; @@ -125,14 +124,20 @@ UserController.patch("/:id?", needDatabase, requireAuthenticated, async (req, re } }); +UserController.get("/all", requireAdmin, async (req, res) => { + try { + let all = await userModel.find(); + res.status(200).send({ all: all }); + } catch (error) { + console.error(error); + res.status(500).send("Internal server error"); + } +}); + UserController.get("/all/active", requireAdmin, async (req, res) => { try { - if (req.user.accessLevel < 3) { - res.status(401).send("You do not have the required privileges."); - return; - } - let res = await userModel.find().where("suspend").lt(Date.now); - res.status(200).send({ all: res }); + let active = await userModel.find().where("suspend").lt(Date.now()); + res.status(200).send({ active: active }); } catch (error) { console.error(error); res.status(500).send("Internal server error"); @@ -141,8 +146,8 @@ UserController.get("/all/active", requireAdmin, async (req, res) => { UserController.get("/all/suspended", requireAuthenticated, async (req, res) => { try { - let res = await userModel.find().where("suspend").gte(Date.now); - res.status(200).send({ suspended: res }); + let suspended = await userModel.find().where("suspend").gte(Date.now()); + res.status(200).send({ suspended: suspended }); } catch (error) { console.error(error); res.status(500).send("Internal server error"); diff --git a/sports-matcher/server/schemas/matchModel.js b/sports-matcher/server/schemas/matchModel.js index 85c55ee..0e0dae5 100644 --- a/sports-matcher/server/schemas/matchModel.js +++ b/sports-matcher/server/schemas/matchModel.js @@ -21,7 +21,7 @@ const matchSchema = new mongoose.Schema({ participants: { type: [{ type: Types.ObjectId, ref: ModelNameRegister.User }], required: true, default: [] }, difficulty: { type: Number, required: true }, sport: { type: Types.ObjectId, ref: ModelNameRegister.Sport }, - createDate: { type: Date, required: true, default: Date.now } + createDate: { type: Date, required: true, default: Date.now() } }); matchSchema.pre("remove", function (next) { diff --git a/sports-matcher/server/schemas/rentalModel.js b/sports-matcher/server/schemas/rentalModel.js index 31e2d24..409d059 100644 --- a/sports-matcher/server/schemas/rentalModel.js +++ b/sports-matcher/server/schemas/rentalModel.js @@ -8,7 +8,7 @@ const rentalSchema = new mongoose.Schema({ rate: { type: String, required: true, trim: true }, description: { type: String, required: true }, contact: { type: String, required: true }, - createDate: { type: Date, required: true, default: Date.now }, + createDate: { type: Date, required: true, default: Date.now() }, creator: { type: Types.ObjectId, ref: modelNameRegister.User } }); diff --git a/sports-matcher/server/schemas/userModel.js b/sports-matcher/server/schemas/userModel.js index 1a98925..0bf9195 100644 --- a/sports-matcher/server/schemas/userModel.js +++ b/sports-matcher/server/schemas/userModel.js @@ -19,7 +19,7 @@ const userSchema = new mongoose.Schema({ }, firstName: { type: String, required: true, trim: true }, lastName: { type: String, required: true, trim: true }, - joinDate: { type: Date, default: Date.now, required: true }, + joinDate: { type: Date, default: Date.now(), required: true }, phone: { type: Number, required: false, min: 0 }, password: { type: String, @@ -36,7 +36,7 @@ const userSchema = new mongoose.Schema({ participatingMatchesPublicity: { type: Boolean, required: true, default: false }, friends: { type: Types.ObjectId, ref: modelNameRegister.User }, accessLevel: { type: Number, required: true, default: 0 }, - suspend: { type: Date, required: true, default: Date.now } // suspend the user until the when the user was created. + suspend: { type: Date, required: true, default: Date.now() } // suspend the user until the when the user was created. }); userSchema.statics.credentialsExist = async function (email, password) {