@brite-future-schools-contracts/contracts 2.0.12 → 2.0.16
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.
- package/dist/chunk-NCAGCDZV.js +1 -0
- package/dist/{chunk-TTAZOH4Y.js → chunk-TBCAMVHG.js} +99 -60
- package/dist/chunk-TBCAMVHG.js.map +1 -0
- package/dist/{chunk-YQELK62C.js → chunk-ZHUFBLV5.js} +50 -3
- package/dist/chunk-ZHUFBLV5.js.map +1 -0
- package/dist/contracts/index.cjs +125 -56
- package/dist/contracts/index.cjs.map +1 -1
- package/dist/contracts/index.d.cts +275 -253
- package/dist/contracts/index.d.ts +275 -253
- package/dist/contracts/index.js +22 -2
- package/dist/index.cjs +180 -84
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -18
- package/dist/index.d.ts +26 -18
- package/dist/index.js +43 -5
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.cjs +107 -59
- package/dist/schemas/index.cjs.map +1 -1
- package/dist/schemas/index.d.cts +122 -158
- package/dist/schemas/index.d.ts +122 -158
- package/dist/schemas/index.js +22 -4
- package/package.json +5 -3
- package/dist/chunk-PDCM3NIB.js +0 -1
- package/dist/chunk-TTAZOH4Y.js.map +0 -1
- package/dist/chunk-YQELK62C.js.map +0 -1
- /package/dist/{chunk-PDCM3NIB.js.map → chunk-NCAGCDZV.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-NCAGCDZV.js.map
|
|
@@ -13,15 +13,15 @@ var SoftDeleteSchema = z.object({
|
|
|
13
13
|
})
|
|
14
14
|
});
|
|
15
15
|
var PaginationInputSchema = z.object({
|
|
16
|
-
cursor:
|
|
16
|
+
cursor: z.string().optional().meta({
|
|
17
17
|
description: "Opaque cursor from the previous page response"
|
|
18
18
|
}),
|
|
19
|
-
limit: z.int().min(1).max(
|
|
19
|
+
limit: z.int().min(1).max(200).default(20).meta({ description: "Number of items to return (1\u2013200, default 20)" })
|
|
20
20
|
});
|
|
21
21
|
function paginatedOutputSchema(itemSchema) {
|
|
22
22
|
return z.object({
|
|
23
23
|
items: z.array(itemSchema),
|
|
24
|
-
nextCursor:
|
|
24
|
+
nextCursor: z.string().nullable().meta({
|
|
25
25
|
description: "Pass as `cursor` on the next request; null when no more pages"
|
|
26
26
|
}),
|
|
27
27
|
total: z.int().nonnegative().meta({ description: "Total matching records (before pagination)" })
|
|
@@ -111,35 +111,6 @@ var EmploymentTypeSchema = z3.enum([
|
|
|
111
111
|
"temporary",
|
|
112
112
|
"intern"
|
|
113
113
|
]);
|
|
114
|
-
var RoleNameSchema = z3.enum([
|
|
115
|
-
"PROPRIETOR",
|
|
116
|
-
"DIRECTOR",
|
|
117
|
-
"SYSTEM_ADMIN",
|
|
118
|
-
"PRINCIPAL",
|
|
119
|
-
"DEPUTY_PRINCIPAL",
|
|
120
|
-
"HOD",
|
|
121
|
-
"CLASS_TEACHER",
|
|
122
|
-
"SUBJECT_TEACHER",
|
|
123
|
-
"BURSAR",
|
|
124
|
-
"HR_ADMIN",
|
|
125
|
-
"SCHOOL_NURSE",
|
|
126
|
-
"LIBRARIAN",
|
|
127
|
-
"LAB_TECHNICIAN",
|
|
128
|
-
"SPORTS_COACH",
|
|
129
|
-
"COUNSELLOR",
|
|
130
|
-
"CARETAKER",
|
|
131
|
-
"SECURITY",
|
|
132
|
-
"KITCHEN_STAFF",
|
|
133
|
-
"KITCHEN_MANAGER",
|
|
134
|
-
"DRIVER",
|
|
135
|
-
"IT_ADMIN",
|
|
136
|
-
"BOARDING_MASTER",
|
|
137
|
-
"PREFECT",
|
|
138
|
-
"STUDENT",
|
|
139
|
-
"PARENT",
|
|
140
|
-
"ORG_SPONSOR",
|
|
141
|
-
"INDIVIDUAL_SPONSOR"
|
|
142
|
-
]);
|
|
143
114
|
var CreateStaffInputSchema = z3.object({
|
|
144
115
|
// Personal details
|
|
145
116
|
firstName: z3.string().min(1).max(100),
|
|
@@ -148,9 +119,9 @@ var CreateStaffInputSchema = z3.object({
|
|
|
148
119
|
email: z3.email(),
|
|
149
120
|
phone: z3.string().min(9).max(30),
|
|
150
121
|
nationalId: z3.string().min(1).max(20),
|
|
151
|
-
// Role assignment
|
|
152
|
-
roleName:
|
|
153
|
-
description: "
|
|
122
|
+
// Role assignment — DB-driven, any valid role code accepted
|
|
123
|
+
roleName: z3.string().min(1).meta({
|
|
124
|
+
description: "Role code from the roles table \u2014 e.g. TEACHER, PRINCIPAL"
|
|
154
125
|
}),
|
|
155
126
|
isPrimaryRole: z3.boolean().default(true),
|
|
156
127
|
// Employment details
|
|
@@ -161,24 +132,19 @@ var CreateStaffInputSchema = z3.object({
|
|
|
161
132
|
employmentType: EmploymentTypeSchema,
|
|
162
133
|
contractStart: z3.iso.date().meta({ description: "ISO date, e.g. 2026-01-15" }),
|
|
163
134
|
contractEnd: z3.iso.date().optional(),
|
|
164
|
-
//
|
|
165
|
-
basicSalary: z3.number().positive(),
|
|
166
|
-
houseAllowance: z3.number().nonnegative().default(0),
|
|
167
|
-
transportAllowance: z3.number().nonnegative().default(0),
|
|
168
|
-
helbDeduction: z3.number().nonnegative().default(0),
|
|
169
|
-
saccoDeduction: z3.number().nonnegative().default(0),
|
|
170
|
-
// Banking
|
|
135
|
+
// Banking (optional at creation — can be completed later)
|
|
171
136
|
bankName: z3.string().max(100).optional(),
|
|
172
137
|
bankAccount: z3.string().max(30).optional(),
|
|
173
138
|
bankBranch: z3.string().max(100).optional(),
|
|
174
|
-
// Statutory
|
|
139
|
+
// Statutory (optional at creation)
|
|
175
140
|
tscNumber: z3.string().max(30).optional(),
|
|
176
141
|
kraPin: z3.string().max(20).optional(),
|
|
177
142
|
nhifNo: z3.string().max(20).optional(),
|
|
178
|
-
nssfNo: z3.string().max(20).optional()
|
|
143
|
+
nssfNo: z3.string().max(20).optional(),
|
|
144
|
+
helbNo: z3.string().max(20).optional(),
|
|
145
|
+
saccoNo: z3.string().max(20).optional()
|
|
179
146
|
});
|
|
180
147
|
var StaffProfileSchema = z3.object({
|
|
181
|
-
// Staff record
|
|
182
148
|
id: UuidSchema,
|
|
183
149
|
userId: UuidSchema,
|
|
184
150
|
branchId: UuidSchema,
|
|
@@ -191,28 +157,23 @@ var StaffProfileSchema = z3.object({
|
|
|
191
157
|
kraPin: z3.string().nullable(),
|
|
192
158
|
nhifNo: z3.string().nullable(),
|
|
193
159
|
nssfNo: z3.string().nullable(),
|
|
160
|
+
helbNo: z3.string().nullable(),
|
|
161
|
+
saccoNo: z3.string().nullable(),
|
|
194
162
|
designation: z3.string(),
|
|
195
163
|
employmentType: EmploymentTypeSchema,
|
|
196
164
|
contractStart: z3.string(),
|
|
197
165
|
contractEnd: z3.string().nullable(),
|
|
198
|
-
basicSalary: z3.string(),
|
|
199
|
-
houseAllowance: z3.string(),
|
|
200
|
-
transportAllowance: z3.string(),
|
|
201
|
-
helbDeduction: z3.string().nullable(),
|
|
202
|
-
saccoDeduction: z3.string().nullable(),
|
|
203
166
|
bankName: z3.string().nullable(),
|
|
204
167
|
bankAccount: z3.string().nullable(),
|
|
205
168
|
bankBranch: z3.string().nullable(),
|
|
206
169
|
status: z3.string(),
|
|
207
170
|
createdAt: z3.string(),
|
|
208
|
-
// From users join
|
|
209
171
|
email: z3.string(),
|
|
210
172
|
mustChangePassword: z3.boolean(),
|
|
211
|
-
// Department (nullable — not all staff are in a department)
|
|
212
173
|
departmentId: UuidSchema.nullable(),
|
|
213
174
|
departmentName: z3.string().nullable(),
|
|
214
|
-
//
|
|
215
|
-
roleName:
|
|
175
|
+
// Role — DB-driven code string, not a fixed enum
|
|
176
|
+
roleName: z3.string().nullable(),
|
|
216
177
|
roleId: UuidSchema.nullable()
|
|
217
178
|
});
|
|
218
179
|
var StaffListItemSchema = z3.object({
|
|
@@ -227,7 +188,7 @@ var StaffListItemSchema = z3.object({
|
|
|
227
188
|
employmentType: EmploymentTypeSchema,
|
|
228
189
|
status: z3.string(),
|
|
229
190
|
departmentName: z3.string().nullable(),
|
|
230
|
-
roleName:
|
|
191
|
+
roleName: z3.string().nullable(),
|
|
231
192
|
createdAt: z3.string()
|
|
232
193
|
});
|
|
233
194
|
var ListStaffInputSchema = PaginationInputSchema.extend({
|
|
@@ -235,14 +196,13 @@ var ListStaffInputSchema = PaginationInputSchema.extend({
|
|
|
235
196
|
description: "Search by name or email"
|
|
236
197
|
}),
|
|
237
198
|
departmentId: UuidSchema.optional(),
|
|
238
|
-
roleName:
|
|
199
|
+
roleName: z3.string().optional(),
|
|
239
200
|
status: z3.enum(["active", "inactive"]).optional()
|
|
240
201
|
});
|
|
241
202
|
var CreateStaffOutputSchema = z3.object({
|
|
242
203
|
staffId: UuidSchema,
|
|
243
204
|
userId: UuidSchema,
|
|
244
205
|
email: z3.string(),
|
|
245
|
-
/** Temp password was emailed — not returned in response for security */
|
|
246
206
|
emailSent: z3.boolean()
|
|
247
207
|
});
|
|
248
208
|
var DepartmentSchema = z3.object({
|
|
@@ -494,6 +454,76 @@ var StudentAttendanceRowSchema = z5.object({
|
|
|
494
454
|
className: z5.string()
|
|
495
455
|
});
|
|
496
456
|
|
|
457
|
+
// src/schemas/calendar.ts
|
|
458
|
+
import * as z6 from "zod";
|
|
459
|
+
var AcademicYearSchema = z6.object({
|
|
460
|
+
id: z6.string().uuid(),
|
|
461
|
+
branchId: z6.string().uuid(),
|
|
462
|
+
name: z6.string(),
|
|
463
|
+
startDate: z6.string(),
|
|
464
|
+
endDate: z6.string(),
|
|
465
|
+
isCurrent: z6.boolean(),
|
|
466
|
+
createdAt: z6.string()
|
|
467
|
+
});
|
|
468
|
+
var CreateYearInputSchema = z6.object({
|
|
469
|
+
name: z6.string().min(1).max(50),
|
|
470
|
+
startDate: z6.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Must be YYYY-MM-DD"),
|
|
471
|
+
endDate: z6.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Must be YYYY-MM-DD")
|
|
472
|
+
});
|
|
473
|
+
var SetCurrentYearInputSchema = z6.object({
|
|
474
|
+
yearId: z6.string().uuid()
|
|
475
|
+
});
|
|
476
|
+
var AcademicTermSchema = z6.object({
|
|
477
|
+
id: z6.string().uuid(),
|
|
478
|
+
branchId: z6.string().uuid(),
|
|
479
|
+
academicYearId: z6.string().uuid(),
|
|
480
|
+
name: z6.string(),
|
|
481
|
+
startDate: z6.string(),
|
|
482
|
+
endDate: z6.string(),
|
|
483
|
+
isCurrent: z6.boolean(),
|
|
484
|
+
createdAt: z6.string()
|
|
485
|
+
});
|
|
486
|
+
var CreateTermInputSchema = z6.object({
|
|
487
|
+
academicYearId: z6.string().uuid(),
|
|
488
|
+
name: z6.string().min(1).max(50),
|
|
489
|
+
startDate: z6.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Must be YYYY-MM-DD"),
|
|
490
|
+
endDate: z6.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Must be YYYY-MM-DD")
|
|
491
|
+
});
|
|
492
|
+
var SetCurrentTermInputSchema = z6.object({
|
|
493
|
+
termId: z6.string().uuid()
|
|
494
|
+
});
|
|
495
|
+
var ListTermsInputSchema = z6.object({
|
|
496
|
+
yearId: z6.string().uuid().optional()
|
|
497
|
+
});
|
|
498
|
+
|
|
499
|
+
// src/schemas/grades.ts
|
|
500
|
+
import * as z7 from "zod";
|
|
501
|
+
var GRADE_LEVELS = [
|
|
502
|
+
"PP1",
|
|
503
|
+
"PP2",
|
|
504
|
+
"G1",
|
|
505
|
+
"G2",
|
|
506
|
+
"G3",
|
|
507
|
+
"G4",
|
|
508
|
+
"G5",
|
|
509
|
+
"G6",
|
|
510
|
+
"G7",
|
|
511
|
+
"G8",
|
|
512
|
+
"G9"
|
|
513
|
+
];
|
|
514
|
+
var GradeSchema = z7.object({
|
|
515
|
+
id: z7.string().uuid(),
|
|
516
|
+
branchId: z7.string().uuid(),
|
|
517
|
+
name: z7.string(),
|
|
518
|
+
level: GradeLevelSchema,
|
|
519
|
+
description: z7.string().nullable()
|
|
520
|
+
});
|
|
521
|
+
var CreateGradeInputSchema = z7.object({
|
|
522
|
+
name: z7.string().min(1).max(50),
|
|
523
|
+
level: GradeLevelSchema,
|
|
524
|
+
description: z7.string().max(300).optional()
|
|
525
|
+
});
|
|
526
|
+
|
|
497
527
|
export {
|
|
498
528
|
CuidSchema,
|
|
499
529
|
UuidSchema,
|
|
@@ -515,7 +545,6 @@ export {
|
|
|
515
545
|
ResetPasswordInputSchema,
|
|
516
546
|
SwitchBranchInputSchema,
|
|
517
547
|
EmploymentTypeSchema,
|
|
518
|
-
RoleNameSchema,
|
|
519
548
|
CreateStaffInputSchema,
|
|
520
549
|
StaffProfileSchema,
|
|
521
550
|
StaffListItemSchema,
|
|
@@ -544,6 +573,16 @@ export {
|
|
|
544
573
|
GetByClassInputSchema,
|
|
545
574
|
ClassAttendanceRowSchema,
|
|
546
575
|
GetByStudentInputSchema,
|
|
547
|
-
StudentAttendanceRowSchema
|
|
576
|
+
StudentAttendanceRowSchema,
|
|
577
|
+
AcademicYearSchema,
|
|
578
|
+
CreateYearInputSchema,
|
|
579
|
+
SetCurrentYearInputSchema,
|
|
580
|
+
AcademicTermSchema,
|
|
581
|
+
CreateTermInputSchema,
|
|
582
|
+
SetCurrentTermInputSchema,
|
|
583
|
+
ListTermsInputSchema,
|
|
584
|
+
GRADE_LEVELS,
|
|
585
|
+
GradeSchema,
|
|
586
|
+
CreateGradeInputSchema
|
|
548
587
|
};
|
|
549
|
-
//# sourceMappingURL=chunk-
|
|
588
|
+
//# sourceMappingURL=chunk-TBCAMVHG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schemas/base.ts","../src/schemas/auth.ts","../src/schemas/hr.ts","../src/schemas/students.ts","../src/schemas/attendance.ts","../src/schemas/calendar.ts","../src/schemas/grades.ts"],"sourcesContent":["/**\n * Brite Future Schools — bfs-contracts\n * Base Zod schemas: reusable primitives shared across all domain schemas.\n *\n * Phase History:\n * Phase 0.1 (2026-06-05): Initial creation\n *\n * @module src/schemas/base\n * @since Phase 0.1\n */\n\nimport * as z from 'zod'\n\n// ── ID ─────────────────────────────────────────────────────────────────────────\n\nexport const CuidSchema = z\n .string()\n .regex(/^[a-z][a-z0-9]{24}$/, 'Invalid cuid2 identifier')\n .meta({ description: 'cuid2 — prefixed, collision-resistant identifier' })\n\n// ── UUID ───────────────────────────────────────────────────────────────────────\n\nexport const UuidSchema = z\n .uuidv4()\n .meta({ description: 'RFC-4122 UUID v4' })\n\n// ── Timestamps ─────────────────────────────────────────────────────────────────\n\nconst IsoDatetime = z.iso.datetime()\n\nexport const TimestampsSchema = z.object({\n createdAt: IsoDatetime.meta({ description: 'ISO-8601 creation time (UTC)' }),\n updatedAt: IsoDatetime.meta({ description: 'ISO-8601 last update time (UTC)' }),\n})\n\n// ── Soft-delete ────────────────────────────────────────────────────────────────\n\nexport const SoftDeleteSchema = z.object({\n deletedAt: IsoDatetime.nullable().meta({\n description: 'Set when the record is soft-deleted; null if active',\n }),\n})\n\n// ── Pagination ─────────────────────────────────────────────────────────────────\n\nexport const PaginationInputSchema = z.object({\n cursor: z.string().optional().meta({\n description: 'Opaque cursor from the previous page response',\n }),\n limit: z\n .int()\n .min(1)\n .max(200)\n .default(20)\n .meta({ description: 'Number of items to return (1–200, default 20)' }),\n})\n\nexport function paginatedOutputSchema<T extends z.ZodTypeAny>(itemSchema: T) {\n return z.object({\n items: z.array(itemSchema),\n nextCursor: z.string().nullable().meta({\n description: 'Pass as `cursor` on the next request; null when no more pages',\n }),\n total: z\n .int()\n .nonnegative()\n .meta({ description: 'Total matching records (before pagination)' }),\n })\n}\n\n// ── Branch reference ───────────────────────────────────────────────────────────\n\nexport const BranchRefSchema = z.object({\n branchId: CuidSchema.meta({ description: 'The branch this record belongs to' }),\n})\n\n// ── Inferred types ─────────────────────────────────────────────────────────────\n\nexport type Timestamps = z.infer<typeof TimestampsSchema>\nexport type SoftDelete = z.infer<typeof SoftDeleteSchema>\nexport type PaginationInput = z.infer<typeof PaginationInputSchema>","/**\n * Brite Future Schools — bfs-contracts\n * Auth-related Zod schemas.\n *\n * Phase History:\n * Phase 0.1 (2026-06-05): Initial creation\n * Phase 3 (2026-06-10): Replaced CuidSchema with z.string().uuid() per R-052\n *\n * @module src/schemas/auth\n * @since Phase 0.1\n */\n\nimport * as z from 'zod'\n\n// ── Session user (defined first — referenced by LoginOutputSchema below) ───────\n\nexport const SessionUserRoleSchema = z.object({\n id: z.string().uuid(),\n name: z.string().meta({ description: 'Role name, e.g. PRINCIPAL' }),\n branchId: z.string().uuid(),\n isPrimary: z.boolean(),\n})\n\nexport const SessionUserSubRoleSchema = z.object({\n id: z.string().uuid(),\n name: z.string().meta({ description: 'Sub-role name, e.g. HEAD_PREFECT' }),\n branchId: z.string().uuid(),\n})\n\nexport const SessionUserOutputSchema = z.object({\n id: z.string().uuid(),\n email: z.email(),\n firstName: z.string(),\n lastName: z.string(),\n activeBranchId: z.string().uuid(),\n roles: z.array(SessionUserRoleSchema),\n subRoles: z.array(SessionUserSubRoleSchema),\n isActive: z.boolean(),\n mustChangePassword: z.boolean(),\n})\n\n// ── Login ──────────────────────────────────────────────────────────────────────\n\nexport const LoginInputSchema = z.object({\n email: z.email().meta({ description: 'User email address' }),\n password: z.string().min(1).meta({ description: 'Plain-text password (sent over TLS)' }),\n branchId: z.string().uuid().optional().meta({\n description: 'Branch to activate on login; defaults to user primary branch',\n }),\n})\n\nexport const LoginOutputSchema = z.object({\n accessToken: z.string().meta({ description: 'Short-lived JWT (15 min)' }),\n refreshToken: z.string().meta({ description: 'Long-lived opaque refresh token (7 days)' }),\n expiresIn: z.int().positive().meta({ description: 'Access token TTL in seconds' }),\n user: SessionUserOutputSchema,\n})\n\n// ── Token refresh ──────────────────────────────────────────────────────────────\n\nexport const RefreshTokenInputSchema = z.object({\n refreshToken: z.string().min(1),\n})\n\nexport const RefreshTokenOutputSchema = z.object({\n accessToken: z.string(),\n expiresIn: z.int().positive(),\n})\n\n// ── Logout ─────────────────────────────────────────────────────────────────────\n\nexport const LogoutInputSchema = z.object({\n refreshToken: z.string().min(1).meta({\n description: 'The refresh token to revoke; also invalidated server-side',\n }),\n})\n\n// ── Password change ─────────────────────────────────────────────────────────────\n\nexport const ChangePasswordInputSchema = z\n .object({\n currentPassword: z.string().min(1),\n newPassword: z\n .string()\n .min(8, { error: 'Password must be at least 8 characters' }),\n confirmPassword: z.string().min(1),\n })\n .refine((v) => v.newPassword === v.confirmPassword, {\n error: 'Passwords do not match',\n path: ['confirmPassword'],\n })\n\n// ── Password reset ─────────────────────────────────────────────────────────────\n\nexport const RequestPasswordResetInputSchema = z.object({\n email: z.email(),\n})\n\nexport const ResetPasswordInputSchema = z\n .object({\n token: z.string().min(1).meta({ description: 'One-time reset token from email link' }),\n newPassword: z.string().min(8, { error: 'Password must be at least 8 characters' }),\n confirmPassword: z.string().min(1),\n })\n .refine((v) => v.newPassword === v.confirmPassword, {\n error: 'Passwords do not match',\n path: ['confirmPassword'],\n })\n\n// ── Branch switch ───────────────────────────────────────────────────────────────\n\nexport const SwitchBranchInputSchema = z.object({\n branchId: z.string().uuid().meta({ description: 'Branch to switch the active session to' }),\n})\n\n// ── Inferred types ──────────────────────────────────────────────────────────────\n\nexport type LoginInput = z.infer<typeof LoginInputSchema>\nexport type LoginOutput = z.infer<typeof LoginOutputSchema>\nexport type SessionUserOutput = z.infer<typeof SessionUserOutputSchema>\nexport type RefreshTokenInput = z.infer<typeof RefreshTokenInputSchema>\nexport type RefreshTokenOutput = z.infer<typeof RefreshTokenOutputSchema>\nexport type ChangePasswordInput = z.infer<typeof ChangePasswordInputSchema>\nexport type SwitchBranchInput = z.infer<typeof SwitchBranchInputSchema>","/**\n * Brite Future Schools — bfs-contracts\n * HR domain Zod schemas — staff creation, listing, and profiles.\n *\n * Phase History:\n * Phase 1 (2026-06-07): Initial creation\n * Phase 4.2 (2026-06-13): Removed hardcoded RoleNameSchema — role is now\n * a plain string (DB-driven). Removed salary fields\n * from CreateStaffInput — remuneration module owns\n * salary. Added helbNo, saccoNo statutory fields.\n * Updated StaffProfile to remove salary columns.\n *\n * @module src/schemas/hr\n * @since Phase 1\n */\n\nimport * as z from 'zod'\nimport { UuidSchema, PaginationInputSchema } from './base.js'\n\n// ── Enums ──────────────────────────────────────────────────────────────────────\n\nexport const EmploymentTypeSchema = z.enum([\n 'permanent',\n 'contract',\n 'temporary',\n 'intern',\n])\n\n// ── Create staff ───────────────────────────────────────────────────────────────\n\nexport const CreateStaffInputSchema = z.object({\n // Personal details\n firstName: z.string().min(1).max(100),\n middleName: z.string().max(100).optional(),\n lastName: z.string().min(1).max(100),\n email: z.email(),\n phone: z.string().min(9).max(30),\n nationalId: z.string().min(1).max(20),\n\n // Role assignment — DB-driven, any valid role code accepted\n roleName: z.string().min(1).meta({\n description: 'Role code from the roles table — e.g. TEACHER, PRINCIPAL',\n }),\n isPrimaryRole: z.boolean().default(true),\n\n // Employment details\n departmentId: UuidSchema.optional(),\n designation: z.string().min(1).max(100).meta({\n description: 'Job title, e.g. \"Mathematics Teacher\", \"Head of Finance\"',\n }),\n employmentType: EmploymentTypeSchema,\n contractStart: z.iso.date().meta({ description: 'ISO date, e.g. 2026-01-15' }),\n contractEnd: z.iso.date().optional(),\n\n // Banking (optional at creation — can be completed later)\n bankName: z.string().max(100).optional(),\n bankAccount: z.string().max(30).optional(),\n bankBranch: z.string().max(100).optional(),\n\n // Statutory (optional at creation)\n tscNumber: z.string().max(30).optional(),\n kraPin: z.string().max(20).optional(),\n nhifNo: z.string().max(20).optional(),\n nssfNo: z.string().max(20).optional(),\n helbNo: z.string().max(20).optional(),\n saccoNo: z.string().max(20).optional(),\n})\n\nexport type CreateStaffInput = z.infer<typeof CreateStaffInputSchema>\n\n// ── Staff profile (output) ─────────────────────────────────────────────────────\n\nexport const StaffProfileSchema = z.object({\n id: UuidSchema,\n userId: UuidSchema,\n branchId: UuidSchema,\n firstName: z.string(),\n middleName: z.string().nullable(),\n lastName: z.string(),\n phone: z.string(),\n nationalId: z.string(),\n tscNumber: z.string().nullable(),\n kraPin: z.string().nullable(),\n nhifNo: z.string().nullable(),\n nssfNo: z.string().nullable(),\n helbNo: z.string().nullable(),\n saccoNo: z.string().nullable(),\n designation: z.string(),\n employmentType: EmploymentTypeSchema,\n contractStart: z.string(),\n contractEnd: z.string().nullable(),\n bankName: z.string().nullable(),\n bankAccount: z.string().nullable(),\n bankBranch: z.string().nullable(),\n status: z.string(),\n createdAt: z.string(),\n email: z.string(),\n mustChangePassword: z.boolean(),\n departmentId: UuidSchema.nullable(),\n departmentName: z.string().nullable(),\n // Role — DB-driven code string, not a fixed enum\n roleName: z.string().nullable(),\n roleId: UuidSchema.nullable(),\n})\n\nexport type StaffProfile = z.infer<typeof StaffProfileSchema>\n\n// ── Staff list item ────────────────────────────────────────────────────────────\n\nexport const StaffListItemSchema = z.object({\n id: UuidSchema,\n userId: UuidSchema,\n firstName: z.string(),\n middleName: z.string().nullable(),\n lastName: z.string(),\n email: z.string(),\n phone: z.string(),\n designation: z.string(),\n employmentType: EmploymentTypeSchema,\n status: z.string(),\n departmentName: z.string().nullable(),\n roleName: z.string().nullable(),\n createdAt: z.string(),\n})\n\nexport type StaffListItem = z.infer<typeof StaffListItemSchema>\n\n// ── List staff input ───────────────────────────────────────────────────────────\n\nexport const ListStaffInputSchema = PaginationInputSchema.extend({\n search: z.string().optional().meta({\n description: 'Search by name or email',\n }),\n departmentId: UuidSchema.optional(),\n roleName: z.string().optional(),\n status: z.enum(['active', 'inactive']).optional(),\n})\n\nexport type ListStaffInput = z.infer<typeof ListStaffInputSchema>\n\n// ── Create staff output ────────────────────────────────────────────────────────\n\nexport const CreateStaffOutputSchema = z.object({\n staffId: UuidSchema,\n userId: UuidSchema,\n email: z.string(),\n emailSent: z.boolean(),\n})\n\nexport type CreateStaffOutput = z.infer<typeof CreateStaffOutputSchema>\n\n// ── Department ─────────────────────────────────────────────────────────────────\n\nexport const DepartmentSchema = z.object({\n id: UuidSchema,\n branchId: UuidSchema,\n name: z.string(),\n hodId: UuidSchema.nullable(),\n})\n\nexport type Department = z.infer<typeof DepartmentSchema>\n\nexport const CreateDepartmentInputSchema = z.object({\n name: z.string().min(1).max(100),\n hodId: UuidSchema.optional(),\n})\n\nexport type CreateDepartmentInput = z.infer<typeof CreateDepartmentInputSchema>","/**\n * Brite Future Schools — bfs-contracts\n * Students domain Zod schemas.\n *\n * Phase History:\n * Phase 1 (2026-06-07): Initial creation — student create, list,\n * bulk upload, guardian linkage\n *\n * @module src/schemas/students\n * @since Phase 1\n */\n\nimport * as z from 'zod'\nimport { UuidSchema, PaginationInputSchema } from './base.js'\n\n// ── Enums ──────────────────────────────────────────────────────────────────────\n\nexport const GenderSchema = z.enum(['male', 'female'])\n\nexport const StudentStatusSchema = z.enum([\n 'active',\n 'transferred',\n 'graduated',\n 'suspended',\n 'withdrawn',\n])\n\nexport const GradeLevelSchema = z.enum([\n 'PP1', 'PP2',\n 'G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7', 'G8', 'G9',\n])\n\n// ── Create single student ──────────────────────────────────────────────────────\n\nexport const CreateStudentInputSchema = z.object({\n // Identity\n firstName: z.string().min(1).max(100),\n middleName: z.string().max(100).optional(),\n lastName: z.string().min(1).max(100),\n dateOfBirth: z.iso.date().meta({ description: 'ISO date, e.g. 2015-03-22' }),\n gender: GenderSchema,\n admissionNo: z.string().min(1).max(50).meta({\n description: 'School-assigned admission number — must be unique per branch',\n }),\n nemisNo: z.string().max(50).optional(),\n admissionDate: z.iso.date(),\n bloodGroup: z.string().max(10).optional(),\n medicalNotes: z.string().optional(),\n\n // Class placement (optional at creation — can be enrolled later)\n classId: UuidSchema.optional().meta({\n description: 'Class to enrol student in for the current term',\n }),\n termId: UuidSchema.optional().meta({\n description: 'Term for class enrolment — required if classId is provided',\n }),\n\n // Guardian (optional at creation — can be linked later)\n guardian: z.object({\n firstName: z.string().min(1).max(100),\n middleName: z.string().max(100).optional(),\n lastName: z.string().min(1).max(100),\n relationship: z.string().min(1).max(50).meta({\n description: 'e.g. mother, father, uncle, guardian',\n }),\n phone: z.string().min(9).max(30),\n email: z.email().optional(),\n nationalId: z.string().max(20).optional(),\n occupation: z.string().max(100).optional(),\n }).optional(),\n})\n\nexport type CreateStudentInput = z.infer<typeof CreateStudentInputSchema>\n\n// ── Student profile (output) ───────────────────────────────────────────────────\n\nexport const StudentProfileSchema = z.object({\n id: UuidSchema,\n branchId: UuidSchema,\n admissionNo: z.string(),\n nemisNo: z.string().nullable(),\n firstName: z.string(),\n middleName: z.string().nullable(),\n lastName: z.string(),\n dateOfBirth: z.string(),\n gender: GenderSchema,\n photoUrl: z.string().nullable(),\n bloodGroup: z.string().nullable(),\n medicalNotes: z.string().nullable(),\n admissionDate: z.string(),\n status: StudentStatusSchema,\n createdAt: z.string(),\n\n // Current class (from latest enrollment)\n currentClass: z.object({\n classId: UuidSchema,\n className: z.string(),\n gradeLevel: GradeLevelSchema,\n termId: UuidSchema,\n termName: z.string(),\n }).nullable(),\n\n // Guardians\n guardians: z.array(z.object({\n id: UuidSchema,\n firstName: z.string(),\n middleName: z.string().nullable(),\n lastName: z.string(),\n relationship: z.string(),\n phone: z.string(),\n email: z.string().nullable(),\n isPrimary: z.boolean(),\n })),\n})\n\nexport type StudentProfile = z.infer<typeof StudentProfileSchema>\n\n// ── Student list item ──────────────────────────────────────────────────────────\n\nexport const StudentListItemSchema = z.object({\n id: UuidSchema,\n admissionNo: z.string(),\n firstName: z.string(),\n middleName: z.string().nullable(),\n lastName: z.string(),\n gender: GenderSchema,\n status: StudentStatusSchema,\n className: z.string().nullable(),\n gradeLevel: GradeLevelSchema.nullable(),\n primaryGuardianName: z.string().nullable(),\n primaryGuardianPhone: z.string().nullable(),\n createdAt: z.string(),\n})\n\nexport type StudentListItem = z.infer<typeof StudentListItemSchema>\n\n// ── List students input ────────────────────────────────────────────────────────\n\nexport const ListStudentsInputSchema = PaginationInputSchema.extend({\n search: z.string().optional().meta({\n description: 'Search by name or admission number',\n }),\n classId: UuidSchema.optional(),\n gradeLevel: GradeLevelSchema.optional(),\n status: StudentStatusSchema.optional(),\n termId: UuidSchema.optional(),\n})\n\nexport type ListStudentsInput = z.infer<typeof ListStudentsInputSchema>\n\n// ── Bulk upload ────────────────────────────────────────────────────────────────\n\n/**\n * One row from a CSV bulk upload.\n * Column mapping is flexible — the upload endpoint accepts this shape\n * after the CSV parser maps headers to these field names.\n */\nexport const BulkUploadStudentRowSchema = z.object({\n firstName: z.string().min(1),\n middleName: z.string().optional(),\n lastName: z.string().min(1),\n dateOfBirth: z.string().min(1).meta({ description: 'Any parseable date string' }),\n gender: z.string().min(1).meta({ description: 'male | female (case-insensitive)' }),\n admissionNo: z.string().min(1),\n nemisNo: z.string().optional(),\n admissionDate: z.string().optional(),\n bloodGroup: z.string().optional(),\n\n // Guardian columns (all optional in CSV)\n guardianFirstName: z.string().optional(),\n guardianLastName: z.string().optional(),\n guardianRelationship: z.string().optional(),\n guardianPhone: z.string().optional(),\n guardianEmail: z.string().optional(),\n})\n\nexport type BulkUploadStudentRow = z.infer<typeof BulkUploadStudentRowSchema>\n\nexport const BulkUploadStudentsInputSchema = z.object({\n classId: UuidSchema.meta({\n description: 'Class to enrol all uploaded students into',\n }),\n termId: UuidSchema,\n rows: z.array(BulkUploadStudentRowSchema).min(1).max(500),\n})\n\nexport type BulkUploadStudentsInput = z.infer<typeof BulkUploadStudentsInputSchema>\n\nexport const BulkUploadStudentsOutputSchema = z.object({\n created: z.int().nonnegative(),\n skipped: z.int().nonnegative(),\n errors: z.array(z.object({\n row: z.int().positive(),\n admissionNo: z.string().optional(),\n reason: z.string(),\n })),\n})\n\nexport type BulkUploadStudentsOutput = z.infer<typeof BulkUploadStudentsOutputSchema>\n\n// ── Create student output ──────────────────────────────────────────────────────\n\nexport const CreateStudentOutputSchema = z.object({\n studentId: UuidSchema,\n admissionNo: z.string(),\n})\n\nexport type CreateStudentOutput = z.infer<typeof CreateStudentOutputSchema>\n\n// ── Link guardian ──────────────────────────────────────────────────────────────\n\nexport const LinkGuardianInputSchema = z.object({\n studentId: UuidSchema,\n firstName: z.string().min(1).max(100),\n middleName: z.string().max(100).optional(),\n lastName: z.string().min(1).max(100),\n relationship: z.string().min(1).max(50),\n phone: z.string().min(9).max(30),\n email: z.email().optional(),\n nationalId: z.string().max(20).optional(),\n occupation: z.string().max(100).optional(),\n isPrimary: z.boolean().default(false),\n})\n\nexport type LinkGuardianInput = z.infer<typeof LinkGuardianInputSchema>\n\n// ── Classes (for selectors) ────────────────────────────────────────────────────\n\nexport const ClassSummarySchema = z.object({\n id: UuidSchema,\n name: z.string(),\n gradeLevel: GradeLevelSchema,\n gradeName: z.string(),\n capacity: z.number().nullable(),\n enrolledCount: z.number(),\n classTeacherId: UuidSchema.nullable(),\n})\n\nexport type ClassSummary = z.infer<typeof ClassSummarySchema>","/**\n * Brite Future Schools — bfs-contracts\n * Attendance domain Zod schemas.\n *\n * Phase History:\n * Phase 2.1 (2026-06-08): Initial — class attendance mark, getByClass,\n * getByStudent, listTerms\n *\n * @module src/schemas/attendance\n * @since Phase 2.1\n */\n\nimport * as z from 'zod'\nimport { UuidSchema } from './base.js'\n\n// ── Enums ──────────────────────────────────────────────────────────────────────\n\nexport const AttendanceStatusSchema = z.enum([\n 'present',\n 'absent',\n 'late',\n 'excused',\n])\n\nexport type AttendanceStatusEnum = z.infer<typeof AttendanceStatusSchema>\n\n// ── Term ───────────────────────────────────────────────────────────────────────\n\nexport const TermSchema = z.object({\n id: UuidSchema,\n branchId: UuidSchema,\n academicYearId: UuidSchema,\n name: z.string(),\n startDate: z.string(),\n endDate: z.string(),\n isCurrent: z.boolean(),\n})\n\nexport type Term = z.infer<typeof TermSchema>\n\n// ── Mark attendance ────────────────────────────────────────────────────────────\n\nexport const AttendanceRecordInputSchema = z.object({\n studentId: UuidSchema,\n status: AttendanceStatusSchema,\n notes: z.string().max(500).optional(),\n})\n\nexport const MarkAttendanceInputSchema = z.object({\n classId: UuidSchema,\n termId: UuidSchema,\n date: z.iso.date(),\n records: z.array(AttendanceRecordInputSchema).min(1),\n})\n\nexport type MarkAttendanceInput = z.infer<typeof MarkAttendanceInputSchema>\n\nexport const MarkAttendanceOutputSchema = z.object({\n count: z.number(),\n date: z.string(),\n classId: UuidSchema,\n})\n\nexport type MarkAttendanceOutput = z.infer<typeof MarkAttendanceOutputSchema>\n\n// ── Get by class ───────────────────────────────────────────────────────────────\n\nexport const GetByClassInputSchema = z.object({\n classId: UuidSchema,\n date: z.iso.date(),\n})\n\nexport type GetByClassInput = z.infer<typeof GetByClassInputSchema>\n\nexport const ClassAttendanceRowSchema = z.object({\n id: UuidSchema,\n studentId: UuidSchema,\n firstName: z.string(),\n middleName: z.string().nullable(),\n lastName: z.string(),\n admissionNo: z.string(),\n status: AttendanceStatusSchema,\n notes: z.string().nullable(),\n markedBy: UuidSchema,\n updatedAt: z.string(),\n})\n\nexport type ClassAttendanceRow = z.infer<typeof ClassAttendanceRowSchema>\n\n// ── Get by student ─────────────────────────────────────────────────────────────\n\nexport const GetByStudentInputSchema = z.object({\n studentId: UuidSchema,\n termId: UuidSchema,\n})\n\nexport type GetByStudentInput = z.infer<typeof GetByStudentInputSchema>\n\nexport const StudentAttendanceRowSchema = z.object({\n id: UuidSchema,\n date: z.string(),\n status: AttendanceStatusSchema,\n notes: z.string().nullable(),\n classId: UuidSchema,\n className: z.string(),\n})\n\nexport type StudentAttendanceRow = z.infer<typeof StudentAttendanceRowSchema>","/**\n * Brite Future Schools — bfs-contracts\n * Calendar schemas — academic years and terms.\n *\n * Phase History:\n * Phase 4.1 (2026-06-12): Initial creation\n *\n * @module src/schemas/calendar\n * @since Phase 4.1\n */\n\nimport * as z from 'zod'\n\n// ── Academic Year ──────────────────────────────────────────────────────────────\n\nexport const AcademicYearSchema = z.object({\n id: z.string().uuid(),\n branchId: z.string().uuid(),\n name: z.string(),\n startDate: z.string(),\n endDate: z.string(),\n isCurrent: z.boolean(),\n createdAt: z.string(),\n})\n\nexport const CreateYearInputSchema = z.object({\n name: z.string().min(1).max(50),\n startDate: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Must be YYYY-MM-DD'),\n endDate: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Must be YYYY-MM-DD'),\n})\n\nexport const SetCurrentYearInputSchema = z.object({\n yearId: z.string().uuid(),\n})\n\n// ── Academic Term ──────────────────────────────────────────────────────────────\n// Prefixed with \"Academic\" to avoid clash with attendance.ts TermSchema / Term\n\nexport const AcademicTermSchema = z.object({\n id: z.string().uuid(),\n branchId: z.string().uuid(),\n academicYearId: z.string().uuid(),\n name: z.string(),\n startDate: z.string(),\n endDate: z.string(),\n isCurrent: z.boolean(),\n createdAt: z.string(),\n})\n\nexport const CreateTermInputSchema = z.object({\n academicYearId: z.string().uuid(),\n name: z.string().min(1).max(50),\n startDate: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Must be YYYY-MM-DD'),\n endDate: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Must be YYYY-MM-DD'),\n})\n\nexport const SetCurrentTermInputSchema = z.object({\n termId: z.string().uuid(),\n})\n\nexport const ListTermsInputSchema = z.object({\n yearId: z.string().uuid().optional(),\n})\n\n// ── Inferred types ─────────────────────────────────────────────────────────────\n\nexport type AcademicYear = z.infer<typeof AcademicYearSchema>\nexport type AcademicTerm = z.infer<typeof AcademicTermSchema>\nexport type CreateYearInput = z.infer<typeof CreateYearInputSchema>\nexport type CreateTermInput = z.infer<typeof CreateTermInputSchema>","/**\n * Brite Future Schools — bfs-contracts\n * Grades schemas.\n *\n * Phase History:\n * Phase 4.1 (2026-06-12): Initial creation\n *\n * @module src/schemas/grades\n * @since Phase 4.1\n */\n\nimport * as z from 'zod'\nimport { GradeLevelSchema } from './students.js'\n\n// Re-export so consumers can import GradeLevel from grades if needed\nexport { GradeLevelSchema }\n\nexport const GRADE_LEVELS = [\n 'PP1', 'PP2',\n 'G1', 'G2', 'G3', 'G4', 'G5', 'G6',\n 'G7', 'G8', 'G9',\n] as const\n\nexport type GradeLevel = typeof GRADE_LEVELS[number]\n\nexport const GradeSchema = z.object({\n id: z.string().uuid(),\n branchId: z.string().uuid(),\n name: z.string(),\n level: GradeLevelSchema,\n description: z.string().nullable(),\n})\n\nexport const CreateGradeInputSchema = z.object({\n name: z.string().min(1).max(50),\n level: GradeLevelSchema,\n description: z.string().max(300).optional(),\n})\n\n// ── Inferred types ─────────────────────────────────────────────────────────────\n\nexport type Grade = z.infer<typeof GradeSchema>\nexport type CreateGradeInput = z.infer<typeof CreateGradeInputSchema>"],"mappings":"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","names":["z","z","z","z","z","z"]}
|
|
@@ -1,20 +1,27 @@
|
|
|
1
1
|
import {
|
|
2
|
+
AcademicTermSchema,
|
|
3
|
+
AcademicYearSchema,
|
|
2
4
|
BulkUploadStudentsInputSchema,
|
|
3
5
|
BulkUploadStudentsOutputSchema,
|
|
4
6
|
ChangePasswordInputSchema,
|
|
5
7
|
ClassAttendanceRowSchema,
|
|
6
8
|
ClassSummarySchema,
|
|
7
9
|
CreateDepartmentInputSchema,
|
|
10
|
+
CreateGradeInputSchema,
|
|
8
11
|
CreateStaffInputSchema,
|
|
9
12
|
CreateStaffOutputSchema,
|
|
10
13
|
CreateStudentInputSchema,
|
|
11
14
|
CreateStudentOutputSchema,
|
|
15
|
+
CreateTermInputSchema,
|
|
16
|
+
CreateYearInputSchema,
|
|
12
17
|
DepartmentSchema,
|
|
13
18
|
GetByClassInputSchema,
|
|
14
19
|
GetByStudentInputSchema,
|
|
20
|
+
GradeSchema,
|
|
15
21
|
LinkGuardianInputSchema,
|
|
16
22
|
ListStaffInputSchema,
|
|
17
23
|
ListStudentsInputSchema,
|
|
24
|
+
ListTermsInputSchema,
|
|
18
25
|
LoginInputSchema,
|
|
19
26
|
LoginOutputSchema,
|
|
20
27
|
LogoutInputSchema,
|
|
@@ -25,6 +32,8 @@ import {
|
|
|
25
32
|
RequestPasswordResetInputSchema,
|
|
26
33
|
ResetPasswordInputSchema,
|
|
27
34
|
SessionUserOutputSchema,
|
|
35
|
+
SetCurrentTermInputSchema,
|
|
36
|
+
SetCurrentYearInputSchema,
|
|
28
37
|
StaffListItemSchema,
|
|
29
38
|
StaffProfileSchema,
|
|
30
39
|
StudentAttendanceRowSchema,
|
|
@@ -33,7 +42,7 @@ import {
|
|
|
33
42
|
SwitchBranchInputSchema,
|
|
34
43
|
TermSchema,
|
|
35
44
|
UuidSchema
|
|
36
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-TBCAMVHG.js";
|
|
37
46
|
|
|
38
47
|
// src/contracts/auth.ts
|
|
39
48
|
import { oc } from "@orpc/contract";
|
|
@@ -124,6 +133,34 @@ var attendanceContract = {
|
|
|
124
133
|
listTerms: listTermsContract
|
|
125
134
|
};
|
|
126
135
|
|
|
136
|
+
// src/contracts/calendar.ts
|
|
137
|
+
import { oc as oc5 } from "@orpc/contract";
|
|
138
|
+
import * as z5 from "zod";
|
|
139
|
+
var listYearsContract = oc5.route({ method: "GET", path: "/calendar/years" }).input(z5.object({})).output(z5.array(AcademicYearSchema));
|
|
140
|
+
var createYearContract = oc5.route({ method: "POST", path: "/calendar/years" }).input(CreateYearInputSchema).output(AcademicYearSchema);
|
|
141
|
+
var setCurrentYearContract = oc5.route({ method: "POST", path: "/calendar/years/current" }).input(SetCurrentYearInputSchema).output(AcademicYearSchema);
|
|
142
|
+
var calendarListTermsContract = oc5.route({ method: "GET", path: "/calendar/terms" }).input(ListTermsInputSchema).output(z5.array(AcademicTermSchema));
|
|
143
|
+
var createTermContract = oc5.route({ method: "POST", path: "/calendar/terms" }).input(CreateTermInputSchema).output(AcademicTermSchema);
|
|
144
|
+
var setCurrentTermContract = oc5.route({ method: "POST", path: "/calendar/terms/current" }).input(SetCurrentTermInputSchema).output(AcademicTermSchema);
|
|
145
|
+
var calendarContract = {
|
|
146
|
+
listYears: listYearsContract,
|
|
147
|
+
createYear: createYearContract,
|
|
148
|
+
setCurrentYear: setCurrentYearContract,
|
|
149
|
+
listTerms: calendarListTermsContract,
|
|
150
|
+
createTerm: createTermContract,
|
|
151
|
+
setCurrentTerm: setCurrentTermContract
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
// src/contracts/grades.ts
|
|
155
|
+
import { oc as oc6 } from "@orpc/contract";
|
|
156
|
+
import * as z6 from "zod";
|
|
157
|
+
var listGradesContract = oc6.route({ method: "GET", path: "/grades" }).input(z6.object({})).output(z6.array(GradeSchema));
|
|
158
|
+
var createGradeContract = oc6.route({ method: "POST", path: "/grades" }).input(CreateGradeInputSchema).output(GradeSchema);
|
|
159
|
+
var gradesContract = {
|
|
160
|
+
list: listGradesContract,
|
|
161
|
+
create: createGradeContract
|
|
162
|
+
};
|
|
163
|
+
|
|
127
164
|
export {
|
|
128
165
|
loginContract,
|
|
129
166
|
refreshTokenContract,
|
|
@@ -152,6 +189,16 @@ export {
|
|
|
152
189
|
getByClassContract,
|
|
153
190
|
getByStudentContract,
|
|
154
191
|
listTermsContract,
|
|
155
|
-
attendanceContract
|
|
192
|
+
attendanceContract,
|
|
193
|
+
listYearsContract,
|
|
194
|
+
createYearContract,
|
|
195
|
+
setCurrentYearContract,
|
|
196
|
+
calendarListTermsContract,
|
|
197
|
+
createTermContract,
|
|
198
|
+
setCurrentTermContract,
|
|
199
|
+
calendarContract,
|
|
200
|
+
listGradesContract,
|
|
201
|
+
createGradeContract,
|
|
202
|
+
gradesContract
|
|
156
203
|
};
|
|
157
|
-
//# sourceMappingURL=chunk-
|
|
204
|
+
//# sourceMappingURL=chunk-ZHUFBLV5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contracts/auth.ts","../src/contracts/hr.ts","../src/contracts/students.ts","../src/contracts/attendance.ts","../src/contracts/calendar.ts","../src/contracts/grades.ts"],"sourcesContent":["/**\n * Brite Future Schools — bfs-contracts\n * Auth oRPC contract.\n *\n * Defines the API surface for authentication. The bfs-api module\n * imports this and passes it to `implement()` — no logic lives here.\n *\n * HTTP method + path pairs follow REST conventions and feed into the\n * OpenAPI spec that oRPC generates automatically.\n *\n * Phase History:\n * Phase 0.1 (2026-06-05): Initial creation\n *\n * @module src/contracts/auth\n * @since Phase 0.1\n */\n\nimport { oc } from '@orpc/contract'\nimport * as z from 'zod'\nimport {\n ChangePasswordInputSchema,\n LoginInputSchema,\n LoginOutputSchema,\n LogoutInputSchema,\n RefreshTokenInputSchema,\n RefreshTokenOutputSchema,\n RequestPasswordResetInputSchema,\n ResetPasswordInputSchema,\n SessionUserOutputSchema,\n SwitchBranchInputSchema,\n} from '../schemas/auth.js'\n\n/** Reusable empty-success output — used by mutations that return nothing */\nconst EmptyOutputSchema = z.object({}).meta({ description: 'Empty success response' })\n\n// ── Individual procedure contracts ────────────────────────────────────────────\n\n/** Exchange email + password for access/refresh token pair */\nexport const loginContract = oc\n .route({ method: 'POST', path: '/auth/login' })\n .input(LoginInputSchema)\n .output(LoginOutputSchema)\n\n/** Exchange a refresh token for a new access token */\nexport const refreshTokenContract = oc\n .route({ method: 'POST', path: '/auth/refresh' })\n .input(RefreshTokenInputSchema)\n .output(RefreshTokenOutputSchema)\n\n/** Revoke the current refresh token and end the session */\nexport const logoutContract = oc\n .route({ method: 'POST', path: '/auth/logout' })\n .input(LogoutInputSchema)\n .output(EmptyOutputSchema)\n\n/** Return the session user object for the current access token */\nexport const getMeContract = oc\n .route({ method: 'GET', path: '/auth/me' })\n .output(SessionUserOutputSchema)\n\n/** Change password (authenticated, requires current password) */\nexport const changePasswordContract = oc\n .route({ method: 'POST', path: '/auth/change-password' })\n .input(ChangePasswordInputSchema)\n .output(EmptyOutputSchema)\n\n/** Request a password-reset email */\nexport const requestPasswordResetContract = oc\n .route({ method: 'POST', path: '/auth/request-password-reset' })\n .input(RequestPasswordResetInputSchema)\n .output(EmptyOutputSchema)\n\n/** Complete a password reset using the emailed one-time token */\nexport const resetPasswordContract = oc\n .route({ method: 'POST', path: '/auth/reset-password' })\n .input(ResetPasswordInputSchema)\n .output(EmptyOutputSchema)\n\n/** Switch the active branch within an existing session */\nexport const switchBranchContract = oc\n .route({ method: 'POST', path: '/auth/switch-branch' })\n .input(SwitchBranchInputSchema)\n .output(SessionUserOutputSchema)\n\n// ── Auth contract router ──────────────────────────────────────────────────────\n\nexport const authContract = {\n login: loginContract,\n refreshToken: refreshTokenContract,\n logout: logoutContract,\n me: getMeContract,\n changePassword: changePasswordContract,\n requestPasswordReset: requestPasswordResetContract,\n resetPassword: resetPasswordContract,\n switchBranch: switchBranchContract,\n}\n","/**\n * Brite Future Schools — bfs-contracts\n * HR oRPC contract — staff and department procedure definitions.\n *\n * Phase History:\n * Phase 1 (2026-06-07): Initial creation\n *\n * @module src/contracts/hr\n * @since Phase 1\n */\n\nimport { oc } from '@orpc/contract'\nimport * as z from 'zod'\nimport { UuidSchema, PaginationInputSchema } from '../schemas/base.js'\nimport {\n CreateStaffInputSchema,\n CreateStaffOutputSchema,\n StaffProfileSchema,\n StaffListItemSchema,\n ListStaffInputSchema,\n DepartmentSchema,\n CreateDepartmentInputSchema,\n} from '../schemas/hr.js'\n\nconst EmptyOutput = z.object({})\n\n// ── Staff ──────────────────────────────────────────────────────────────────────\n\nexport const createStaffContract = oc\n .route({ method: 'POST', path: '/hr/staff' })\n .input(CreateStaffInputSchema)\n .output(CreateStaffOutputSchema)\n\nexport const listStaffContract = oc\n .route({ method: 'GET', path: '/hr/staff' })\n .input(ListStaffInputSchema)\n .output(z.object({\n items: z.array(StaffListItemSchema),\n total: z.number(),\n nextCursor: UuidSchema.nullable(),\n }))\n\nexport const getStaffByIdContract = oc\n .route({ method: 'GET', path: '/hr/staff/{id}' })\n .input(z.object({ id: UuidSchema }))\n .output(StaffProfileSchema)\n\nexport const updateStaffStatusContract = oc\n .route({ method: 'PATCH', path: '/hr/staff/{id}/status' })\n .input(z.object({\n id: UuidSchema,\n status: z.enum(['active', 'inactive', 'suspended']),\n }))\n .output(EmptyOutput)\n\n// ── Departments ────────────────────────────────────────────────────────────────\n\nexport const listDepartmentsContract = oc\n .route({ method: 'GET', path: '/hr/departments' })\n .input(z.object({ branchId: UuidSchema.optional() }))\n .output(z.array(DepartmentSchema))\n\nexport const createDepartmentContract = oc\n .route({ method: 'POST', path: '/hr/departments' })\n .input(CreateDepartmentInputSchema)\n .output(DepartmentSchema)\n\n// ── HR contract router ─────────────────────────────────────────────────────────\n\nexport const hrContract = {\n createStaff: createStaffContract,\n listStaff: listStaffContract,\n getStaffById: getStaffByIdContract,\n updateStaffStatus: updateStaffStatusContract,\n listDepartments: listDepartmentsContract,\n createDepartment: createDepartmentContract,\n}","/**\n * Brite Future Schools — bfs-contracts\n * Students oRPC contract — student and guardian procedure definitions.\n *\n * Phase History:\n * Phase 1 (2026-06-07): Initial creation\n *\n * @module src/contracts/students\n * @since Phase 1\n */\n\nimport { oc } from '@orpc/contract'\nimport * as z from 'zod'\nimport { UuidSchema } from '../schemas/base.js'\nimport {\n CreateStudentInputSchema,\n CreateStudentOutputSchema,\n StudentProfileSchema,\n StudentListItemSchema,\n ListStudentsInputSchema,\n BulkUploadStudentsInputSchema,\n BulkUploadStudentsOutputSchema,\n LinkGuardianInputSchema,\n ClassSummarySchema,\n} from '../schemas/students.js'\n\nconst EmptyOutput = z.object({})\n\n// ── Students ───────────────────────────────────────────────────────────────────\n\nexport const createStudentContract = oc\n .route({ method: 'POST', path: '/students' })\n .input(CreateStudentInputSchema)\n .output(CreateStudentOutputSchema)\n\nexport const bulkUploadStudentsContract = oc\n .route({ method: 'POST', path: '/students/bulk' })\n .input(BulkUploadStudentsInputSchema)\n .output(BulkUploadStudentsOutputSchema)\n\nexport const listStudentsContract = oc\n .route({ method: 'GET', path: '/students' })\n .input(ListStudentsInputSchema)\n .output(z.object({\n items: z.array(StudentListItemSchema),\n total: z.number(),\n nextCursor: UuidSchema.nullable(),\n }))\n\nexport const getStudentByIdContract = oc\n .route({ method: 'GET', path: '/students/{id}' })\n .input(z.object({ id: UuidSchema }))\n .output(StudentProfileSchema)\n\n// ── Guardians ──────────────────────────────────────────────────────────────────\n\nexport const linkGuardianContract = oc\n .route({ method: 'POST', path: '/students/guardians' })\n .input(LinkGuardianInputSchema)\n .output(z.object({ guardianId: UuidSchema }))\n\n// ── Classes (selector data) ────────────────────────────────────────────────────\n\nexport const listClassesContract = oc\n .route({ method: 'GET', path: '/students/classes' })\n .input(z.object({\n termId: UuidSchema.optional(),\n gradeLevel: z.string().optional(),\n }))\n .output(z.array(ClassSummarySchema))\n\n// ── Students contract router ───────────────────────────────────────────────────\n\nexport const studentsContract = {\n create: createStudentContract,\n bulkUpload: bulkUploadStudentsContract,\n list: listStudentsContract,\n getById: getStudentByIdContract,\n linkGuardian: linkGuardianContract,\n listClasses: listClassesContract,\n}","/**\n * Brite Future Schools — bfs-contracts\n * Attendance oRPC contract — class attendance procedure definitions.\n *\n * Phase History:\n * Phase 2.1 (2026-06-08): Initial — mark, getByClass, getByStudent, listTerms\n *\n * @module src/contracts/attendance\n * @since Phase 2.1\n */\n\nimport { oc } from '@orpc/contract'\nimport * as z from 'zod'\nimport { UuidSchema } from '../schemas/base.js'\nimport {\n MarkAttendanceInputSchema,\n MarkAttendanceOutputSchema,\n GetByClassInputSchema,\n GetByStudentInputSchema,\n ClassAttendanceRowSchema,\n StudentAttendanceRowSchema,\n TermSchema,\n} from '../schemas/attendance.js'\n\n// ── Class attendance ───────────────────────────────────────────────────────────\n\nexport const markAttendanceContract = oc\n .route({ method: 'POST', path: '/attendance/class/mark' })\n .input(MarkAttendanceInputSchema)\n .output(MarkAttendanceOutputSchema)\n\nexport const getByClassContract = oc\n .route({ method: 'GET', path: '/attendance/class' })\n .input(GetByClassInputSchema)\n .output(z.array(ClassAttendanceRowSchema))\n\nexport const getByStudentContract = oc\n .route({ method: 'GET', path: '/attendance/student' })\n .input(GetByStudentInputSchema)\n .output(z.array(StudentAttendanceRowSchema))\n\n// ── Terms ──────────────────────────────────────────────────────────────────────\n\nexport const listTermsContract = oc\n .route({ method: 'GET', path: '/terms' })\n .input(z.object({}))\n .output(z.array(TermSchema))\n\n// ── Attendance contract router ─────────────────────────────────────────────────\n\nexport const attendanceContract = {\n mark: markAttendanceContract,\n getByClass: getByClassContract,\n getByStudent: getByStudentContract,\n listTerms: listTermsContract,\n}","/**\n * Brite Future Schools — bfs-contracts\n * Calendar oRPC contract — academic year and term procedure definitions.\n *\n * Phase History:\n * Phase 4.1 (2026-06-12): Initial creation\n *\n * @module src/contracts/calendar\n * @since Phase 4.1\n */\n\nimport { oc } from '@orpc/contract'\nimport * as z from 'zod'\nimport {\n AcademicYearSchema,\n AcademicTermSchema,\n CreateYearInputSchema,\n CreateTermInputSchema,\n SetCurrentYearInputSchema,\n SetCurrentTermInputSchema,\n ListTermsInputSchema,\n} from '../schemas/calendar.js'\n\n// ── Academic Years ─────────────────────────────────────────────────────────────\n\nexport const listYearsContract = oc\n .route({ method: 'GET', path: '/calendar/years' })\n .input(z.object({}))\n .output(z.array(AcademicYearSchema))\n\nexport const createYearContract = oc\n .route({ method: 'POST', path: '/calendar/years' })\n .input(CreateYearInputSchema)\n .output(AcademicYearSchema)\n\nexport const setCurrentYearContract = oc\n .route({ method: 'POST', path: '/calendar/years/current' })\n .input(SetCurrentYearInputSchema)\n .output(AcademicYearSchema)\n\n// ── Terms ──────────────────────────────────────────────────────────────────────\n// Prefixed with \"calendarList\" to avoid clash with attendance.listTermsContract\n\nexport const calendarListTermsContract = oc\n .route({ method: 'GET', path: '/calendar/terms' })\n .input(ListTermsInputSchema)\n .output(z.array(AcademicTermSchema))\n\nexport const createTermContract = oc\n .route({ method: 'POST', path: '/calendar/terms' })\n .input(CreateTermInputSchema)\n .output(AcademicTermSchema)\n\nexport const setCurrentTermContract = oc\n .route({ method: 'POST', path: '/calendar/terms/current' })\n .input(SetCurrentTermInputSchema)\n .output(AcademicTermSchema)\n\n// ── Calendar contract router ───────────────────────────────────────────────────\n\nexport const calendarContract = {\n listYears: listYearsContract,\n createYear: createYearContract,\n setCurrentYear: setCurrentYearContract,\n listTerms: calendarListTermsContract,\n createTerm: createTermContract,\n setCurrentTerm: setCurrentTermContract,\n}","/**\n * Brite Future Schools — bfs-contracts\n * Grades oRPC contract — grade procedure definitions.\n *\n * Phase History:\n * Phase 4.1 (2026-06-12): Initial creation\n *\n * @module src/contracts/grades\n * @since Phase 4.1\n */\n\nimport { oc } from '@orpc/contract'\nimport * as z from 'zod'\nimport {\n GradeSchema,\n CreateGradeInputSchema,\n} from '../schemas/grades.js'\n\n// ── Grades ─────────────────────────────────────────────────────────────────────\n\nexport const listGradesContract = oc\n .route({ method: 'GET', path: '/grades' })\n .input(z.object({}))\n .output(z.array(GradeSchema))\n\nexport const createGradeContract = oc\n .route({ method: 'POST', path: '/grades' })\n .input(CreateGradeInputSchema)\n .output(GradeSchema)\n\n// ── Grades contract router ─────────────────────────────────────────────────────\n\nexport const gradesContract = {\n list: listGradesContract,\n create: createGradeContract,\n}"],"mappings":"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","names":["oc","z","oc","oc","z","EmptyOutput","oc","oc","z","oc","oc","z","oc","oc","z","oc"]}
|