slate/node_common/serializers.js
2020-11-25 01:47:29 -08:00

331 lines
7.9 KiB
JavaScript

import DB from "~/node_common/database";
export const user = (entity) => {
return {
type: "USER",
id: entity.id,
username: entity.username,
slates: entity.slates ? entity.slates : [],
data: {
name: entity.data.name ? entity.data.name : "",
photo: entity.data.photo ? entity.data.photo : "",
body: entity.data.body ? entity.data.body : "",
},
};
};
export const slate = (entity) => {
return {
type: "SLATE",
id: entity.id,
slatename: entity.slatename,
data: {
ownerId: entity.data.ownerId,
name: entity.data.name ? entity.data.name : "",
body: entity.data.body ? entity.data.body : "",
objects: entity.data.objects,
layouts: entity.data.layouts,
},
};
};
export const doSlates = async ({ serializedUsers, slates }) => {
const userToSlatesMap = {};
const sanitized = slates.map((d) => {
let o = null;
if (userToSlatesMap[d.data.ownerId]) {
userToSlatesMap[d.data.ownerId].push(d);
}
if (!userToSlatesMap[d.data.ownerId]) {
userToSlatesMap[d.data.ownerId] = [d];
}
if (d.data.ownerId) {
o = serializedUsers.find((e) => d.data.ownerId === e.id);
}
return { ...d, owner: o };
});
return {
serializedSlates: JSON.parse(JSON.stringify(sanitized)),
userToSlatesMap,
};
};
export const doTrusted = async ({ users, trusted, serializedUsersMap, serializedSlatesMap }) => {
trusted.forEach((each) => {
if (each.target_user_id && !serializedUsersMap[each.target_user_id]) {
users.push(each.target_user_id);
}
});
let userEntities = [];
try {
if (users.length) {
userEntities = await DB.select("id", "username", "data")
.from("users")
.whereIn("id", users);
}
} catch (e) {
return {
serializedTrusted: trusted,
serializedUsersMap,
serializedSlatesMap,
};
}
const sanitized = trusted.map((data) => {
let u = null;
let o = null;
if (data.target_user_id) {
if (serializedUsersMap[data.target_user_id]) {
u = serializedUsersMap[data.target_user_id];
} else {
u = userEntities.find((e) => data.target_user_id === e.id);
u = user(u);
serializedUsersMap[data.target_user_id] = u;
}
}
if (data.owner_user_id) {
if (serializedUsersMap[data.owner_user_id]) {
o = serializedUsersMap[data.owner_user_id];
} else {
o = userEntities.find((e) => data.owner_user_id === e.id);
o = user(o);
serializedUsersMap[data.owner_user_id] = o;
}
}
return { ...data, user: u, owner: o };
});
return {
serializedTrusted: JSON.parse(JSON.stringify(sanitized)),
serializedUsersMap,
serializedSlatesMap,
};
};
export const doPendingTrusted = async ({
users,
pendingTrusted,
serializedUsersMap,
serializedSlatesMap,
}) => {
pendingTrusted.forEach((each) => {
if (each.owner_user_id && !serializedUsersMap[each.owner_user_id]) {
users.push(each.owner_user_id);
}
});
let userEntities = [];
try {
if (users.length) {
userEntities = await DB.select("id", "username", "data")
.from("users")
.whereIn("id", users);
}
} catch (e) {
return {
serializedPendingTrusted: pendingTrusted,
serializedUsersMap,
serializedSlatesMap,
};
}
const sanitized = pendingTrusted.map((data) => {
let u = null;
let o = null;
if (data.target_user_id) {
if (serializedUsersMap[data.target_user_id]) {
u = serializedUsersMap[data.target_user_id];
} else {
u = userEntities.find((e) => data.target_user_id === e.id);
u = user(u);
serializedUsersMap[data.target_user_id] = u;
}
}
if (data.owner_user_id) {
if (serializedUsersMap[data.owner_user_id]) {
o = serializedUsersMap[data.owner_user_id];
} else {
o = userEntities.find((e) => data.owner_user_id === e.id);
o = user(o);
serializedUsersMap[data.owner_user_id] = o;
}
}
return { ...data, user: u, owner: o };
});
return {
serializedPendingTrusted: JSON.parse(JSON.stringify(sanitized)),
serializedUsersMap,
serializedSlatesMap,
};
};
export const doSubscriptions = async ({
users,
slates,
subscriptions,
serializedUsersMap,
serializedSlatesMap,
}) => {
subscriptions.forEach((each) => {
if (each.target_user_id && !serializedUsersMap[each.target_user_id]) {
users.push(each.target_user_id);
}
if (each.target_slate_id && !serializedSlatesMap[each.target_slate_id]) {
slates.push(each.target_slate_id);
}
});
let userEntities = [];
try {
if (users.length) {
userEntities = await DB.select("id", "username", "data")
.from("users")
.whereIn("id", users);
}
} catch (e) {
return {
serializedSubscriptions: subscriptions,
serializedUsersMap,
serializedSlatesMap,
};
}
let slateEntities = [];
try {
if (slates.length) {
slateEntities = await DB.select("id", "slatename", "data")
.from("slates")
.whereIn("id", slates);
}
} catch (e) {
return {
serializedSubscriptions: subscriptions,
serializedUsersMap,
serializedSlatesMap,
};
}
const sanitized = subscriptions.map((data) => {
let u = null;
let o = null;
let s = null;
if (data.target_user_id) {
if (serializedUsersMap[data.target_user_id]) {
u = serializedUsersMap[data.target_user_id];
} else {
u = userEntities.find((e) => data.target_user_id === e.id);
u = user(u);
serializedUsersMap[data.target_user_id] = u;
}
}
if (data.owner_user_id) {
if (serializedUsersMap[data.owner_user_id]) {
o = serializedUsersMap[data.owner_user_id];
} else {
o = userEntities.find((e) => data.owner_user_id === e.id);
o = user(o);
serializedUsersMap[data.owner_user_id] = o;
}
}
if (data.target_slate_id) {
if (serializedSlatesMap[data.target_slate_id]) {
s = serializedSlatesMap[data.target_slate_id];
} else {
s = slateEntities.find((e) => data.target_slate_id === e.id);
s = slate(s);
serializedSlatesMap[data.target_slate_id] = s;
}
}
return { ...data, user: u, owner: o, slate: s };
});
return {
serializedSubscriptions: JSON.parse(JSON.stringify(sanitized)),
serializedUsersMap,
serializedSlatesMap,
};
};
export const doSubscribers = async ({
users,
slates,
subscribers,
serializedUsersMap,
serializedSlatesMap,
}) => {
subscribers.forEach((each) => {
if (each.owner_user_id && !serializedUsersMap[each.owner_user_id]) {
users.push(each.owner_user_id);
}
});
let userEntities = [];
try {
if (users.length) {
userEntities = await DB.select("id", "username", "data")
.from("users")
.whereIn("id", users);
}
} catch (e) {
return {
serializedSubscribers: subscribers,
serializedUsersMap,
serializedSlatesMap,
};
}
const sanitized = subscribers.map((data) => {
let u = null;
let o = null;
let s = null;
if (data.owner_user_id) {
if (serializedUsersMap[data.owner_user_id]) {
o = serializedUsersMap[data.owner_user_id];
} else {
o = userEntities.find((e) => data.owner_user_id === e.id);
o = user(o);
serializedUsersMap[data.owner_user_id] = o;
}
}
if (data.target_user_id) {
if (serializedUsersMap[data.target_user_id]) {
u = serializedUsersMap[data.target_user_id];
} else {
u = userEntities.find((e) => data.target_user_id === e.id);
u = user(u);
serializedUsersMap[data.target_user_id] = u;
}
}
return { ...data, user: u, owner: o, slate: s };
});
return {
serializedSubscribers: JSON.parse(JSON.stringify(sanitized)),
serializedUsersMap,
serializedSlatesMap,
};
};