create-or-update-stats

This commit is contained in:
jimmylee 2020-11-16 23:53:59 -08:00
parent e7e8520eb0
commit bb01d4afd6

View File

@ -0,0 +1,74 @@
import { runQuery } from "~/node_common/data/utilities";
export default async (date, data) => {
return await runQuery({
label: "CREATE_OR_UPDATE_STATS",
queryFn: async (DB) => {
const query = await DB.select("*").from("stats").where({ created_at: date }).first();
if (!query || query.error) {
return null;
}
if (query.id) {
let updates = {...query.data};
if (data.deals) {
updates.deals = updates.deals + data.deals;
}
if (data.users) {
updates.users = updates.users + data.users;
}
if (data.slates) {
updates.slates = updates.slates + data.slates;
}
if (data.objects) {
updates.objects = updates.objects + data.objects;
}
if (data.subscribeUser) {
updates.subscribeUsers = updates.subscribeUsers + data.subscribeUser;
}
if (data.subscribeSlate) {
updates.subscribeSlates = updates.subscribeSlates + data.subscribeSlate;
}
const update = await DB.from("stats").where("id", query.id).update({ data: update }).returning("*");
if (!update || update.error) {
return null;
}
const updateIndex = update ? update.pop() : null;
return updateIndex;
}
const insert = await DB.insert({ created_at: date, data: {
deals: 0,
users: 0,
slates: 0,
objects: 0,
subscribeUsers: 0,
subscribeSlates: 0,
...data
} }).into("stats").returning("*");
const index = insert ? insert.pop() : null;
if (!index) {
return null;
}
return JSON.parse(JSON.stringify(index));
},
errorFn: async (e) => {
return {
error: true,
decorator: "CREATE_OR_UPDATE_STATS",
};
},
});
};