0% found this document useful (0 votes)
16 views5 pages

TSHEET

Uploaded by

Cheker Hadded
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views5 pages

TSHEET

Uploaded by

Cheker Hadded
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

Install Dependencies:

bash
Copy code
npm init -y
npm install express mysql2 body-parser cors
Configure Database:

Create a MySQL database named timesheet. You can use a tool like MySQL Workbench or
command line to execute the following SQL script:

sql
Copy code
CREATE DATABASE timesheet;
Code Implementation:

src/config/db.js:

javascript
Copy code
const mysql = require('mysql2');

const db = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'your_password',
database: 'timesheet',
});

db.connect((err) => {
if (err) {
console.error('Error connecting to MySQL:', err);
return;
}
console.log('Connected to MySQL database');
});

module.exports = db;
src/models/User.js:

javascript
Copy code
const db = require('../config/db');

const getUserByUsername = (username) => {


return new Promise((resolve, reject) => {
db.query('SELECT * FROM users WHERE username = ?', [username], (err, results)
=> {
if (err) {
reject(err);
return;
}
resolve(results[0]);
});
});
};

module.exports = {
getUserByUsername,
};
src/controllers/authController.js:

javascript
Copy code
const User = require('../models/User');

exports.login = async (req, res) => {


const { username, password } = req.body;

try {
const user = await User.getUserByUsername(username);

if (!user || user.password !== password) {


res.status(401).json({ message: 'Invalid credentials' });
return;
}

res.json({ message: 'Login successful', user });


} catch (error) {
console.error('Error during login:', error);
res.status(500).json({ message: 'Internal server error' });
}
};
src/models/Project.js:

javascript
Copy code
const db = require('../config/db');

const getAllProjects = () => {


return new Promise((resolve, reject) => {
db.query('SELECT * FROM projects', (err, results) => {
if (err) {
reject(err);
return;
}
resolve(results);
});
});
};

const createProject = (projectName) => {


return new Promise((resolve, reject) => {
db.query('INSERT INTO projects (name) VALUES (?)', [projectName], (err,
results) => {
if (err) {
reject(err);
return;
}
resolve(results.insertId);
});
});
};

module.exports = {
getAllProjects,
createProject,
};
src/controllers/projectController.js:

javascript
Copy code
const Project = require('../models/Project');

exports.getAllProjects = async (req, res) => {


try {
const projects = await Project.getAllProjects();
res.json(projects);
} catch (error) {
console.error('Error fetching projects:', error);
res.status(500).json({ message: 'Internal server error' });
}
};

exports.createProject = async (req, res) => {


const { projectName } = req.body;

try {
const projectId = await Project.createProject(projectName);
res.json({ message: 'Project created successfully', projectId });
} catch (error) {
console.error('Error creating project:', error);
res.status(500).json({ message: 'Internal server error' });
}
};
src/models/TimeEntry.js:

javascript
Copy code
const db = require('../config/db');

const getAllTimeEntries = () => {


return new Promise((resolve, reject) => {
db.query('SELECT * FROM time_entries', (err, results) => {
if (err) {
reject(err);
return;
}
resolve(results);
});
});
};

const createTimeEntry = (projectId, userId, hours, date) => {


return new Promise((resolve, reject) => {
db.query(
'INSERT INTO time_entries (project_id, user_id, hours, date) VALUES (?, ?, ?,
?)',
[projectId, userId, hours, date],
(err, results) => {
if (err) {
reject(err);
return;
}
resolve(results.insertId);
}
);
});
};

module.exports = {
getAllTimeEntries,
createTimeEntry,
};
src/controllers/timeEntryController.js:

javascript
Copy code
const TimeEntry = require('../models/TimeEntry');

exports.getAllTimeEntries = async (req, res) => {


try {
const timeEntries = await TimeEntry.getAllTimeEntries();
res.json(timeEntries);
} catch (error) {
console.error('Error fetching time entries:', error);
res.status(500).json({ message: 'Internal server error' });
}
};

exports.createTimeEntry = async (req, res) => {


const { projectId, userId, hours, date } = req.body;

try {
const entryId = await TimeEntry.createTimeEntry(projectId, userId, hours,
date);
res.json({ message: 'Time entry created successfully', entryId });
} catch (error) {
console.error('Error creating time entry:', error);
res.status(500).json({ message: 'Internal server error' });
}
};
src/routes/authRoutes.js:

javascript
Copy code
const express = require('express');
const authController = require('../controllers/authController');

const router = express.Router();

router.post('/login', authController.login);

module.exports = router;
src/routes/projectRoutes.js:

javascript
Copy code
const express = require('express');
const projectController = require('../controllers/projectController');

const router = express.Router();

router.get('/', projectController.getAllProjects);
router.post('/', projectController.createProject);
module.exports = router;
src/routes/timeEntryRoutes.js:

javascript
Copy code
const express = require('express');
const timeEntryController = require('../controllers/timeEntryController');

const router = express.Router();

router.get('/', timeEntryController.getAllTimeEntries);
router.post('/', timeEntryController.createTimeEntry);

module.exports = router;
src/app.js:

javascript
Copy code
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const authRoutes = require('./routes/authRoutes');
const projectRoutes = require('./routes/projectRoutes');
const timeEntryRoutes = require('./routes/timeEntryRoutes');

const app = express();


const port = 3000;

app.use(cors());
app.use(bodyParser.json());

app.use('/auth', authRoutes);
app.use('/projects', projectRoutes);
app.use('/time-entries', timeEntryRoutes);

app.listen(port, () => {
console.log(`Server is listening on port ${port}`);
});
Run the Application:
bash
Copy code
node src/app.js
This is a basic structure, and you may need to add more features, error handling,
and security measures based on your requirements. Additionally, consider using an
ORM (Object-Relational Mapping) library like Sequelize or TypeORM for a more robust
and scalable solution.

You might also like