Persist call transcripts and source call audio from DB

This commit is contained in:
Ruslan Bakiev
2026-02-19 14:05:54 +07:00
parent 23a4deba37
commit ddfb558948
3 changed files with 50 additions and 2 deletions

View File

@@ -552,6 +552,29 @@ async function createCommunication(auth: AuthContext | null, input: {
return { ok: true, id: created.id };
}
async function updateCommunicationTranscript(auth: AuthContext | null, id: string, transcript: string[]) {
const ctx = requireAuth(auth);
const messageId = String(id ?? "").trim();
if (!messageId) throw new Error("id is required");
const lines = Array.isArray(transcript)
? transcript.map((line) => String(line ?? "").trim()).filter(Boolean)
: [];
const updated = await prisma.contactMessage.updateMany({
where: {
id: messageId,
contact: { teamId: ctx.teamId },
},
data: {
transcriptJson: lines,
},
});
if (!updated.count) throw new Error("communication not found");
return { ok: true, id: messageId };
}
async function updateFeedDecision(auth: AuthContext | null, id: string, decision: "accepted" | "rejected" | "pending", decisionNote?: string) {
const ctx = requireAuth(auth);
@@ -769,6 +792,7 @@ export const crmGraphqlSchema = buildSchema(`
toggleContactPin(contact: String!, text: String!): PinToggleResult!
createCalendarEvent(input: CreateCalendarEventInput!): CalendarEvent!
createCommunication(input: CreateCommunicationInput!): MutationWithIdResult!
updateCommunicationTranscript(id: ID!, transcript: [String!]!): MutationWithIdResult!
updateFeedDecision(id: ID!, decision: String!, decisionNote: String): MutationWithIdResult!
}
@@ -1027,6 +1051,11 @@ export const crmGraphqlRoot = {
context: GraphQLContext,
) => createCommunication(context.auth, args.input),
updateCommunicationTranscript: async (
args: { id: string; transcript: string[] },
context: GraphQLContext,
) => updateCommunicationTranscript(context.auth, args.id, args.transcript),
updateFeedDecision: async (
args: { id: string; decision: "accepted" | "rejected" | "pending"; decisionNote?: string },
context: GraphQLContext,