98 lines
2.8 KiB
JavaScript
98 lines
2.8 KiB
JavaScript
'use strict';
|
|
|
|
const viewsRepository = require('./repository');
|
|
const { validateName } = require('./validation');
|
|
const { NotFoundError } = require('../../shared/errors');
|
|
|
|
class ViewsService {
|
|
async getAll(userId) {
|
|
return viewsRepository.findAllByUser(userId);
|
|
}
|
|
|
|
async getPinned(userId) {
|
|
return viewsRepository.findPinnedByUser(userId);
|
|
}
|
|
|
|
async getByUid(userId, uid) {
|
|
const view = await viewsRepository.findByUidAndUser(uid, userId);
|
|
if (!view) {
|
|
throw new NotFoundError('View not found');
|
|
}
|
|
return view;
|
|
}
|
|
|
|
async create(userId, data) {
|
|
const {
|
|
name,
|
|
search_query,
|
|
filters,
|
|
priority,
|
|
due,
|
|
defer,
|
|
tags,
|
|
extras,
|
|
recurring,
|
|
} = data;
|
|
|
|
const validatedName = validateName(name);
|
|
|
|
return viewsRepository.createForUser(userId, {
|
|
name: validatedName,
|
|
search_query: search_query || null,
|
|
filters: filters || [],
|
|
priority: priority || null,
|
|
due: due || null,
|
|
defer: defer || null,
|
|
tags: tags || [],
|
|
extras: extras || [],
|
|
recurring: recurring || null,
|
|
is_pinned: false,
|
|
});
|
|
}
|
|
|
|
async update(userId, uid, data) {
|
|
const view = await viewsRepository.findByUidAndUser(uid, userId);
|
|
if (!view) {
|
|
throw new NotFoundError('View not found');
|
|
}
|
|
|
|
const {
|
|
name,
|
|
search_query,
|
|
filters,
|
|
priority,
|
|
due,
|
|
defer,
|
|
tags,
|
|
extras,
|
|
recurring,
|
|
is_pinned,
|
|
} = data;
|
|
|
|
const updates = {};
|
|
if (name !== undefined) updates.name = name.trim();
|
|
if (search_query !== undefined) updates.search_query = search_query;
|
|
if (filters !== undefined) updates.filters = filters;
|
|
if (priority !== undefined) updates.priority = priority;
|
|
if (due !== undefined) updates.due = due;
|
|
if (defer !== undefined) updates.defer = defer;
|
|
if (tags !== undefined) updates.tags = tags;
|
|
if (extras !== undefined) updates.extras = extras;
|
|
if (recurring !== undefined) updates.recurring = recurring;
|
|
if (is_pinned !== undefined) updates.is_pinned = is_pinned;
|
|
|
|
await viewsRepository.update(view, updates);
|
|
return view;
|
|
}
|
|
|
|
async delete(userId, uid) {
|
|
const view = await viewsRepository.findByUidAndUser(uid, userId);
|
|
if (!view) {
|
|
throw new NotFoundError('View not found');
|
|
}
|
|
await viewsRepository.destroy(view);
|
|
return { message: 'View successfully deleted' };
|
|
}
|
|
}
|
|
|
|
module.exports = new ViewsService();
|