Switch calendar events to isArchived model
This commit is contained in:
@@ -400,6 +400,10 @@ async function getDashboard(auth: AuthContext | null) {
|
||||
end: (e.endsAt ?? e.startsAt).toISOString(),
|
||||
contact: e.contact?.name ?? "",
|
||||
note: e.note ?? "",
|
||||
isArchived: Boolean(e.isArchived),
|
||||
createdAt: e.createdAt.toISOString(),
|
||||
archiveNote: e.archiveNote ?? "",
|
||||
archivedAt: e.archivedAt?.toISOString() ?? "",
|
||||
}));
|
||||
|
||||
const deals = dealsRaw.map((d) => ({
|
||||
@@ -471,7 +475,8 @@ async function createCalendarEvent(auth: AuthContext | null, input: {
|
||||
end?: string;
|
||||
contact?: string;
|
||||
note?: string;
|
||||
status?: string;
|
||||
archived?: boolean;
|
||||
archiveNote?: string;
|
||||
}) {
|
||||
const ctx = requireAuth(auth);
|
||||
|
||||
@@ -488,15 +493,22 @@ async function createCalendarEvent(auth: AuthContext | null, input: {
|
||||
: null;
|
||||
|
||||
const created = await prisma.calendarEvent.create({
|
||||
data: {
|
||||
teamId: ctx.teamId,
|
||||
contactId: contact?.id ?? null,
|
||||
title,
|
||||
startsAt: start,
|
||||
endsAt: end && !Number.isNaN(end.getTime()) ? end : null,
|
||||
note: (input?.note ?? "").trim() || null,
|
||||
status: (input?.status ?? "").trim() || null,
|
||||
},
|
||||
data: (() => {
|
||||
const archived = Boolean(input?.archived);
|
||||
const note = (input?.note ?? "").trim() || null;
|
||||
const archiveNote = (input?.archiveNote ?? "").trim() || note;
|
||||
return {
|
||||
teamId: ctx.teamId,
|
||||
contactId: contact?.id ?? null,
|
||||
title,
|
||||
startsAt: start,
|
||||
endsAt: end && !Number.isNaN(end.getTime()) ? end : null,
|
||||
note,
|
||||
isArchived: archived,
|
||||
archiveNote: archived ? archiveNote : null,
|
||||
archivedAt: archived ? new Date() : null,
|
||||
};
|
||||
})(),
|
||||
include: { contact: { select: { name: true } } },
|
||||
});
|
||||
|
||||
@@ -507,6 +519,46 @@ async function createCalendarEvent(auth: AuthContext | null, input: {
|
||||
end: (created.endsAt ?? created.startsAt).toISOString(),
|
||||
contact: created.contact?.name ?? "",
|
||||
note: created.note ?? "",
|
||||
isArchived: Boolean(created.isArchived),
|
||||
createdAt: created.createdAt.toISOString(),
|
||||
archiveNote: created.archiveNote ?? "",
|
||||
archivedAt: created.archivedAt?.toISOString() ?? "",
|
||||
};
|
||||
}
|
||||
|
||||
async function archiveCalendarEvent(auth: AuthContext | null, input: { id: string; archiveNote?: string }) {
|
||||
const ctx = requireAuth(auth);
|
||||
const id = String(input?.id ?? "").trim();
|
||||
const archiveNote = String(input?.archiveNote ?? "").trim();
|
||||
if (!id) throw new Error("id is required");
|
||||
|
||||
const existing = await prisma.calendarEvent.findFirst({
|
||||
where: { id, teamId: ctx.teamId },
|
||||
select: { id: true },
|
||||
});
|
||||
if (!existing) throw new Error("event not found");
|
||||
|
||||
const updated = await prisma.calendarEvent.update({
|
||||
where: { id },
|
||||
data: {
|
||||
isArchived: true,
|
||||
archiveNote: archiveNote || null,
|
||||
archivedAt: new Date(),
|
||||
},
|
||||
include: { contact: { select: { name: true } } },
|
||||
});
|
||||
|
||||
return {
|
||||
id: updated.id,
|
||||
title: updated.title,
|
||||
start: updated.startsAt.toISOString(),
|
||||
end: (updated.endsAt ?? updated.startsAt).toISOString(),
|
||||
contact: updated.contact?.name ?? "",
|
||||
note: updated.note ?? "",
|
||||
isArchived: Boolean(updated.isArchived),
|
||||
createdAt: updated.createdAt.toISOString(),
|
||||
archiveNote: updated.archiveNote ?? "",
|
||||
archivedAt: updated.archivedAt?.toISOString() ?? "",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -790,6 +842,7 @@ export const crmGraphqlSchema = buildSchema(`
|
||||
logPilotNote(text: String!): MutationResult!
|
||||
toggleContactPin(contact: String!, text: String!): PinToggleResult!
|
||||
createCalendarEvent(input: CreateCalendarEventInput!): CalendarEvent!
|
||||
archiveCalendarEvent(input: ArchiveCalendarEventInput!): CalendarEvent!
|
||||
createCommunication(input: CreateCommunicationInput!): MutationWithIdResult!
|
||||
updateCommunicationTranscript(id: ID!, transcript: [String!]!): MutationWithIdResult!
|
||||
updateFeedDecision(id: ID!, decision: String!, decisionNote: String): MutationWithIdResult!
|
||||
@@ -815,7 +868,13 @@ export const crmGraphqlSchema = buildSchema(`
|
||||
end: String
|
||||
contact: String
|
||||
note: String
|
||||
status: String
|
||||
archived: Boolean
|
||||
archiveNote: String
|
||||
}
|
||||
|
||||
input ArchiveCalendarEventInput {
|
||||
id: ID!
|
||||
archiveNote: String
|
||||
}
|
||||
|
||||
input CreateCommunicationInput {
|
||||
@@ -933,6 +992,10 @@ export const crmGraphqlSchema = buildSchema(`
|
||||
end: String!
|
||||
contact: String!
|
||||
note: String!
|
||||
isArchived: Boolean!
|
||||
createdAt: String!
|
||||
archiveNote: String!
|
||||
archivedAt: String!
|
||||
}
|
||||
|
||||
type Deal {
|
||||
@@ -1030,9 +1093,12 @@ export const crmGraphqlRoot = {
|
||||
toggleContactPin: async (args: { contact: string; text: string }, context: GraphQLContext) =>
|
||||
toggleContactPin(context.auth, args.contact, args.text),
|
||||
|
||||
createCalendarEvent: async (args: { input: { title: string; start: string; end?: string; contact?: string; note?: string; status?: string } }, context: GraphQLContext) =>
|
||||
createCalendarEvent: async (args: { input: { title: string; start: string; end?: string; contact?: string; note?: string; archived?: boolean; archiveNote?: string } }, context: GraphQLContext) =>
|
||||
createCalendarEvent(context.auth, args.input),
|
||||
|
||||
archiveCalendarEvent: async (args: { input: { id: string; archiveNote?: string } }, context: GraphQLContext) =>
|
||||
archiveCalendarEvent(context.auth, args.input),
|
||||
|
||||
createCommunication: async (
|
||||
args: {
|
||||
input: {
|
||||
|
||||
Reference in New Issue
Block a user