From 0fea45c9f7251c9197e3dfcab2d5cdf73c7219b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Sun, 21 Jul 2024 23:42:30 +0200 Subject: [PATCH] rename IServiceCreateEventPayload --- apps/api/src/controllers/live.controller.ts | 6 ++--- .../event-conversions-list.tsx | 6 ++--- .../events/event-list/event-details.tsx | 4 +-- .../events/event-list/event-edit.tsx | 6 ++--- .../events/event-list/event-list-item.tsx | 7 ++--- .../events/event-list/event-list.tsx | 6 ++--- .../realtime-live-events/live-events.tsx | 9 +++---- .../verify/onboarding-verify-listener.tsx | 10 +++---- .../[projectId]/verify/onboarding-verify.tsx | 7 ++--- apps/worker/src/jobs/events.incoming-event.ts | 6 ++--- packages/db/src/buffers/event-buffer.ts | 27 +++++++++---------- packages/db/src/services/event.service.ts | 22 +++++++-------- packages/queue/src/queues.ts | 6 ++--- 13 files changed, 53 insertions(+), 69 deletions(-) diff --git a/apps/api/src/controllers/live.controller.ts b/apps/api/src/controllers/live.controller.ts index 915fe7e9..6847bfe7 100644 --- a/apps/api/src/controllers/live.controller.ts +++ b/apps/api/src/controllers/live.controller.ts @@ -4,7 +4,7 @@ import superjson from 'superjson'; import type * as WebSocket from 'ws'; import { getSuperJson } from '@openpanel/common'; -import type { IServiceCreateEventPayload } from '@openpanel/db'; +import type { IServiceEvent } from '@openpanel/db'; import { getEvents, getLiveVisitors, @@ -81,7 +81,7 @@ export function wsVisitors( const message = (channel: string, message: string) => { if (channel === 'event:received') { - const event = getSuperJson(message); + const event = getSuperJson(message); if (event?.projectId === params.projectId) { getLiveVisitors(params.projectId).then((count) => { connection.socket.send(String(count)); @@ -142,7 +142,7 @@ export async function wsProjectEvents( getRedisSub().subscribe(subscribeToEvent); const message = async (channel: string, message: string) => { - const event = getSuperJson(message); + const event = getSuperJson(message); if (event?.projectId === params.projectId) { const profile = await getProfileById(event.profileId, event.projectId); connection.socket.send( diff --git a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-conversions-list/event-conversions-list.tsx b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-conversions-list/event-conversions-list.tsx index b31b365e..34ec078a 100644 --- a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-conversions-list/event-conversions-list.tsx +++ b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-conversions-list/event-conversions-list.tsx @@ -4,7 +4,7 @@ import { Fragment } from 'react'; import { Widget, WidgetHead } from '@/components/widget'; import { isSameDay } from 'date-fns'; -import type { IServiceCreateEventPayload } from '@openpanel/db'; +import type { IServiceEvent } from '@openpanel/db'; import { EventListItem } from '../event-list/event-list-item'; @@ -14,7 +14,7 @@ function showDateHeader(a: Date, b?: Date) { } interface EventListProps { - data: IServiceCreateEventPayload[]; + data: IServiceEvent[]; } export function EventConversionsList({ data }: EventListProps) { return ( @@ -28,7 +28,7 @@ export function EventConversionsList({ data }: EventListProps) { {showDateHeader(item.createdAt, list[index - 1]?.createdAt) && (
-
+
{item.createdAt.toLocaleDateString()}
diff --git a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-details.tsx b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-details.tsx index 22ef20c5..2d541d66 100644 --- a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-details.tsx +++ b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-details.tsx @@ -16,12 +16,12 @@ import { } from '@/hooks/useEventQueryFilters'; import { round } from 'mathjs'; -import type { IServiceCreateEventPayload } from '@openpanel/db'; +import type { IServiceEvent } from '@openpanel/db'; import { EventEdit } from './event-edit'; interface Props { - event: IServiceCreateEventPayload; + event: IServiceEvent; open: boolean; setOpen: Dispatch>; } diff --git a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-edit.tsx b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-edit.tsx index d20ffe94..1d687e2a 100644 --- a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-edit.tsx +++ b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-edit.tsx @@ -15,7 +15,7 @@ import { cn } from '@/utils/cn'; import { useRouter } from 'next/navigation'; import { toast } from 'sonner'; -import type { IServiceCreateEventPayload } from '@openpanel/db'; +import type { IServiceEvent } from '@openpanel/db'; import { EventIconColors, @@ -24,7 +24,7 @@ import { } from './event-icon'; interface Props { - event: IServiceCreateEventPayload; + event: IServiceEvent; open: boolean; setOpen: Dispatch>; } @@ -106,7 +106,7 @@ export function EventEdit({ event, open, setOpen }: Props) { setIcon(name); }} className={cn( - 'bg-def-200 inline-flex h-8 w-8 flex-shrink-0 cursor-pointer items-center justify-center rounded-md transition-all', + 'inline-flex h-8 w-8 flex-shrink-0 cursor-pointer items-center justify-center rounded-md bg-def-200 transition-all', name === selectedIcon ? 'scale-110 ring-1 ring-black' : '[&_svg]:opacity-50' diff --git a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-list-item.tsx b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-list-item.tsx index 08110cec..05262267 100644 --- a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-list-item.tsx +++ b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-list-item.tsx @@ -9,15 +9,12 @@ import { cn } from '@/utils/cn'; import { getProfileName } from '@/utils/getters'; import Link from 'next/link'; -import type { - IServiceCreateEventPayload, - IServiceEventMinimal, -} from '@openpanel/db'; +import type { IServiceEvent, IServiceEventMinimal } from '@openpanel/db'; import { EventDetails } from './event-details'; import { EventIcon } from './event-icon'; -type EventListItemProps = IServiceEventMinimal | IServiceCreateEventPayload; +type EventListItemProps = IServiceEventMinimal | IServiceEvent; export function EventListItem(props: EventListItemProps) { const { organizationSlug, projectId } = useAppParams(); diff --git a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-list.tsx b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-list.tsx index 40693ba1..ffe879b2 100644 --- a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-list.tsx +++ b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/events/event-list/event-list.tsx @@ -9,7 +9,7 @@ import { useEventQueryFilters } from '@/hooks/useEventQueryFilters'; import { isSameDay } from 'date-fns'; import { GanttChartIcon } from 'lucide-react'; -import type { IServiceCreateEventPayload } from '@openpanel/db'; +import type { IServiceEvent } from '@openpanel/db'; import { EventListItem } from './event-list-item'; import EventListener from './event-listener'; @@ -20,7 +20,7 @@ function showDateHeader(a: Date, b?: Date) { } interface EventListProps { - data: IServiceCreateEventPayload[]; + data: IServiceEvent[]; count: number; } @@ -63,7 +63,7 @@ function EventList({ data, count }: EventListProps) {
{index === 0 ? :
}
-
+
{item.createdAt.toLocaleDateString()}
{index === 0 && ( diff --git a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/realtime/realtime-live-events/live-events.tsx b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/realtime/realtime-live-events/live-events.tsx index 8d7f5145..d4a63185 100644 --- a/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/realtime/realtime-live-events/live-events.tsx +++ b/apps/dashboard/src/app/(app)/[organizationSlug]/[projectId]/realtime/realtime-live-events/live-events.tsx @@ -5,20 +5,17 @@ import { EventListItem } from '@/app/(app)/[organizationSlug]/[projectId]/events import useWS from '@/hooks/useWS'; import { AnimatePresence, motion } from 'framer-motion'; -import type { - IServiceCreateEventPayload, - IServiceEventMinimal, -} from '@openpanel/db'; +import type { IServiceEvent, IServiceEventMinimal } from '@openpanel/db'; type Props = { - events: (IServiceEventMinimal | IServiceCreateEventPayload)[]; + events: (IServiceEventMinimal | IServiceEvent)[]; projectId: string; limit: number; }; const RealtimeLiveEvents = ({ events, projectId, limit }: Props) => { const [state, setState] = useState(events ?? []); - useWS( + useWS( `/live/events/${projectId}`, (event) => { setState((p) => [event, ...p].slice(0, limit)); diff --git a/apps/dashboard/src/app/(onboarding)/onboarding/[projectId]/verify/onboarding-verify-listener.tsx b/apps/dashboard/src/app/(onboarding)/onboarding/[projectId]/verify/onboarding-verify-listener.tsx index 39c8b160..f96f16e8 100644 --- a/apps/dashboard/src/app/(onboarding)/onboarding/[projectId]/verify/onboarding-verify-listener.tsx +++ b/apps/dashboard/src/app/(onboarding)/onboarding/[projectId]/verify/onboarding-verify-listener.tsx @@ -10,22 +10,20 @@ import { CheckCircle2Icon, CheckIcon, Loader2 } from 'lucide-react'; import type { IServiceClient, - IServiceCreateEventPayload, + IServiceEvent, IServiceProject, } from '@openpanel/db'; type Props = { project: IServiceProject; client: IServiceClient | null; - events: IServiceCreateEventPayload[]; + events: IServiceEvent[]; onVerified: (verified: boolean) => void; }; const VerifyListener = ({ client, events: _events, onVerified }: Props) => { - const [events, setEvents] = useState( - _events ?? [] - ); - useWS( + const [events, setEvents] = useState(_events ?? []); + useWS( `/live/events/${client?.projectId}?type=received`, (data) => { setEvents((prev) => [...prev, data]); diff --git a/apps/dashboard/src/app/(onboarding)/onboarding/[projectId]/verify/onboarding-verify.tsx b/apps/dashboard/src/app/(onboarding)/onboarding/[projectId]/verify/onboarding-verify.tsx index ca1fe9dd..10a628d8 100644 --- a/apps/dashboard/src/app/(onboarding)/onboarding/[projectId]/verify/onboarding-verify.tsx +++ b/apps/dashboard/src/app/(onboarding)/onboarding/[projectId]/verify/onboarding-verify.tsx @@ -6,10 +6,7 @@ import { LinkButton } from '@/components/ui/button'; import { cn } from '@/utils/cn'; import Link from 'next/link'; -import type { - IServiceCreateEventPayload, - IServiceProjectWithClients, -} from '@openpanel/db'; +import type { IServiceEvent, IServiceProjectWithClients } from '@openpanel/db'; import OnboardingLayout, { OnboardingDescription, @@ -18,7 +15,7 @@ import VerifyListener from './onboarding-verify-listener'; type Props = { project: IServiceProjectWithClients; - events: IServiceCreateEventPayload[]; + events: IServiceEvent[]; }; const Verify = ({ project, events }: Props) => { diff --git a/apps/worker/src/jobs/events.incoming-event.ts b/apps/worker/src/jobs/events.incoming-event.ts index b3d6561c..1ee4a99d 100644 --- a/apps/worker/src/jobs/events.incoming-event.ts +++ b/apps/worker/src/jobs/events.incoming-event.ts @@ -10,7 +10,7 @@ import { parsePath, toISOString, } from '@openpanel/common'; -import type { IServiceCreateEventPayload } from '@openpanel/db'; +import type { IServiceCreateEventPayload, IServiceEvent } from '@openpanel/db'; import { createEvent } from '@openpanel/db'; import { getLastScreenViewFromProfileId } from '@openpanel/db/src/services/event.service'; import { eventsQueue, findJobByPrefix, sessionsQueue } from '@openpanel/queue'; @@ -70,7 +70,7 @@ export async function incomingEvent(job: Job) { projectId, }); - const payload: Omit = { + const payload: Omit = { name: body.name, deviceId: event?.deviceId || '', sessionId: event?.sessionId || '', @@ -146,7 +146,7 @@ export async function incomingEvent(job: Job) { ); } - const payload: Omit = { + const payload: IServiceCreateEventPayload = { name: body.name, deviceId: sessionEndPayload.deviceId, sessionId: sessionEndPayload.sessionId, diff --git a/packages/db/src/buffers/event-buffer.ts b/packages/db/src/buffers/event-buffer.ts index 6fbf0995..9241f3d5 100644 --- a/packages/db/src/buffers/event-buffer.ts +++ b/packages/db/src/buffers/event-buffer.ts @@ -8,7 +8,7 @@ import { ch, TABLE_NAMES } from '../clickhouse-client'; import { transformEvent } from '../services/event.service'; import type { IClickhouseEvent, - IServiceCreateEventPayload, + IServiceEvent, } from '../services/event.service'; import type { Find, @@ -187,22 +187,19 @@ export class EventBuffer extends RedisBuffer { ]; }; - public findMany: FindMany = - async (callback) => { - return this.getQueue(-1) - .then((queue) => { - return queue - .filter(callback) - .map((item) => transformEvent(item.event)); - }) - .catch(() => { - return []; - }); - }; - - public find: Find = async ( + public findMany: FindMany = async ( callback ) => { + return this.getQueue(-1) + .then((queue) => { + return queue.filter(callback).map((item) => transformEvent(item.event)); + }) + .catch(() => { + return []; + }); + }; + + public find: Find = async (callback) => { return this.getQueue(-1) .then((queue) => { const match = queue.find(callback); diff --git a/packages/db/src/services/event.service.ts b/packages/db/src/services/event.service.ts index eff8c437..f7477a73 100644 --- a/packages/db/src/services/event.service.ts +++ b/packages/db/src/services/event.service.ts @@ -62,9 +62,7 @@ export interface IClickhouseEvent { meta?: EventMeta; } -export function transformEvent( - event: IClickhouseEvent -): IServiceCreateEventPayload { +export function transformEvent(event: IClickhouseEvent): IServiceEvent { return { id: event.id, name: event.name, @@ -98,7 +96,12 @@ export function transformEvent( }; } -export interface IServiceCreateEventPayload { +export type IServiceCreateEventPayload = Omit< + IServiceEvent, + 'id' | 'importedAt' | 'profile' | 'meta' +>; + +export interface IServiceEvent { id: string; name: string; deviceId: string; @@ -169,7 +172,7 @@ function maskString(str: string, mask = '*') { } export function transformMinimalEvent( - event: IServiceCreateEventPayload + event: IServiceEvent ): IServiceEventMinimal { return { id: event.id, @@ -201,7 +204,7 @@ export async function getLiveVisitors(projectId: string) { export async function getEvents( sql: string, options: GetEventsOptions = {} -): Promise { +): Promise { const events = await chQuery(sql); if (options.profile) { const ids = events.map((e) => e.profile_id); @@ -230,12 +233,7 @@ export async function getEvents( return events.map(transformEvent); } -export async function createEvent( - payload: Omit< - IServiceCreateEventPayload, - 'id' | 'importedAt' | 'profile' | 'meta' - > -) { +export async function createEvent(payload: IServiceCreateEventPayload) { if (!payload.profileId) { payload.profileId = payload.deviceId; } diff --git a/packages/queue/src/queues.ts b/packages/queue/src/queues.ts index f6978288..2cb4cbf5 100644 --- a/packages/queue/src/queues.ts +++ b/packages/queue/src/queues.ts @@ -1,6 +1,6 @@ import { Queue } from 'bullmq'; -import type { IServiceCreateEventPayload } from '@openpanel/db'; +import type { IServiceEvent } from '@openpanel/db'; import { getRedisQueue } from '@openpanel/redis'; import type { PostEventPayload } from '@openpanel/sdk'; @@ -26,12 +26,12 @@ export interface EventsQueuePayloadIncomingEvent { } export interface EventsQueuePayloadCreateEvent { type: 'createEvent'; - payload: Omit; + payload: Omit; } export interface EventsQueuePayloadCreateSessionEnd { type: 'createSessionEnd'; payload: Pick< - IServiceCreateEventPayload, + IServiceEvent, 'deviceId' | 'sessionId' | 'profileId' | 'projectId' >; }