@sekolaos/shared-schema 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkScheduleConflictQuerySchema = exports.copyRosterRequestSchema = exports.batchCreateTeachingScheduleSchema = exports.teachingScheduleListQuerySchema = exports.teachingScheduleParamsSchema = exports.updateTeachingScheduleSchema = exports.createTeachingScheduleSchema = exports.teachingScheduleSchema = exports.periodNumberSchema = exports.dayOfWeekEnum = void 0;
3
+ exports.checkScheduleConflictQuerySchema = exports.copyRosterRequestSchema = exports.batchCreateTeachingScheduleSchema = exports.teachingScheduleListQuerySchema = exports.teachingScheduleParamsSchema = exports.updateTeachingScheduleSchema = exports.createTeachingScheduleSchema = exports.teachingScheduleSchema = exports.dayOfWeekEnum = exports.scheduleTimeStringSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const common_schema_js_1 = require("../common/common.schema.js");
6
- exports.dayOfWeekEnum = zod_1.z.enum(["SENIN", "SELASA", "RABU", "KAMIS", "JUMAT", "SABTU"]);
7
- exports.periodNumberSchema = zod_1.z.number().int().min(1).max(15);
8
- const teachingScheduleObjectSchema = zod_1.z.object({
6
+ // 1. Format Waktu Fleksibel (Mendukung HH:mm dan HH:mm:ss dari tipe TIME MySQL)
7
+ exports.scheduleTimeStringSchema = zod_1.z
8
+ .string()
9
+ .regex(/^([01]\d|2[0-3]):([0-5]\d)(:[0-5]\d)?$/, "Format jam harus HH:mm atau HH:mm:ss");
10
+ exports.dayOfWeekEnum = zod_1.z.enum([
11
+ "SENIN",
12
+ "SELASA",
13
+ "RABU",
14
+ "KAMIS",
15
+ "JUMAT",
16
+ "SABTU",
17
+ ]);
18
+ // 2. Skema Entitas Utama
19
+ exports.teachingScheduleSchema = zod_1.z.object({
9
20
  id: common_schema_js_1.uuidSchema,
10
21
  tenantId: common_schema_js_1.uuidSchema,
11
22
  academicYearId: common_schema_js_1.uuidSchema,
@@ -16,36 +27,29 @@ const teachingScheduleObjectSchema = zod_1.z.object({
16
27
  subjectId: common_schema_js_1.uuidSchema,
17
28
  subjectName: zod_1.z.string().optional(),
18
29
  dayOfWeek: exports.dayOfWeekEnum,
19
- startTime: common_schema_js_1.timeStringSchema,
20
- endTime: common_schema_js_1.timeStringSchema,
21
- periodNumber: exports.periodNumberSchema.optional(),
30
+ startTime: exports.scheduleTimeStringSchema,
31
+ endTime: exports.scheduleTimeStringSchema,
32
+ periodNumber: zod_1.z.number().int().min(1).max(15).optional(),
22
33
  });
23
- /** Aturan lintas-field: jam selesai harus lebih besar dari jam mulai. */
24
- const addTimeRangeRule = (schema) => schema.refine((schedule) => schedule.startTime < schedule.endTime, {
25
- message: "Jam selesai harus lebih besar dari jam mulai",
34
+ // Helper Validasi Relasi Waktu Mulai < Waktu Selesai
35
+ const validateTimeOrder = (schema) => schema.refine((data) => !data.startTime || !data.endTime || data.startTime < data.endTime, {
36
+ message: "Jam mulai harus lebih awal daripada jam selesai",
26
37
  path: ["endTime"],
27
38
  });
28
- exports.teachingScheduleSchema = addTimeRangeRule(teachingScheduleObjectSchema);
29
- exports.createTeachingScheduleSchema = addTimeRangeRule(teachingScheduleObjectSchema.omit({
30
- id: true,
31
- tenantId: true,
32
- classroomName: true,
33
- teacherName: true,
34
- subjectName: true,
35
- }));
36
- exports.updateTeachingScheduleSchema = teachingScheduleObjectSchema
37
- .omit({
38
- id: true,
39
- tenantId: true,
40
- classroomName: true,
41
- teacherName: true,
42
- subjectName: true,
43
- })
44
- .partial()
45
- .refine((schedule) => !schedule.startTime || !schedule.endTime || schedule.startTime < schedule.endTime, {
46
- message: "Jam selesai harus lebih besar dari jam mulai",
47
- path: ["endTime"],
39
+ const baseCreateShape = exports.teachingScheduleSchema.pick({
40
+ academicYearId: true,
41
+ classroomId: true,
42
+ teacherUserId: true,
43
+ subjectId: true,
44
+ dayOfWeek: true,
45
+ startTime: true,
46
+ endTime: true,
47
+ periodNumber: true,
48
48
  });
49
+ exports.createTeachingScheduleSchema = validateTimeOrder(baseCreateShape);
50
+ exports.updateTeachingScheduleSchema = validateTimeOrder(baseCreateShape.partial());
51
+ // 2a. Skema Helper Param & Query — dipertahankan karena digunakan oleh sekolaos-api
52
+ // (routes: validate params/list query, controller & service: tipe TeachingScheduleListQuery)
49
53
  exports.teachingScheduleParamsSchema = zod_1.z.object({
50
54
  id: common_schema_js_1.uuidSchema,
51
55
  });
@@ -55,37 +59,50 @@ exports.teachingScheduleListQuerySchema = zod_1.z.object({
55
59
  teacherUserId: common_schema_js_1.uuidSchema.optional(),
56
60
  subjectId: common_schema_js_1.uuidSchema.optional(),
57
61
  });
58
- exports.batchCreateTeachingScheduleSchema = zod_1.z
59
- .object({
62
+ // 3. Skema Alokasi Multi-JP Berurutan (Batch Create)
63
+ exports.batchCreateTeachingScheduleSchema = zod_1.z.object({
60
64
  academicYearId: common_schema_js_1.uuidSchema,
61
65
  classroomId: common_schema_js_1.uuidSchema,
62
66
  teacherUserId: common_schema_js_1.uuidSchema,
63
67
  subjectId: common_schema_js_1.uuidSchema,
64
68
  dayOfWeek: exports.dayOfWeekEnum,
65
69
  schedules: zod_1.z
66
- .array(zod_1.z.object({
67
- periodNumber: exports.periodNumberSchema,
68
- startTime: common_schema_js_1.timeStringSchema,
69
- endTime: common_schema_js_1.timeStringSchema,
70
+ .array(zod_1.z
71
+ .object({
72
+ periodNumber: zod_1.z.number().int().min(1).max(15),
73
+ startTime: exports.scheduleTimeStringSchema,
74
+ endTime: exports.scheduleTimeStringSchema,
75
+ })
76
+ .refine((slot) => slot.startTime < slot.endTime, {
77
+ message: "Jam mulai slot harus lebih awal daripada jam selesai",
78
+ path: ["endTime"],
70
79
  }))
71
- .min(1),
72
- })
73
- .refine((input) => input.schedules.every((s) => s.startTime < s.endTime), {
74
- message: "Jam selesai harus lebih besar dari jam mulai untuk setiap jadwal",
75
- path: ["schedules"],
80
+ .min(1, "Minimal harus ada 1 alokasi jam pelajaran"),
76
81
  });
82
+ // 4. Skema Duplikasi Roster Antar Rombel / Semester
77
83
  exports.copyRosterRequestSchema = zod_1.z.object({
78
84
  sourceClassroomId: common_schema_js_1.uuidSchema,
79
85
  targetClassroomId: common_schema_js_1.uuidSchema,
80
86
  academicYearId: common_schema_js_1.uuidSchema,
81
87
  copyTeachers: zod_1.z.boolean().default(true),
82
88
  });
83
- exports.checkScheduleConflictQuerySchema = zod_1.z.object({
84
- teacherUserId: common_schema_js_1.uuidSchema,
85
- dayOfWeek: exports.dayOfWeekEnum,
86
- startTime: common_schema_js_1.timeStringSchema,
87
- endTime: common_schema_js_1.timeStringSchema,
89
+ // 5. Skema Query Deteksi Bentrok Ganda (Guru & Rombel Kelas)
90
+ exports.checkScheduleConflictQuerySchema = zod_1.z
91
+ .object({
88
92
  academicYearId: common_schema_js_1.uuidSchema,
93
+ dayOfWeek: exports.dayOfWeekEnum,
94
+ startTime: exports.scheduleTimeStringSchema,
95
+ endTime: exports.scheduleTimeStringSchema,
96
+ teacherUserId: common_schema_js_1.uuidSchema.optional(),
97
+ classroomId: common_schema_js_1.uuidSchema.optional(),
89
98
  excludeScheduleId: common_schema_js_1.uuidSchema.optional(),
99
+ })
100
+ .refine((query) => query.startTime < query.endTime, {
101
+ message: "Rentang jam query tidak valid (startTime harus < endTime)",
102
+ path: ["endTime"],
103
+ })
104
+ .refine((query) => !!query.teacherUserId || !!query.classroomId, {
105
+ message: "Minimal tentukan salah satu dari teacherUserId atau classroomId untuk pengecekan bentrok",
106
+ path: ["teacherUserId"],
90
107
  });
91
108
  //# sourceMappingURL=teaching-schedule.schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"teaching-schedule.schema.js","sourceRoot":"","sources":["../../../src/academic/teaching-schedule.schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"teaching-schedule.schema.js","sourceRoot":"","sources":["../../../src/academic/teaching-schedule.schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,iEAAwD;AAExD,gFAAgF;AACnE,QAAA,wBAAwB,GAAG,OAAC;KACtC,MAAM,EAAE;KACR,KAAK,CAAC,wCAAwC,EAAE,sCAAsC,CAAC,CAAC;AAE9E,QAAA,aAAa,GAAG,OAAC,CAAC,IAAI,CAAC;IAClC,OAAO;IACP,QAAQ;IACR,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;CACR,CAAC,CAAC;AAEH,yBAAyB;AACZ,QAAA,sBAAsB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC7C,EAAE,EAAE,6BAAU;IACd,QAAQ,EAAE,6BAAU;IACpB,cAAc,EAAE,6BAAU;IAC1B,WAAW,EAAE,6BAAU;IACvB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,aAAa,EAAE,6BAAU;IACzB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,6BAAU;IACrB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,qBAAa;IACxB,SAAS,EAAE,gCAAwB;IACnC,OAAO,EAAE,gCAAwB;IACjC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzD,CAAC,CAAC;AAEH,qDAAqD;AACrD,MAAM,iBAAiB,GAAG,CACxB,MAAoB,EACpB,EAAE,CACF,MAAM,CAAC,MAAM,CACX,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAC3E;IACE,OAAO,EAAE,iDAAiD;IAC1D,IAAI,EAAE,CAAC,SAAS,CAAC;CAClB,CACF,CAAC;AAEJ,MAAM,eAAe,GAAG,8BAAsB,CAAC,IAAI,CAAC;IAClD,cAAc,EAAE,IAAI;IACpB,WAAW,EAAE,IAAI;IACjB,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,IAAI;CACnB,CAAC,CAAC;AAEU,QAAA,4BAA4B,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;AAElE,QAAA,4BAA4B,GAAG,iBAAiB,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;AAEzF,oFAAoF;AACpF,iGAAiG;AACpF,QAAA,4BAA4B,GAAG,OAAC,CAAC,MAAM,CAAC;IACnD,EAAE,EAAE,6BAAU;CACf,CAAC,CAAC;AAEU,QAAA,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD,cAAc,EAAE,6BAAU,CAAC,QAAQ,EAAE;IACrC,WAAW,EAAE,6BAAU,CAAC,QAAQ,EAAE;IAClC,aAAa,EAAE,6BAAU,CAAC,QAAQ,EAAE;IACpC,SAAS,EAAE,6BAAU,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,qDAAqD;AACxC,QAAA,iCAAiC,GAAG,OAAC,CAAC,MAAM,CAAC;IACxD,cAAc,EAAE,6BAAU;IAC1B,WAAW,EAAE,6BAAU;IACvB,aAAa,EAAE,6BAAU;IACzB,SAAS,EAAE,6BAAU;IACrB,SAAS,EAAE,qBAAa;IACxB,SAAS,EAAE,OAAC;SACT,KAAK,CACJ,OAAC;SACE,MAAM,CAAC;QACN,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,SAAS,EAAE,gCAAwB;QACnC,OAAO,EAAE,gCAAwB;KAClC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE;QAC/C,OAAO,EAAE,sDAAsD;QAC/D,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAC,CACL;SACA,GAAG,CAAC,CAAC,EAAE,2CAA2C,CAAC;CACvD,CAAC,CAAC;AAEH,oDAAoD;AACvC,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9C,iBAAiB,EAAE,6BAAU;IAC7B,iBAAiB,EAAE,6BAAU;IAC7B,cAAc,EAAE,6BAAU;IAC1B,YAAY,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACxC,CAAC,CAAC;AAEH,6DAA6D;AAChD,QAAA,gCAAgC,GAAG,OAAC;KAC9C,MAAM,CAAC;IACN,cAAc,EAAE,6BAAU;IAC1B,SAAS,EAAE,qBAAa;IACxB,SAAS,EAAE,gCAAwB;IACnC,OAAO,EAAE,gCAAwB;IACjC,aAAa,EAAE,6BAAU,CAAC,QAAQ,EAAE;IACpC,WAAW,EAAE,6BAAU,CAAC,QAAQ,EAAE;IAClC,iBAAiB,EAAE,6BAAU,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE;IAClD,OAAO,EAAE,2DAA2D;IACpE,IAAI,EAAE,CAAC,SAAS,CAAC;CAClB,CAAC;KACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;IAC/D,OAAO,EAAE,0FAA0F;IACnG,IAAI,EAAE,CAAC,eAAe,CAAC;CACxB,CAAC,CAAC"}
@@ -1,8 +1,19 @@
1
1
  import { z } from "zod";
2
- import { timeStringSchema, uuidSchema } from "../common/common.schema.js";
3
- export const dayOfWeekEnum = z.enum(["SENIN", "SELASA", "RABU", "KAMIS", "JUMAT", "SABTU"]);
4
- export const periodNumberSchema = z.number().int().min(1).max(15);
5
- const teachingScheduleObjectSchema = z.object({
2
+ import { uuidSchema } from "../common/common.schema.js";
3
+ // 1. Format Waktu Fleksibel (Mendukung HH:mm dan HH:mm:ss dari tipe TIME MySQL)
4
+ export const scheduleTimeStringSchema = z
5
+ .string()
6
+ .regex(/^([01]\d|2[0-3]):([0-5]\d)(:[0-5]\d)?$/, "Format jam harus HH:mm atau HH:mm:ss");
7
+ export const dayOfWeekEnum = z.enum([
8
+ "SENIN",
9
+ "SELASA",
10
+ "RABU",
11
+ "KAMIS",
12
+ "JUMAT",
13
+ "SABTU",
14
+ ]);
15
+ // 2. Skema Entitas Utama
16
+ export const teachingScheduleSchema = z.object({
6
17
  id: uuidSchema,
7
18
  tenantId: uuidSchema,
8
19
  academicYearId: uuidSchema,
@@ -13,36 +24,29 @@ const teachingScheduleObjectSchema = z.object({
13
24
  subjectId: uuidSchema,
14
25
  subjectName: z.string().optional(),
15
26
  dayOfWeek: dayOfWeekEnum,
16
- startTime: timeStringSchema,
17
- endTime: timeStringSchema,
18
- periodNumber: periodNumberSchema.optional(),
27
+ startTime: scheduleTimeStringSchema,
28
+ endTime: scheduleTimeStringSchema,
29
+ periodNumber: z.number().int().min(1).max(15).optional(),
19
30
  });
20
- /** Aturan lintas-field: jam selesai harus lebih besar dari jam mulai. */
21
- const addTimeRangeRule = (schema) => schema.refine((schedule) => schedule.startTime < schedule.endTime, {
22
- message: "Jam selesai harus lebih besar dari jam mulai",
31
+ // Helper Validasi Relasi Waktu Mulai < Waktu Selesai
32
+ const validateTimeOrder = (schema) => schema.refine((data) => !data.startTime || !data.endTime || data.startTime < data.endTime, {
33
+ message: "Jam mulai harus lebih awal daripada jam selesai",
23
34
  path: ["endTime"],
24
35
  });
25
- export const teachingScheduleSchema = addTimeRangeRule(teachingScheduleObjectSchema);
26
- export const createTeachingScheduleSchema = addTimeRangeRule(teachingScheduleObjectSchema.omit({
27
- id: true,
28
- tenantId: true,
29
- classroomName: true,
30
- teacherName: true,
31
- subjectName: true,
32
- }));
33
- export const updateTeachingScheduleSchema = teachingScheduleObjectSchema
34
- .omit({
35
- id: true,
36
- tenantId: true,
37
- classroomName: true,
38
- teacherName: true,
39
- subjectName: true,
40
- })
41
- .partial()
42
- .refine((schedule) => !schedule.startTime || !schedule.endTime || schedule.startTime < schedule.endTime, {
43
- message: "Jam selesai harus lebih besar dari jam mulai",
44
- path: ["endTime"],
36
+ const baseCreateShape = teachingScheduleSchema.pick({
37
+ academicYearId: true,
38
+ classroomId: true,
39
+ teacherUserId: true,
40
+ subjectId: true,
41
+ dayOfWeek: true,
42
+ startTime: true,
43
+ endTime: true,
44
+ periodNumber: true,
45
45
  });
46
+ export const createTeachingScheduleSchema = validateTimeOrder(baseCreateShape);
47
+ export const updateTeachingScheduleSchema = validateTimeOrder(baseCreateShape.partial());
48
+ // 2a. Skema Helper Param & Query — dipertahankan karena digunakan oleh sekolaos-api
49
+ // (routes: validate params/list query, controller & service: tipe TeachingScheduleListQuery)
46
50
  export const teachingScheduleParamsSchema = z.object({
47
51
  id: uuidSchema,
48
52
  });
@@ -52,37 +56,50 @@ export const teachingScheduleListQuerySchema = z.object({
52
56
  teacherUserId: uuidSchema.optional(),
53
57
  subjectId: uuidSchema.optional(),
54
58
  });
55
- export const batchCreateTeachingScheduleSchema = z
56
- .object({
59
+ // 3. Skema Alokasi Multi-JP Berurutan (Batch Create)
60
+ export const batchCreateTeachingScheduleSchema = z.object({
57
61
  academicYearId: uuidSchema,
58
62
  classroomId: uuidSchema,
59
63
  teacherUserId: uuidSchema,
60
64
  subjectId: uuidSchema,
61
65
  dayOfWeek: dayOfWeekEnum,
62
66
  schedules: z
63
- .array(z.object({
64
- periodNumber: periodNumberSchema,
65
- startTime: timeStringSchema,
66
- endTime: timeStringSchema,
67
+ .array(z
68
+ .object({
69
+ periodNumber: z.number().int().min(1).max(15),
70
+ startTime: scheduleTimeStringSchema,
71
+ endTime: scheduleTimeStringSchema,
72
+ })
73
+ .refine((slot) => slot.startTime < slot.endTime, {
74
+ message: "Jam mulai slot harus lebih awal daripada jam selesai",
75
+ path: ["endTime"],
67
76
  }))
68
- .min(1),
69
- })
70
- .refine((input) => input.schedules.every((s) => s.startTime < s.endTime), {
71
- message: "Jam selesai harus lebih besar dari jam mulai untuk setiap jadwal",
72
- path: ["schedules"],
77
+ .min(1, "Minimal harus ada 1 alokasi jam pelajaran"),
73
78
  });
79
+ // 4. Skema Duplikasi Roster Antar Rombel / Semester
74
80
  export const copyRosterRequestSchema = z.object({
75
81
  sourceClassroomId: uuidSchema,
76
82
  targetClassroomId: uuidSchema,
77
83
  academicYearId: uuidSchema,
78
84
  copyTeachers: z.boolean().default(true),
79
85
  });
80
- export const checkScheduleConflictQuerySchema = z.object({
81
- teacherUserId: uuidSchema,
82
- dayOfWeek: dayOfWeekEnum,
83
- startTime: timeStringSchema,
84
- endTime: timeStringSchema,
86
+ // 5. Skema Query Deteksi Bentrok Ganda (Guru & Rombel Kelas)
87
+ export const checkScheduleConflictQuerySchema = z
88
+ .object({
85
89
  academicYearId: uuidSchema,
90
+ dayOfWeek: dayOfWeekEnum,
91
+ startTime: scheduleTimeStringSchema,
92
+ endTime: scheduleTimeStringSchema,
93
+ teacherUserId: uuidSchema.optional(),
94
+ classroomId: uuidSchema.optional(),
86
95
  excludeScheduleId: uuidSchema.optional(),
96
+ })
97
+ .refine((query) => query.startTime < query.endTime, {
98
+ message: "Rentang jam query tidak valid (startTime harus < endTime)",
99
+ path: ["endTime"],
100
+ })
101
+ .refine((query) => !!query.teacherUserId || !!query.classroomId, {
102
+ message: "Minimal tentukan salah satu dari teacherUserId atau classroomId untuk pengecekan bentrok",
103
+ path: ["teacherUserId"],
87
104
  });
88
105
  //# sourceMappingURL=teaching-schedule.schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"teaching-schedule.schema.js","sourceRoot":"","sources":["../../../src/academic/teaching-schedule.schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"teaching-schedule.schema.js","sourceRoot":"","sources":["../../../src/academic/teaching-schedule.schema.ts"],"names":[],"mappings":"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"}
@@ -1,35 +1,21 @@
1
1
  import { z } from "zod";
2
+ export declare const scheduleTimeStringSchema: z.ZodString;
2
3
  export declare const dayOfWeekEnum: z.ZodEnum<["SENIN", "SELASA", "RABU", "KAMIS", "JUMAT", "SABTU"]>;
3
- export declare const periodNumberSchema: z.ZodNumber;
4
- export declare const teachingScheduleSchema: z.ZodEffects<z.ZodType<{
5
- id: string;
6
- tenantId: string;
7
- academicYearId: string;
8
- classroomId: string;
9
- teacherUserId: string;
10
- subjectId: string;
11
- dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
12
- startTime: string;
13
- endTime: string;
14
- classroomName?: string | undefined;
15
- teacherName?: string | undefined;
16
- subjectName?: string | undefined;
17
- periodNumber?: number | undefined;
18
- }, z.ZodTypeDef, {
19
- id: string;
20
- tenantId: string;
21
- academicYearId: string;
22
- classroomId: string;
23
- teacherUserId: string;
24
- subjectId: string;
25
- dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
26
- startTime: string;
27
- endTime: string;
28
- classroomName?: string | undefined;
29
- teacherName?: string | undefined;
30
- subjectName?: string | undefined;
31
- periodNumber?: number | undefined;
32
- }>, {
4
+ export declare const teachingScheduleSchema: z.ZodObject<{
5
+ id: z.ZodString;
6
+ tenantId: z.ZodString;
7
+ academicYearId: z.ZodString;
8
+ classroomId: z.ZodString;
9
+ classroomName: z.ZodOptional<z.ZodString>;
10
+ teacherUserId: z.ZodString;
11
+ teacherName: z.ZodOptional<z.ZodString>;
12
+ subjectId: z.ZodString;
13
+ subjectName: z.ZodOptional<z.ZodString>;
14
+ dayOfWeek: z.ZodEnum<["SENIN", "SELASA", "RABU", "KAMIS", "JUMAT", "SABTU"]>;
15
+ startTime: z.ZodString;
16
+ endTime: z.ZodString;
17
+ periodNumber: z.ZodOptional<z.ZodNumber>;
18
+ }, "strip", z.ZodTypeAny, {
33
19
  id: string;
34
20
  tenantId: string;
35
21
  academicYearId: string;
@@ -95,16 +81,7 @@ export declare const createTeachingScheduleSchema: z.ZodEffects<z.ZodType<{
95
81
  endTime: string;
96
82
  periodNumber?: number | undefined;
97
83
  }>;
98
- export declare const updateTeachingScheduleSchema: z.ZodEffects<z.ZodObject<{
99
- academicYearId: z.ZodOptional<z.ZodString>;
100
- classroomId: z.ZodOptional<z.ZodString>;
101
- teacherUserId: z.ZodOptional<z.ZodString>;
102
- subjectId: z.ZodOptional<z.ZodString>;
103
- dayOfWeek: z.ZodOptional<z.ZodEnum<["SENIN", "SELASA", "RABU", "KAMIS", "JUMAT", "SABTU"]>>;
104
- startTime: z.ZodOptional<z.ZodString>;
105
- endTime: z.ZodOptional<z.ZodString>;
106
- periodNumber: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
107
- }, "strip", z.ZodTypeAny, {
84
+ export declare const updateTeachingScheduleSchema: z.ZodEffects<z.ZodType<{
108
85
  academicYearId?: string | undefined;
109
86
  classroomId?: string | undefined;
110
87
  teacherUserId?: string | undefined;
@@ -113,7 +90,7 @@ export declare const updateTeachingScheduleSchema: z.ZodEffects<z.ZodObject<{
113
90
  startTime?: string | undefined;
114
91
  endTime?: string | undefined;
115
92
  periodNumber?: number | undefined;
116
- }, {
93
+ }, z.ZodTypeDef, {
117
94
  academicYearId?: string | undefined;
118
95
  classroomId?: string | undefined;
119
96
  teacherUserId?: string | undefined;
@@ -164,13 +141,13 @@ export declare const teachingScheduleListQuerySchema: z.ZodObject<{
164
141
  teacherUserId?: string | undefined;
165
142
  subjectId?: string | undefined;
166
143
  }>;
167
- export declare const batchCreateTeachingScheduleSchema: z.ZodEffects<z.ZodObject<{
144
+ export declare const batchCreateTeachingScheduleSchema: z.ZodObject<{
168
145
  academicYearId: z.ZodString;
169
146
  classroomId: z.ZodString;
170
147
  teacherUserId: z.ZodString;
171
148
  subjectId: z.ZodString;
172
149
  dayOfWeek: z.ZodEnum<["SENIN", "SELASA", "RABU", "KAMIS", "JUMAT", "SABTU"]>;
173
- schedules: z.ZodArray<z.ZodObject<{
150
+ schedules: z.ZodArray<z.ZodEffects<z.ZodObject<{
174
151
  periodNumber: z.ZodNumber;
175
152
  startTime: z.ZodString;
176
153
  endTime: z.ZodString;
@@ -182,30 +159,16 @@ export declare const batchCreateTeachingScheduleSchema: z.ZodEffects<z.ZodObject
182
159
  startTime: string;
183
160
  endTime: string;
184
161
  periodNumber: number;
185
- }>, "many">;
186
- }, "strip", z.ZodTypeAny, {
187
- academicYearId: string;
188
- classroomId: string;
189
- teacherUserId: string;
190
- subjectId: string;
191
- dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
192
- schedules: {
162
+ }>, {
193
163
  startTime: string;
194
164
  endTime: string;
195
165
  periodNumber: number;
196
- }[];
197
- }, {
198
- academicYearId: string;
199
- classroomId: string;
200
- teacherUserId: string;
201
- subjectId: string;
202
- dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
203
- schedules: {
166
+ }, {
204
167
  startTime: string;
205
168
  endTime: string;
206
169
  periodNumber: number;
207
- }[];
208
- }>, {
170
+ }>, "many">;
171
+ }, "strip", z.ZodTypeAny, {
209
172
  academicYearId: string;
210
173
  classroomId: string;
211
174
  teacherUserId: string;
@@ -244,26 +207,61 @@ export declare const copyRosterRequestSchema: z.ZodObject<{
244
207
  targetClassroomId: string;
245
208
  copyTeachers?: boolean | undefined;
246
209
  }>;
247
- export declare const checkScheduleConflictQuerySchema: z.ZodObject<{
248
- teacherUserId: z.ZodString;
210
+ export declare const checkScheduleConflictQuerySchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
211
+ academicYearId: z.ZodString;
249
212
  dayOfWeek: z.ZodEnum<["SENIN", "SELASA", "RABU", "KAMIS", "JUMAT", "SABTU"]>;
250
213
  startTime: z.ZodString;
251
214
  endTime: z.ZodString;
252
- academicYearId: z.ZodString;
215
+ teacherUserId: z.ZodOptional<z.ZodString>;
216
+ classroomId: z.ZodOptional<z.ZodString>;
253
217
  excludeScheduleId: z.ZodOptional<z.ZodString>;
254
218
  }, "strip", z.ZodTypeAny, {
255
219
  academicYearId: string;
256
- teacherUserId: string;
257
220
  dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
258
221
  startTime: string;
259
222
  endTime: string;
223
+ classroomId?: string | undefined;
224
+ teacherUserId?: string | undefined;
225
+ excludeScheduleId?: string | undefined;
226
+ }, {
227
+ academicYearId: string;
228
+ dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
229
+ startTime: string;
230
+ endTime: string;
231
+ classroomId?: string | undefined;
232
+ teacherUserId?: string | undefined;
233
+ excludeScheduleId?: string | undefined;
234
+ }>, {
235
+ academicYearId: string;
236
+ dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
237
+ startTime: string;
238
+ endTime: string;
239
+ classroomId?: string | undefined;
240
+ teacherUserId?: string | undefined;
260
241
  excludeScheduleId?: string | undefined;
261
242
  }, {
262
243
  academicYearId: string;
263
- teacherUserId: string;
264
244
  dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
265
245
  startTime: string;
266
246
  endTime: string;
247
+ classroomId?: string | undefined;
248
+ teacherUserId?: string | undefined;
249
+ excludeScheduleId?: string | undefined;
250
+ }>, {
251
+ academicYearId: string;
252
+ dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
253
+ startTime: string;
254
+ endTime: string;
255
+ classroomId?: string | undefined;
256
+ teacherUserId?: string | undefined;
257
+ excludeScheduleId?: string | undefined;
258
+ }, {
259
+ academicYearId: string;
260
+ dayOfWeek: "SENIN" | "SELASA" | "RABU" | "KAMIS" | "JUMAT" | "SABTU";
261
+ startTime: string;
262
+ endTime: string;
263
+ classroomId?: string | undefined;
264
+ teacherUserId?: string | undefined;
267
265
  excludeScheduleId?: string | undefined;
268
266
  }>;
269
267
  export type DayOfWeek = z.infer<typeof dayOfWeekEnum>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sekolaos/shared-schema",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "Single source of truth untuk validasi skema data dan inferensi tipe TypeScript pada ekosistem Sekolaos (backend Express, kiosk presensi, dan modul lainnya).",
5
5
  "license": "ISC",
6
6
  "author": "Sekolaos",