ملف TypeScript المحدد
استيراد {الأنبوب} من "fp-ts/function"؛
استيراد \* كـ RA من "fp-ts/ReadonlyArray"؛
استيراد \* كـ S من "fp-ts/string"؛

نوع الاستيراد { WatchDataAnalytics } من "#pkg/app/types/watch\_data\_analytics"؛
استيراد { getPrismaClient } من "#pkg/libs/prisma"؛

استيراد { buildTimestampFilter } من "./\_build\_timestamp\_filter";
استيراد {calcMinMaxAverage} من "./\_calc\_min\_max\_average";
استيراد {formatGroupItemCount} من "./\_format\_group\_item\_count";
استيراد { msToS } من "./\_ms\_to\_s"؛

اكتب الخيارات = {
 معرف الفيديو للقراءة فقط: سلسلة؛
 للقراءة فقط: سلسلة؛
 للقراءة فقط منذ؟: رقم | غير معرف؛
 للقراءة فقط حتى ؟: رقم | غير معرف؛
};

/\*\* @طَرد \*/
تصدير const AnalysisWatchData = async ({ videoId، gid، منذ، حتى }: الخيارات): Promise => {
 const db = getPrismaClient();

 const timestamp = buildTimestampFilter({ منذ، حتى });

 const ChapterMenuClickEventLogs = انتظار db.v2ChapterMenuClickEventLog.groupBy({
 بواسطة: ["معرف الفصل"]،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 \_count: { \_all: true }، // eslint-disable-line @typescript-eslint/naming-convention
 });
 const ChapterMenuClickCount = formatGroupItemCount({
 المجموعات: ChapterMenuClickEventLogs،
 مجمعة حسب: "معرف الفصل"،
 });

 const ChapterRecommendationButtonClickEventLogs = انتظار db.v2ChapterRecommendationButtonClickEventLog.groupBy({
 بواسطة: ["معرف الفصل"]،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 \_count: { \_all: true }، // eslint-disable-line @typescript-eslint/naming-convention
 });
 الفصل الثابتRecommendationButtonClickCount = formatGroupItemCount({
 المجموعات: ChapterRecommendationButtonClickEventLogs،
 مجمعة حسب: "معرف الفصل"،
 });

 const contactFormSubmitCount = انتظار db.v2ContactFormSubmitEventLog.count({
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 });

 const dockMenuClickEventLogs = انتظار db.v2DockMenuClickEventLog.groupBy({
 بواسطة: ["الهدف"]،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 \_count: { \_all: true }، // eslint-disable-line @typescript-eslint/naming-convention
 });
 const dockMenuClickCount = formatGroupItemCount({
 المجموعات: قفص الاتهامMenuClickEventLogs،
 مجمعة حسب: "الهدف"،
 });

 const documentPageViewEventLogs = انتظار db.v2DocumentPageViewEventLog.groupBy({
 بواسطة: ["الصفحة"]،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 \_count: { \_all: true }، // eslint-disable-line @typescript-eslint/naming-convention
 });
 const documentPageView = formatGroupItemCount({
 المجموعات: documentPageViewEventLogs،
 مجمعة حسب: "صفحة"،
 });

 const leaveCount = انتظار db.v2LeaveEventLog.count({
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 });

 const MeetingReservationButtonClickEventLogs = انتظار db.v2MeetingReservationButtonClickEventLog.groupBy({
 بواسطة: ["معرف الموظفين"]،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 \_count: { \_all: true }، // eslint-disable-line @typescript-eslint/naming-convention
 });
 اجتماع ثابتReservationButtonClickCount = formatGroupItemCount({
 المجموعات: MeetingReservationButtonClickEventLogs،
 مجمعة حسب: "معرف الموظفين"،
 });

 const MeetingStaffInfoButtonClickEventLogs = انتظار db.v2MeetingStaffInfoButtonClickEventLog.groupBy({
 بواسطة: ["معرف الموظفين"]،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 \_count: { \_all: true }، // eslint-disable-line @typescript-eslint/naming-convention
 });
 const MeetingStaffInfoButtonClickCount = formatGroupItemCount({
 المجموعات: MeetingStaffInfoButtonClickEventLogs،
 مجمعة حسب: "معرف الموظفين"،
 });

 const messageSendCount = انتظار db.v2MessageSendEventLog.count({
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 });

 const modeEnterEventLogs = انتظار db.v2ModeEnterEventLog.groupBy({
 بواسطة: ["الوضع"]،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 \_count: { \_all: true }، // eslint-disable-line @typescript-eslint/naming-convention
 });
 وضع constEnterCount = formatGroupItemCount({
 المجموعات: modeEnterEventLogs،
 مجمعة حسب: "الوضع"،
 });

 const pageViewCount = انتظار db.v2PageViewEventLog.count({
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 });

 const messageSendEventLogs = انتظار db.v2MessageSendEventLog.findMany({
 حدد: {النص: صحيح، الرد على: صحيح}،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 });
 const talkAnswersCount: WatchDataAnalytics["talkAnswersCount"] = {};
 لـ (const messageSendEventLog of messageSendEventLogs) {
 إذا استمر (messageSendEventLog.replyingTo == null) ؛
 const countMap = (talkAnswersCount[messageSendEventLog.replyingTo] ??= {}); // eslint-disable-linefunctional/immutable-data
 const count = (countMap[messageSendEventLog.body] ??= 0); // eslint-disable-linefunctional/immutable-data
 countMap[messageSendEventLog.body] = count + 1; // eslint-disable-linefunctional/immutable-data
 }

 const UniqueUsers = انتظار db.v2PageViewEventLog.findMany({
 حدد: {المعرف: صحيح}،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 مميز: ["uid"]،
 });
 const UniqueUserCount = UniqueUsers.length;

 const videoEndCount = انتظار db.v2VideoEndEventLog.count({
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 });

 const videoStartCount = انتظار db.v2VideoStartEventLog.count({
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 });

 const videoPlayWhileEventLogs = انتظار db.v2VideoPlayWhileEventLog.findMany({
 حدد: {معرف الجلسة: صحيح، المدة: صحيح}،
 أين: {
 معرف فيديو,
 جيد,
 الطابع الزمني,
 },
 });
 const watchDurations = الأنابيب (
 فيديوPlayWhileEventLogs,
 RA.map(({ معرف الجلسة }) => معرف الجلسة)،
 RA.uniq (S.Eq)،
 RA.map((معرف الجلسة) =>
 يضخ(
 فيديوPlayWhileEventLogs,
 RA.filter((e) => e.sessionId === sessionId)،
 RA.map(({ المدة }) => المدة)،
 RA.reduce(0, (a, b) => a + b),
 msToS
 )
 )
 );

 يعود {
 الفصلMenuClickCount,
 الفصلالتوصيةزرClickCount,
 جهة الاتصالFormSubmitCount,
 قفص الاتهامMenuClickCount,
 عرض صفحة الوثيقة,
 عدد الإجازة,
 الاجتماعحجززرالنقرالعد,
 اجتماعStaffInfoButtonClickCount,
 رسالةسيندكونت,
 وضعEnterCount,
 عدد الصفحات,
 توك أنسويرسكونت,
 عدد المستخدمين الفريد,
 فيديوEndCount,
 فيديوستارتكونت,
 watchDuration: calcMinMaxAverage(watchDurations)،
 };
};
{"source": "ewof/sharegpt-instruct-unfiltered-deduped", "kind": "human", "evolved_from": null}