migration.sql 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. -- CreateEnum
  2. CREATE TYPE "public"."UserRole" AS ENUM ('ADMIN', 'TEACHER', 'STUDENT');
  3. -- CreateEnum
  4. CREATE TYPE "public"."AttendanceStatus" AS ENUM ('PRESENT', 'ABSENT', 'JUSTIFIED');
  5. -- CreateTable
  6. CREATE TABLE "public"."users" (
  7. "id" TEXT NOT NULL,
  8. "email" TEXT NOT NULL,
  9. "password" TEXT NOT NULL,
  10. "role" "public"."UserRole" NOT NULL,
  11. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  12. "updatedAt" TIMESTAMP(3) NOT NULL,
  13. CONSTRAINT "users_pkey" PRIMARY KEY ("id")
  14. );
  15. -- CreateTable
  16. CREATE TABLE "public"."periods" (
  17. "id" TEXT NOT NULL,
  18. "name" TEXT NOT NULL,
  19. "startDate" TIMESTAMP(3) NOT NULL,
  20. "endDate" TIMESTAMP(3) NOT NULL,
  21. "isActive" BOOLEAN NOT NULL DEFAULT true,
  22. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  23. "updatedAt" TIMESTAMP(3) NOT NULL,
  24. "deletedAt" TIMESTAMP(3),
  25. CONSTRAINT "periods_pkey" PRIMARY KEY ("id")
  26. );
  27. -- CreateTable
  28. CREATE TABLE "public"."partials" (
  29. "id" TEXT NOT NULL,
  30. "name" TEXT NOT NULL,
  31. "periodId" TEXT NOT NULL,
  32. "isActive" BOOLEAN NOT NULL DEFAULT true,
  33. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  34. "updatedAt" TIMESTAMP(3) NOT NULL,
  35. "deletedAt" TIMESTAMP(3),
  36. CONSTRAINT "partials_pkey" PRIMARY KEY ("id")
  37. );
  38. -- CreateTable
  39. CREATE TABLE "public"."classes" (
  40. "id" TEXT NOT NULL,
  41. "name" TEXT NOT NULL,
  42. "code" TEXT NOT NULL,
  43. "description" TEXT,
  44. "periodId" TEXT NOT NULL,
  45. "isActive" BOOLEAN NOT NULL DEFAULT true,
  46. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  47. "updatedAt" TIMESTAMP(3) NOT NULL,
  48. "deletedAt" TIMESTAMP(3),
  49. CONSTRAINT "classes_pkey" PRIMARY KEY ("id")
  50. );
  51. -- CreateTable
  52. CREATE TABLE "public"."sections" (
  53. "id" TEXT NOT NULL,
  54. "name" TEXT NOT NULL,
  55. "classId" TEXT NOT NULL,
  56. "isActive" BOOLEAN NOT NULL DEFAULT true,
  57. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  58. "updatedAt" TIMESTAMP(3) NOT NULL,
  59. "deletedAt" TIMESTAMP(3),
  60. CONSTRAINT "sections_pkey" PRIMARY KEY ("id")
  61. );
  62. -- CreateTable
  63. CREATE TABLE "public"."teachers" (
  64. "id" TEXT NOT NULL,
  65. "userId" TEXT NOT NULL,
  66. "firstName" TEXT NOT NULL,
  67. "lastName" TEXT NOT NULL,
  68. "cedula" TEXT NOT NULL,
  69. "email" TEXT NOT NULL,
  70. "phone" TEXT NOT NULL,
  71. "isActive" BOOLEAN NOT NULL DEFAULT true,
  72. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  73. "updatedAt" TIMESTAMP(3) NOT NULL,
  74. "deletedAt" TIMESTAMP(3),
  75. CONSTRAINT "teachers_pkey" PRIMARY KEY ("id")
  76. );
  77. -- CreateTable
  78. CREATE TABLE "public"."students" (
  79. "id" TEXT NOT NULL,
  80. "userId" TEXT NOT NULL,
  81. "firstName" TEXT NOT NULL,
  82. "lastName" TEXT NOT NULL,
  83. "cedula" TEXT NOT NULL,
  84. "email" TEXT NOT NULL,
  85. "phone" TEXT NOT NULL,
  86. "admissionNumber" TEXT NOT NULL,
  87. "isActive" BOOLEAN NOT NULL DEFAULT true,
  88. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  89. "updatedAt" TIMESTAMP(3) NOT NULL,
  90. "deletedAt" TIMESTAMP(3),
  91. CONSTRAINT "students_pkey" PRIMARY KEY ("id")
  92. );
  93. -- CreateTable
  94. CREATE TABLE "public"."teacher_assignments" (
  95. "id" TEXT NOT NULL,
  96. "teacherId" TEXT NOT NULL,
  97. "sectionId" TEXT NOT NULL,
  98. "isActive" BOOLEAN NOT NULL DEFAULT true,
  99. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  100. "updatedAt" TIMESTAMP(3) NOT NULL,
  101. CONSTRAINT "teacher_assignments_pkey" PRIMARY KEY ("id")
  102. );
  103. -- CreateTable
  104. CREATE TABLE "public"."student_enrollments" (
  105. "id" TEXT NOT NULL,
  106. "studentId" TEXT NOT NULL,
  107. "sectionId" TEXT NOT NULL,
  108. "isActive" BOOLEAN NOT NULL DEFAULT true,
  109. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  110. "updatedAt" TIMESTAMP(3) NOT NULL,
  111. CONSTRAINT "student_enrollments_pkey" PRIMARY KEY ("id")
  112. );
  113. -- CreateTable
  114. CREATE TABLE "public"."attendances" (
  115. "id" TEXT NOT NULL,
  116. "studentId" TEXT NOT NULL,
  117. "sectionId" TEXT NOT NULL,
  118. "date" DATE NOT NULL,
  119. "status" "public"."AttendanceStatus" NOT NULL,
  120. "reason" TEXT,
  121. "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  122. "updatedAt" TIMESTAMP(3) NOT NULL,
  123. CONSTRAINT "attendances_pkey" PRIMARY KEY ("id")
  124. );
  125. -- CreateIndex
  126. CREATE UNIQUE INDEX "users_email_key" ON "public"."users"("email");
  127. -- CreateIndex
  128. CREATE UNIQUE INDEX "classes_code_key" ON "public"."classes"("code");
  129. -- CreateIndex
  130. CREATE UNIQUE INDEX "teachers_userId_key" ON "public"."teachers"("userId");
  131. -- CreateIndex
  132. CREATE UNIQUE INDEX "teachers_cedula_key" ON "public"."teachers"("cedula");
  133. -- CreateIndex
  134. CREATE UNIQUE INDEX "teachers_email_key" ON "public"."teachers"("email");
  135. -- CreateIndex
  136. CREATE UNIQUE INDEX "students_userId_key" ON "public"."students"("userId");
  137. -- CreateIndex
  138. CREATE UNIQUE INDEX "students_cedula_key" ON "public"."students"("cedula");
  139. -- CreateIndex
  140. CREATE UNIQUE INDEX "students_email_key" ON "public"."students"("email");
  141. -- CreateIndex
  142. CREATE UNIQUE INDEX "students_admissionNumber_key" ON "public"."students"("admissionNumber");
  143. -- CreateIndex
  144. CREATE UNIQUE INDEX "teacher_assignments_teacherId_sectionId_key" ON "public"."teacher_assignments"("teacherId", "sectionId");
  145. -- CreateIndex
  146. CREATE UNIQUE INDEX "student_enrollments_studentId_sectionId_key" ON "public"."student_enrollments"("studentId", "sectionId");
  147. -- CreateIndex
  148. CREATE UNIQUE INDEX "attendances_studentId_sectionId_date_key" ON "public"."attendances"("studentId", "sectionId", "date");
  149. -- AddForeignKey
  150. ALTER TABLE "public"."partials" ADD CONSTRAINT "partials_periodId_fkey" FOREIGN KEY ("periodId") REFERENCES "public"."periods"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  151. -- AddForeignKey
  152. ALTER TABLE "public"."classes" ADD CONSTRAINT "classes_periodId_fkey" FOREIGN KEY ("periodId") REFERENCES "public"."periods"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  153. -- AddForeignKey
  154. ALTER TABLE "public"."sections" ADD CONSTRAINT "sections_classId_fkey" FOREIGN KEY ("classId") REFERENCES "public"."classes"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  155. -- AddForeignKey
  156. ALTER TABLE "public"."teachers" ADD CONSTRAINT "teachers_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  157. -- AddForeignKey
  158. ALTER TABLE "public"."students" ADD CONSTRAINT "students_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  159. -- AddForeignKey
  160. ALTER TABLE "public"."teacher_assignments" ADD CONSTRAINT "teacher_assignments_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "public"."teachers"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  161. -- AddForeignKey
  162. ALTER TABLE "public"."teacher_assignments" ADD CONSTRAINT "teacher_assignments_sectionId_fkey" FOREIGN KEY ("sectionId") REFERENCES "public"."sections"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  163. -- AddForeignKey
  164. ALTER TABLE "public"."student_enrollments" ADD CONSTRAINT "student_enrollments_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "public"."students"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  165. -- AddForeignKey
  166. ALTER TABLE "public"."student_enrollments" ADD CONSTRAINT "student_enrollments_sectionId_fkey" FOREIGN KEY ("sectionId") REFERENCES "public"."sections"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  167. -- AddForeignKey
  168. ALTER TABLE "public"."attendances" ADD CONSTRAINT "attendances_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "public"."students"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
  169. -- AddForeignKey
  170. ALTER TABLE "public"."attendances" ADD CONSTRAINT "attendances_sectionId_fkey" FOREIGN KEY ("sectionId") REFERENCES "public"."sections"("id") ON DELETE RESTRICT ON UPDATE CASCADE;