diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index af8e54c..c172f3e 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -1,8 +1,5 @@ name: Tests, Static Analysis and Deploy -env: - IANA_STG_DOMAIN: iana-chatbot.staging.bonde.org - concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -26,36 +23,24 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Install Node.js - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - name: Install pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v4 with: version: 8 run_install: false - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - name: Setup pnpm cache - uses: actions/cache@v3 + - name: Install Node.js + uses: actions/setup-node@v4 with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- + node-version: ${{ matrix.node-version }} + cache: 'pnpm' - name: Install dependencies - run: pnpm install --ignore-scripts + run: pnpm install --frozen-lockfile - name: Run tests run: pnpm run test:ci @@ -63,69 +48,28 @@ jobs: - name: Build run: pnpm run build - ui-deployment: - runs-on: ubuntu-latest - needs: - - integration - if: always() && needs.integration.result == 'success' - steps: - - uses: actions/checkout@v3 - - name: Install Vercel CLI - run: npm install --global vercel@latest - - - name: Pull Vercel Environment Information - run: | - env="preview" - if [[ ${GITHUB_REF} == "refs/heads/main" ]]; then - env="production" - fi - cd packages/ui && vercel pull --yes --environment=$env --token=${{ secrets.VERCEL_TOKEN }} - - - name: Deploy Project Artifacts to Vercel - run: | - args="" - if [[ ${GITHUB_REF} == "refs/heads/main" ]]; then - args="--prod" - fi - cd packages/ui && vercel deploy $args --token=${{ secrets.VERCEL_TOKEN }} > domain.txt - if [[ ${GITHUB_REF} != "refs/heads/main" ]]; then - vercel alias --token=${{ secrets.VERCEL_TOKEN }} set `cat domain.txt` $IANA_STG_DOMAIN - fi - api-deployment: runs-on: ubuntu-latest needs: - integration if: always() && needs.integration.result == 'success' steps: - - uses: actions/checkout@v3 - - - name: Install Node.js - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} + - uses: actions/checkout@v4 - name: Install pnpm - uses: pnpm/action-setup@v2 + uses: pnpm/action-setup@v4 with: version: 8 run_install: false - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - name: Setup pnpm cache - uses: actions/cache@v3 + - name: Install Node.js + uses: actions/setup-node@v4 with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- + node-version: ${{ matrix.node-version }} + cache: 'pnpm' - name: Install dependencies - run: pnpm install --ignore-scripts + run: pnpm install --frozen-lockfile - name: Create env file run: | diff --git a/packages/ui/.env.example b/packages/ui/.env.example index beb4fe4..da36b7b 100644 --- a/packages/ui/.env.example +++ b/packages/ui/.env.example @@ -1,4 +1,3 @@ NEXT_PUBLIC_AWS_REST_API= -HASURA_SECRET= -GRAPHQL_HTTP_URL= -NEXT_PUBLIC_AMPLITUDE_API_KEY= \ No newline at end of file +NEXT_PUBLIC_AMPLITUDE_API_KEY= +DATABASE_URL="postgresql://postgres:changeme@localhost:5432/mapa-org?connection_limit=1" diff --git a/packages/ui/package.json b/packages/ui/package.json index ec9232d..74b619a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -9,7 +9,9 @@ "test:stage": "jest --findRelatedTests --passWithNoTests", "test:ci": "jest --ci", "test": "jest --watch", - "pre-commit": "lint-staged" + "pre-commit": "lint-staged", + "generate": "prisma generate", + "postinstall": "prisma generate" }, "dependencies": { "@amplitude/analytics-browser": "^2.4.0", @@ -18,6 +20,7 @@ "@chakra-ui/react": "^2.8.0", "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", + "@prisma/client": "^5.22.0", "@types/node": "20.1.4", "@types/react": "18.2.6", "@types/react-dom": "18.2.4", @@ -25,6 +28,7 @@ "eventsource-parser": "^1.0.0", "framer-motion": "^10.16.1", "next": "^13.5.6", + "prisma": "^5.22.0", "react": "18.2.0", "react-cookie": "^4.1.1", "react-dom": "18.2.0", diff --git a/packages/ui/pages/api/db.ts b/packages/ui/pages/api/db.ts new file mode 100644 index 0000000..de08f2a --- /dev/null +++ b/packages/ui/pages/api/db.ts @@ -0,0 +1,5 @@ +import { PrismaClient } from "@prisma/client"; + +const prisma = new PrismaClient(); + +export default prisma; \ No newline at end of file diff --git a/packages/ui/pages/api/feedback.ts b/packages/ui/pages/api/feedback.ts index f5b8311..9a08acb 100644 --- a/packages/ui/pages/api/feedback.ts +++ b/packages/ui/pages/api/feedback.ts @@ -1,79 +1,45 @@ -import type { NextApiRequest, NextApiResponse } from 'next'; +import type { NextApiRequest, NextApiResponse } from "next"; +import prisma from "./db"; -export const FIRST_QUESTION = - 'Qual foi sua percepção ao interagir com a IAna?'; +export const FIRST_QUESTION = "Qual foi sua percepção ao interagir com a IAna?"; export const SECOND_QUESTION = - 'Em uma escala de 0 a 5, que nota você daria à sua experiência com a IAna? Por favor, use apenas números.'; - -const MUTATION = `mutation mapa_do_acolhimento_iana_feedback($answers: [mapa_do_acolhimento_iana_feedback_insert_input!]!) { - insert_mapa_do_acolhimento_iana_feedback(objects: $answers) { - returning { - id - user_id - answer - created_at - question - } - } -}`; + "Em uma escala de 0 a 5, que nota você daria à sua experiência com a IAna? Por favor, use apenas números."; export default async function handler( - req: NextApiRequest, - res: NextApiResponse + req: NextApiRequest, + res: NextApiResponse ) { - try { - const { firstAnswer, rating, userId } = req.body; - - if (!firstAnswer || !rating || !userId) { - throw new Error('Invalid req body'); - } - - const answers = [ - { - answer: firstAnswer, - question: FIRST_QUESTION, - user_id: Number(userId), - }, - { - answer: `${rating}`, - question: SECOND_QUESTION, - user_id: Number(userId), - }, - ]; - const graphqlQuery = { - query: MUTATION, - variables: { - answers: answers, - }, - }; - - const graphqlApiRes = await fetch( - `${process.env.GRAPHQL_HTTP_URL}`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'x-hasura-admin-secret': `${process.env.HASURA_SECRET}`, - }, - body: JSON.stringify(graphqlQuery), - } - ); - - const data = await graphqlApiRes.json(); - - if (data && data.errors && data.errors.length > 0) { - throw new Error( - data.errors.map((e: any) => e.message).join(' ') - ); - } - - return res.status(200).json(data); - } catch (e: any) { - console.error(e); - return res - .status(500) - .send( - `Something went wrong when saving the feedback answer: ${e.message}` - ); - } + try { + const { firstAnswer, rating, userId } = req.body; + + if (!firstAnswer || !rating || !userId) { + throw new Error("Invalid req body"); + } + + const answers = [ + { + answer: firstAnswer, + question: FIRST_QUESTION, + user_id: Number(userId), + }, + { + answer: `${rating}`, + question: SECOND_QUESTION, + user_id: Number(userId), + }, + ]; + + const feedbacks = await prisma.iana_feedback.createMany({ + data: answers, + }); + + return res.status(200).json(feedbacks); + } catch (e: any) { + console.error(e); + return res + .status(500) + .send( + `Something went wrong when saving the feedback answer: ${e.message}` + ); + } } diff --git a/packages/ui/prisma/schema.prisma b/packages/ui/prisma/schema.prisma new file mode 100644 index 0000000..ef3a785 --- /dev/null +++ b/packages/ui/prisma/schema.prisma @@ -0,0 +1,734 @@ +generator client { + provider = "prisma-client-js" + previewFeatures = ["multiSchema", "prismaSchemaFolder"] + binaryTargets = ["native", "rhel-openssl-1.0.x"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + schemas = ["iana", "match", "mobilization", "msr", "pii_sec", "public", "public_services"] +} + +model busara_ab_experiment { + busara_ab_experiment_id Int @id @default(autoincrement()) + match_id Int? + support_request_id Int + msr_id BigInt + transactional_id String @db.VarChar(50) + + @@schema("match") +} + +model busara_hashes { + msr_email String @id @db.VarChar(254) + hash String @db.VarChar(1000) + + @@schema("match") +} + +model feature_flag { + id BigInt @id @default(autoincrement()) + feature_enabled Boolean @default(false) + feature_name String @unique + + @@schema("match") +} + +model match_confirmation_status_history { + match_confirmation_status_history_id Int @id @default(autoincrement()) + match_confirmation_id Int + status match_confirmation_status + created_at DateTime @default(now()) @db.Timestamp(6) + match_confirmations match_confirmations @relation(fields: [match_confirmation_id], references: [match_confirmation_id]) + + @@schema("match") +} + +model match_confirmations { + match_confirmation_id Int @id @default(autoincrement()) + support_request_id Int + msr_id BigInt + volunteer_id Int + status match_confirmation_status + match_id Int? + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + match_stage match_stage + match_type match_type + match_confirmation_status_history match_confirmation_status_history[] + support_requests support_requests @relation(fields: [support_request_id], references: [support_request_id]) + + @@schema("match") +} + +model match_status_history { + match_status_history_id Int @id @default(autoincrement()) + match_id Int + status match_status + created_at DateTime @default(now()) @db.Timestamp(6) + matches matches @relation(fields: [match_id], references: [match_id]) + + @@schema("match") +} + +model match_surveys { + match_survey_id Int @id @default(autoincrement()) + match_id Int + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + survey_type survey_type + matches matches @relation(fields: [match_id], references: [match_id]) + + @@schema("match") +} + +model matches { + match_id Int @id @default(autoincrement()) + support_request_id Int + msr_id BigInt + volunteer_id Int? + msr_zendesk_ticket_id BigInt + volunteer_zendesk_ticket_id BigInt? + support_type support_type + match_type match_type + match_stage match_stage + status match_status + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + match_status_history match_status_history[] + match_surveys match_surveys[] + support_requests support_requests @relation(fields: [support_request_id], references: [support_request_id]) + volunteers volunteers? @relation(fields: [volunteer_id], references: [id]) + + @@schema("match") +} + +model support_request_status_history { + support_request_status_history_id Int @id @default(autoincrement()) + support_request_id Int + status support_requests_status + created_at DateTime @default(now()) @db.Timestamp(6) + support_requests support_requests @relation(fields: [support_request_id], references: [support_request_id]) + + @@schema("match") +} + +model support_requests { + support_request_id Int @id @default(autoincrement()) + msr_id BigInt + zendesk_ticket_id BigInt @unique + support_type support_type + support_expertise String? + priority Int? + has_disability Boolean? + requires_libras Boolean? + accepts_online_support Boolean + lat Decimal? @db.Decimal(10, 4) + lng Decimal? @db.Decimal(10, 4) + city String? + state String? + status support_requests_status + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + match_confirmations match_confirmations[] + matches matches[] + support_request_status_history support_request_status_history[] + + @@schema("match") +} + +model multiplier_journey_events { + multiplier_journey_event_id Int @id @default(autoincrement()) + multiplier_id Int + event multiplier_journey_event + created_at DateTime @default(now()) @db.Timestamp(6) + multipliers multipliers @relation(fields: [multiplier_id], references: [multiplier_id]) + + @@schema("mobilization") +} + +model multiplier_pii { + multiplier_pii_id Int @id @default(autoincrement()) + multiplier_id Int @unique + email String @db.VarChar(254) + first_name String @db.VarChar(200) + last_name String @db.VarChar(400) + phone String @db.VarChar(100) + zip_code String @db.VarChar(9) + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + multipliers multipliers @relation(fields: [multiplier_id], references: [multiplier_id]) + + @@schema("mobilization") +} + +model multiplier_registration_open_questions { + multiplier_registration_open_questions_id Int @id @default(autoincrement()) + multiplier_id Int @unique + university_name String @db.VarChar(200) + university_course String @db.VarChar(200) + how_she_heard_about_us String + reasons_for_participating String + multipliers multipliers @relation(fields: [multiplier_id], references: [multiplier_id]) + + @@schema("mobilization") +} + +model multipliers { + multiplier_id Int @id @default(autoincrement()) + gender gender + age Int + region region + state String @db.VarChar(9) + race race + sexuality sexuality + religion religion + has_disability Boolean + has_internet_access Boolean + is_available Boolean + education_level education_level + is_university_student Boolean + university_type multiplier_university_type + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + shift_availability String[] + city String @default("not_found") @db.VarChar(100) + disability_type String[] @default([]) + has_children Boolean? + household_type multiplier_household_type @default(not_found) + how_many_children Int? + multiplier_journey_events multiplier_journey_events[] + multiplier_pii multiplier_pii? + multiplier_registration_open_questions multiplier_registration_open_questions? + + @@schema("mobilization") +} + +model msr_status_history { + msr_status_history_id Int @id @default(autoincrement()) + msr_id BigInt + status msr_status + created_at DateTime @default(now()) @db.Timestamp(6) + msrs msrs @relation(fields: [msr_id], references: [msr_id]) + + @@schema("msr") +} + +model msrs { + msr_id BigInt @id @default(autoincrement()) + gender gender + race_color race + has_disability Boolean? + accepts_online_support Boolean? + zipcode String @db.VarChar(9) + neighborhood String @db.VarChar(100) + city String @db.VarChar(100) + state String @db.VarChar(9) + status msr_status + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + msr_status_history msr_status_history[] + msr_pii msr_pii? + + @@schema("msr") +} + +model msr_pii { + msr_id BigInt @id @default(autoincrement()) + first_name String? @db.VarChar(200) + email String @unique @db.VarChar(254) + phone String @db.VarChar(100) + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + date_of_birth DateTime? @db.Date + msrs msrs @relation(fields: [msr_id], references: [msr_id]) + + @@schema("pii_sec") +} + +model auth_group { + id Int @id @default(autoincrement()) + name String @unique @db.VarChar(150) + auth_group_permissions auth_group_permissions[] + auth_user_groups auth_user_groups[] + + @@index([name], map: "auth_group_name_a6ea08ec_like") + @@schema("public") +} + +model auth_group_permissions { + id BigInt @id @default(autoincrement()) + group_id Int + permission_id Int + auth_permission auth_permission @relation(fields: [permission_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "auth_group_permissio_permission_id_84c5c92e_fk_auth_perm") + auth_group auth_group @relation(fields: [group_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "auth_group_permissions_group_id_b120cbf9_fk_auth_group_id") + + @@unique([group_id, permission_id], map: "auth_group_permissions_group_id_permission_id_0cd325b0_uniq") + @@index([group_id], map: "auth_group_permissions_group_id_b120cbf9") + @@index([permission_id], map: "auth_group_permissions_permission_id_84c5c92e") + @@schema("public") +} + +model auth_permission { + id Int @id @default(autoincrement()) + name String @db.VarChar(255) + content_type_id Int + codename String @db.VarChar(100) + auth_group_permissions auth_group_permissions[] + django_content_type django_content_type @relation(fields: [content_type_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "auth_permission_content_type_id_2f476e4b_fk_django_co") + auth_user_user_permissions auth_user_user_permissions[] + + @@unique([content_type_id, codename], map: "auth_permission_content_type_id_codename_01ab375a_uniq") + @@index([content_type_id], map: "auth_permission_content_type_id_2f476e4b") + @@schema("public") +} + +model auth_user { + id Int @id @default(autoincrement()) + password String @db.VarChar(128) + last_login DateTime? @db.Timestamptz(6) + is_superuser Boolean + username String @unique @db.VarChar(150) + first_name String @db.VarChar(150) + last_name String @db.VarChar(150) + email String @db.VarChar(254) + is_staff Boolean + is_active Boolean + date_joined DateTime @db.Timestamptz(6) + auth_user_groups auth_user_groups[] + auth_user_user_permissions auth_user_user_permissions[] + django_admin_log django_admin_log[] + volunteers_formdata volunteers_formdata? + + @@index([username], map: "auth_user_username_6821ab7c_like") + @@schema("public") +} + +model auth_user_groups { + id BigInt @id @default(autoincrement()) + user_id Int + group_id Int + auth_group auth_group @relation(fields: [group_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "auth_user_groups_group_id_97559544_fk_auth_group_id") + auth_user auth_user @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "auth_user_groups_user_id_6a12ed8b_fk_auth_user_id") + + @@unique([user_id, group_id], map: "auth_user_groups_user_id_group_id_94350c0c_uniq") + @@index([group_id], map: "auth_user_groups_group_id_97559544") + @@index([user_id], map: "auth_user_groups_user_id_6a12ed8b") + @@schema("public") +} + +model auth_user_user_permissions { + id BigInt @id @default(autoincrement()) + user_id Int + permission_id Int + auth_permission auth_permission @relation(fields: [permission_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "auth_user_user_permi_permission_id_1fbb5f2c_fk_auth_perm") + auth_user auth_user @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "auth_user_user_permissions_user_id_a95ead1b_fk_auth_user_id") + + @@unique([user_id, permission_id], map: "auth_user_user_permissions_user_id_permission_id_14a6b632_uniq") + @@index([permission_id], map: "auth_user_user_permissions_permission_id_1fbb5f2c") + @@index([user_id], map: "auth_user_user_permissions_user_id_a95ead1b") + @@schema("public") +} + +model cities { + city_id Int @id @default(autoincrement()) + city_value String @db.VarChar(100) + city_label String @db.VarChar(100) + state String @db.VarChar(2) + ibge_code Int + created_at DateTime @db.Timestamptz(6) + updated_at DateTime @db.Timestamptz(6) + + @@schema("public") +} + +model django_admin_log { + id Int @id @default(autoincrement()) + action_time DateTime @db.Timestamptz(6) + object_id String? + object_repr String @db.VarChar(200) + action_flag Int @db.SmallInt + change_message String + content_type_id Int? + user_id Int + django_content_type django_content_type? @relation(fields: [content_type_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "django_admin_log_content_type_id_c4bce8eb_fk_django_co") + auth_user auth_user @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "django_admin_log_user_id_c564eba6_fk_auth_user_id") + + @@index([content_type_id], map: "django_admin_log_content_type_id_c4bce8eb") + @@index([user_id], map: "django_admin_log_user_id_c564eba6") + @@schema("public") +} + +model django_content_type { + id Int @id @default(autoincrement()) + app_label String @db.VarChar(100) + model String @db.VarChar(100) + auth_permission auth_permission[] + django_admin_log django_admin_log[] + + @@unique([app_label, model], map: "django_content_type_app_label_model_76bd3d3b_uniq") + @@schema("public") +} + +model django_migrations { + id BigInt @id @default(autoincrement()) + app String @db.VarChar(255) + name String @db.VarChar(255) + applied DateTime @db.Timestamptz(6) + + @@schema("public") +} + +model django_session { + session_key String @id @db.VarChar(40) + session_data String + expire_date DateTime @db.Timestamptz(6) + + @@index([expire_date], map: "django_session_expire_date_a5c62663") + @@index([session_key], map: "django_session_session_key_c0390e0f_like") + @@schema("public") +} + +model integrations_logs { + id BigInt @id(map: "volunteers_integrationlogs_pkey") @default(autoincrement()) + type String @db.VarChar(30) + created_at DateTime @db.Timestamptz(6) + status String @db.VarChar(30) + error String + data Json + integration String @db.VarChar(15) + external_id BigInt? + form_type String @db.VarChar(15) + internal_id BigInt? + + @@schema("public") +} + +model volunteer_availability { + volunteer_id Int @id + current_matches Int + max_matches Int + is_available Boolean + support_type String @db.VarChar(20) + support_expertise String @db.VarChar(200) + offers_online_support Boolean + lat Decimal? @db.Decimal(10, 4) + lng Decimal? @db.Decimal(10, 4) + city String @db.VarChar(100) + created_at DateTime @db.Timestamptz(6) + updated_at DateTime @db.Timestamptz(6) + state String @db.VarChar(9) + offers_libras_support Boolean + volunteers volunteers @relation(fields: [volunteer_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "volunteer_availability_volunteer_id_ff544bbb_fk_volunteers_id") + + @@schema("public") +} + +model volunteer_segments { + volunteer_segment_id BigInt @id @default(autoincrement()) + segment_name String @db.VarChar(100) + volunteer_id Int + volunteer_segment_group String @db.VarChar(100) + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + volunteers volunteers @relation(fields: [volunteer_id], references: [id]) + + @@schema("public") +} + +model volunteer_status_history { + id BigInt @id @default(autoincrement()) + created_at DateTime @default(now()) @db.Timestamptz(6) + volunteer_id Int + status String @db.VarChar(60) + volunteers volunteers @relation(fields: [volunteer_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "volunteer_status_history_volunteer_id_d1e0ea8c_fk_volunteers_id") + + @@index([volunteer_id], map: "volunteer_status_history_volunteer_id_d1e0ea8c") + @@schema("public") +} + +model volunteer_training_history { + volunteer_training_history_id BigInt @id @default(autoincrement()) + volunteer_id Int + moodle_user_id Int + event volunteer_training_event + created_at DateTime @default(now()) @db.Timestamp(6) + volunteers volunteers @relation(fields: [volunteer_id], references: [id]) + + @@schema("public") +} + +model volunteer_unsubscriptions { + volunteer_unsubscription_id BigInt @id @default(autoincrement()) + volunteer_id Int + unsubscription_reason String @db.VarChar + unsubscription_description String + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + volunteers volunteers @relation(fields: [volunteer_id], references: [id]) + + @@schema("public") +} + +model volunteers { + id Int @id(map: "volunteers_volunteer_pkey") @default(autoincrement()) + created_at DateTime @db.Timestamptz(6) + updated_at DateTime @db.Timestamptz(6) + condition String @db.VarChar(60) + first_name String @db.VarChar(200) + last_name String @db.VarChar(200) + email String @unique @db.VarChar(254) + phone String @db.VarChar(100) + zipcode String @db.VarChar(9) + state String @db.VarChar(9) + city String @db.VarChar(100) + neighborhood String @db.VarChar(100) + latitude Decimal? @db.Decimal(10, 4) + register_number String @db.VarChar(400) + birth_date DateTime @db.Timestamptz(6) + color String @db.VarChar(100) + gender String @db.VarChar(100) + modality String @db.VarChar(100) + fields_of_work String + years_of_experience String @db.VarChar(100) + approach String? @db.VarChar(100) + form_data_id BigInt? + moodle_id Int? + availability Int + form_entries_id BigInt? + longitude Decimal? @db.Decimal(10, 4) + occupation String @db.VarChar(12) + offers_libras_support Boolean + zendesk_user_id BigInt? + street String? @db.VarChar(200) + matches matches[] + volunteer_availability volunteer_availability? + volunteer_segments volunteer_segments[] + volunteer_status_history volunteer_status_history[] + volunteer_training_history volunteer_training_history[] + volunteer_unsubscriptions volunteer_unsubscriptions[] + volunteers_formdata volunteers_formdata? @relation(fields: [form_data_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "volunteers_volunteer_form_data_id_ec6c5a18_fk_volunteer") + + @@index([form_data_id], map: "volunteers_volunteer_form_data_id_ec6c5a18") + @@schema("public") +} + +model volunteers_formdata { + id BigInt @id @default(autoincrement()) + type_form String @db.VarChar(10) + step Int + values Json + user_id Int @unique + created_at DateTime @db.Timestamptz(6) + total_steps Int + updated_at DateTime @db.Timestamptz(6) + volunteers volunteers[] + auth_user auth_user @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "volunteers_formdata_user_id_c9262138_fk_auth_user_id") + + @@schema("public") +} + +model public_services { + public_service_id Int @id @default(autoincrement()) + service_name String @db.VarChar(400) + zipcode String @db.VarChar(9) + address String @db.VarChar(400) + phone String @db.VarChar(200) + email String @db.VarChar(400) + region String @db.VarChar(15) + state String @db.VarChar(9) + city String @db.VarChar(100) + lat Decimal? @db.Decimal(10, 4) + lng Decimal? @db.Decimal(10, 4) + created_at DateTime @default(now()) @db.Timestamp(6) + updated_at DateTime @db.Timestamp(6) + service_type String @db.VarChar(400) + + @@schema("public_services") +} + +model iana_feedback { + id Int @id @default(autoincrement()) + created_at DateTime @default(now()) @db.Timestamp(6) + user_id BigInt + question String + answer String? + + @@schema("iana") +} + +enum match_confirmation_status { + waiting + confirmed + denied + expired + + @@schema("match") +} + +enum match_stage { + ideal + expanded + online + old + manual + + @@schema("match") +} + +enum match_status { + completed + expired + in_contact + interrupted_after_support + interrupted_before_support + waiting_contact + started_contact + + @@schema("match") +} + +enum match_type { + msr + daily + manual + old + + @@schema("match") +} + +enum support_requests_status { + open + matched + social_worker + public_service + duplicated + closed + special_case + public_service_with_social_worker + scheduled_social_worker + expired_social_worker + waiting_for_match + waiting_for_match_with_priority + waived + waiting_for_confirmation + + @@schema("match") +} + +enum support_type { + psychological + legal + + @@schema("match") +} + +enum survey_type { + triagem_1 + triagem_2 + acompanhamento_1 + acompanhamento_2 + + @@schema("match") +} + +enum multiplier_household_type { + urban + rural + not_found + + @@schema("mobilization") +} + +enum multiplier_journey_event { + registration + general_onboarding + + @@schema("mobilization") +} + +enum multiplier_university_type { + public + private + not_found + + @@schema("mobilization") +} + +enum msr_status { + registered + unregistered + + @@schema("msr") +} + +enum education_level { + basic_education + high_school + completed_undergraduate + incomplete_undergraduate + not_found + + @@schema("public") +} + +enum gender { + cis_woman + trans_woman + not_found + + @@schema("public") +} + +enum race { + black + brown + indigenous + yellow + white + not_found + + @@schema("public") +} + +enum region { + norte + nordeste + centro_oeste + sudeste + sul + not_found + + @@schema("public") +} + +enum religion { + atheist + candomble + catholic + spiritist + evangelical + umbanda + others + not_found + + @@schema("public") +} + +enum sexuality { + lesbian + bisexual + heterosexual + asexual + not_found + + @@schema("public") +} + +enum volunteer_training_event { + started_training + finished_training + + @@schema("public") +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72777eb..af540a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -93,6 +93,9 @@ importers: '@emotion/styled': specifier: ^11.11.0 version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.6)(react@18.2.0) + '@prisma/client': + specifier: ^5.22.0 + version: 5.22.0(prisma@5.22.0) '@types/node': specifier: 20.1.4 version: 20.1.4 @@ -114,6 +117,9 @@ importers: next: specifier: ^13.5.6 version: 13.5.6(@babel/core@7.24.6)(react-dom@18.2.0)(react@18.2.0) + prisma: + specifier: ^5.22.0 + version: 5.22.0 react: specifier: 18.2.0 version: 18.2.0 @@ -138,16 +144,16 @@ importers: version: 14.4.3(@testing-library/dom@10.1.0) eslint-config-next: specifier: 13.4.2 - version: 13.4.2(eslint@8.57.0)(typescript@5.0.4) + version: 13.4.2(eslint@8.40.0)(typescript@5.0.4) eslint-config-prettier: specifier: ^9.0.0 - version: 9.0.0(eslint@8.57.0) + version: 9.0.0(eslint@8.40.0) eslint-plugin-jest-dom: specifier: ^5.0.2 - version: 5.1.0(@testing-library/dom@10.1.0)(eslint@8.57.0) + version: 5.1.0(@testing-library/dom@10.1.0)(eslint@8.40.0) eslint-plugin-testing-library: specifier: ^6.0.1 - version: 6.0.1(eslint@8.57.0)(typescript@5.0.4) + version: 6.0.1(eslint@8.40.0)(typescript@5.0.4) jest-environment-jsdom: specifier: ^29.6.4 version: 29.6.4 @@ -2705,21 +2711,6 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint-community/regexpp@4.7.0: resolution: {integrity: sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -2742,33 +2733,11 @@ packages: - supports-color dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@eslint/js@8.40.0: resolution: {integrity: sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@hapi/accept@6.0.2: resolution: {integrity: sha512-xaTLf29Zeph/B32hekmgxLFsEPuX1xQYyZu0gJ4ZCHKU6nXmBRXfBymtWNEK0souOJcX2XHWUaZU6JzccuuMpg==} dependencies: @@ -3015,17 +2984,6 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -3035,10 +2993,6 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - dev: true - /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -3454,6 +3408,51 @@ packages: resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} dev: false + /@prisma/client@5.22.0(prisma@5.22.0): + resolution: {integrity: sha512-M0SVXfyHnQREBKxCgyo7sffrKttwE6R8PMq330MIUF0pTwjUhLbW84pFDlf06B27XyCR++VtjugEnIHdr07SVA==} + engines: {node: '>=16.13'} + requiresBuild: true + peerDependencies: + prisma: '*' + peerDependenciesMeta: + prisma: + optional: true + dependencies: + prisma: 5.22.0 + dev: false + + /@prisma/debug@5.22.0: + resolution: {integrity: sha512-AUt44v3YJeggO2ZU5BkXI7M4hu9BF2zzH2iF2V5pyXT/lRTyWiElZ7It+bRH1EshoMRxHgpYg4VB6rCM+mG5jQ==} + dev: false + + /@prisma/engines-version@5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2: + resolution: {integrity: sha512-2PTmxFR2yHW/eB3uqWtcgRcgAbG1rwG9ZriSvQw+nnb7c4uCr3RAcGMb6/zfE88SKlC1Nj2ziUvc96Z379mHgQ==} + dev: false + + /@prisma/engines@5.22.0: + resolution: {integrity: sha512-UNjfslWhAt06kVL3CjkuYpHAWSO6L4kDCVPegV6itt7nD1kSJavd3vhgAEhjglLJJKEdJ7oIqDJ+yHk6qO8gPA==} + requiresBuild: true + dependencies: + '@prisma/debug': 5.22.0 + '@prisma/engines-version': 5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2 + '@prisma/fetch-engine': 5.22.0 + '@prisma/get-platform': 5.22.0 + dev: false + + /@prisma/fetch-engine@5.22.0: + resolution: {integrity: sha512-bkrD/Mc2fSvkQBV5EpoFcZ87AvOgDxbG99488a5cexp5Ccny+UM6MAe/UFkUC0wLYD9+9befNOqGiIJhhq+HbA==} + dependencies: + '@prisma/debug': 5.22.0 + '@prisma/engines-version': 5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2 + '@prisma/get-platform': 5.22.0 + dev: false + + /@prisma/get-platform@5.22.0: + resolution: {integrity: sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q==} + dependencies: + '@prisma/debug': 5.22.0 + dev: false + /@rushstack/eslint-patch@1.3.3: resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==} dev: true @@ -4293,7 +4292,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.0.4): + /@typescript-eslint/parser@5.62.0(eslint@8.40.0)(typescript@5.0.4): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4307,7 +4306,7 @@ packages: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 + eslint: 8.40.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -4347,19 +4346,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.0.4): + /@typescript-eslint/utils@5.62.0(eslint@8.40.0)(typescript@5.0.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.1 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) - eslint: 8.57.0 + eslint: 8.40.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: @@ -4375,10 +4374,6 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - /@vercel/examples-ui@1.0.5(next@13.5.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-6pj8V9MPLgrPajIUbqEkbmupEMnK6xBk5zkwsilwhA9mYQdxttqgVyDqlFMQhEVqb3tk0PshA+XxnZoDfLCpoQ==} peerDependencies: @@ -6063,7 +6058,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next@13.4.2(eslint@8.57.0)(typescript@5.0.4): + /eslint-config-next@13.4.2(eslint@8.40.0)(typescript@5.0.4): resolution: {integrity: sha512-zjLJ9B9bbeWSo5q+iHfdt8gVYyT+y2BpWDfjR6XMBtFRSMKRGjllDKxnuKBV1q2Y/QpwLM2PXHJTMRyblCmRAg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -6074,27 +6069,27 @@ packages: dependencies: '@next/eslint-plugin-next': 13.4.2 '@rushstack/eslint-patch': 1.3.3 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.0.4) - eslint: 8.57.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.40.0)(typescript@5.0.4) + eslint: 8.40.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.57.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.40.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.40.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.40.0) + eslint-plugin-react: 7.33.2(eslint@8.40.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.40.0) typescript: 5.0.4 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color dev: true - /eslint-config-prettier@9.0.0(eslint@8.57.0): + /eslint-config-prettier@9.0.0(eslint@8.40.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 8.40.0 dev: true /eslint-import-resolver-node@0.3.9: @@ -6107,7 +6102,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.40.0): resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -6116,9 +6111,9 @@ packages: dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) + eslint: 8.40.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.40.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.40.0) fast-glob: 3.3.1 get-tsconfig: 4.7.0 is-core-module: 2.13.0 @@ -6130,7 +6125,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.40.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -6151,16 +6146,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.40.0)(typescript@5.0.4) debug: 3.2.7 - eslint: 8.57.0 + eslint: 8.40.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.40.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.40.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -6170,16 +6165,16 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.40.0)(typescript@5.0.4) array-includes: 3.1.6 array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.40.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.40.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -6195,7 +6190,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest-dom@5.1.0(@testing-library/dom@10.1.0)(eslint@8.57.0): + /eslint-plugin-jest-dom@5.1.0(@testing-library/dom@10.1.0)(eslint@8.40.0): resolution: {integrity: sha512-JIXZp+E/h/aGlP/rQc4tuOejiHlZXg65qw8JAJMIJA5VsdjOkss/SYcRSqBrQuEOytEM8JvngUjcz31d1RrCrA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6', yarn: '>=1'} peerDependencies: @@ -6207,11 +6202,11 @@ packages: dependencies: '@babel/runtime': 7.22.11 '@testing-library/dom': 10.1.0 - eslint: 8.57.0 + eslint: 8.40.0 requireindex: 1.2.0 dev: true - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.57.0): + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.40.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: @@ -6226,7 +6221,7 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.57.0 + eslint: 8.40.0 has: 1.0.3 jsx-ast-utils: 3.3.5 language-tags: 1.0.5 @@ -6236,16 +6231,16 @@ packages: semver: 6.3.1 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.40.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.57.0 + eslint: 8.40.0 dev: true - /eslint-plugin-react@7.33.2(eslint@8.57.0): + /eslint-plugin-react@7.33.2(eslint@8.40.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: @@ -6256,7 +6251,7 @@ packages: array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 es-iterator-helpers: 1.0.14 - eslint: 8.57.0 + eslint: 8.40.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -6270,14 +6265,14 @@ packages: string.prototype.matchall: 4.0.9 dev: true - /eslint-plugin-testing-library@6.0.1(eslint@8.57.0)(typescript@5.0.4): + /eslint-plugin-testing-library@6.0.1(eslint@8.40.0)(typescript@5.0.4): resolution: {integrity: sha512-CEYtjpcF3hAaQtYsTZqciR7s5z+T0LCMTwJeW+pz6kBnGtc866wAKmhaiK2Gsjc2jWNP7Gt6zhNr2DE1ZW4e+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.0.4) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.40.0)(typescript@5.0.4) + eslint: 8.40.0 transitivePeerDependencies: - supports-color - typescript @@ -6353,53 +6348,6 @@ packages: - supports-color dev: true - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /esniff@1.1.0: resolution: {integrity: sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g==} dependencies: @@ -6938,7 +6886,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.1: @@ -7080,13 +7027,6 @@ packages: type-fest: 0.20.2 dev: true - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -7136,10 +7076,6 @@ packages: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - /graphlib@2.1.8: resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} dependencies: @@ -7303,11 +7239,6 @@ packages: engines: {node: '>= 4'} dev: true - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: true - /immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} dev: true @@ -9157,18 +9088,6 @@ packages: type-check: 0.4.0 dev: true - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - dev: true - /ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} @@ -9468,6 +9387,17 @@ packages: react-is: 18.3.1 dev: true + /prisma@5.22.0: + resolution: {integrity: sha512-vtpjW3XuYCSnMsNVBjLMNkTj6OZbudcPPTPYHqX0CJfpcdWciI1dM8uHETwmDxxiqEwCIE6WvXucWUetJgfu/A==} + engines: {node: '>=16.13'} + hasBin: true + requiresBuild: true + dependencies: + '@prisma/engines': 5.22.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true @@ -11201,11 +11131,6 @@ packages: resolution: {integrity: sha512-lvY5iCs3T8I34F8WKS70+2P0U9dWLn3vdPf/Z+m2VK14N7OmqnPzmHfh3moHdusajoQ37Em39z0IZB9K4x/96A==} dev: false - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true - /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'}