TSHEET
TSHEET
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');
module.exports = {
getUserByUsername,
};
src/controllers/authController.js:
javascript
Copy code
const User = require('../models/User');
try {
const user = await User.getUserByUsername(username);
javascript
Copy code
const db = require('../config/db');
module.exports = {
getAllProjects,
createProject,
};
src/controllers/projectController.js:
javascript
Copy code
const Project = require('../models/Project');
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');
module.exports = {
getAllTimeEntries,
createTimeEntry,
};
src/controllers/timeEntryController.js:
javascript
Copy code
const TimeEntry = require('../models/TimeEntry');
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');
router.post('/login', authController.login);
module.exports = router;
src/routes/projectRoutes.js:
javascript
Copy code
const express = require('express');
const projectController = require('../controllers/projectController');
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');
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');
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.