fix session end bug
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import type { Job } from 'bullmq';
|
import type { Job } from 'bullmq';
|
||||||
|
|
||||||
import { getTime, toISOString } from '@mixan/common';
|
import { getTime } from '@mixan/common';
|
||||||
import { createEvent, getEvents } from '@mixan/db';
|
import { createEvent, getEvents } from '@mixan/db';
|
||||||
import type { EventsQueuePayloadCreateSessionEnd } from '@mixan/queue/src/queues';
|
import type { EventsQueuePayloadCreateSessionEnd } from '@mixan/queue/src/queues';
|
||||||
|
|
||||||
@@ -43,7 +43,6 @@ export async function createSessionEnd(
|
|||||||
return acc + event.duration;
|
return acc + event.duration;
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
let lastScreenView = events.find((event) => event.name === 'screen_view');
|
|
||||||
const sessionStart = events.find((event) => event.name === 'session_start');
|
const sessionStart = events.find((event) => event.name === 'session_start');
|
||||||
const lastEvent = events[0];
|
const lastEvent = events[0];
|
||||||
const screenViews = events.filter((event) => event.name === 'screen_view');
|
const screenViews = events.filter((event) => event.name === 'screen_view');
|
||||||
@@ -52,31 +51,19 @@ export async function createSessionEnd(
|
|||||||
throw new Error('Failed to find a session_start');
|
throw new Error('Failed to find a session_start');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lastScreenView && lastEvent) {
|
if (!lastEvent) {
|
||||||
lastScreenView = lastEvent;
|
throw new Error('No last event found');
|
||||||
job.log(
|
|
||||||
`No screen_view found, using last event ${
|
|
||||||
lastEvent.name
|
|
||||||
} (${lastEvent.createdAt.toISOString()})`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lastScreenView) {
|
|
||||||
job.log(
|
|
||||||
'No screen_view found, creating session_end event with session_start path'
|
|
||||||
);
|
|
||||||
throw new Error('No screen_view found');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return createEvent({
|
return createEvent({
|
||||||
...sessionStart,
|
...sessionStart,
|
||||||
properties: {
|
properties: {
|
||||||
...sessionStart.properties,
|
...sessionStart.properties,
|
||||||
_bounce: screenViews.length === 1,
|
_bounce: screenViews.length <= 1,
|
||||||
},
|
},
|
||||||
name: 'session_end',
|
name: 'session_end',
|
||||||
duration: sessionDuration,
|
duration: sessionDuration,
|
||||||
path: lastScreenView?.path ?? sessionStart.path,
|
path: lastEvent.path,
|
||||||
createdAt: new Date(getTime(lastScreenView.createdAt) + 100),
|
createdAt: new Date(getTime(lastEvent?.createdAt) + 100),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user