Untitled
unknown
plain_text
a year ago
1.8 kB
8
Indexable
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const app = express();
app.use(cors());
app.use(express.json());
// MongoDB connection
mongoose.connect('mongodb://localhost:27017/sacco', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
// User schema
const UserSchema = new mongoose.Schema({
name: String,
email: String,
password: String,
role: { type: String, enum: ['member', 'admin'], default: 'member' },
approved: { type: Boolean, default: false },
payments: [{ amount: Number, date: Date }],
});
const User = mongoose.model('User', UserSchema);
// API Endpoints
// User Registration
app.post('/register', async (req, res) => {
const { name, email, password } = req.body;
const user = new User({ name, email, password });
await user.save();
res.status(201).send('User registered');
});
// User Login
app.post('/login', async (req, res) => {
const { email, password } = req.body;
const user = await User.findOne({ email, password });
if (user && user.approved) {
// Generate JWT token
res.status(200).send('Login successful');
} else {
res.status(403).send('Login failed or account not approved');
}
});
// Admin Approval
app.post('/approve/:userId', async (req, res) => {
const user = await User.findById(req.params.userId);
user.approved = true;
await user.save();
res.status(200).send('User approved');
});
// Track Payment Progress
app.get('/payments/:userId', async (req, res) => {
const user = await User.findById(req.params.userId);
res.status(200).json(user.payments);
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
Editor is loading...
Leave a Comment