@opengis/admin
Version:
This project Softpro Admin
54 lines (40 loc) • 1.6 kB
JavaScript
// for example only
/*
const res = await dataInsert({
pg,
table: 'crm.notifications',
data: {
subject: 'notif title',
body: 'notif body',
link: 'http://localhost:3000/api/notification',
addressee_id: userId,
author_id: userId,
},
});
*/
import { getSelectVal } from '@opengis/fastify-table/utils.js';
const maxLimit = 100;
export default async function userNotifications({
pg, query = {}, session = {},
}) {
const time = Date.now();
const { uid } = session.passport?.user || {};
if (!uid) {
return { message: 'access restricted', status: 403 };
}
const limit = Math.min(maxLimit, +(query.limit || 5));
const offset = query.page && query.page > 0 ? (query.page - 1) * limit : 0;
const q = `select notification_id as id, subject, body, cdate,
author_id, read, link, entity_id, (select avatar from admin.users where uid=a.author_id limit 1) as avatar from crm.notifications a where addressee_id=$1 order by cdate desc limit $2 offset $3`;
if (query.sql) return q;
const { rows = [] } = pg.pk?.['crm.notifications'] ? await pg.query(q, [uid, limit, offset]) : {};
const values = rows.map((el) => el.author_id)
?.filter((el, idx, arr) => el && arr.indexOf(el) === idx);
if (values?.length) {
const vals = await getSelectVal({ name: 'core.user_mentioned', values });
rows.forEach((row) => {
Object.assign(row, { author: vals?.[row.author_id] });
});
}
return { time: Date.now() - time, total: rows?.length, rows };
}