tuition-schema 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tutor-profile.schema.d.ts","sourceRoot":"","sources":["../src/tutor-profile.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA+BxB,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BnC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAI/E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAqC,CAAC;AAC3E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ import { TEACHING_MODE, BOARD, FEE_CYCLE, GENDER_PREFERENCE } from "./enums.js";
3
+ import { ALL_SUBJECTS, SUBJECT_CATEGORY, CLASS_LEVEL } from "./subjects.js";
4
+ // ─── Sub-schemas ─────────────────────────────────────────────────────
5
+ const qualificationSchema = z.object({
6
+ degree: z.string().trim().min(1).max(200),
7
+ institution: z.string().trim().min(1).max(200),
8
+ year: z.number().int().min(1960).max(2030).optional(),
9
+ });
10
+ const tutorSubjectSchema = z.object({
11
+ subjectCategory: z.enum(SUBJECT_CATEGORY),
12
+ subject: z.enum(ALL_SUBJECTS),
13
+ classFrom: z.enum(CLASS_LEVEL),
14
+ classTo: z.enum(CLASS_LEVEL),
15
+ boards: z.array(z.enum(BOARD)).min(1).max(10),
16
+ feePerMonth: z.number().int().min(100).max(10_000_000), // paise
17
+ });
18
+ const geoJsonPointSchema = z.object({
19
+ type: z.literal("Point"),
20
+ coordinates: z.tuple([
21
+ z.number().min(-180).max(180), // longitude
22
+ z.number().min(-90).max(90), // latitude
23
+ ]),
24
+ });
25
+ // ─── Create ──────────────────────────────────────────────────────────
26
+ export const createTutorProfileSchema = z.object({
27
+ displayName: z.string().trim().min(2).max(100),
28
+ headline: z.string().trim().min(10).max(200),
29
+ bio: z.string().trim().min(20).max(2000),
30
+ photos: z.array(z.string().url()).min(1).max(5),
31
+ subjects: z.array(tutorSubjectSchema).min(1).max(20),
32
+ teachingMode: z.array(z.enum(TEACHING_MODE)).min(1),
33
+ experienceYears: z.number().int().min(0).max(50),
34
+ qualifications: z.array(qualificationSchema).min(1).max(10),
35
+ specializations: z.array(z.string().trim().max(100)).max(5).optional(),
36
+ feePerSession: z.number().int().min(100).max(10_000_000).optional(), // paise, for per-session billing
37
+ feeCycle: z.enum(FEE_CYCLE).default("monthly"),
38
+ freeTrialSession: z.boolean().default(false),
39
+ location: geoJsonPointSchema,
40
+ locality: z.string().trim().max(200),
41
+ city: z.string().trim().max(100),
42
+ state: z.string().trim().max(100).optional(),
43
+ pincode: z.string().trim().max(10).optional(),
44
+ radiusKm: z.number().min(1).max(50).default(5),
45
+ genderPreference: z.enum(GENDER_PREFERENCE).optional(),
46
+ maxStudents: z.number().int().min(1).max(200).default(20),
47
+ availableSlots: z.string().trim().max(500).optional(),
48
+ });
49
+ // ─── Update ──────────────────────────────────────────────────────────
50
+ export const updateTutorProfileSchema = createTutorProfileSchema.partial();
51
+ //# sourceMappingURL=tutor-profile.schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tutor-profile.schema.js","sourceRoot":"","sources":["../src/tutor-profile.schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { TEACHING_MODE, BOARD, FEE_CYCLE, GENDER_PREFERENCE } from \"./enums.js\";\nimport { ALL_SUBJECTS, SUBJECT_CATEGORY, CLASS_LEVEL } from \"./subjects.js\";\n\n// ─── Sub-schemas ─────────────────────────────────────────────────────\n\nconst qualificationSchema = z.object({\n degree: z.string().trim().min(1).max(200),\n institution: z.string().trim().min(1).max(200),\n year: z.number().int().min(1960).max(2030).optional(),\n});\n\nconst tutorSubjectSchema = z.object({\n subjectCategory: z.enum(SUBJECT_CATEGORY),\n subject: z.enum(ALL_SUBJECTS),\n classFrom: z.enum(CLASS_LEVEL),\n classTo: z.enum(CLASS_LEVEL),\n boards: z.array(z.enum(BOARD)).min(1).max(10),\n feePerMonth: z.number().int().min(100).max(10_000_000), // paise\n});\n\nconst geoJsonPointSchema = z.object({\n type: z.literal(\"Point\"),\n coordinates: z.tuple([\n z.number().min(-180).max(180), // longitude\n z.number().min(-90).max(90), // latitude\n ]),\n});\n\n// ─── Create ──────────────────────────────────────────────────────────\n\nexport const createTutorProfileSchema = z.object({\n displayName: z.string().trim().min(2).max(100),\n headline: z.string().trim().min(10).max(200),\n bio: z.string().trim().min(20).max(2000),\n photos: z.array(z.string().url()).min(1).max(5),\n\n subjects: z.array(tutorSubjectSchema).min(1).max(20),\n teachingMode: z.array(z.enum(TEACHING_MODE)).min(1),\n experienceYears: z.number().int().min(0).max(50),\n\n qualifications: z.array(qualificationSchema).min(1).max(10),\n specializations: z.array(z.string().trim().max(100)).max(5).optional(),\n\n feePerSession: z.number().int().min(100).max(10_000_000).optional(), // paise, for per-session billing\n feeCycle: z.enum(FEE_CYCLE).default(\"monthly\"),\n freeTrialSession: z.boolean().default(false),\n\n location: geoJsonPointSchema,\n locality: z.string().trim().max(200),\n city: z.string().trim().max(100),\n state: z.string().trim().max(100).optional(),\n pincode: z.string().trim().max(10).optional(),\n radiusKm: z.number().min(1).max(50).default(5),\n\n genderPreference: z.enum(GENDER_PREFERENCE).optional(),\n maxStudents: z.number().int().min(1).max(200).default(20),\n availableSlots: z.string().trim().max(500).optional(),\n});\n\nexport type CreateTutorProfileInput = z.infer<typeof createTutorProfileSchema>;\n\n// ─── Update ──────────────────────────────────────────────────────────\n\nexport const updateTutorProfileSchema = createTutorProfileSchema.partial();\nexport type UpdateTutorProfileInput = z.infer<typeof updateTutorProfileSchema>;\n"]}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "tuition-schema",
3
+ "version": "0.1.0",
4
+ "description": "Shared Zod schemas for the Tuition & Coaching service — single source of truth for API contracts, validation, and TypeScript types.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "sideEffects": false,
21
+ "scripts": {
22
+ "build": "tsc -p tsconfig.json",
23
+ "type-check": "tsc --noEmit",
24
+ "prepublishOnly": "npm run build"
25
+ },
26
+ "keywords": [
27
+ "zod",
28
+ "schema",
29
+ "tuition",
30
+ "coaching",
31
+ "typescript"
32
+ ],
33
+ "author": "Hari",
34
+ "license": "MIT",
35
+ "peerDependencies": {
36
+ "zod": "^3.25.0 || ^4.0.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^24.10.1",
40
+ "typescript": "^5.9.3",
41
+ "zod": "^4.1.13"
42
+ }
43
+ }