Код ревью контроллера

Помогите правильно реализовать контроллер.
Вот примерная структура проекта:
введите сюда описание изображения
Слышал что запросы к бд в контроллере писать не стоит. Тогда где их лучше разместить?
А еще можно ли улучшить запросы?
Вот кусок кода

class TaskController {
async createTask(req, res) {
    try {
        const { name, description, priority, status, deadline } = req.body
        const task = await Task.create({ name, description, priority, status, deadline })
        await UserTask.create({ userId: req.user.id, taskId: task.id })
        return res.status(201).json(task);
    } catch (e) {
        console.log(e)
        return res.status(400).json(e)
    }
}

async getTasks(req, res) {
    try {
        const startDate = req.query.startDate;
        const endDate = req.query.endDate;
        const tasks = await sequelize.query(
            `SELECT tasks.*, GROUP_CONCAT(users.firstName) AS 'usersName'
            FROM users
            INNER JOIN usertasks ON usertasks.userId = users.id 
            INNER JOIN tasks ON usertasks.taskId = tasks.id AND tasks.deadline BETWEEN '${startDate}' AND '${endDate}'
            WHERE usertasks.taskId IN (SELECT usertasks.taskId FROM usertasks INNER JOIN users ON users.id = usertasks.userId WHERE users.id = ${req.user.id})
            GROUP BY tasks.id`, {
            type: QueryTypes.SELECT,
        })
        return res.status(200).json(tasks);
    } catch (e) {
        console.log(e)
    }
}

async deleteTask(req, res) {
    try {
        const task = await Task.findOne({
            include: {
                model: User,
                where: {
                    id: req.user.id
                },
                attributes: [],
            },
            where: {
                id: req.query.id
            }
        })
        await task.destroy()
        return res.json({ message: 'Task was deleted' });
    } catch (e) {
        console.log(e)
    }
}

async updateTask(req, res) {
    try {
        const { id, priority, status } = req.body
        const task = await Task.findOne({
            attributes: {
                include: [
                    [
                        sequelize.literal(`(
                            SELECT GROUP_CONCAT(users.firstName)
                            FROM users
                            INNER JOIN usertasks ON usertasks.userId=users.id 
                            INNER JOIN tasks ON usertasks.taskId=tasks.id AND tasks.id=${id}
                            WHERE usertasks.taskId IN (SELECT usertasks.taskId FROM usertasks INNER JOIN users ON users.id=usertasks.userId WHERE users.id=${req.user.id})
                        )`),
                        'usersName'
                    ]
                ]
            },
            where: { id: id },
        })
        await task.update({ 
            priority: priority, 
            status: status, 
        })
        await task.save()
        return res.json(task);
    } catch (e) {
        console.log(e)
        return res.status(400).json(e)
    }
}

async searchTasks(req, res) {
    try {
        const searchName = req.query.search;
        const tasks = await sequelize.query(
            `SELECT tasks.*, GROUP_CONCAT(users.firstName) AS 'usersName'
            FROM users
            INNER JOIN usertasks ON usertasks.userId = users.id 
            INNER JOIN tasks ON usertasks.taskId = tasks.id AND (tasks.name LIKE '%${searchName}%' OR tasks.description LIKE '%${searchName}%' OR tasks.deadline LIKE '%${searchName}%')
            WHERE usertasks.taskId IN (SELECT usertasks.taskId FROM usertasks INNER JOIN users ON users.id = usertasks.userId WHERE users.id = ${req.user.id})
            GROUP BY tasks.id
            ORDER BY tasks.deadline DESC
            LIMIT 10 `, {
            type: QueryTypes.SELECT,
        })
        return res.json(tasks);
    } catch (e) {
        console.log(e)
        return res.status(400).json({ message: 'Search error' })
    }
}

async getCounts(req, res) {
    try {
        const counts = await sequelize.query(
            `SELECT
                month(deadline) AS 'month',
                count(if(status='in progress', 1, NULL)) AS 'inProgressCounts',
                count(if(status='closed', 1, NULL)) AS 'closedCounts',
                count(if(status='frozen', 1, NULL)) AS 'frozenCounts'
            FROM tasks, usertasks 
            WHERE tasks.id=usertasks.taskId AND usertasks.userId=${req.user.id}
            GROUP BY month
            ORDER BY month ASC`, {
            type: QueryTypes.SELECT,
        })
        return res.json(counts);
    } catch (e) {
        console.log(e)
    }
}}

Ответы (0 шт):