mirror of
https://github.com/filecoin-project/slate.git
synced 2024-11-26 13:45:30 +03:00
372 lines
9.4 KiB
JavaScript
372 lines
9.4 KiB
JavaScript
import DB from "~/node_common/database";
|
|
import * as Data from "~/node_common/data";
|
|
|
|
export const user = (entity) => {
|
|
return {
|
|
type: "USER",
|
|
id: entity.id,
|
|
username: entity.username,
|
|
slates: entity.slates ? entity.slates : [],
|
|
library: entity.library ? entity.library : [],
|
|
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,
|
|
public: entity.data.public,
|
|
},
|
|
};
|
|
};
|
|
|
|
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,
|
|
};
|
|
};
|
|
|
|
export const doActivity = async (fetchedActivity) => {
|
|
let activity = fetchedActivity;
|
|
let slateIds = [];
|
|
if (activity && activity.length) {
|
|
activity = activity.filter((item) => {
|
|
if (item.data.type === "SUBSCRIBED_CREATE_SLATE") {
|
|
slateIds.push(item.data.context.slate.id);
|
|
}
|
|
return (
|
|
item.data.type === "SUBSCRIBED_CREATE_SLATE" || item.data.type === "SUBSCRIBED_ADD_TO_SLATE"
|
|
);
|
|
});
|
|
}
|
|
|
|
let slates = [];
|
|
if (slateIds && slateIds.length) {
|
|
slates = await Data.getSlatesByIds({ ids: slateIds });
|
|
}
|
|
|
|
let slateTable = {};
|
|
for (let slate of slates || []) {
|
|
slateTable[slate.id] = slate;
|
|
}
|
|
|
|
for (let item of activity) {
|
|
if (item.data.type === "SUBSCRIBED_CREATE_SLATE") {
|
|
let slate = slateTable[item.data.context.slate.id];
|
|
if (slate?.data?.objects?.length) {
|
|
item.data.context.slate = slate;
|
|
}
|
|
}
|
|
}
|
|
//NOTE(martina): remove empty slates
|
|
activity = activity.filter((item) => {
|
|
if (item.data.type === "SUBSCRIBED_ADD_TO_SLATE") return true;
|
|
let slate = item.data.context.slate;
|
|
return slate?.data?.objects?.length;
|
|
});
|
|
|
|
return activity;
|
|
};
|