mirror of
https://github.com/marcogll/gloria_app.git
synced 2026-03-15 13:24:44 +00:00
Sprint 3 - Crisis y Agenda (100%): - Implement SMTP email service with nodemailer - Create email templates (reschedule, daily agenda, course inquiry) - Add appointment reschedule functionality with modal - Add Google Calendar updateEvent function - Create scheduled job for daily agenda email at 10 PM - Add manual trigger endpoint for testing Sprint 4 - Pagos y Roles (100%): - Add Payment proof upload with OCR (tesseract.js, pdf-parse) - Extract data from proofs (amount, date, reference, sender, bank) - Create PaymentUpload component with drag & drop - Add course contact form to /cursos page - Update Services button to navigate to /servicios - Add Reschedule button to Assistant and Therapist dashboards - Add PaymentUpload component to Assistant dashboard - Add eventId field to Appointment model - Add OCR-extracted fields to Payment model - Update Prisma schema and generate client - Create API endpoints for reschedule, upload-proof, courses contact - Create manual trigger endpoint for daily agenda job - Initialize daily agenda job in layout.tsx Dependencies added: - nodemailer, node-cron, tesseract.js, sharp, pdf-parse, @types/nodemailer Files created/modified: - src/infrastructure/email/smtp.ts - src/lib/email/templates/* - src/jobs/send-daily-agenda.ts - src/app/api/calendar/reschedule/route.ts - src/app/api/payments/upload-proof/route.ts - src/app/api/contact/courses/route.ts - src/app/api/jobs/trigger-agenda/route.ts - src/components/dashboard/RescheduleModal.tsx - src/components/dashboard/PaymentUpload.tsx - src/components/forms/CourseContactForm.tsx - src/app/dashboard/asistente/page.tsx (updated) - src/app/dashboard/terapeuta/page.tsx (updated) - src/app/cursos/page.tsx (updated) - src/components/layout/Services.tsx (updated) - src/infrastructure/external/calendar.ts (updated) - src/app/layout.tsx (updated) - prisma/schema.prisma (updated) - src/lib/validations.ts (updated) - src/lib/env.ts (updated) Tests: - TypeScript typecheck: No errors - ESLint: Only warnings (img tags, react-hooks) - Production build: Successful Documentation: - Updated CHANGELOG.md with Sprint 3/4 changes - Updated PROGRESS.md with 100% completion status - Updated TASKS.md with completed tasks
81 lines
1.8 KiB
TypeScript
81 lines
1.8 KiB
TypeScript
import { PrismaClient } from "@prisma/client";
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
const ROLES = {
|
|
PATIENT: "PATIENT",
|
|
ASSISTANT: "ASSISTANT",
|
|
THERAPIST: "THERAPIST",
|
|
} as const;
|
|
|
|
async function main() {
|
|
console.log("🌱 Seeding database...");
|
|
|
|
const therapist = await prisma.user.upsert({
|
|
where: { phone: "+525512345678" },
|
|
update: {},
|
|
create: {
|
|
email: "gloria@glorianino.com",
|
|
phone: "+525512345678",
|
|
name: "Gloria Niño",
|
|
role: ROLES.THERAPIST,
|
|
password: "admin123",
|
|
},
|
|
});
|
|
|
|
console.log("✅ Created therapist:", therapist.name);
|
|
|
|
const assistant = await prisma.user.upsert({
|
|
where: { phone: "+525598765432" },
|
|
update: {},
|
|
create: {
|
|
email: "asistente@glorianino.com",
|
|
phone: "+525598765432",
|
|
name: "Asistente Gloria",
|
|
role: ROLES.ASSISTANT,
|
|
password: "asistente123",
|
|
},
|
|
});
|
|
|
|
console.log("✅ Created assistant:", assistant.name);
|
|
|
|
const testPatient = await prisma.patient.upsert({
|
|
where: { phone: "+52555555555" },
|
|
update: {},
|
|
create: {
|
|
phone: "+52555555555",
|
|
name: "Paciente Test",
|
|
birthdate: new Date("1990-01-01"),
|
|
email: "paciente@test.com",
|
|
status: "active",
|
|
},
|
|
});
|
|
|
|
console.log("✅ Created patient:", testPatient.name);
|
|
|
|
const patientUser = await prisma.user.upsert({
|
|
where: { phone: "+52555555555" },
|
|
update: {},
|
|
create: {
|
|
email: "paciente@test.com",
|
|
phone: "+52555555555",
|
|
name: "Paciente Test",
|
|
role: ROLES.PATIENT,
|
|
password: "paciente123",
|
|
},
|
|
});
|
|
|
|
console.log("✅ Created patient user:", patientUser.name);
|
|
|
|
console.log("🎉 Seeding completed!");
|
|
}
|
|
|
|
main()
|
|
.catch((e) => {
|
|
console.error("❌ Seeding error:", e);
|
|
process.exit(1);
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect();
|
|
});
|