forked from pinks/eris
main #1
|
@ -5,6 +5,7 @@ import { JsonSchema, jsonType } from "t_rest/server";
|
||||||
import { db } from "./db.ts";
|
import { db } from "./db.ts";
|
||||||
import { generationStore } from "./generationStore.ts";
|
import { generationStore } from "./generationStore.ts";
|
||||||
import { kvMemoize } from "./kvMemoize.ts";
|
import { kvMemoize } from "./kvMemoize.ts";
|
||||||
|
import { sortBy } from "std/collections/sort_by.ts";
|
||||||
|
|
||||||
export const userStatsSchema = {
|
export const userStatsSchema = {
|
||||||
type: "object",
|
type: "object",
|
||||||
|
@ -59,7 +60,7 @@ export const getUserStats = kvMemoize(
|
||||||
let stepCount = 0;
|
let stepCount = 0;
|
||||||
let pixelCount = 0;
|
let pixelCount = 0;
|
||||||
let pixelStepCount = 0;
|
let pixelStepCount = 0;
|
||||||
const tagCountMap: Record<string, number> = {};
|
const tagCountMap = new Map<string, number>();
|
||||||
|
|
||||||
info(`Calculating user stats for ${userId}`);
|
info(`Calculating user stats for ${userId}`);
|
||||||
|
|
||||||
|
@ -77,7 +78,7 @@ export const getUserStats = kvMemoize(
|
||||||
// split on punctuation and newlines
|
// split on punctuation and newlines
|
||||||
.split(/[,;.]\s+|\n/)
|
.split(/[,;.]\s+|\n/)
|
||||||
// remove `:weight` syntax
|
// remove `:weight` syntax
|
||||||
.map((tag) => tag.replace(/:[\d\.]+/g, " "))
|
.map((tag) => tag.replace(/:[\d\.]+/g, ""))
|
||||||
// remove `(tag)` and `[tag]` syntax
|
// remove `(tag)` and `[tag]` syntax
|
||||||
.map((tag) => tag.replace(/[()[\]]/g, " "))
|
.map((tag) => tag.replace(/[()[\]]/g, " "))
|
||||||
// collapse multiple whitespace to one
|
// collapse multiple whitespace to one
|
||||||
|
@ -92,17 +93,25 @@ export const getUserStats = kvMemoize(
|
||||||
[];
|
[];
|
||||||
|
|
||||||
for (const tag of tags) {
|
for (const tag of tags) {
|
||||||
tagCountMap[tag] = (tagCountMap[tag] ?? 0) + 1;
|
const count = tagCountMap.get(tag) ?? 0;
|
||||||
|
tagCountMap.set(tag, count + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const tagCountObj = Object.fromEntries(
|
||||||
|
sortBy(
|
||||||
|
Array.from(tagCountMap.entries()),
|
||||||
|
([_tag, count]) => -count,
|
||||||
|
).filter(([_tag, count]) => count >= 3),
|
||||||
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
userId,
|
userId,
|
||||||
imageCount,
|
imageCount,
|
||||||
stepCount,
|
stepCount,
|
||||||
pixelCount,
|
pixelCount,
|
||||||
pixelStepCount,
|
pixelStepCount,
|
||||||
tagCountMap,
|
tagCountMap: tagCountObj,
|
||||||
timestamp: Date.now(),
|
timestamp: Date.now(),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
|
@ -106,6 +106,7 @@
|
||||||
"https://deno.land/std@0.202.0/collections/deep_merge.ts": "9db788ba56cb05b65c77166b789e58e125dff159b7f41bf4d19dc1cba19ecb8b",
|
"https://deno.land/std@0.202.0/collections/deep_merge.ts": "9db788ba56cb05b65c77166b789e58e125dff159b7f41bf4d19dc1cba19ecb8b",
|
||||||
"https://deno.land/std@0.202.0/collections/distinct_by.ts": "3afe11d81eafb30c7c9dbf568d94357f3d88153292c00671b72cd695deae6602",
|
"https://deno.land/std@0.202.0/collections/distinct_by.ts": "3afe11d81eafb30c7c9dbf568d94357f3d88153292c00671b72cd695deae6602",
|
||||||
"https://deno.land/std@0.202.0/collections/max_by.ts": "9d5940986aac51b2e4feaebef9cd8bf6e1eceeee5edcf3303e334b737f99520d",
|
"https://deno.land/std@0.202.0/collections/max_by.ts": "9d5940986aac51b2e4feaebef9cd8bf6e1eceeee5edcf3303e334b737f99520d",
|
||||||
|
"https://deno.land/std@0.202.0/collections/sort_by.ts": "1207755af756a5da04bebff39146c93cbe54f7870a5d67cf6922e871d96a01d5",
|
||||||
"https://deno.land/std@0.202.0/encoding/base64.ts": "144ae6234c1fbe5b68666c711dc15b1e9ee2aef6d42b3b4345bf9a6c91d70d0d",
|
"https://deno.land/std@0.202.0/encoding/base64.ts": "144ae6234c1fbe5b68666c711dc15b1e9ee2aef6d42b3b4345bf9a6c91d70d0d",
|
||||||
"https://deno.land/std@0.202.0/flags/mod.ts": "0948466fc437f017f00c0b972a422b3dc3317a790bcf326429d23182977eaf9f",
|
"https://deno.land/std@0.202.0/flags/mod.ts": "0948466fc437f017f00c0b972a422b3dc3317a790bcf326429d23182977eaf9f",
|
||||||
"https://deno.land/std@0.202.0/fmt/bytes.ts": "f29cf69e0791d375f9f5d94ae1f0641e5a03b975f32ddf86d70f70fdf37e7b6a",
|
"https://deno.land/std@0.202.0/fmt/bytes.ts": "f29cf69e0791d375f9f5d94ae1f0641e5a03b975f32ddf86d70f70fdf37e7b6a",
|
||||||
|
|
Loading…
Reference in New Issue