Skip to content

Commit e6c92e1

Browse files
author
Joao Kronos
committed
feat: adicionar função para reenviar link da ficha de anamnese via WhatsApp
1 parent fa5f970 commit e6c92e1

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

kronos/src/app/actions/bookings.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,87 @@ export async function updateBooking(data: {
802802
}
803803
}
804804

805+
/**
806+
* Resend anamnesis link to client via WhatsApp
807+
*/
808+
export async function resendAnamnesisLink(bookingId: string) {
809+
try {
810+
const { userId: clerkUserId } = await auth()
811+
if (!clerkUserId) {
812+
return { error: 'Não autorizado' }
813+
}
814+
815+
const user = await prisma.user.findUnique({
816+
where: { clerkId: clerkUserId },
817+
include: { artist: true, memberships: true }
818+
})
819+
820+
if (!user?.artist) {
821+
return { error: 'Apenas artistas podem reenviar ficha de anamnese' }
822+
}
823+
824+
const workspaceId = user.memberships[0]?.workspaceId
825+
826+
if (!workspaceId) {
827+
return { error: 'Workspace não encontrado' }
828+
}
829+
830+
// Verify ownership
831+
const booking = await prisma.booking.findUnique({
832+
where: { id: bookingId },
833+
include: {
834+
client: true,
835+
artist: { include: { user: true } }
836+
}
837+
})
838+
839+
if (!booking) {
840+
return { error: 'Agendamento não encontrado' }
841+
}
842+
843+
if (booking.artistId !== user.artist.id && user.role !== 'ADMIN') {
844+
return { error: 'Você não tem permissão para este agendamento' }
845+
}
846+
847+
const workspace = await prisma.workspace.findUnique({
848+
where: { id: workspaceId },
849+
select: { name: true }
850+
})
851+
852+
if (!workspace) {
853+
return { error: 'Workspace inválido' }
854+
}
855+
856+
// Get booking details for the message
857+
const rawDate = new Date(booking.scheduledFor)
858+
const dateStr = rawDate.toLocaleDateString('pt-BR', {
859+
day: 'numeric',
860+
month: 'long',
861+
year: 'numeric',
862+
hour: '2-digit',
863+
minute: '2-digit'
864+
})
865+
866+
const messageText = `⚡ *KRONØS OS - Link da Ficha de Anamnese* ⚡\n\nOlá, *${booking.client.name || 'Cliente'}*!\n\nEste é um lembrete para preencher sua Ficha de Anamnese antes da sua sessão no *${workspace.name}*.\n\n👤 *Artista:* ${booking.artist.user.name || 'Artista'}\n📅 *Data:* ${dateStr}\n\n⚠️ *IMPORTANTE:* O preenchimento da sua Ficha de Anamnese é obrigatório antes do início da sessão.\nAcesse o link seguro para respondê-la digitalmente:\n👉 ${process.env.NEXTAUTH_URL}/fichas/${booking.id}\n\nNos vemos em breve!\n_${workspace.name}_`
867+
868+
// Send WhatsApp message
869+
const clientPhone = booking.client.phone
870+
if (clientPhone) {
871+
const { sendWhatsAppMessage } = await import('@/lib/whatsapp')
872+
await sendWhatsAppMessage({
873+
phone: clientPhone,
874+
text: messageText
875+
})
876+
}
877+
878+
return { success: true, message: 'Link da ficha de anamnese reenviado com sucesso' }
879+
880+
} catch (error) {
881+
console.error('Error resending anamnesis link:', error)
882+
return { error: 'Erro ao reenviar link da ficha de anamnese' }
883+
}
884+
}
885+
805886
/**
806887
* Delete booking
807888
*/

0 commit comments

Comments
 (0)