From c9ad7424e203c4e97719ebaf4e0f8c5ac78dd40a Mon Sep 17 00:00:00 2001
From: Claeb101 <calebarulandu@gmail.com>
Date: Sat, 4 Mar 2023 20:43:54 -0500
Subject: [PATCH] session lib funcs

---
 prisma/schema.prisma | 22 ++++++++++++-
 src/session.js       | 76 ++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 94 insertions(+), 4 deletions(-)

diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 2233aaa..a9e829a 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -14,8 +14,28 @@ model Session {
   id String @id @default(auto()) @map("_id") @db.ObjectId
 
   startedAt DateTime @default(now())
+  transferedAt DateTime?
   endedAt DateTime?
 
   callId String @unique
-  phoneNumber String @unique
+  callerPhone String @unique
+  receiverPhone String? @unique
+  messages Message[]
+}
+
+enum Role {
+  USER
+  BOT
+  REP
+}
+
+model Message {
+  id String @id @default(auto()) @map("_id") @db.ObjectId
+
+  createdAt DateTime @default(now())
+  role Role
+  content String
+
+  session Session @relation(fields: [sessionId], references: [id])
+  sessionId String @db.ObjectId
 }
diff --git a/src/session.js b/src/session.js
index 8fb8d4e..8867cd5 100644
--- a/src/session.js
+++ b/src/session.js
@@ -1,5 +1,75 @@
-import { db } from "./db";
+import { Role } from "@prisma/client";
+import { db } from "./db.js";
 
-const session = () => {
-  db.session.create({})
+export const createSession = async (callId, callerPhone) => {
+  return await db.session.create({
+    data: {
+      callId: callId,
+      callerPhone: callerPhone
+    }
+  })
 }
+
+export const findSessionByCallId = async (callId) => {
+  return await db.session.findUnique({
+    where: {
+      callId: callId
+    }
+  })
+}
+
+export const transferSession = async (callId, receiverPhone) => {
+  return await db.session.update({
+    where: {
+      callId: callId
+    },
+    data: {
+      transferedAt: new Date(),
+      receiverPhone: receiverPhone
+    }
+  })
+}
+
+export const endSession = async (callId) => {
+  return await db.session.update({
+    where: {
+      callId: callId
+    },
+    data: {
+      endedAt: new Date()
+    }
+  })
+}
+
+export const addMessage = async (callId, role, content) => {
+  const session = await findSessionByCallId(callId)
+  return await db.message.create({
+    data: {
+      sessionId: session.id,
+      role: role,
+      content: content
+    }
+  })
+}
+
+export const getMessages = async (callId) => {
+  return await db.message.findMany({
+    where: {
+      session: {
+        callId: callId
+      }
+    },
+    orderBy: [
+      {
+        createdAt: 'asc'
+      }
+    ]
+  })
+}
+
+// const main = async () => {
+//   // await addMessage("ofijse", Role.USER, "wefoij")
+//   console.log(await getMessages("ofijse"))
+// }
+
+// main()