0% found this document useful (0 votes)
3 views

Test_Genius_Code

The document outlines a full-stack application using Express and MongoDB for the backend and React for the frontend. It includes user registration and login functionality, test management, and a leaderboard system. The frontend allows users to log in and view their tests and badges, while the backend handles data storage and retrieval through defined routes and models.

Uploaded by

kumarharsh63312
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Test_Genius_Code

The document outlines a full-stack application using Express and MongoDB for the backend and React for the frontend. It includes user registration and login functionality, test management, and a leaderboard system. The frontend allows users to log in and view their tests and badges, while the backend handles data storage and retrieval through defined routes and models.

Uploaded by

kumarharsh63312
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

// === Backend Code ===

// server.js

const express = require('express');

const mongoose = require('mongoose');

const cors = require('cors');

const app = express();

const PORT = 5000;

// Middleware

app.use(express.json());

app.use(cors());

mongoose.connect('mongodb://localhost/test_genius', {

useNewUrlParser: true,

useUnifiedTopology: true,

});

// Routes

app.use('/api/users', require('./routes/userRoutes'));

app.use('/api/tests', require('./routes/testRoutes'));

app.use('/api/leaderboard', require('./routes/leaderboardRoutes'));

app.listen(PORT, () => console.log(`Server running on port ${PORT}`));


// models/User.js

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({

username: String,

password: String,

badges: [String],

scores: [{ testId: String, score: Number }],

});

module.exports = mongoose.model('User', userSchema);

// models/Test.js

const mongoose = require('mongoose');

const testSchema = new mongoose.Schema({

title: String,

questions: [{ question: String, options: [String], correctOption: Number }],

});

module.exports = mongoose.model('Test', testSchema);

// models/Leaderboard.js

const mongoose = require('mongoose');

const leaderboardSchema = new mongoose.Schema({

testId: String,

scores: [{ username: String, score: Number }],

});

module.exports = mongoose.model('Leaderboard', leaderboardSchema);


// routes/userRoutes.js

const express = require('express');

const router = express.Router();

const User = require('../models/User');

router.post('/register', async (req, res) => {

const { username, password } = req.body;

const user = new User({ username, password, badges: [], scores: [] });

await user.save();

res.send('User registered!');

});

router.post('/login', async (req, res) => {

const { username, password } = req.body;

const user = await User.findOne({ username, password });

if (user) res.json({ success: true, user });

else res.status(400).json({ success: false, message: 'Invalid credentials' });

});

module.exports = router;

// routes/testRoutes.js

const express = require('express');

const router = express.Router();


const Test = require('../models/Test');

router.get('/', async (req, res) => {

const tests = await Test.find();

res.json(tests);

});

module.exports = router;

// routes/leaderboardRoutes.js

const express = require('express');

const router = express.Router();

const Leaderboard = require('../models/Leaderboard');

const User = require('../models/User');

router.post('/submit-score', async (req, res) => {

const { username, testId, score } = req.body;

const user = await User.findOne({ username });

user.scores.push({ testId, score });

if (score >= 90) user.badges.push('Gold');

else if (score >= 70) user.badges.push('Silver');

else user.badges.push('Bronze');

await user.save();
let leaderboard = await Leaderboard.findOne({ testId });

if (!leaderboard) {

leaderboard = new Leaderboard({ testId, scores: [] });

leaderboard.scores.push({ username, score });

await leaderboard.save();

res.send('Score submitted!');

});

module.exports = router;

// === Frontend Code ===

// App.js

import React, { useState, useEffect } from 'react';

import axios from 'axios';

import './App.css';

import Login from './components/Login';

import Dashboard from './components/Dashboard';

const App = () => {

const [tests, setTests] = useState([]);

const [user, setUser] = useState(null);

useEffect(() => {
axios.get('http://localhost:5000/api/tests').then((response) => {

setTests(response.data);

});

}, []);

const handleLogin = (username, password) => {

axios.post('http://localhost:5000/api/users/login', { username, password })

.then((response) => setUser(response.data.user))

.catch((err) => alert('Login failed'));

};

return (

<div className="App">

<h1>Test Genius</h1>

{!user ? (

<Login onLogin={handleLogin} />

):(

<Dashboard user={user} tests={tests} />

)}

</div>

);

};

export default App;

// components/Login.js
import React, { useState } from 'react';

const Login = ({ onLogin }) => {

const [username, setUsername] = useState('');

const [password, setPassword] = useState('');

const handleSubmit = (e) => {

e.preventDefault();

onLogin(username, password);

};

return (

<form onSubmit={handleSubmit}>

<input type="text" placeholder="Username" value={username} onChange={(e) => setUsername(e.target.value)} />

<input type="password" placeholder="Password" value={password} onChange={(e) => setPassword(e.target.value)}

/>

<button type="submit">Login</button>

</form>

);

};

export default Login;

// components/Dashboard.js

import React from 'react';


const Dashboard = ({ user, tests }) => (

<div>

<h2>Welcome, {user.username}</h2>

<h3>Your Badges: {user.badges.join(', ')}</h3>

<h3>Your Tests</h3>

<ul>

{tests.map((test) => (

<li key={test._id}>{test.title}</li>

))}

</ul>

</div>

);

export default Dashboard;

// App.css

body {

font-family: Arial, sans-serif;

margin: 0;

padding: 0;

background-color: #f4f4f4;

.App {

text-align: center;

padding: 20px;
}

form {

display: flex;

flex-direction: column;

align-items: center;

gap: 10px;

button {

padding: 10px 20px;

background-color: #007bff;

color: white;

border: none;

cursor: pointer;

button:hover {

background-color: #0056b3;

You might also like