140 lines
3.7 KiB
JavaScript
140 lines
3.7 KiB
JavaScript
const { Task } = require('../../models');
|
|
|
|
class TaskRepository {
|
|
constructor() {
|
|
this.model = Task;
|
|
}
|
|
|
|
async findById(id, options = {}) {
|
|
return await this.model.findByPk(id, options);
|
|
}
|
|
|
|
async findByIdAndUser(id, userId, options = {}) {
|
|
const whereClause = { id, user_id: userId };
|
|
return await this.model.findOne({
|
|
where: whereClause,
|
|
...options,
|
|
});
|
|
}
|
|
|
|
async findByUid(uid, options = {}) {
|
|
return await this.model.findOne({
|
|
where: { uid },
|
|
...options,
|
|
});
|
|
}
|
|
|
|
async findRecurringChildren(recurringParentId, options = {}) {
|
|
const { where = {}, ...restOptions } = options;
|
|
return await this.model.findAll({
|
|
where: { recurring_parent_id: recurringParentId, ...where },
|
|
...restOptions,
|
|
});
|
|
}
|
|
|
|
async findAll(filters = {}, options = {}) {
|
|
const { where = {}, ...restOptions } = options;
|
|
return await this.model.findAll({
|
|
where: { ...where, ...filters },
|
|
...restOptions,
|
|
});
|
|
}
|
|
|
|
async findByUser(userId, filters = {}, options = {}) {
|
|
const { where = {}, ...restOptions } = options;
|
|
return await this.model.findAll({
|
|
where: { user_id: userId, ...where, ...filters },
|
|
...restOptions,
|
|
});
|
|
}
|
|
|
|
async create(taskData) {
|
|
return await this.model.create(taskData);
|
|
}
|
|
|
|
async update(id, userId, updates) {
|
|
const task = await this.findByIdAndUser(id, userId);
|
|
if (!task) {
|
|
return null;
|
|
}
|
|
await task.update(updates);
|
|
return task;
|
|
}
|
|
|
|
async delete(id, userId) {
|
|
const task = await this.findByIdAndUser(id, userId);
|
|
if (!task) {
|
|
return null;
|
|
}
|
|
await task.destroy();
|
|
return task;
|
|
}
|
|
|
|
async count(filters = {}, options = {}) {
|
|
const { where = {}, ...restOptions } = options;
|
|
return await this.model.count({
|
|
where: { ...where, ...filters },
|
|
...restOptions,
|
|
});
|
|
}
|
|
|
|
async bulkUpdate(updates, conditions) {
|
|
return await this.model.update(updates, conditions);
|
|
}
|
|
|
|
async findChildren(parentTaskId, userId, options = {}) {
|
|
const { where = {}, ...restOptions } = options;
|
|
return await this.model.findAll({
|
|
where: { parent_task_id: parentTaskId, user_id: userId, ...where },
|
|
...restOptions,
|
|
});
|
|
}
|
|
|
|
async findByUidOnly(uid, options = {}) {
|
|
return await this.model.findOne({
|
|
where: { uid },
|
|
attributes: options.attributes || ['uid'],
|
|
...options,
|
|
});
|
|
}
|
|
|
|
async clearRecurringParent(recurringParentId) {
|
|
return await this.model.update(
|
|
{ recurring_parent_id: null },
|
|
{ where: { recurring_parent_id: recurringParentId } }
|
|
);
|
|
}
|
|
|
|
async destroyMany(conditions) {
|
|
return await this.model.destroy(conditions);
|
|
}
|
|
|
|
async createMany(tasksData) {
|
|
return await Promise.all(
|
|
tasksData.map((taskData) => this.model.create(taskData))
|
|
);
|
|
}
|
|
|
|
async updateChildren(parentTaskId, userId, updates) {
|
|
return await this.model.update(updates, {
|
|
where: { parent_task_id: parentTaskId, user_id: userId },
|
|
});
|
|
}
|
|
|
|
async updateChildrenWithConditions(
|
|
parentTaskId,
|
|
userId,
|
|
updates,
|
|
extraWhere = {}
|
|
) {
|
|
return await this.model.update(updates, {
|
|
where: {
|
|
parent_task_id: parentTaskId,
|
|
user_id: userId,
|
|
...extraWhere,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = new TaskRepository();
|