From b2bafe87db8f189a624dc5302c6e8c7ad53a555b Mon Sep 17 00:00:00 2001 From: hermesalvesbr Date: Wed, 22 May 2024 14:45:31 -0300 Subject: [PATCH] feat: seed for database --- .npmrc | 1 + .prettierrc | 3 +- README.md | 68 ++- package.json | 11 +- pnpm-lock.yaml | 439 ++++++++++++++++++ .../20240522150500_init/migration.sql | 11 - .../migration.sql | 215 +++++++++ prisma/schema.prisma | 170 ++++++- prisma/seeds/seed.ts | 17 + prisma/seeds/seedGrade.ts | 60 +++ prisma/seeds/seedInstitution.ts | 269 +++++++++++ src/book/book_service.ts | 16 +- src/main.ts | 17 +- 13 files changed, 1245 insertions(+), 52 deletions(-) create mode 100644 .npmrc delete mode 100644 prisma/migrations/20240522150500_init/migration.sql create mode 100644 prisma/migrations/20240522170857_initial_migration/migration.sql create mode 100644 prisma/seeds/seed.ts create mode 100644 prisma/seeds/seedGrade.ts create mode 100644 prisma/seeds/seedInstitution.ts diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..4fd0219 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index dcb7279..5a6fd01 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,5 @@ { "singleQuote": true, - "trailingComma": "all" + "trailingComma": "all", + "semi": false } \ No newline at end of file diff --git a/README.md b/README.md index 94dd84f..f90accf 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,78 @@ -# Projeto eduprime.hub +# Eduprime.hub Project -Este é o README do projeto eduprime.hub, que utiliza a extensão vscode-restclient para o Visual Studio Code. +Este é o README para o projeto eduprime.hub, que utiliza a extensão vscode-restclient para Visual Studio Code. ## Sobre a extensão vscode-restclient -A extensão [vscode-restclient](https://github.com/Huachao/vscode-restclient) é uma ferramenta poderosa para testar e depurar APIs diretamente no VSCode. Ela permite enviar solicitações HTTP personalizadas e visualizar as respostas de forma fácil e intuitiva. Com recursos como autenticação, cabeçalhos personalizados e suporte a várias solicitações, essa extensão é essencial para desenvolvedores que trabalham com APIs. +A extensão [vscode-restclient](https://github.com/Huachao/vscode-restclient) é uma ferramenta poderosa para testar e depurar APIs diretamente no VSCode. Ela permite enviar requisições HTTP personalizadas e visualizar as respostas de forma fácil e intuitiva. Com recursos como autenticação, cabeçalhos personalizados e suporte para múltiplas requisições, essa extensão é essencial para desenvolvedores que trabalham com APIs. ## Tecnologias utilizadas O projeto eduprime.hub utiliza as seguintes tecnologias: -- [NestJS](https://nestjs.com/): um framework para construir aplicativos server-side com Node.js. Ele fornece uma arquitetura modular e escalável, facilitando o desenvolvimento de APIs robustas. +- [NestJS](https://nestjs.com/): um framework para construir aplicações server-side com Node.js. Ele fornece uma arquitetura modular e escalável, facilitando o desenvolvimento de APIs robustas. -- [Prisma](https://www.prisma.io/): um ORM (Object-Relational Mapping) moderno e poderoso para Node.js. Ele simplifica a interação com o banco de dados, permitindo que os desenvolvedores escrevam consultas em TypeScript. +- [Prisma](https://www.prisma.io/): um ORM (Object-Relational Mapping) moderno e poderoso para Node.js. Ele simplifica a interação com o banco de dados, permitindo que os desenvolvedores escrevam queries em TypeScript. -- [Fastify](https://www.fastify.io/): um framework web rápido e eficiente para Node.js. Ele é conhecido por sua velocidade e baixo consumo de recursos, tornando-o uma ótima escolha para construir APIs de alto desempenho. +- [Fastify](https://www.fastify.io/): um framework web rápido e eficiente para Node.js. Ele é conhecido por sua velocidade e baixo consumo de recursos, tornando-se uma ótima escolha para construir APIs de alto desempenho. ## Como executar o projeto -Siga as etapas abaixo para executar o projeto eduprime.hub: +Siga os passos abaixo para executar o projeto eduprime.hub: 1. Clone este repositório para o seu ambiente local. -2. Instale as dependências do projeto executando o comando `pnpm install`. +2. Instale as dependências do projeto executando o comando: -3. Inicie o servidor executando o comando `pnpm run start`. + ```bash + pnpm install + ``` -4. Abra o VSCode e instale a extensão vscode-restclient. +3. Configure suas variáveis de ambiente no arquivo `.env` com a URL de conexão ao seu banco de dados PostgreSQL. Um exemplo de configuração de URL de conexão pode ser: -5. Abra o arquivo `requests.http` na pasta `src` para visualizar e executar as solicitações de exemplo. + ``` + DATABASE_URL="postgresql://user:password@localhost:5432/eduprime" + ``` + +4. Gere o cliente Prisma e aplique as migrações ao banco de dados executando os seguintes comandos: + + ```bash + pnpm prisma generate + pnpm prisma migrate dev + ``` + +5. Popule o banco de dados com dados iniciais executando o comando: + + ```bash + pnpm run seed + ``` + +6. Inicie o servidor executando o comando: + + ```bash + pnpm run start + ``` + +7. Abra o VSCode e instale a extensão vscode-restclient. + +8. Abra o arquivo `requests.http` na pasta `src` para visualizar e executar as requisições de exemplo. + +## Como popular o banco de dados + +Para popular o banco de dados com dados iniciais, siga os passos abaixo: + +1. **Resetar o banco de dados** (este comando apagará todos os dados existentes e aplicará as migrações): + + ```bash + pnpm prisma migrate reset + ``` + +2. **Rodar o script de seed** para adicionar dados iniciais ao banco de dados: + ```bash + pnpm run seed + ``` + +O comando `pnpm prisma migrate reset` limpará o banco de dados, aplicará novamente todas as migrações e executará o script de seed configurado, populando o banco de dados com os dados iniciais. ## Contribuição @@ -36,4 +80,4 @@ Contribuições são bem-vindas! Se você encontrar algum problema ou tiver algu ## Licença -Este projeto está licenciado sob a [MIT License](LICENSE). +Este projeto é licenciado sob a [Licença MIT](LICENSE). diff --git a/package.json b/package.json index 3a80fe3..f3ca3de 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "eduprime.hub", "version": "0.0.1", - "description": "", - "author": "", + "description": "api for eduprime hub", + "author": "@hermesalvesbr", "private": true, "license": "MIT", "scripts": { @@ -14,6 +14,7 @@ "start:prod": "node dist/main", "docker:start": "cd Docker && docker-compose --env-file ../.env up", "docker:stop": "cd Docker && docker-compose --env-file ../.env down", + "seed": "ts-node prisma/seeds/seed.ts", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", @@ -25,7 +26,9 @@ "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", "@nestjs/platform-express": "^10.0.0", + "@nestjs/platform-fastify": "^10.3.8", "@prisma/client": "^5.14.0", + "fastify": "^4.27.0", "prisma": "^5.14.0", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1" @@ -69,5 +72,9 @@ ], "coverageDirectory": "../coverage", "testEnvironment": "node" + }, + "engines": { + "node": "22.x", + "pnpm": ">=9" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a9ea9c..523b37d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,15 @@ importers: '@nestjs/platform-express': specifier: ^10.0.0 version: 10.3.8(@nestjs/common@10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.8) + '@nestjs/platform-fastify': + specifier: ^10.3.8 + version: 10.3.8(@nestjs/common@10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.8(@nestjs/common@10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.8)(reflect-metadata@0.2.2)(rxjs@7.8.1)) '@prisma/client': specifier: ^5.14.0 version: 5.14.0(prisma@5.14.0) + fastify: + specifier: ^4.27.0 + version: 4.27.0 prisma: specifier: ^5.14.0 version: 5.14.0 @@ -311,6 +317,27 @@ packages: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@fastify/ajv-compiler@3.5.0': + resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} + + '@fastify/cors@9.0.1': + resolution: {integrity: sha512-YY9Ho3ovI+QHIL2hW+9X4XqQjXLjJqsU+sMV/xFsxZkE8p3GNnYVFpoOxF7SsP5ZL76gwvbo3V9L+FIekBGU4Q==} + + '@fastify/error@3.4.1': + resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} + + '@fastify/fast-json-stringify-compiler@4.3.0': + resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} + + '@fastify/formbody@7.4.0': + resolution: {integrity: sha512-H3C6h1GN56/SMrZS8N2vCT2cZr7mIHzBHzOBa5OPpjfB/D6FzP9mMpE02ZzrFX0ANeh0BAJdoXKOF2e7IbV+Og==} + + '@fastify/merge-json-schemas@0.1.1': + resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} + + '@fastify/middie@8.3.0': + resolution: {integrity: sha512-h+zBxCzMlkEkh4fM7pZaSGzqS7P9M0Z6rXnWPdUEPfe7x1BCj++wEk/pQ5jpyYY4pF8AknFqb77n7uwh8HdxEA==} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -481,6 +508,19 @@ packages: '@nestjs/common': ^10.0.0 '@nestjs/core': ^10.0.0 + '@nestjs/platform-fastify@10.3.8': + resolution: {integrity: sha512-gWGskBuZRB4LTQJCJWWUZvYwiF05zAJdq0X5oi6SmSZHP6bPIY+sQar+IwPFTsDtCM0Qk9nFm9UUuQdgLZTrTQ==} + peerDependencies: + '@fastify/static': ^6.0.0 || ^7.0.0 + '@fastify/view': ^7.0.0 || ^8.0.0 + '@nestjs/common': ^10.0.0 + '@nestjs/core': ^10.0.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + '@fastify/view': + optional: true + '@nestjs/schematics@10.1.1': resolution: {integrity: sha512-o4lfCnEeIkfJhGBbLZxTuVWcGuqDCFwg5OrvpgRUBM7vI/vONvKKiB5riVNpO+JqXoH0I42NNeDb0m4V5RREig==} peerDependencies: @@ -777,6 +817,13 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -808,6 +855,14 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -883,6 +938,13 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + avvio@8.3.2: + resolution: {integrity: sha512-st8e519GWHa/azv8S87mcJvZs4WsgTBjOw/Ih1CP6u+8SZvcOeAYNG6JbsIrAUUJJ7JfmrnOkR8ipDS+u9SIRQ==} + babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -953,6 +1015,9 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -1347,6 +1412,10 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -1371,6 +1440,12 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} + fast-content-type-parse@1.1.0: + resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1384,12 +1459,34 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-json-stringify@5.16.0: + resolution: {integrity: sha512-A4bg6E15QrkuVO3f0SwIASgzMzR6XC4qTyTqhf3hYXy0iazbAdZKwkE+ox4WgzKyzM6ygvbdq3r134UjOaaAnA==} + fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-uri@2.3.0: + resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} + + fastify-plugin@4.5.1: + resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} + + fastify@4.26.2: + resolution: {integrity: sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug==} + + fastify@4.27.0: + resolution: {integrity: sha512-ci9IXzbigB8dyi0mSy3faa3Bsj0xWAPb9JeT4KRzubdSb6pNhcADRUaXCBml6V1Ss/a05kbtQls5LBmhHydoTA==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -1416,6 +1513,10 @@ packages: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} + find-my-way@8.2.0: + resolution: {integrity: sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==} + engines: {node: '>=14'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -1870,6 +1971,9 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-ref-resolver@1.0.1: + resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -1908,6 +2012,9 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + light-my-request@5.13.0: + resolution: {integrity: sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -2035,6 +2142,9 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true + mnemonist@0.39.6: + resolution: {integrity: sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -2101,6 +2211,13 @@ packages: object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -2181,6 +2298,9 @@ packages: path-to-regexp@3.2.0: resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==} + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -2196,6 +2316,23 @@ packages: resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} engines: {node: '>=10'} + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + + pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@8.21.0: + resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} + hasBin: true + + pino@9.1.0: + resolution: {integrity: sha512-qUcgfrlyOtjwhNLdbhoL7NR4NkHjzykAPw0V2QLFbvu/zss29h4NkRnibyFzBrNCbzCOY3WZ9hhKSwfOkNggYA==} + hasBin: true + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -2233,6 +2370,13 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -2259,6 +2403,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -2280,10 +2427,18 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -2327,10 +2482,17 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} + ret@0.4.3: + resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} + engines: {node: '>=10'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true @@ -2360,6 +2522,13 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex2@3.1.0: + resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} + + safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -2367,6 +2536,9 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2387,6 +2559,9 @@ packages: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} + set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -2425,6 +2600,12 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + sonic-boom@3.8.1: + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + + sonic-boom@4.0.1: + resolution: {integrity: sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==} + source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -2439,6 +2620,10 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -2561,6 +2746,12 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thread-stream@2.7.0: + resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + + thread-stream@3.0.0: + resolution: {integrity: sha512-oUIFjxaUT6knhPtWgDMc29zF1FcSl0yXpapkyrQrCGEfYA2HUZXCilUtKyYIv6HkCyqSPAMkY+EG0GbyIrNDQg==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -2579,6 +2770,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -3085,6 +3280,39 @@ snapshots: '@eslint/js@8.57.0': {} + '@fastify/ajv-compiler@3.5.0': + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + fast-uri: 2.3.0 + + '@fastify/cors@9.0.1': + dependencies: + fastify-plugin: 4.5.1 + mnemonist: 0.39.6 + + '@fastify/error@3.4.1': {} + + '@fastify/fast-json-stringify-compiler@4.3.0': + dependencies: + fast-json-stringify: 5.16.0 + + '@fastify/formbody@7.4.0': + dependencies: + fast-querystring: 1.1.2 + fastify-plugin: 4.5.1 + + '@fastify/merge-json-schemas@0.1.1': + dependencies: + fast-deep-equal: 3.1.3 + + '@fastify/middie@8.3.0': + dependencies: + '@fastify/error': 3.4.1 + fastify-plugin: 4.5.1 + path-to-regexp: 6.2.2 + reusify: 1.0.4 + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -3376,6 +3604,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@nestjs/platform-fastify@10.3.8(@nestjs/common@10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.8(@nestjs/common@10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.8)(reflect-metadata@0.2.2)(rxjs@7.8.1))': + dependencies: + '@fastify/cors': 9.0.1 + '@fastify/formbody': 7.4.0 + '@fastify/middie': 8.3.0 + '@nestjs/common': 10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.8(@nestjs/common@10.3.8(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.8)(reflect-metadata@0.2.2)(rxjs@7.8.1) + fastify: 4.26.2 + light-my-request: 5.13.0 + path-to-regexp: 3.2.0 + tslib: 2.6.2 + '@nestjs/schematics@10.1.1(chokidar@3.6.0)(typescript@5.3.3)': dependencies: '@angular-devkit/core': 17.1.2(chokidar@3.6.0) @@ -3767,6 +4007,12 @@ snapshots: '@xtuc/long@4.2.2': {} + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + abstract-logging@2.0.1: {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -3788,6 +4034,10 @@ snapshots: optionalDependencies: ajv: 8.12.0 + ajv-formats@3.0.1(ajv@8.12.0): + optionalDependencies: + ajv: 8.12.0 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -3853,6 +4103,13 @@ snapshots: asynckit@0.4.0: {} + atomic-sleep@1.0.0: {} + + avvio@8.3.2: + dependencies: + '@fastify/error': 3.4.1 + fastq: 1.17.1 + babel-jest@29.7.0(@babel/core@7.24.5): dependencies: '@babel/core': 7.24.5 @@ -3969,6 +4226,11 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -4333,6 +4595,8 @@ snapshots: etag@1.8.1: {} + event-target-shim@5.0.1: {} + events@3.3.0: {} execa@5.1.1: @@ -4399,6 +4663,10 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 + fast-content-type-parse@1.1.0: {} + + fast-decode-uri-component@1.0.1: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -4413,10 +4681,68 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-json-stringify@5.16.0: + dependencies: + '@fastify/merge-json-schemas': 0.1.1 + ajv: 8.12.0 + ajv-formats: 3.0.1(ajv@8.12.0) + fast-deep-equal: 3.1.3 + fast-uri: 2.3.0 + json-schema-ref-resolver: 1.0.1 + rfdc: 1.3.1 + fast-levenshtein@2.0.6: {} + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + + fast-redact@3.5.0: {} + fast-safe-stringify@2.1.1: {} + fast-uri@2.3.0: {} + + fastify-plugin@4.5.1: {} + + fastify@4.26.2: + dependencies: + '@fastify/ajv-compiler': 3.5.0 + '@fastify/error': 3.4.1 + '@fastify/fast-json-stringify-compiler': 4.3.0 + abstract-logging: 2.0.1 + avvio: 8.3.2 + fast-content-type-parse: 1.1.0 + fast-json-stringify: 5.16.0 + find-my-way: 8.2.0 + light-my-request: 5.13.0 + pino: 8.21.0 + process-warning: 3.0.0 + proxy-addr: 2.0.7 + rfdc: 1.3.1 + secure-json-parse: 2.7.0 + semver: 7.6.2 + toad-cache: 3.7.0 + + fastify@4.27.0: + dependencies: + '@fastify/ajv-compiler': 3.5.0 + '@fastify/error': 3.4.1 + '@fastify/fast-json-stringify-compiler': 4.3.0 + abstract-logging: 2.0.1 + avvio: 8.3.2 + fast-content-type-parse: 1.1.0 + fast-json-stringify: 5.16.0 + find-my-way: 8.2.0 + light-my-request: 5.13.0 + pino: 9.1.0 + process-warning: 3.0.0 + proxy-addr: 2.0.7 + rfdc: 1.3.1 + secure-json-parse: 2.7.0 + semver: 7.6.2 + toad-cache: 3.7.0 + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -4454,6 +4780,12 @@ snapshots: transitivePeerDependencies: - supports-color + find-my-way@8.2.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 3.1.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -5115,6 +5447,10 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-schema-ref-resolver@1.0.1: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} @@ -5146,6 +5482,12 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + light-my-request@5.13.0: + dependencies: + cookie: 0.6.0 + process-warning: 3.0.0 + set-cookie-parser: 2.6.0 + lines-and-columns@1.2.4: {} loader-runner@4.3.0: {} @@ -5246,6 +5588,10 @@ snapshots: dependencies: minimist: 1.2.8 + mnemonist@0.39.6: + dependencies: + obliterator: 2.0.4 + ms@2.0.0: {} ms@2.1.2: {} @@ -5296,6 +5642,10 @@ snapshots: object-inspect@1.13.1: {} + obliterator@2.0.4: {} + + on-exit-leak-free@2.1.2: {} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -5379,6 +5729,8 @@ snapshots: path-to-regexp@3.2.0: {} + path-to-regexp@6.2.2: {} + path-type@4.0.0: {} picocolors@1.0.1: {} @@ -5387,6 +5739,43 @@ snapshots: picomatch@3.0.1: {} + pino-abstract-transport@1.2.0: + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + + pino-std-serializers@6.2.2: {} + + pino-std-serializers@7.0.0: {} + + pino@8.21.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 6.2.2 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.8.1 + thread-stream: 2.7.0 + + pino@9.1.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 7.0.0 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 4.0.1 + thread-stream: 3.0.0 + pirates@4.0.6: {} pkg-dir@4.2.0: @@ -5415,6 +5804,10 @@ snapshots: process-nextick-args@2.0.1: {} + process-warning@3.0.0: {} + + process@0.11.10: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -5439,6 +5832,8 @@ snapshots: queue-microtask@1.2.3: {} + quick-format-unescaped@4.0.4: {} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -5470,10 +5865,20 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 + real-require@0.2.0: {} + rechoir@0.6.2: dependencies: resolve: 1.22.8 @@ -5507,8 +5912,12 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + ret@0.4.3: {} + reusify@1.0.4: {} + rfdc@1.3.1: {} + rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -5533,6 +5942,12 @@ snapshots: safe-buffer@5.2.1: {} + safe-regex2@3.1.0: + dependencies: + ret: 0.4.3 + + safe-stable-stringify@2.4.3: {} + safer-buffer@2.1.2: {} schema-utils@3.3.0: @@ -5541,6 +5956,8 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) + secure-json-parse@2.7.0: {} + semver@6.3.1: {} semver@7.6.2: {} @@ -5576,6 +5993,8 @@ snapshots: transitivePeerDependencies: - supports-color + set-cookie-parser@2.6.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -5614,6 +6033,14 @@ snapshots: slash@3.0.0: {} + sonic-boom@3.8.1: + dependencies: + atomic-sleep: 1.0.0 + + sonic-boom@4.0.1: + dependencies: + atomic-sleep: 1.0.0 + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 @@ -5628,6 +6055,8 @@ snapshots: source-map@0.7.4: {} + split2@4.2.0: {} + sprintf-js@1.0.3: {} stack-utils@2.0.6: @@ -5748,6 +6177,14 @@ snapshots: text-table@0.2.0: {} + thread-stream@2.7.0: + dependencies: + real-require: 0.2.0 + + thread-stream@3.0.0: + dependencies: + real-require: 0.2.0 + through@2.3.8: {} tmp@0.0.33: @@ -5762,6 +6199,8 @@ snapshots: dependencies: is-number: 7.0.0 + toad-cache@3.7.0: {} + toidentifier@1.0.1: {} tr46@0.0.3: {} diff --git a/prisma/migrations/20240522150500_init/migration.sql b/prisma/migrations/20240522150500_init/migration.sql deleted file mode 100644 index 046c46a..0000000 --- a/prisma/migrations/20240522150500_init/migration.sql +++ /dev/null @@ -1,11 +0,0 @@ --- CreateTable -CREATE TABLE "Book" ( - "id" TEXT NOT NULL, - "title" TEXT NOT NULL, - "author" TEXT NOT NULL, - "description" TEXT NOT NULL, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedAt" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "Book_pkey" PRIMARY KEY ("id") -); diff --git a/prisma/migrations/20240522170857_initial_migration/migration.sql b/prisma/migrations/20240522170857_initial_migration/migration.sql new file mode 100644 index 0000000..efe0fc0 --- /dev/null +++ b/prisma/migrations/20240522170857_initial_migration/migration.sql @@ -0,0 +1,215 @@ +-- CreateEnum +CREATE TYPE "Period" AS ENUM ('MORNING', 'AFTERNOON', 'EVENING'); + +-- CreateEnum +CREATE TYPE "DayOfWeek" AS ENUM ('MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'); + +-- CreateEnum +CREATE TYPE "AttendanceStatus" AS ENUM ('PRESENT', 'ABSENT', 'EXCUSED'); + +-- CreateTable +CREATE TABLE "Institution" ( + "id" UUID NOT NULL, + "name" TEXT NOT NULL, + "address" TEXT, + "city" TEXT, + "state" TEXT, + "postalCode" TEXT, + "phone" TEXT, + + CONSTRAINT "Institution_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "School" ( + "id" UUID NOT NULL, + "name" TEXT NOT NULL, + "address" TEXT, + "city" TEXT, + "state" TEXT, + "postalCode" TEXT, + "phone" TEXT, + "institutionId" UUID NOT NULL, + + CONSTRAINT "School_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Course" ( + "id" UUID NOT NULL, + "name" TEXT NOT NULL, + "schoolId" UUID NOT NULL, + + CONSTRAINT "Course_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Series" ( + "id" UUID NOT NULL, + "name" TEXT NOT NULL, + "courseId" UUID NOT NULL, + "timetableId" UUID, + + CONSTRAINT "Series_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Classroom" ( + "id" UUID NOT NULL, + "name" TEXT NOT NULL, + "period" "Period" NOT NULL DEFAULT 'MORNING', + "seriesId" UUID NOT NULL, + + CONSTRAINT "Classroom_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Student" ( + "id" UUID NOT NULL, + "name" TEXT NOT NULL, + "email" TEXT, + "phone" TEXT, + "classroomId" UUID NOT NULL, + + CONSTRAINT "Student_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Teacher" ( + "id" UUID NOT NULL, + "name" TEXT NOT NULL, + "email" TEXT, + "phone" TEXT, + "schoolId" UUID NOT NULL, + + CONSTRAINT "Teacher_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Discipline" ( + "id" UUID NOT NULL, + "name" TEXT NOT NULL, + "teacherId" UUID NOT NULL, + + CONSTRAINT "Discipline_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Timetable" ( + "id" UUID NOT NULL, + "name" TEXT NOT NULL, + "classroomId" UUID NOT NULL, + "disciplineId" UUID, + + CONSTRAINT "Timetable_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ClassSession" ( + "id" UUID NOT NULL, + "dayOfWeek" "DayOfWeek" NOT NULL, + "startTime" TEXT NOT NULL, + "endTime" TEXT NOT NULL, + "disciplineId" UUID NOT NULL, + "timetableId" UUID NOT NULL, + + CONSTRAINT "ClassSession_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Attendance" ( + "id" UUID NOT NULL, + "date" TIMESTAMP(3) NOT NULL, + "studentId" UUID NOT NULL, + "status" "AttendanceStatus" NOT NULL, + + CONSTRAINT "Attendance_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Grade" ( + "id" UUID NOT NULL, + "value" DOUBLE PRECISION NOT NULL, + "date" TIMESTAMP(3) NOT NULL, + "studentId" UUID NOT NULL, + "disciplineId" UUID NOT NULL, + + CONSTRAINT "Grade_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "TimetableSchool" ( + "timetableId" UUID NOT NULL, + "schoolId" UUID NOT NULL, + + CONSTRAINT "TimetableSchool_pkey" PRIMARY KEY ("timetableId","schoolId") +); + +-- CreateTable +CREATE TABLE "_TeacherToTimetable" ( + "A" UUID NOT NULL, + "B" UUID NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "_TeacherToTimetable_AB_unique" ON "_TeacherToTimetable"("A", "B"); + +-- CreateIndex +CREATE INDEX "_TeacherToTimetable_B_index" ON "_TeacherToTimetable"("B"); + +-- AddForeignKey +ALTER TABLE "School" ADD CONSTRAINT "School_institutionId_fkey" FOREIGN KEY ("institutionId") REFERENCES "Institution"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Course" ADD CONSTRAINT "Course_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Series" ADD CONSTRAINT "Series_courseId_fkey" FOREIGN KEY ("courseId") REFERENCES "Course"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Series" ADD CONSTRAINT "Series_timetableId_fkey" FOREIGN KEY ("timetableId") REFERENCES "Timetable"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Classroom" ADD CONSTRAINT "Classroom_seriesId_fkey" FOREIGN KEY ("seriesId") REFERENCES "Series"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Student" ADD CONSTRAINT "Student_classroomId_fkey" FOREIGN KEY ("classroomId") REFERENCES "Classroom"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Teacher" ADD CONSTRAINT "Teacher_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Discipline" ADD CONSTRAINT "Discipline_teacherId_fkey" FOREIGN KEY ("teacherId") REFERENCES "Teacher"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Timetable" ADD CONSTRAINT "Timetable_classroomId_fkey" FOREIGN KEY ("classroomId") REFERENCES "Classroom"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Timetable" ADD CONSTRAINT "Timetable_disciplineId_fkey" FOREIGN KEY ("disciplineId") REFERENCES "Discipline"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ClassSession" ADD CONSTRAINT "ClassSession_disciplineId_fkey" FOREIGN KEY ("disciplineId") REFERENCES "Discipline"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ClassSession" ADD CONSTRAINT "ClassSession_timetableId_fkey" FOREIGN KEY ("timetableId") REFERENCES "Timetable"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Attendance" ADD CONSTRAINT "Attendance_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Grade" ADD CONSTRAINT "Grade_studentId_fkey" FOREIGN KEY ("studentId") REFERENCES "Student"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Grade" ADD CONSTRAINT "Grade_disciplineId_fkey" FOREIGN KEY ("disciplineId") REFERENCES "Discipline"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimetableSchool" ADD CONSTRAINT "TimetableSchool_timetableId_fkey" FOREIGN KEY ("timetableId") REFERENCES "Timetable"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TimetableSchool" ADD CONSTRAINT "TimetableSchool_schoolId_fkey" FOREIGN KEY ("schoolId") REFERENCES "School"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_TeacherToTimetable" ADD CONSTRAINT "_TeacherToTimetable_A_fkey" FOREIGN KEY ("A") REFERENCES "Teacher"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_TeacherToTimetable" ADD CONSTRAINT "_TeacherToTimetable_B_fkey" FOREIGN KEY ("B") REFERENCES "Timetable"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d238d96..b3c9708 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,9 +1,3 @@ -// This is your Prisma schema file, -// learn more about it in the docs: https://pris.ly/d/prisma-schema - -// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? -// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init - generator client { provider = "prisma-client-js" } @@ -13,11 +7,161 @@ datasource db { url = env("DATABASE_URL") } -model Book { - id String @id @default(cuid()) - title String - author String - description String - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt +model Institution { + id String @id @default(uuid()) @db.Uuid + name String + address String? + city String? + state String? + postalCode String? + phone String? + schools School[] +} + +model School { + id String @id @default(uuid()) @db.Uuid + name String + address String? + city String? + state String? + postalCode String? + phone String? + institutionId String @db.Uuid + institution Institution @relation(fields: [institutionId], references: [id], onDelete: Restrict) + courses Course[] + timetables TimetableSchool[] + teachers Teacher[] +} + +model Course { + id String @id @default(uuid()) @db.Uuid + name String + schoolId String @db.Uuid + school School @relation(fields: [schoolId], references: [id], onDelete: Restrict) + series Series[] +} + +model Series { + id String @id @default(uuid()) @db.Uuid + name String + courseId String @db.Uuid + course Course @relation(fields: [courseId], references: [id], onDelete: Restrict) + classrooms Classroom[] + timetable Timetable? @relation(fields: [timetableId], references: [id]) + timetableId String? @db.Uuid +} + +model Classroom { + id String @id @default(uuid()) @db.Uuid + name String + period Period @default(MORNING) + seriesId String @db.Uuid + series Series @relation(fields: [seriesId], references: [id], onDelete: Restrict) + students Student[] + timetables Timetable[] +} + +model Student { + id String @id @default(uuid()) @db.Uuid + name String + email String? + phone String? + classroomId String @db.Uuid + classroom Classroom @relation(fields: [classroomId], references: [id], onDelete: Restrict) + attendances Attendance[] + grades Grade[] +} + +model Teacher { + id String @id @default(uuid()) @db.Uuid + name String + email String? + phone String? + schoolId String @db.Uuid + school School @relation(fields: [schoolId], references: [id], onDelete: Restrict) + disciplines Discipline[] + timetables Timetable[] +} + +model Discipline { + id String @id @default(uuid()) @db.Uuid + name String + teacherId String @db.Uuid + teacher Teacher @relation(fields: [teacherId], references: [id], onDelete: Restrict) + timetables Timetable[] + ClassSession ClassSession[] + Grade Grade[] +} + +model Timetable { + id String @id @default(uuid()) @db.Uuid + name String + classroomId String @db.Uuid + classroom Classroom @relation(fields: [classroomId], references: [id], onDelete: Restrict) + teachers Teacher[] + series Series[] + schools TimetableSchool[] + classSessions ClassSession[] + Discipline Discipline? @relation(fields: [disciplineId], references: [id]) + disciplineId String? @db.Uuid +} + +model ClassSession { + id String @id @default(uuid()) @db.Uuid + dayOfWeek DayOfWeek + startTime String + endTime String + disciplineId String @db.Uuid + discipline Discipline @relation(fields: [disciplineId], references: [id], onDelete: Restrict) + timetableId String @db.Uuid + timetable Timetable @relation(fields: [timetableId], references: [id], onDelete: Restrict) +} + +model Attendance { + id String @id @default(uuid()) @db.Uuid + date DateTime + studentId String @db.Uuid + student Student @relation(fields: [studentId], references: [id], onDelete: Restrict) + status AttendanceStatus +} + +model Grade { + id String @id @default(uuid()) @db.Uuid + value Float + date DateTime + studentId String @db.Uuid + student Student @relation(fields: [studentId], references: [id], onDelete: Restrict) + disciplineId String @db.Uuid + discipline Discipline @relation(fields: [disciplineId], references: [id], onDelete: Restrict) +} + +model TimetableSchool { + timetableId String @db.Uuid + schoolId String @db.Uuid + timetable Timetable @relation(fields: [timetableId], references: [id], onDelete: Restrict) + school School @relation(fields: [schoolId], references: [id], onDelete: Restrict) + + @@id([timetableId, schoolId]) +} + +enum Period { + MORNING + AFTERNOON + EVENING +} + +enum DayOfWeek { + MONDAY + TUESDAY + WEDNESDAY + THURSDAY + FRIDAY + SATURDAY + SUNDAY +} + +enum AttendanceStatus { + PRESENT + ABSENT + EXCUSED } diff --git a/prisma/seeds/seed.ts b/prisma/seeds/seed.ts new file mode 100644 index 0000000..b61cd60 --- /dev/null +++ b/prisma/seeds/seed.ts @@ -0,0 +1,17 @@ +import { seedInstitution } from './seedInstitution' +import { seedGrade } from './seedGrade' +async function main() { + await seedInstitution() + await seedGrade() +} + +main() + .catch((e) => { + console.error(e) + process.exit(1) + }) + .finally(async () => { + const { PrismaClient } = await import('@prisma/client') + const prisma = new PrismaClient() + await prisma.$disconnect() + }) diff --git a/prisma/seeds/seedGrade.ts b/prisma/seeds/seedGrade.ts new file mode 100644 index 0000000..e10bede --- /dev/null +++ b/prisma/seeds/seedGrade.ts @@ -0,0 +1,60 @@ +import { PrismaClient, AttendanceStatus, DayOfWeek } from '@prisma/client' +const prisma = new PrismaClient() + +export async function seedGrade() { + // Get some existing data to link + const students = await prisma.student.findMany() + const disciplines = await prisma.discipline.findMany() + const timetables = await prisma.timetable.findMany() + const schools = await prisma.school.findMany() + + if ( + students.length === 0 || + disciplines.length === 0 || + timetables.length === 0 || + schools.length === 0 + ) { + console.error( + 'Required data is missing, please ensure the previous seed has run correctly.', + ) + return + } + + // Create Attendance records + const attendanceData = students.map((student) => ({ + date: new Date(), + studentId: student.id, + status: AttendanceStatus.PRESENT, + })) + + await prisma.attendance.createMany({ + data: attendanceData, + }) + + // Create Grade records + const gradeData = students.map((student) => ({ + value: Math.floor(Math.random() * 100), + date: new Date(), + studentId: student.id, + disciplineId: + disciplines[Math.floor(Math.random() * disciplines.length)].id, + })) + + await prisma.grade.createMany({ + data: gradeData, + }) + + // Create TimetableSchool records + const timetableSchoolData = timetables.flatMap((timetable) => + schools.map((school) => ({ + timetableId: timetable.id, + schoolId: school.id, + })), + ) + + await prisma.timetableSchool.createMany({ + data: timetableSchoolData, + }) + + console.log('Seeded Attendance, Grade, and TimetableSchool data.') +} diff --git a/prisma/seeds/seedInstitution.ts b/prisma/seeds/seedInstitution.ts new file mode 100644 index 0000000..d8e1b00 --- /dev/null +++ b/prisma/seeds/seedInstitution.ts @@ -0,0 +1,269 @@ +import { PrismaClient } from '@prisma/client' +const prisma = new PrismaClient() + +export async function seedInstitution() { + // Create Institution + const institution = await prisma.institution.create({ + data: { + name: 'Instituição Educacional Alfa', + address: 'Rua Principal, 123', + city: 'Cidade Alfa', + state: 'Estado Alfa', + postalCode: '12345-678', + phone: '(11) 1234-5678', + }, + }) + + const school1 = await prisma.school.create({ + data: { + name: 'Escola Fundamental Alfa', + address: 'Avenida Secundária, 456', + city: 'Cidade Alfa', + state: 'Estado Alfa', + postalCode: '12345-678', + phone: '(11) 8765-4321', + institutionId: institution.id, + }, + }) + + const school2 = await prisma.school.create({ + data: { + name: 'Colégio Beta', + address: 'Rua Terciária, 789', + city: 'Cidade Beta', + state: 'Estado Beta', + postalCode: '98765-432', + phone: '(21) 2345-6789', + institutionId: institution.id, + }, + }) + + // Create Courses + const course1 = await prisma.course.create({ + data: { + name: 'Ensino Fundamental I', + schoolId: school1.id, + }, + }) + + const course2 = await prisma.course.create({ + data: { + name: 'Ensino Médio', + schoolId: school2.id, + }, + }) + + // Create Series + const series1 = await prisma.series.create({ + data: { + name: '1º Ano', + courseId: course1.id, + }, + }) + + const series2 = await prisma.series.create({ + data: { + name: '2º Ano', + courseId: course2.id, + }, + }) + + // Create Classrooms + const classroom1 = await prisma.classroom.create({ + data: { + name: 'Turma A', + period: 'MORNING', + seriesId: series1.id, + }, + }) + + const classroom2 = await prisma.classroom.create({ + data: { + name: 'Turma B', + period: 'AFTERNOON', + seriesId: series1.id, + }, + }) + + const classroom3 = await prisma.classroom.create({ + data: { + name: 'Turma C', + period: 'EVENING', + seriesId: series2.id, + }, + }) + + // Create Students + await prisma.student.createMany({ + data: [ + { + name: 'Ana Silva', + email: 'ana.silva@example.com', + classroomId: classroom1.id, + }, + { + name: 'Bruno Souza', + email: 'bruno.souza@example.com', + classroomId: classroom1.id, + }, + { + name: 'Carla Mendes', + email: 'carla.mendes@example.com', + classroomId: classroom2.id, + }, + { + name: 'Daniel Oliveira', + email: 'daniel.oliveira@example.com', + classroomId: classroom2.id, + }, + { + name: 'Elaine Costa', + email: 'elaine.costa@example.com', + classroomId: classroom3.id, + }, + { + name: 'Felipe Lima', + email: 'felipe.lima@example.com', + classroomId: classroom3.id, + }, + ], + }) + + // Create Teachers + const teacher1 = await prisma.teacher.create({ + data: { + name: 'Prof. João Pereira', + email: 'joao.pereira@example.com', + schoolId: school1.id, + }, + }) + + const teacher2 = await prisma.teacher.create({ + data: { + name: 'Profª. Maria Fernandes', + email: 'maria.fernandes@example.com', + schoolId: school1.id, + }, + }) + + const teacher3 = await prisma.teacher.create({ + data: { + name: 'Prof. Paulo Santos', + email: 'paulo.santos@example.com', + schoolId: school2.id, + }, + }) + + const teacher4 = await prisma.teacher.create({ + data: { + name: 'Profª. Rita Oliveira', + email: 'rita.oliveira@example.com', + schoolId: school2.id, + }, + }) + + // Create Disciplines + const math = await prisma.discipline.create({ + data: { + name: 'Matemática', + teacherId: teacher1.id, + }, + }) + + const science = await prisma.discipline.create({ + data: { + name: 'Ciências', + teacherId: teacher2.id, + }, + }) + + const history = await prisma.discipline.create({ + data: { + name: 'História', + teacherId: teacher3.id, + }, + }) + + const geography = await prisma.discipline.create({ + data: { + name: 'Geografia', + teacherId: teacher4.id, + }, + }) + + // Create Timetables + const timetable1 = await prisma.timetable.create({ + data: { + name: 'Horário da Turma A', + classroomId: classroom1.id, + teachers: { + connect: [{ id: teacher1.id }, { id: teacher2.id }], + }, + classSessions: { + create: [ + { + dayOfWeek: 'MONDAY', + startTime: '08:00', + endTime: '09:00', + disciplineId: math.id, + }, + { + dayOfWeek: 'TUESDAY', + startTime: '09:00', + endTime: '10:00', + disciplineId: science.id, + }, + ], + }, + }, + }) + + const timetable2 = await prisma.timetable.create({ + data: { + name: 'Horário da Turma C', + classroomId: classroom3.id, + teachers: { + connect: [{ id: teacher3.id }, { id: teacher4.id }], + }, + classSessions: { + create: [ + { + dayOfWeek: 'WEDNESDAY', + startTime: '10:00', + endTime: '11:00', + disciplineId: history.id, + }, + { + dayOfWeek: 'THURSDAY', + startTime: '11:00', + endTime: '12:00', + disciplineId: geography.id, + }, + ], + }, + }, + }) + + console.log({ + institution, + school1, + school2, + course1, + course2, + series1, + series2, + classroom1, + classroom2, + classroom3, + teacher1, + teacher2, + teacher3, + teacher4, + math, + science, + history, + geography, + timetable1, + timetable2, + }) +} diff --git a/src/book/book_service.ts b/src/book/book_service.ts index 992105b..d380af6 100644 --- a/src/book/book_service.ts +++ b/src/book/book_service.ts @@ -1,28 +1,28 @@ -import { Injectable } from '@nestjs/common'; -import { Book, Prisma } from '@prisma/client'; -import { PrismaService } from 'src/prisma.service'; +import { Injectable } from '@nestjs/common' +import { Book, Prisma } from '@prisma/client' +import { PrismaService } from 'src/prisma.service' @Injectable() export class BookService { constructor(private prismaService: PrismaService) {} async create(data: Prisma.BookCreateInput): Promise { - return this.prismaService.book.create({ data }); + return this.prismaService.book.create({ data }) } async findAll(): Promise { - return this.prismaService.book.findMany(); + return this.prismaService.book.findMany() } async findOne(id: string): Promise { - return this.prismaService.book.findUnique({ where: { id } }); + return this.prismaService.book.findUnique({ where: { id } }) } async update(id: string, data: Prisma.BookUpdateInput): Promise { - return this.prismaService.book.update({ where: { id }, data }); + return this.prismaService.book.update({ where: { id }, data }) } async remove(id: string): Promise { - return this.prismaService.book.delete({ where: { id } }); + return this.prismaService.book.delete({ where: { id } }) } } diff --git a/src/main.ts b/src/main.ts index 13cad38..a44d1a1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,15 @@ -import { NestFactory } from '@nestjs/core'; -import { AppModule } from './app.module'; +import { NestFactory } from '@nestjs/core' +import { + FastifyAdapter, + NestFastifyApplication, +} from '@nestjs/platform-fastify' +import { AppModule } from './app.module' async function bootstrap() { - const app = await NestFactory.create(AppModule); - await app.listen(3000); + const app = await NestFactory.create( + AppModule, + new FastifyAdapter({ logger: true }), + ) + await app.listen(3000, '0.0.0.0') } -bootstrap(); +bootstrap()