fix: keep user activity analytics resilient
This commit is contained in:
@@ -115,11 +115,9 @@ async function userQscoreAnalytics(userId: string) {
|
||||
}
|
||||
|
||||
async function userActivityAnalytics(userId: string) {
|
||||
const [events, activeMissions, actions] = await Promise.all([
|
||||
db.select().from(growEvents).where(eq(growEvents.userId, userId)).orderBy(desc(growEvents.occurredAt)).limit(100),
|
||||
listActiveMissionsPg(userId),
|
||||
listMissionActions(userId, { openOnly: false }),
|
||||
]);
|
||||
const events = await db.select().from(growEvents).where(eq(growEvents.userId, userId)).orderBy(desc(growEvents.occurredAt)).limit(100);
|
||||
const activeMissions = await listActiveMissionsPg(userId).catch(() => []);
|
||||
const actions = await listMissionActions(userId, { openOnly: false }).catch(() => []);
|
||||
|
||||
return {
|
||||
kind: "user-activity",
|
||||
|
||||
+22
-1
@@ -1,8 +1,13 @@
|
||||
import { Hono } from "hono";
|
||||
import { createClient, type Client } from "rivetkit/client";
|
||||
import { desc, eq } from "drizzle-orm";
|
||||
import { config } from "../config.js";
|
||||
import { requireUser, type AuthContext } from "../auth/clerk.js";
|
||||
import type { Registry } from "../actors/registry.js";
|
||||
import { db } from "../db/client.js";
|
||||
import { growEvents } from "../db/schema.js";
|
||||
import { listActiveMissionsPg } from "../grow/persistence.js";
|
||||
import { listMissionActions } from "../missions/actions.js";
|
||||
|
||||
let _client: Client<Registry> | null = null;
|
||||
function getClient(): Client<Registry> {
|
||||
@@ -24,7 +29,23 @@ export function analyticsRoutes() {
|
||||
|
||||
app.get("/user/activity", async (c) => {
|
||||
const userId = c.get("userId");
|
||||
return c.json(await getClient().analyticsActor.getOrCreate(["user", userId]).getUserActivity({ userId }));
|
||||
const events = await db
|
||||
.select()
|
||||
.from(growEvents)
|
||||
.where(eq(growEvents.userId, userId))
|
||||
.orderBy(desc(growEvents.occurredAt))
|
||||
.limit(100);
|
||||
const activeMissions = await listActiveMissionsPg(userId).catch(() => []);
|
||||
const actions = await listMissionActions(userId, { openOnly: false }).catch(() => []);
|
||||
|
||||
return c.json({
|
||||
kind: "user-activity",
|
||||
userId,
|
||||
generatedAt: new Date().toISOString(),
|
||||
events,
|
||||
activeMissions: activeMissions.map((item) => item.mission),
|
||||
actions,
|
||||
});
|
||||
});
|
||||
|
||||
return app;
|
||||
|
||||
Reference in New Issue
Block a user