Skip to content

Commit

Permalink
Merge pull request #56 from Arquisoft/UserDataBase
Browse files Browse the repository at this point in the history
Functioning user system + created schema for game database.
  • Loading branch information
ElPandaP authored Mar 9, 2025
2 parents 5aa204a + 6b7ec3e commit edf7503
Show file tree
Hide file tree
Showing 16 changed files with 341 additions and 228 deletions.
46 changes: 46 additions & 0 deletions game/game-model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
const mongoose = require('mongoose');
//const { Match, Answer, User } = require('./game-model'); para usarlo luego en otras partes se añade así el esquema
const answerSchema = new mongoose.Schema({
isCorrect: Boolean,
text: String,
});

const matchSchema = new mongoose.Schema({
date: { type: Date, default: Date.now },
question: { type: String, required: true },
answers: { type: [answerSchema], required: true},
dni: { type: String, required: true },
});

const userSchema = new mongoose.Schema({
username: {
type: String,
},
matches: [matchSchema],
});

const User = mongoose.model('User', userSchema);
const Answer = mongoose.model('Answer', answerSchema);
const Match = mongoose.model('Match', matchSchema);


module.exports = { Match, Answer, User };

// async function createMatchForUser(dni) {
// const user = await User.findOne({ dni });
// if (!user) {
// console.log('User not found');
// return;
// }
//
// const match = new Match({
// question: 'What is 2+2?',
// answers: [
// { text: '4', isCorrect: true },
// { text: '5', isCorrect: false },
// ],
// dni: user.dni,
// });
//
// await match.save();
// }
2 changes: 1 addition & 1 deletion gatewayservice/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions users/userservice/user-model.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true,
type: String,
required: true,
},
createdAt: {
type: Date,
Expand Down
12 changes: 10 additions & 2 deletions users/userservice/user-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,30 @@ function validateRequiredFields(req, requiredFields) {
if (!(field in req.body)) {
throw new Error(`Missing required field: ${field}`);
}

}

if (req.body.username.length < 3||
req.body.password.length < 3 ) {
throw new Error(`Username and password length must be at least 3`);
}
}

app.post('/adduser', async (req, res) => {
try {
// Check if required fields are present in the request body
validateRequiredFields(req, ['username', 'password']);

const existingUser = await User.findOne({ username: req.body.username });
if (existingUser) {
return res.status(400).json({ error: 'Username already exists' });
}
// Encrypt the password before saving it
const hashedPassword = await bcrypt.hash(req.body.password, 10);

const newUser = new User({
username: req.body.username,
password: hashedPassword,
});

await newUser.save();
res.json(newUser);
} catch (error) {
Expand Down
Binary file added webapp/public/bg.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed webapp/public/logo.jpg
Binary file not shown.
Binary file added webapp/public/pfp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 5 additions & 3 deletions webapp/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import React from "react";
import { Routes, Route } from "react-router-dom";
import CssBaseline from "@mui/material/CssBaseline";
import Home from "./Home";
import LoginSignup from "./LoginSignup";
import Login from "./components/Login";
import AddUser from "./components/AddUser";


function App() {
Expand All @@ -13,8 +14,9 @@ function App() {
<Routes>
<Route path="/" element={<Home />} />
<Route path="/home" element={<Home />} />
<Route path="/login" element={<LoginSignup />} />
<Route path="/signup" element={<LoginSignup />} />
<Route path="/login" element={<Login />} />
<Route path="/signup" element={<AddUser />} />
<Route path="/register" element={<AddUser />} />
</Routes>
</>
);
Expand Down
6 changes: 6 additions & 0 deletions webapp/src/Home.css
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ body, html {
align-items: center;
padding: 0;
margin: 0;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
image-rendering: crisp-edges;
backface-visibility: hidden;
transform: translateZ(0);
}

.play-button {
Expand Down
21 changes: 12 additions & 9 deletions webapp/src/Home.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import React, { useState } from "react";
import React, {useEffect, useState} from "react";
import { Link } from "react-router-dom";
import Nav from "./components/Nav";
import "./Home.css";

function Home() {
const [user, setUser] = useState(null);
const [isLoggedIn, setIsLoggedIn] = useState(!!localStorage.getItem('token'));

return (
<div style={{ height: "100vh", display: "flex", flexDirection: "column" }}>
Expand All @@ -13,23 +13,26 @@ function Home() {
className="container"
style={{
flex: 1,
backgroundImage: "url('/logo.jpg')",
backgroundImage: "url('/bg.jpg')",
backgroundSize: "cover",
backgroundPosition: "center",
backgroundRepeat: "no-repeat",
position: "relative"
}}
>
<button className="play-button">
{!isLoggedIn?( <button className="play-button">
<Link to="/login" style={{color: "white"}}>
Log in to play
</Link>
</button> )
: (
<button className="play-button">
<Link to="/game" style={{color: "white"}}>
Play the game
</Link>
</button>
{/*<button className="play-button">*/}
{/* <Link to="/game" style={{color: "white"}}>*/}
{/* Play the game*/}
{/* </Link>*/}
{/*</button>*/}
)
}
</div>
</div>
);
Expand Down
40 changes: 0 additions & 40 deletions webapp/src/LoginSignup.js

This file was deleted.

Loading

0 comments on commit edf7503

Please sign in to comment.