Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions Backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
.env
16 changes: 16 additions & 0 deletions Backend/config/dbConnect.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import mongoose from 'mongoose'
import { config } from 'dotenv'
config();

const dbConnect = async () => {
try {
await mongoose.connect(process.env.MONGODB_URL);
console.log('Connection with DB successful!');
} catch (error) {
console.log('Cannot connect with DB !');
console.log(error)
process.exit(1);
}
}

export default dbConnect;
61 changes: 61 additions & 0 deletions Backend/controllers/todoController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import customError from "../utils/customError.js"
import TodoModel from "../models/TodoModel.js";

export const getTodos = async (req, res, next) => {
try {
const todos = await TodoModel.find({}).sort({ createdAt: 1 });
return res.status(200).json({
success: true,
message: (todos.length > 0) ? "All Todos Fetched !" : "No Todos present !",
todos: (todos.length > 0) ? todos : null
})
} catch (error) {
next(error);
}
}

export const createTodo = async (req, res, next) => {
try {
const { todo } = req.body;
const createdTodo = await TodoModel.create({ todo });
return res.status(200).json({
success: true,
message: "Todo Created Successfully!",
todo: createdTodo
})
} catch (error) {
next(error);
}
}

export const editTodo = async (req, res, next) => {
try {
const { id } = req.params;
console.log("The todo : ", req.body);
const updatedTodo = await TodoModel.findByIdAndUpdate(id, req.body, { new: true });
return res.status(200).json({
success: true,
message: "Todo Updated Successfully!",
todo: updatedTodo
})
} catch (error) {
next(error);
}
}

export const deleteTodo = async (req, res, next) => {
try {
const { id } = req.params;
const deletedTodo = await TodoModel.findByIdAndDelete(id);

if (!deletedTodo) return customError(404, "Todo Not Found!");

return res.status(200).json({
success: true,
message: "Todo Deleted Successfully!",
todo: deletedTodo
})
} catch (error) {
next(error);
}
}
42 changes: 42 additions & 0 deletions Backend/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import express from 'express'
import { config } from 'dotenv'
config();
import cors from "cors"
import dbConnect from './config/dbConnect.js';
import TodoRouter from './routes/todoRoutes.js'


const app = express();
const PORT = process.env.PORT || 4000;

// middlewares
app.use(cors({
origin: true,
credentials: true
}))
app.use(express.json());

// routes
app.use('/api/todo', TodoRouter);


// server
dbConnect().then(() => {
app.listen(PORT, (err) => {
if (err) throw err;
console.log(`Server running at PORT : ${PORT}`);
})
}).catch((error) => {
console.log("Error! Cannot start server : ", error);
})

// custom error middleware
app.use((err, req, res, next) => {
const errorStatus = err.status || 500;
const errorMessage = err.message || 'Internal Server Error'

return res.status(errorStatus).json({
success: false,
message: errorMessage
})
})
15 changes: 15 additions & 0 deletions Backend/models/TodoModel.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import mongoose from "mongoose";

const todoSchema = new mongoose.Schema({
todo: {
type: String,
required: true,
},
completed: {
type: Boolean,
default: false
}
}, { timestamps: true });

const TodoModel = mongoose.model('Todos', todoSchema);
export default TodoModel
16 changes: 16 additions & 0 deletions Backend/node_modules/.bin/mime

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

17 changes: 17 additions & 0 deletions Backend/node_modules/.bin/mime.cmd

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

28 changes: 28 additions & 0 deletions Backend/node_modules/.bin/mime.ps1

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

Loading