This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
outline/server/presenters.js

84 lines
1.9 KiB
JavaScript
Raw Normal View History

2016-05-26 06:17:57 +00:00
import _orderBy from 'lodash.orderby';
2016-06-20 07:18:03 +00:00
import { Document, Atlas } from './models';
2016-05-20 03:46:34 +00:00
2016-04-29 05:25:37 +00:00
export function presentUser(user) {
2016-05-20 06:53:07 +00:00
return new Promise(async (resolve, reject) => {
const data = {
2016-05-20 06:53:07 +00:00
id: user.id,
name: user.name,
username: user.username,
2016-05-27 06:36:49 +00:00
avatarUrl: user.slackData.image_192,
};
resolve(data);
2016-05-20 06:53:07 +00:00
});
2016-04-29 05:25:37 +00:00
}
export function presentTeam(team) {
2016-05-20 06:53:07 +00:00
return new Promise(async (resolve, reject) => {
resolve({
id: team.id,
name: team.name,
});
});
2016-04-29 05:25:37 +00:00
}
2016-05-07 18:52:08 +00:00
2016-05-20 06:53:07 +00:00
export function presentAtlas(atlas, includeRecentDocuments=false) {
return new Promise(async (resolve, reject) => {
const data = {
id: atlas.id,
name: atlas.name,
description: atlas.description,
type: atlas.type,
}
if (includeRecentDocuments) {
const documents = await Document.findAll({
where: {
atlasId: atlas.id,
},
limit: 10,
2016-05-20 07:33:52 +00:00
order: [
['updatedAt', 'DESC'],
],
2016-05-20 06:53:07 +00:00
});
let recentDocuments = [];
await Promise.all(documents.map(async (document) => {
recentDocuments.push(await presentDocument(document, true));
2016-05-20 06:53:07 +00:00
}))
2016-05-26 04:32:59 +00:00
data.recentDocuments = _orderBy(recentDocuments, ['updatedAt'], ['desc']);
2016-05-20 06:53:07 +00:00
}
resolve(data);
});
2016-05-20 03:46:34 +00:00
}
export async function presentDocument(document, includeAtlas=false) {
const data = {
id: document.id,
2016-05-26 05:38:45 +00:00
url: document.buildUrl(),
2016-05-26 05:47:31 +00:00
private: document.private,
2016-05-20 03:46:34 +00:00
title: document.title,
text: document.text,
2016-05-23 05:08:09 +00:00
html: document.html,
preview: document.preview,
private: document.private,
2016-05-20 03:46:34 +00:00
createdAt: document.createdAt,
updatedAt: document.updatedAt,
2016-06-20 07:18:03 +00:00
atlas: document.atlasId,
2016-05-20 03:46:34 +00:00
team: document.teamId,
}
if (includeAtlas) {
2016-06-20 07:18:03 +00:00
const atlas = await Atlas.findOne({ where: {
id: document.atlasId,
}});
2016-05-20 06:53:07 +00:00
data.atlas = await presentAtlas(atlas, false);
2016-05-20 03:46:34 +00:00
}
const user = await document.getUser();
data.user = await presentUser(user);
2016-05-20 03:46:34 +00:00
return data;
}