{"_id":"@davidhuanca/sga-core","name":"@davidhuanca/sga-core","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@davidhuanca/sga-core","version":"1.0.0","description":"Core package with business logic for SGA (Sistema de Gestión Académica)","main":"./dist/index.js","types":"./dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/david-huanca/sga-nextjs.git","directory":"packages/core"},"scripts":{"build":"tsc","dev":"tsc --watch","clean":"rm -rf dist","prepublishOnly":"npm run build"},"keywords":["sga","academic","management","core","education","prisma"],"author":{"name":"David Huanca","email":"dhuanca@samnaz.org"},"license":"ISC","dependencies":{"@prisma/client":"^7.0.0","zod":"^4.1.12"},"devDependencies":{"@types/node":"^20","typescript":"^5"},"peerDependencies":{"@prisma/client":"^7.0.0"},"publishConfig":{"access":"public"},"gitHead":"c0e45e828f580c5bf887c99a9c67f19e01e01579","_id":"@davidhuanca/sga-core@1.0.0","bugs":{"url":"https://github.com/david-huanca/sga-nextjs/issues"},"homepage":"https://github.com/david-huanca/sga-nextjs#readme","_nodeVersion":"20.19.5","_npmVersion":"11.6.2","dist":{"integrity":"sha512-klcDNr19811uLSTM2lPYofO68BX9g3fCmoZdIteg8LhK2aouNpXmdVATGlhbgYUR+KiPgexbY1B/4y7IlIfkMQ==","shasum":"4ecf5fce6bd8ce52b7b1408016af4523200968d8","tarball":"https://registry.npmjs.org/@davidhuanca/sga-core/-/sga-core-1.0.0.tgz","fileCount":41,"unpackedSize":64479,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIH6rQKhuq24otyqJNhNFLwJWfIYDVk7FK70hhEU+5rZEAiEA4UQo10Tu6Tem7rXrHS4Xu9xJDOdqGqIGbIfzUwZFd1Y="}]},"_npmUser":{"name":"davidhuanca","email":"dhuanca@samnaz.org"},"directories":{},"maintainers":[{"name":"davidhuanca","email":"dhuanca@samnaz.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sga-core_1.0.0_1763610619839_0.13927829437359707"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-20T03:50:19.436Z","1.0.0":"2025-11-20T03:50:20.048Z","modified":"2025-11-20T03:50:20.307Z"},"maintainers":[{"name":"davidhuanca","email":"dhuanca@samnaz.org"}],"description":"Core package with business logic for SGA (Sistema de Gestión Académica)","homepage":"https://github.com/david-huanca/sga-nextjs#readme","keywords":["sga","academic","management","core","education","prisma"],"repository":{"type":"git","url":"git+https://github.com/david-huanca/sga-nextjs.git","directory":"packages/core"},"author":{"name":"David Huanca","email":"dhuanca@samnaz.org"},"bugs":{"url":"https://github.com/david-huanca/sga-nextjs/issues"},"license":"ISC","readme":"# @david-huanca/sga-core\n\nPaquete Core del Sistema de Gestión Académica (SGA). Contiene toda la lógica de negocio, servicios, repositorios, validadores y tipos compartidos.\n\n## Instalación\n\n### En un Monorepo (Recomendado)\n\nSi estás usando npm workspaces, el paquete ya está disponible:\n\n```json\n{\n  \"dependencies\": {\n    \"@david-huanca/sga-core\": \"*\"\n  }\n}\n```\n\n### Como Paquete NPM\n\n```bash\nnpm install @david-huanca/sga-core\n```\n\n### Desde Git (Para proyectos externos)\n\n```json\n{\n  \"dependencies\": {\n    \"@david-huanca/sga-core\": \"git+https://github.com/david-huanca/sga-nextjs.git#packages/core\"\n  }\n}\n```\n\n## Uso\n\n### Importar Servicios\n\n```typescript\nimport { UserService, ClassroomService } from \"@david-huanca/sga-core\";\nimport { PrismaClient } from \"@prisma/client\";\n\nconst prisma = new PrismaClient();\nconst userService = new UserService(prisma);\nconst classroomService = new ClassroomService(prisma);\n\n// Usar los servicios\nconst users = await userService.getAllUsers();\nconst user = await userService.getUserById(1);\n```\n\n### Importar Validadores\n\n```typescript\nimport { createUserSchema, updateUserSchema } from \"@david-huanca/sga-core\";\n\n// Validar datos\nconst validatedData = createUserSchema.parse(userData);\n```\n\n### Importar Errores\n\n```typescript\nimport { NotFoundError, ValidationError } from \"@david-huanca/sga-core\";\n\ntry {\n  const user = await userService.getUserById(999);\n} catch (error) {\n  if (error instanceof NotFoundError) {\n    // Manejar error 404\n  }\n}\n```\n\n### Importar Tipos\n\n```typescript\nimport type { ApiResponse, UserWithRelations } from \"@david-huanca/sga-core\";\n\nconst response: ApiResponse<UserWithRelations> = {\n  success: true,\n  data: user,\n};\n```\n\n## Estructura\n\n```\npackages/core/\n├── src/\n│   ├── services/        # Servicios de negocio\n│   ├── repositories/    # Repositorios de datos\n│   ├── errors/          # Errores personalizados\n│   ├── types/           # Tipos compartidos\n│   ├── validators/      # Validadores Zod\n│   └── index.ts         # Exportaciones públicas\n├── package.json\n└── tsconfig.json\n```\n\n## Desarrollo\n\n### Build\n\n```bash\nnpm run build\n```\n\nEsto genera los archivos compilados en `dist/`.\n\n### Desarrollo con Watch\n\n```bash\nnpm run dev\n```\n\nCompila en modo watch para desarrollo.\n\n## Requisitos\n\n- Node.js 18+\n- TypeScript 5+\n- @prisma/client (peer dependency)\n\n## API\n\n### UserService\n\n- `getUserById(id: number)`: Obtiene un usuario por ID\n- `getAllUsers()`: Obtiene todos los usuarios\n- `getUsersByType(userType: UserType)`: Obtiene usuarios por tipo\n- `createUser(input: CreateUserInput)`: Crea un nuevo usuario\n- `updateUser(id: number, input: UpdateUserInput)`: Actualiza un usuario\n- `deleteUser(id: number)`: Elimina un usuario\n\n### ClassroomService\n\n- `getClassroomById(id: number)`: Obtiene una clase por ID\n- `getAllClassrooms()`: Obtiene todas las clases\n- `getClassroomsByTeacher(teacherId: number)`: Obtiene clases por profesor\n- `getClassroomsByStudent(studentId: number)`: Obtiene clases por estudiante\n- `getClassroomsByProgram(programId: number)`: Obtiene clases por programa\n- `createClassroom(input: CreateClassroomInput)`: Crea una nueva clase\n- `updateClassroom(id: number, input: UpdateClassroomInput)`: Actualiza una clase\n- `deleteClassroom(id: number)`: Elimina una clase\n- `addStudentToClassroom(classroomId: number, userId: number)`: Agrega estudiante\n- `removeStudentFromClassroom(classroomId: number, userId: number)`: Remueve estudiante\n- `updateStudentScore(classroomId: number, userId: number, score: number, comment?: string)`: Actualiza calificación\n\n## Licencia\n\nISC\n\n","readmeFilename":"README.md","_rev":"1-859c7150b9c61245f5694d50b22ab1f5"}