-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtasks.js
More file actions
127 lines (103 loc) · 3.12 KB
/
Copy pathtasks.js
File metadata and controls
127 lines (103 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
const express = require('express');
const Task = require('../models/Task');
const auth = require('../middleware/auth');
const router = express.Router();
// Get all tasks for authenticated user with search and filter
router.get('/', auth, async (req, res) => {
try {
const { search, status, priority } = req.query;
const query = { user: req.user._id };
// Search filter
if (search) {
query.$or = [
{ title: { $regex: search, $options: 'i' } },
{ description: { $regex: search, $options: 'i' } }
];
}
// Status filter
if (status) {
query.status = status;
}
// Priority filter
if (priority) {
query.priority = priority;
}
const tasks = await Task.find(query).sort({ createdAt: -1 });
res.json(tasks);
} catch (error) {
res.status(500).json({ message: 'Server error', error: error.message });
}
});
// Get single task
router.get('/:id', auth, async (req, res) => {
try {
const task = await Task.findOne({ _id: req.params.id, user: req.user._id });
if (!task) {
return res.status(404).json({ message: 'Task not found' });
}
res.json(task);
} catch (error) {
res.status(500).json({ message: 'Server error', error: error.message });
}
});
// Create new task
router.post('/', auth, async (req, res) => {
try {
const { title, description, priority, dueDate } = req.body;
const task = new Task({
title,
description,
priority,
dueDate,
user: req.user._id
});
await task.save();
res.status(201).json(task);
} catch (error) {
res.status(500).json({ message: 'Server error', error: error.message });
}
});
// Update task
router.put('/:id', auth, async (req, res) => {
try {
const { title, description, status, priority, dueDate } = req.body;
const task = await Task.findOneAndUpdate(
{ _id: req.params.id, user: req.user._id },
{ title, description, status, priority, dueDate },
{ new: true, runValidators: true }
);
if (!task) {
return res.status(404).json({ message: 'Task not found' });
}
res.json(task);
} catch (error) {
res.status(500).json({ message: 'Server error', error: error.message });
}
});
// Delete task
router.delete('/:id', auth, async (req, res) => {
try {
const task = await Task.findOneAndDelete({ _id: req.params.id, user: req.user._id });
if (!task) {
return res.status(404).json({ message: 'Task not found' });
}
res.json({ message: 'Task deleted successfully' });
} catch (error) {
res.status(500).json({ message: 'Server error', error: error.message });
}
});
// Toggle task completion status
router.patch('/:id/toggle', auth, async (req, res) => {
try {
const task = await Task.findOne({ _id: req.params.id, user: req.user._id });
if (!task) {
return res.status(404).json({ message: 'Task not found' });
}
task.status = task.status === 'pending' ? 'completed' : 'pending';
await task.save();
res.json(task);
} catch (error) {
res.status(500).json({ message: 'Server error', error: error.message });
}
});
module.exports = router;