File size: 3,542 Bytes
8a6248c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
// import axios from 'axios';
import Task from '../models/task.model.js';
// import dotenv from 'dotenv';

export const createTask = async(req, res)=>{
    try{
        const {title, description, date, isCompleted} = req.body;
        const userId = req.userId;
        console.log("Received Date: ", date);

        const task = new Task({title,description,date, isCompleted, user: userId})
        await task.save();
        res.status(201).json(task);
    }catch(err){
        res.status(500).json({message: "Failed to create Task",err});
    }
}

export const getTasks = async(req, res)=>{
    try{
        const userId = req.userId;
        const {date} = req.query;
        console.log(date);
        
        const query = date? {date, user: userId} : {user: userId};// if date is provided filter tasks by date
        const tasks = await Task.find(query);// fetch task with the query
        res.status(200).json(tasks);
    }catch(err){
        res.status(500).json({message : "Failed to get tasks"});
    }
}

export const getTask = async(req, res)=>{
    try{
        const {id} = req.params;
        const userId = req.userId;
        const task = await Task.findOne({_id: id, user: userId});
        if(task){
            res.status(201).json(task);
        }else{
            res.status(404).json({message: 'Task not found'});
        }
    }catch(err){
        res.status(500).json({message: "Failed to fetch the task"});
    }
}

export const getTaskByDate = async(req, res)=>{
    try{
        const userId = req.userId;
        const {date} = req.params;
        const tasks = await Task.find({date : new Date(date), user: userId});
        res.status(200).json(tasks);
    }catch(err){
        res.status(500).json({message: "Failed to get task by date"}, err);
    }
}


export const getMonthlyTaskStats = async (req, res) => {
    try {
        const { year, month } = req.query;
        const userId = req.userId;
        const startDate = new Date(year, month - 1, 1);
        const endDate = new Date(year, month, 0);

        const tasks = await Task.find({ date: { $gte: startDate, $lte: endDate }, user: userId });
        const totalTasks = tasks.length;
        const completedTasks = tasks.filter(task => task.isCompleted).length;
        const remainingTasks = totalTasks - completedTasks;

        res.status(200).json({ totalTasks, completedTasks, remainingTasks });
    } catch (error) {
        res.status(500).json({ message: 'Failed to get task statistics', error });
    }
};

export const updateTask = async(req, res)=>{
    try{
        const {id} = req.params;
        const userId = req.userId;
        const {title, description, date, isCompleted} = req.body;
        const updatedTask = await Task.findOneAndUpdate(
            { _id: id, user: userId }, // Ensure the task belongs to the user
            { title, description, date, isCompleted },
            { new: true }
        );
        if (updatedTask) {
            res.status(200).json(updatedTask);
        } else {
            res.status(404).json({ message: 'Task not found' });
        }
    }catch(err){
        res.status(500).json({message: "Failed to update the task", err});
    }
}

export const deleteTask = async(req, res)=>{
    try{
        const userId = req.userId;
        const {id} = req.params;
        await Task.findOneAndDelete({_id: id, user: userId});
        res.status(200).json({message : "Deleted successfully"});
    }catch(err){
        res.status(500).json({message: "Failed to delete the task"});
    }
}