sdk changes

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-02-11 21:31:12 +01:00
parent 484a6b1d41
commit 447fa5896e
65 changed files with 9428 additions and 723 deletions

View File

@@ -1,5 +1,7 @@
/* eslint-disable */
import { Profile } from '@prisma/client';
export type IDBEvent = {
id: string;
name: string;
@@ -9,14 +11,6 @@ export type IDBEvent = {
created_at: string;
};
export type IDBProfile = {
id: string;
external_id?: string;
first_name?: string;
last_name?: string;
email?: string;
avatar?: string;
properties: Record<string, string>;
project_id: String;
created_at: string;
export type IDBProfile = Omit<Profile, 'properties'> & {
properties: Record<string, unknown>;
};

View File

@@ -1,9 +1,10 @@
import { omit } from 'ramda';
import { toDots } from '@mixan/common';
import { redisPub } from '@mixan/redis';
import { randomSplitName, toDots } from '@mixan/common';
import { redis, redisPub } from '@mixan/redis';
import { ch, chQuery, formatClickhouseDate } from '../clickhouse-client';
import { db } from '../prisma-client';
export interface IClickhouseEvent {
name: string;
@@ -12,6 +13,7 @@ export interface IClickhouseEvent {
path: string;
referrer: string;
referrer_name: string;
referrer_type: string;
duration: number;
properties: Record<string, string | number | boolean>;
created_at: string;
@@ -50,6 +52,7 @@ export function transformEvent(
path: event.path,
referrer: event.referrer,
referrerName: event.referrer_name,
referrerType: event.referrer_type,
};
}
@@ -77,6 +80,7 @@ export interface IServiceCreateEventPayload {
path: string;
referrer: string | undefined;
referrerName: string | undefined;
referrerType: string | undefined;
}
export function getEvents(sql: string) {
@@ -88,6 +92,41 @@ export function getEvents(sql: string) {
export async function createEvent(payload: IServiceCreateEventPayload) {
console.log(`create event ${payload.name} for ${payload.profileId}`);
if (payload.name === 'session_start') {
const profile = await db.profile.findUnique({
where: {
id: payload.profileId,
},
});
if (!profile) {
const { firstName, lastName } = randomSplitName();
await db.profile.create({
data: {
id: payload.profileId,
project_id: payload.projectId,
first_name: firstName,
last_name: lastName,
properties: {
country: payload.country ?? '',
city: payload.city ?? '',
region: payload.region ?? '',
os: payload.os ?? '',
os_version: payload.osVersion ?? '',
browser: payload.browser ?? '',
browser_version: payload.browserVersion ?? '',
device: payload.device ?? '',
brand: payload.brand ?? '',
model: payload.model ?? '',
referrer: payload.referrer ?? '',
referrer_name: payload.referrerName ?? '',
referrer_type: payload.referrerType ?? '',
},
},
});
}
}
if (payload.properties.hash === '') {
delete payload.properties.hash;
}
@@ -112,6 +151,7 @@ export async function createEvent(payload: IServiceCreateEventPayload) {
duration: payload.duration,
referrer: payload.referrer ?? '',
referrer_name: payload.referrerName ?? '',
referrer_type: payload.referrerType ?? '',
};
const res = await ch.insert({
@@ -121,6 +161,7 @@ export async function createEvent(payload: IServiceCreateEventPayload) {
});
redisPub.publish('event', JSON.stringify(transformEvent(event)));
redis.set(`live:event:${event.project_id}:${event.profile_id}`, '', 'EX', 10);
return {
...res,