diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..d86cf69 --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,15 @@ +node_modules +npm-debug.log +dist +.git +.gitignore +README.md +.env +.env.local +.env.*.local +.vscode +.idea +*.swp +*.swo +*~ +.DS_Store diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..15efb69 --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,15 @@ +# Database +DATABASE_URL=postgresql://user:password@localhost:5432/toptran +DB_USER=user +DB_PASSWORD=password +DB_HOST=localhost +DB_PORT=5432 +DB_NAME=toptran + +# Server +PORT=4000 +NODE_ENV=production + +# JWT +JWT_SECRET=sua_chave_secreta_aqui +JWT_REFRESH_SECRET=sua_chave_refresh_aqui diff --git a/backend/Dockerfile b/backend/Dockerfile index 165818f..e9a0da8 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,13 +1,30 @@ -FROM node:lts-alpine3.22 +# Build stage +FROM node:lts-alpine3.22 AS builder WORKDIR /app COPY package*.json ./ -RUN npm install +RUN npm ci --only=production -COPY . . +COPY . . -EXPOSE 3000 +RUN npm run build + +# Runtime stage +FROM node:lts-alpine3.22 + +WORKDIR /app + +# Copiar apenas arquivos necessários do builder +COPY --from=builder /app/dist ./dist +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/prisma ./prisma +COPY --from=builder /app/package*.json ./ + +ENV NODE_ENV=production +ENV PORT=4000 + +EXPOSE 4000 CMD ["npm", "start"] \ No newline at end of file diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma index a46525f..e0a9527 100644 --- a/backend/prisma/schema.prisma +++ b/backend/prisma/schema.prisma @@ -18,14 +18,18 @@ model tokens { } model users { - id String @id - name String - email String @unique - password String - createdAt DateTime @default(now()) - updatedAt DateTime - rides rides[] - tokens tokens[] + id String @id + name String + email String @unique + password String + profilePhoto String? @default("") + bio String? @default("") + createdAt DateTime @default(now()) + updatedAt DateTime + rides rides[] + tokens tokens[] + + @@index([email], map: "idx_users_email") } model companies { diff --git a/backend/src/controllers/users.controller.ts b/backend/src/controllers/users.controller.ts index 1b3bad1..38dca96 100644 --- a/backend/src/controllers/users.controller.ts +++ b/backend/src/controllers/users.controller.ts @@ -11,6 +11,15 @@ export async function get(req: AuthRequest, res: Response): Promise { } } +export async function getProfile(req: AuthRequest, res: Response): Promise { + try { + const profile = await usersService.getProfile(req.userId!); + res.json(profile); + } catch (err: any) { + res.status(404).json({ error: err.message }); + } +} + export async function update(req: AuthRequest, res: Response): Promise { const parsed = usersService.updateUserSchema.safeParse(req.body); if (!parsed.success) { @@ -26,8 +35,22 @@ export async function update(req: AuthRequest, res: Response): Promise { } } +export async function updateProfile(req: AuthRequest, res: Response): Promise { + const parsed = usersService.updateProfileSchema.safeParse(req.body); + if (!parsed.success) { + res.status(400).json({ error: parsed.error.flatten() }); + return; + } + + try { + const profile = await usersService.updateProfile(req.userId!, parsed.data); + res.json(profile); + } catch (err: any) { + res.status(400).json({ error: err.message }); + } +} + export async function remove(req: AuthRequest, res: Response): Promise { - try { await usersService.deleteUser(req.userId!); res.status(204).send(); diff --git a/backend/src/generated/prisma/commonInputTypes.ts b/backend/src/generated/prisma/commonInputTypes.ts index 08d9ad2..2f567c9 100644 --- a/backend/src/generated/prisma/commonInputTypes.ts +++ b/backend/src/generated/prisma/commonInputTypes.ts @@ -89,17 +89,6 @@ export type DateTimeWithAggregatesFilter<$PrismaModel = never> = { _max?: Prisma.NestedDateTimeFilter<$PrismaModel> } -export type DecimalFilter<$PrismaModel = never> = { - equals?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - in?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> - notIn?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> - lt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - lte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - gt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - gte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - not?: Prisma.NestedDecimalFilter<$PrismaModel> | runtime.Decimal | runtime.DecimalJsLike | number | string -} - export type StringNullableFilter<$PrismaModel = never> = { equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null @@ -115,38 +104,11 @@ export type StringNullableFilter<$PrismaModel = never> = { not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null } -export type DateTimeNullableFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null - in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null - notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> - not?: Prisma.NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null -} - export type SortOrderInput = { sort: Prisma.SortOrder nulls?: Prisma.NullsOrder } -export type DecimalWithAggregatesFilter<$PrismaModel = never> = { - equals?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - in?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> - notIn?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> - lt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - lte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - gt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - gte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - not?: Prisma.NestedDecimalWithAggregatesFilter<$PrismaModel> | runtime.Decimal | runtime.DecimalJsLike | number | string - _count?: Prisma.NestedIntFilter<$PrismaModel> - _avg?: Prisma.NestedDecimalFilter<$PrismaModel> - _sum?: Prisma.NestedDecimalFilter<$PrismaModel> - _min?: Prisma.NestedDecimalFilter<$PrismaModel> - _max?: Prisma.NestedDecimalFilter<$PrismaModel> -} - export type StringNullableWithAggregatesFilter<$PrismaModel = never> = { equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null @@ -165,6 +127,44 @@ export type StringNullableWithAggregatesFilter<$PrismaModel = never> = { _max?: Prisma.NestedStringNullableFilter<$PrismaModel> } +export type DecimalFilter<$PrismaModel = never> = { + equals?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + in?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> + notIn?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> + lt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + lte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + gt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + gte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + not?: Prisma.NestedDecimalFilter<$PrismaModel> | runtime.Decimal | runtime.DecimalJsLike | number | string +} + +export type DateTimeNullableFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null + in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null + notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> + not?: Prisma.NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null +} + +export type DecimalWithAggregatesFilter<$PrismaModel = never> = { + equals?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + in?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> + notIn?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> + lt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + lte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + gt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + gte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + not?: Prisma.NestedDecimalWithAggregatesFilter<$PrismaModel> | runtime.Decimal | runtime.DecimalJsLike | number | string + _count?: Prisma.NestedIntFilter<$PrismaModel> + _avg?: Prisma.NestedDecimalFilter<$PrismaModel> + _sum?: Prisma.NestedDecimalFilter<$PrismaModel> + _min?: Prisma.NestedDecimalFilter<$PrismaModel> + _max?: Prisma.NestedDecimalFilter<$PrismaModel> +} + export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = { equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null @@ -290,17 +290,6 @@ export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = { _max?: Prisma.NestedDateTimeFilter<$PrismaModel> } -export type NestedDecimalFilter<$PrismaModel = never> = { - equals?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - in?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> - notIn?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> - lt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - lte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - gt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - gte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - not?: Prisma.NestedDecimalFilter<$PrismaModel> | runtime.Decimal | runtime.DecimalJsLike | number | string -} - export type NestedStringNullableFilter<$PrismaModel = never> = { equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null @@ -315,33 +304,6 @@ export type NestedStringNullableFilter<$PrismaModel = never> = { not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null } -export type NestedDateTimeNullableFilter<$PrismaModel = never> = { - equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null - in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null - notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null - lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> - lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> - gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> - gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> - not?: Prisma.NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null -} - -export type NestedDecimalWithAggregatesFilter<$PrismaModel = never> = { - equals?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - in?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> - notIn?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> - lt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - lte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - gt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - gte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> - not?: Prisma.NestedDecimalWithAggregatesFilter<$PrismaModel> | runtime.Decimal | runtime.DecimalJsLike | number | string - _count?: Prisma.NestedIntFilter<$PrismaModel> - _avg?: Prisma.NestedDecimalFilter<$PrismaModel> - _sum?: Prisma.NestedDecimalFilter<$PrismaModel> - _min?: Prisma.NestedDecimalFilter<$PrismaModel> - _max?: Prisma.NestedDecimalFilter<$PrismaModel> -} - export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = { equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null @@ -370,6 +332,44 @@ export type NestedIntNullableFilter<$PrismaModel = never> = { not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null } +export type NestedDecimalFilter<$PrismaModel = never> = { + equals?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + in?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> + notIn?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> + lt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + lte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + gt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + gte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + not?: Prisma.NestedDecimalFilter<$PrismaModel> | runtime.Decimal | runtime.DecimalJsLike | number | string +} + +export type NestedDateTimeNullableFilter<$PrismaModel = never> = { + equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null + in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null + notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null + lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> + lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> + gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> + gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> + not?: Prisma.NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null +} + +export type NestedDecimalWithAggregatesFilter<$PrismaModel = never> = { + equals?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + in?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> + notIn?: runtime.Decimal[] | runtime.DecimalJsLike[] | number[] | string[] | Prisma.ListDecimalFieldRefInput<$PrismaModel> + lt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + lte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + gt?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + gte?: runtime.Decimal | runtime.DecimalJsLike | number | string | Prisma.DecimalFieldRefInput<$PrismaModel> + not?: Prisma.NestedDecimalWithAggregatesFilter<$PrismaModel> | runtime.Decimal | runtime.DecimalJsLike | number | string + _count?: Prisma.NestedIntFilter<$PrismaModel> + _avg?: Prisma.NestedDecimalFilter<$PrismaModel> + _sum?: Prisma.NestedDecimalFilter<$PrismaModel> + _min?: Prisma.NestedDecimalFilter<$PrismaModel> + _max?: Prisma.NestedDecimalFilter<$PrismaModel> +} + export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = { equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null diff --git a/backend/src/generated/prisma/internal/class.ts b/backend/src/generated/prisma/internal/class.ts index 5e82225..9465508 100644 --- a/backend/src/generated/prisma/internal/class.ts +++ b/backend/src/generated/prisma/internal/class.ts @@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = { "clientVersion": "7.8.0", "engineVersion": "3c6e192761c0362d496ed980de936e2f3cebcd3a", "activeProvider": "postgresql", - "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel tokens {\n id String @id\n token String @unique\n type TokenType\n userId String\n expiresAt DateTime\n createdAt DateTime @default(now())\n users users @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n\nmodel users {\n id String @id\n name String\n email String @unique\n password String\n createdAt DateTime @default(now())\n updatedAt DateTime\n rides rides[]\n tokens tokens[]\n}\n\nmodel companies {\n id String @id\n name String\n cost_per_km Decimal @db.Decimal(10, 2)\n notes String? @default(\"\")\n createdAt DateTime? @default(now()) @db.Timestamptz(6)\n updatedAt DateTime? @default(now()) @db.Timestamptz(6)\n\n @@index([name], map: \"idx_companies_name\")\n}\n\nmodel rides {\n id String @id\n user_id String\n company String\n km Decimal @db.Decimal(10, 2)\n cost_per_km Decimal @db.Decimal(10, 2)\n total Decimal @db.Decimal(10, 2)\n ride_date String\n synced Int? @default(0) @db.SmallInt\n createdAt DateTime? @default(now()) @db.Timestamptz(6)\n updatedAt DateTime? @default(now()) @db.Timestamptz(6)\n users users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction)\n\n @@index([synced], map: \"idx_rides_synced\")\n @@index([user_id], map: \"idx_rides_user_id\")\n}\n\nenum TokenType {\n REFRESH\n}\n", + "inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../src/generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel tokens {\n id String @id\n token String @unique\n type TokenType\n userId String\n expiresAt DateTime\n createdAt DateTime @default(now())\n users users @relation(fields: [userId], references: [id], onDelete: Cascade)\n}\n\nmodel users {\n id String @id\n name String\n email String @unique\n password String\n profilePhoto String? @default(\"\")\n bio String? @default(\"\")\n createdAt DateTime @default(now())\n updatedAt DateTime\n rides rides[]\n tokens tokens[]\n\n @@index([email], map: \"idx_users_email\")\n}\n\nmodel companies {\n id String @id\n name String\n cost_per_km Decimal @db.Decimal(10, 2)\n notes String? @default(\"\")\n createdAt DateTime? @default(now()) @db.Timestamptz(6)\n updatedAt DateTime? @default(now()) @db.Timestamptz(6)\n\n @@index([name], map: \"idx_companies_name\")\n}\n\nmodel rides {\n id String @id\n user_id String\n company String\n km Decimal @db.Decimal(10, 2)\n cost_per_km Decimal @db.Decimal(10, 2)\n total Decimal @db.Decimal(10, 2)\n ride_date String\n synced Int? @default(0) @db.SmallInt\n createdAt DateTime? @default(now()) @db.Timestamptz(6)\n updatedAt DateTime? @default(now()) @db.Timestamptz(6)\n users users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction)\n\n @@index([synced], map: \"idx_rides_synced\")\n @@index([user_id], map: \"idx_rides_user_id\")\n}\n\nenum TokenType {\n REFRESH\n}\n", "runtimeDataModel": { "models": {}, "enums": {}, @@ -32,10 +32,10 @@ const config: runtime.GetPrismaClientConfig = { } } -config.runtimeDataModel = JSON.parse("{\"models\":{\"tokens\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"TokenType\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"users\",\"kind\":\"object\",\"type\":\"users\",\"relationName\":\"tokensTousers\"}],\"dbName\":null},\"users\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"rides\",\"kind\":\"object\",\"type\":\"rides\",\"relationName\":\"ridesTousers\"},{\"name\":\"tokens\",\"kind\":\"object\",\"type\":\"tokens\",\"relationName\":\"tokensTousers\"}],\"dbName\":null},\"companies\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cost_per_km\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"notes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"rides\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user_id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"company\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"km\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"cost_per_km\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"total\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"ride_date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"synced\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"users\",\"kind\":\"object\",\"type\":\"users\",\"relationName\":\"ridesTousers\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"tokens\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"token\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"TokenType\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"users\",\"kind\":\"object\",\"type\":\"users\",\"relationName\":\"tokensTousers\"}],\"dbName\":null},\"users\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profilePhoto\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"bio\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"rides\",\"kind\":\"object\",\"type\":\"rides\",\"relationName\":\"ridesTousers\"},{\"name\":\"tokens\",\"kind\":\"object\",\"type\":\"tokens\",\"relationName\":\"tokensTousers\"}],\"dbName\":null},\"companies\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cost_per_km\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"notes\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"rides\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"user_id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"company\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"km\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"cost_per_km\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"total\",\"kind\":\"scalar\",\"type\":\"Decimal\"},{\"name\":\"ride_date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"synced\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"users\",\"kind\":\"object\",\"type\":\"users\",\"relationName\":\"ridesTousers\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}") config.parameterizationSchema = { - strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"users\",\"rides\",\"tokens\",\"_count\",\"tokens.findUnique\",\"tokens.findUniqueOrThrow\",\"tokens.findFirst\",\"tokens.findFirstOrThrow\",\"tokens.findMany\",\"data\",\"tokens.createOne\",\"tokens.createMany\",\"tokens.createManyAndReturn\",\"tokens.updateOne\",\"tokens.updateMany\",\"tokens.updateManyAndReturn\",\"create\",\"update\",\"tokens.upsertOne\",\"tokens.deleteOne\",\"tokens.deleteMany\",\"having\",\"_min\",\"_max\",\"tokens.groupBy\",\"tokens.aggregate\",\"users.findUnique\",\"users.findUniqueOrThrow\",\"users.findFirst\",\"users.findFirstOrThrow\",\"users.findMany\",\"users.createOne\",\"users.createMany\",\"users.createManyAndReturn\",\"users.updateOne\",\"users.updateMany\",\"users.updateManyAndReturn\",\"users.upsertOne\",\"users.deleteOne\",\"users.deleteMany\",\"users.groupBy\",\"users.aggregate\",\"companies.findUnique\",\"companies.findUniqueOrThrow\",\"companies.findFirst\",\"companies.findFirstOrThrow\",\"companies.findMany\",\"companies.createOne\",\"companies.createMany\",\"companies.createManyAndReturn\",\"companies.updateOne\",\"companies.updateMany\",\"companies.updateManyAndReturn\",\"companies.upsertOne\",\"companies.deleteOne\",\"companies.deleteMany\",\"_avg\",\"_sum\",\"companies.groupBy\",\"companies.aggregate\",\"rides.findUnique\",\"rides.findUniqueOrThrow\",\"rides.findFirst\",\"rides.findFirstOrThrow\",\"rides.findMany\",\"rides.createOne\",\"rides.createMany\",\"rides.createManyAndReturn\",\"rides.updateOne\",\"rides.updateMany\",\"rides.updateManyAndReturn\",\"rides.upsertOne\",\"rides.deleteOne\",\"rides.deleteMany\",\"rides.groupBy\",\"rides.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"user_id\",\"company\",\"km\",\"cost_per_km\",\"total\",\"ride_date\",\"synced\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"name\",\"notes\",\"email\",\"password\",\"every\",\"some\",\"none\",\"token\",\"TokenType\",\"type\",\"userId\",\"expiresAt\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), - graph: "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_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_ACELXAEAAAABXQEAAAAEXgEAAAAEXwEAAAABYAEAAAABYQEAAAABYgEAAAABYwEAdwAhZAEAAAABZQEAAAABZgEAAAABCFwQAAAAAV0QAAAABF4QAAAABF8QAAAAAWAQAAAAAWEQAAAAAWIQAAAAAWMQAHUAIQtcAQAAAAFdAQAAAAVeAQAAAAVfAQAAAAFgAQAAAAFhAQAAAAFiAQAAAAFjAQB7ACFkAQAAAAFlAQAAAAFmAQAAAAEIXEAAAAABXUAAAAAFXkAAAAAFX0AAAAABYEAAAAABYUAAAAABYkAAAAABY0AAcAAhCU8AAIEBADBQAAA3ABBRAACBAQAwUgEAagAhWkAAggEAIVtAAIIBACFnAQBqACFpAQBqACFqAQBqACELBgAAdAAgGQAAhAEAIBoAAIQBACBcQAAAAAFdQAAAAAReQAAAAARfQAAAAAFgQAAAAAFhQAAAAAFiQAAAAAFjQACDAQAhCwYAAHQAIBkAAIQBACAaAACEAQAgXEAAAAABXUAAAAAEXkAAAAAEX0AAAAABYEAAAAABYUAAAAABYkAAAAABY0AAgwEAIQhcQAAAAAFdQAAAAAReQAAAAARfQAAAAAFgQAAAAAFhQAAAAAFiQAAAAAFjQACEAQAhCwQAAIcBACAFAACIAQAgTwAAhQEAMFAAACQAEFEAAIUBADBSAQB9ACFaQACGAQAhW0AAhgEAIWcBAH0AIWkBAH0AIWoBAH0AIQhcQAAAAAFdQAAAAAReQAAAAARfQAAAAAFgQAAAAAFhQAAAAAFiQAAAAAFjQACEAQAhA2sAAAMAIGwAAAMAIG0AAAMAIANrAAAHACBsAAAHACBtAAAHACAJTwAAiQEAMFAAAB4AEFEAAIkBADBSAQBqACFaQACCAQAhbgEAagAhcAAAigFwInEBAGoAIXJAAIIBACEHBgAAdAAgGQAAjAEAIBoAAIwBACBcAAAAcAJdAAAAcAheAAAAcAhjAACLAXAiBwYAAHQAIBkAAIwBACAaAACMAQAgXAAAAHACXQAAAHAIXgAAAHAIYwAAiwFwIgRcAAAAcAJdAAAAcAheAAAAcAhjAACMAXAiCgMAAI8BACBPAACNAQAwUAAABwAQUQAAjQEAMFIBAH0AIVpAAIYBACFuAQB9ACFwAACOAXAicQEAfQAhckAAhgEAIQRcAAAAcAJdAAAAcAheAAAAcAhjAACMAXAiDQQAAIcBACAFAACIAQAgTwAAhQEAMFAAACQAEFEAAIUBADBSAQB9ACFaQACGAQAhW0AAhgEAIWcBAH0AIWkBAH0AIWoBAH0AIXMAACQAIHQAACQAIA4DAACPAQAgTwAAkAEAMFAAAAMAEFEAAJABADBSAQB9ACFTAQB9ACFUAQB9ACFVEAB-ACFWEAB-ACFXEAB-ACFYAQB9ACFZAgCRAQAhWkAAgAEAIVtAAIABACEIXAIAAAABXQIAAAAFXgIAAAAFXwIAAAABYAIAAAABYQIAAAABYgIAAAABYwIAbwAhAAAAAAAAAXgBAAAAAQV4EAAAAAF-EAAAAAF_EAAAAAGAARAAAAABgQEQAAAAAQV4AgAAAAF-AgAAAAF_AgAAAAGAAQIAAAABgQECAAAAAQF4QAAAAAEFEwAA1AEAIBQAANcBACB1AADVAQAgdgAA1gEAIHsAACEAIAMTAADUAQAgdQAA1QEAIHsAACEAIAAAAAAAAXgBAAAAAQAAAAF4QAAAAAELEwAAtwEAMBQAALwBADB1AAC4AQAwdgAAuQEAMHcAALoBACB4AAC7AQAweQAAuwEAMHoAALsBADB7AAC7AQAwfAAAvQEAMH0AAL4BADALEwAAqgEAMBQAAK8BADB1AACrAQAwdgAArAEAMHcAAK0BACB4AACuAQAweQAArgEAMHoAAK4BADB7AACuAQAwfAAAsAEAMH0AALEBADAFUgEAAAABWkAAAAABbgEAAAABcAAAAHACckAAAAABAgAAAAEAIBMAALYBACADAAAAAQAgEwAAtgEAIBQAALUBACABDAAA0wEAMAoDAACPAQAgTwAAjQEAMFAAAAcAEFEAAI0BADBSAQAAAAFaQACGAQAhbgEAAAABcAAAjgFwInEBAH0AIXJAAIYBACECAAAAAQAgDAAAtQEAIAIAAACyAQAgDAAAswEAIAlPAACxAQAwUAAAsgEAEFEAALEBADBSAQB9ACFaQACGAQAhbgEAfQAhcAAAjgFwInEBAH0AIXJAAIYBACEJTwAAsQEAMFAAALIBABBRAACxAQAwUgEAfQAhWkAAhgEAIW4BAH0AIXAAAI4BcCJxAQB9ACFyQACGAQAhBVIBAJgBACFaQACnAQAhbgEAmAEAIXAAALQBcCJyQACnAQAhAXgAAABwAgVSAQCYAQAhWkAApwEAIW4BAJgBACFwAAC0AXAickAApwEAIQVSAQAAAAFaQAAAAAFuAQAAAAFwAAAAcAJyQAAAAAEJUgEAAAABVAEAAAABVRAAAAABVhAAAAABVxAAAAABWAEAAAABWQIAAAABWkAAAAABW0AAAAABAgAAAAUAIBMAAMIBACADAAAABQAgEwAAwgEAIBQAAMEBACABDAAA0gEAMA4DAACPAQAgTwAAkAEAMFAAAAMAEFEAAJABADBSAQAAAAFTAQB9ACFUAQB9ACFVEAB-ACFWEAB-ACFXEAB-ACFYAQB9ACFZAgCRAQAhWkAAgAEAIVtAAIABACECAAAABQAgDAAAwQEAIAIAAAC_AQAgDAAAwAEAIA1PAAC-AQAwUAAAvwEAEFEAAL4BADBSAQB9ACFTAQB9ACFUAQB9ACFVEAB-ACFWEAB-ACFXEAB-ACFYAQB9ACFZAgCRAQAhWkAAgAEAIVtAAIABACENTwAAvgEAMFAAAL8BABBRAAC-AQAwUgEAfQAhUwEAfQAhVAEAfQAhVRAAfgAhVhAAfgAhVxAAfgAhWAEAfQAhWQIAkQEAIVpAAIABACFbQACAAQAhCVIBAJgBACFUAQCYAQAhVRAAmQEAIVYQAJkBACFXEACZAQAhWAEAmAEAIVkCAJoBACFaQACbAQAhW0AAmwEAIQlSAQCYAQAhVAEAmAEAIVUQAJkBACFWEACZAQAhVxAAmQEAIVgBAJgBACFZAgCaAQAhWkAAmwEAIVtAAJsBACEJUgEAAAABVAEAAAABVRAAAAABVhAAAAABVxAAAAABWAEAAAABWQIAAAABWkAAAAABW0AAAAABBBMAALcBADB1AAC4AQAwdwAAugEAIHsAALsBADAEEwAAqgEAMHUAAKsBADB3AACtAQAgewAArgEAMAAAAAAABRMAAM0BACAUAADQAQAgdQAAzgEAIHYAAM8BACB7AAAhACADEwAAzQEAIHUAAM4BACB7AAAhACACBAAAxQEAIAUAAMYBACAHBAAAwwEAIFIBAAAAAVpAAAAAAVtAAAAAAWcBAAAAAWkBAAAAAWoBAAAAAQIAAAAhACATAADNAQAgAwAAACQAIBMAAM0BACAUAADRAQAgCQAAACQAIAQAAKgBACAMAADRAQAgUgEAmAEAIVpAAKcBACFbQACnAQAhZwEAmAEAIWkBAJgBACFqAQCYAQAhBwQAAKgBACBSAQCYAQAhWkAApwEAIVtAAKcBACFnAQCYAQAhaQEAmAEAIWoBAJgBACEJUgEAAAABVAEAAAABVRAAAAABVhAAAAABVxAAAAABWAEAAAABWQIAAAABWkAAAAABW0AAAAABBVIBAAAAAVpAAAAAAW4BAAAAAXAAAABwAnJAAAAAAQcFAADEAQAgUgEAAAABWkAAAAABW0AAAAABZwEAAAABaQEAAAABagEAAAABAgAAACEAIBMAANQBACADAAAAJAAgEwAA1AEAIBQAANgBACAJAAAAJAAgBQAAqQEAIAwAANgBACBSAQCYAQAhWkAApwEAIVtAAKcBACFnAQCYAQAhaQEAmAEAIWoBAJgBACEHBQAAqQEAIFIBAJgBACFaQACnAQAhW0AApwEAIWcBAJgBACFpAQCYAQAhagEAmAEAIQEDAAIDBAYDBQkBBgAEAQMAAgIECgAFCwAAAQMAAgEDAAIDBgAJGQAKGgALAAAAAwYACRkAChoACwAAAwYAEBkAERoAEgAAAAMGABAZABEaABIAAAAFBgAYGQAbGgAcOwAZPAAaAAAAAAAFBgAYGQAbGgAcOwAZPAAaAQMAAgEDAAIFBgAhGQAkGgAlOwAiPAAjAAAAAAAFBgAhGQAkGgAlOwAiPAAjBwIBCAwBCQ0BCg4BCw8BDREBDhMFDxQGEBYBERgFEhkHFRoBFhsBFxwFGx8IHCAMHSICHiMCHyYCICcCISgCIioCIywFJC0NJS8CJjEFJzIOKDMCKTQCKjUFKzgPLDkTLTsULjwULz8UMEAUMUEUMkMUM0UFNEYVNUgUNkoFN0sWOEwUOU0UOk4FPVEXPlIdP1MDQFQDQVUDQlYDQ1cDRFkDRVsFRlweR14DSGAFSWEfSmIDS2MDTGQFTWcgTmgm" + strings: JSON.parse("[\"where\",\"orderBy\",\"cursor\",\"users\",\"rides\",\"tokens\",\"_count\",\"tokens.findUnique\",\"tokens.findUniqueOrThrow\",\"tokens.findFirst\",\"tokens.findFirstOrThrow\",\"tokens.findMany\",\"data\",\"tokens.createOne\",\"tokens.createMany\",\"tokens.createManyAndReturn\",\"tokens.updateOne\",\"tokens.updateMany\",\"tokens.updateManyAndReturn\",\"create\",\"update\",\"tokens.upsertOne\",\"tokens.deleteOne\",\"tokens.deleteMany\",\"having\",\"_min\",\"_max\",\"tokens.groupBy\",\"tokens.aggregate\",\"users.findUnique\",\"users.findUniqueOrThrow\",\"users.findFirst\",\"users.findFirstOrThrow\",\"users.findMany\",\"users.createOne\",\"users.createMany\",\"users.createManyAndReturn\",\"users.updateOne\",\"users.updateMany\",\"users.updateManyAndReturn\",\"users.upsertOne\",\"users.deleteOne\",\"users.deleteMany\",\"users.groupBy\",\"users.aggregate\",\"companies.findUnique\",\"companies.findUniqueOrThrow\",\"companies.findFirst\",\"companies.findFirstOrThrow\",\"companies.findMany\",\"companies.createOne\",\"companies.createMany\",\"companies.createManyAndReturn\",\"companies.updateOne\",\"companies.updateMany\",\"companies.updateManyAndReturn\",\"companies.upsertOne\",\"companies.deleteOne\",\"companies.deleteMany\",\"_avg\",\"_sum\",\"companies.groupBy\",\"companies.aggregate\",\"rides.findUnique\",\"rides.findUniqueOrThrow\",\"rides.findFirst\",\"rides.findFirstOrThrow\",\"rides.findMany\",\"rides.createOne\",\"rides.createMany\",\"rides.createManyAndReturn\",\"rides.updateOne\",\"rides.updateMany\",\"rides.updateManyAndReturn\",\"rides.upsertOne\",\"rides.deleteOne\",\"rides.deleteMany\",\"rides.groupBy\",\"rides.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"user_id\",\"company\",\"km\",\"cost_per_km\",\"total\",\"ride_date\",\"synced\",\"createdAt\",\"updatedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"name\",\"notes\",\"email\",\"password\",\"profilePhoto\",\"bio\",\"every\",\"some\",\"none\",\"token\",\"TokenType\",\"type\",\"userId\",\"expiresAt\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"), + graph: "2AEmQAoDAACPAQAgTwAAjQEAMFAAAAcAEFEAAI0BADBSAQAAAAFaQACGAQAhcAEAAAABcgAAjgFyInMBAH0AIXRAAIYBACEBAAAAAQAgDgMAAI8BACBPAACQAQAwUAAAAwAQUQAAkAEAMFIBAH0AIVMBAH0AIVQBAH0AIVUQAH4AIVYQAH4AIVcQAH4AIVgBAH0AIVkCAJEBACFaQACAAQAhW0AAgAEAIQQDAADMAQAgWQAAkgEAIFoAAJIBACBbAACSAQAgDgMAAI8BACBPAACQAQAwUAAAAwAQUQAAkAEAMFIBAAAAAVMBAH0AIVQBAH0AIVUQAH4AIVYQAH4AIVcQAH4AIVgBAH0AIVkCAJEBACFaQACAAQAhW0AAgAEAIQMAAAADACABAAAEADACAAAFACAKAwAAjwEAIE8AAI0BADBQAAAHABBRAACNAQAwUgEAfQAhWkAAhgEAIXABAH0AIXIAAI4BciJzAQB9ACF0QACGAQAhAQMAAMwBACADAAAABwAgAQAACAAwAgAAAQAgAQAAAAMAIAEAAAAHACABAAAAAQAgAwAAAAcAIAEAAAgAMAIAAAEAIAMAAAAHACABAAAIADACAAABACADAAAABwAgAQAACAAwAgAAAQAgBwMAAMsBACBSAQAAAAFaQAAAAAFwAQAAAAFyAAAAcgJzAQAAAAF0QAAAAAEBDAAAEAAgBlIBAAAAAVpAAAAAAXABAAAAAXIAAAByAnMBAAAAAXRAAAAAAQEMAAASADABDAAAEgAwBwMAAMoBACBSAQCYAQAhWkAApwEAIXABAJgBACFyAAC0AXIicwEAmAEAIXRAAKcBACECAAAAAQAgDAAAFQAgBlIBAJgBACFaQACnAQAhcAEAmAEAIXIAALQBciJzAQCYAQAhdEAApwEAIQIAAAAHACAMAAAXACACAAAABwAgDAAAFwAgAwAAAAEAIBMAABAAIBQAABUAIAEAAAABACABAAAABwAgAwYAAMcBACAZAADJAQAgGgAAyAEAIAlPAACJAQAwUAAAHgAQUQAAiQEAMFIBAGoAIVpAAIIBACFwAQBqACFyAACKAXIicwEAagAhdEAAggEAIQMAAAAHACABAAAdADAYAAAeACADAAAABwAgAQAACAAwAgAAAQAgDQQAAIcBACAFAACIAQAgTwAAhQEAMFAAACQAEFEAAIUBADBSAQAAAAFaQACGAQAhW0AAhgEAIWcBAH0AIWkBAAAAAWoBAH0AIWsBAH8AIWwBAH8AIQEAAAAhACABAAAAIQAgDQQAAIcBACAFAACIAQAgTwAAhQEAMFAAACQAEFEAAIUBADBSAQB9ACFaQACGAQAhW0AAhgEAIWcBAH0AIWkBAH0AIWoBAH0AIWsBAH8AIWwBAH8AIQQEAADFAQAgBQAAxgEAIGsAAJIBACBsAACSAQAgAwAAACQAIAEAACUAMAIAACEAIAMAAAAkACABAAAlADACAAAhACADAAAAJAAgAQAAJQAwAgAAIQAgCgQAAMMBACAFAADEAQAgUgEAAAABWkAAAAABW0AAAAABZwEAAAABaQEAAAABagEAAAABawEAAAABbAEAAAABAQwAACkAIAhSAQAAAAFaQAAAAAFbQAAAAAFnAQAAAAFpAQAAAAFqAQAAAAFrAQAAAAFsAQAAAAEBDAAAKwAwAQwAACsAMAoEAACoAQAgBQAAqQEAIFIBAJgBACFaQACnAQAhW0AApwEAIWcBAJgBACFpAQCYAQAhagEAmAEAIWsBAKMBACFsAQCjAQAhAgAAACEAIAwAAC4AIAhSAQCYAQAhWkAApwEAIVtAAKcBACFnAQCYAQAhaQEAmAEAIWoBAJgBACFrAQCjAQAhbAEAowEAIQIAAAAkACAMAAAwACACAAAAJAAgDAAAMAAgAwAAACEAIBMAACkAIBQAAC4AIAEAAAAhACABAAAAJAAgBQYAAKQBACAZAACmAQAgGgAApQEAIGsAAJIBACBsAACSAQAgC08AAIEBADBQAAA3ABBRAACBAQAwUgEAagAhWkAAggEAIVtAAIIBACFnAQBqACFpAQBqACFqAQBqACFrAQB5ACFsAQB5ACEDAAAAJAAgAQAANgAwGAAANwAgAwAAACQAIAEAACUAMAIAACEAIAlPAAB8ADBQAAA9ABBRAAB8ADBSAQAAAAFWEAB-ACFaQACAAQAhW0AAgAEAIWcBAH0AIWgBAH8AIQEAAAA6ACABAAAAOgAgCU8AAHwAMFAAAD0AEFEAAHwAMFIBAH0AIVYQAH4AIVpAAIABACFbQACAAQAhZwEAfQAhaAEAfwAhA1oAAJIBACBbAACSAQAgaAAAkgEAIAMAAAA9ACABAAA-ADACAAA6ACADAAAAPQAgAQAAPgAwAgAAOgAgAwAAAD0AIAEAAD4AMAIAADoAIAZSAQAAAAFWEAAAAAFaQAAAAAFbQAAAAAFnAQAAAAFoAQAAAAEBDAAAQgAgBlIBAAAAAVYQAAAAAVpAAAAAAVtAAAAAAWcBAAAAAWgBAAAAAQEMAABEADABDAAARAAwBlIBAJgBACFWEACZAQAhWkAAmwEAIVtAAJsBACFnAQCYAQAhaAEAowEAIQIAAAA6ACAMAABHACAGUgEAmAEAIVYQAJkBACFaQACbAQAhW0AAmwEAIWcBAJgBACFoAQCjAQAhAgAAAD0AIAwAAEkAIAIAAAA9ACAMAABJACADAAAAOgAgEwAAQgAgFAAARwAgAQAAADoAIAEAAAA9ACAIBgAAngEAIBkAAKEBACAaAACgAQAgOwAAnwEAIDwAAKIBACBaAACSAQAgWwAAkgEAIGgAAJIBACAJTwAAeAAwUAAAUAAQUQAAeAAwUgEAagAhVhAAawAhWkAAbQAhW0AAbQAhZwEAagAhaAEAeQAhAwAAAD0AIAEAAE8AMBgAAFAAIAMAAAA9ACABAAA-ADACAAA6ACABAAAABQAgAQAAAAUAIAMAAAADACABAAAEADACAAAFACADAAAAAwAgAQAABAAwAgAABQAgAwAAAAMAIAEAAAQAMAIAAAUAIAsDAACdAQAgUgEAAAABUwEAAAABVAEAAAABVRAAAAABVhAAAAABVxAAAAABWAEAAAABWQIAAAABWkAAAAABW0AAAAABAQwAAFgAIApSAQAAAAFTAQAAAAFUAQAAAAFVEAAAAAFWEAAAAAFXEAAAAAFYAQAAAAFZAgAAAAFaQAAAAAFbQAAAAAEBDAAAWgAwAQwAAFoAMAsDAACcAQAgUgEAmAEAIVMBAJgBACFUAQCYAQAhVRAAmQEAIVYQAJkBACFXEACZAQAhWAEAmAEAIVkCAJoBACFaQACbAQAhW0AAmwEAIQIAAAAFACAMAABdACAKUgEAmAEAIVMBAJgBACFUAQCYAQAhVRAAmQEAIVYQAJkBACFXEACZAQAhWAEAmAEAIVkCAJoBACFaQACbAQAhW0AAmwEAIQIAAAADACAMAABfACACAAAAAwAgDAAAXwAgAwAAAAUAIBMAAFgAIBQAAF0AIAEAAAAFACABAAAAAwAgCAYAAJMBACAZAACWAQAgGgAAlQEAIDsAAJQBACA8AACXAQAgWQAAkgEAIFoAAJIBACBbAACSAQAgDU8AAGkAMFAAAGYAEFEAAGkAMFIBAGoAIVMBAGoAIVQBAGoAIVUQAGsAIVYQAGsAIVcQAGsAIVgBAGoAIVkCAGwAIVpAAG0AIVtAAG0AIQMAAAADACABAABlADAYAABmACADAAAAAwAgAQAABAAwAgAABQAgDU8AAGkAMFAAAGYAEFEAAGkAMFIBAGoAIVMBAGoAIVQBAGoAIVUQAGsAIVYQAGsAIVcQAGsAIVgBAGoAIVkCAGwAIVpAAG0AIVtAAG0AIQ4GAAB0ACAZAAB3ACAaAAB3ACBcAQAAAAFdAQAAAAReAQAAAARfAQAAAAFgAQAAAAFhAQAAAAFiAQAAAAFjAQB2ACFkAQAAAAFlAQAAAAFmAQAAAAENBgAAdAAgGQAAdQAgGgAAdQAgOwAAdQAgPAAAdQAgXBAAAAABXRAAAAAEXhAAAAAEXxAAAAABYBAAAAABYRAAAAABYhAAAAABYxAAcwAhDQYAAG8AIBkAAG8AIBoAAG8AIDsAAHIAIDwAAG8AIFwCAAAAAV0CAAAABV4CAAAABV8CAAAAAWACAAAAAWECAAAAAWICAAAAAWMCAHEAIQsGAABvACAZAABwACAaAABwACBcQAAAAAFdQAAAAAVeQAAAAAVfQAAAAAFgQAAAAAFhQAAAAAFiQAAAAAFjQABuACELBgAAbwAgGQAAcAAgGgAAcAAgXEAAAAABXUAAAAAFXkAAAAAFX0AAAAABYEAAAAABYUAAAAABYkAAAAABY0AAbgAhCFwCAAAAAV0CAAAABV4CAAAABV8CAAAAAWACAAAAAWECAAAAAWICAAAAAWMCAG8AIQhcQAAAAAFdQAAAAAVeQAAAAAVfQAAAAAFgQAAAAAFhQAAAAAFiQAAAAAFjQABwACENBgAAbwAgGQAAbwAgGgAAbwAgOwAAcgAgPAAAbwAgXAIAAAABXQIAAAAFXgIAAAAFXwIAAAABYAIAAAABYQIAAAABYgIAAAABYwIAcQAhCFwIAAAAAV0IAAAABV4IAAAABV8IAAAAAWAIAAAAAWEIAAAAAWIIAAAAAWMIAHIAIQ0GAAB0ACAZAAB1ACAaAAB1ACA7AAB1ACA8AAB1ACBcEAAAAAFdEAAAAAReEAAAAARfEAAAAAFgEAAAAAFhEAAAAAFiEAAAAAFjEABzACEIXAIAAAABXQIAAAAEXgIAAAAEXwIAAAABYAIAAAABYQIAAAABYgIAAAABYwIAdAAhCFwQAAAAAV0QAAAABF4QAAAABF8QAAAAAWAQAAAAAWEQAAAAAWIQAAAAAWMQAHUAIQ4GAAB0ACAZAAB3ACAaAAB3ACBcAQAAAAFdAQAAAAReAQAAAARfAQAAAAFgAQAAAAFhAQAAAAFiAQAAAAFjAQB2ACFkAQAAAAFlAQAAAAFmAQAAAAELXAEAAAABXQEAAAAEXgEAAAAEXwEAAAABYAEAAAABYQEAAAABYgEAAAABYwEAdwAhZAEAAAABZQEAAAABZgEAAAABCU8AAHgAMFAAAFAAEFEAAHgAMFIBAGoAIVYQAGsAIVpAAG0AIVtAAG0AIWcBAGoAIWgBAHkAIQ4GAABvACAZAAB7ACAaAAB7ACBcAQAAAAFdAQAAAAVeAQAAAAVfAQAAAAFgAQAAAAFhAQAAAAFiAQAAAAFjAQB6ACFkAQAAAAFlAQAAAAFmAQAAAAEOBgAAbwAgGQAAewAgGgAAewAgXAEAAAABXQEAAAAFXgEAAAAFXwEAAAABYAEAAAABYQEAAAABYgEAAAABYwEAegAhZAEAAAABZQEAAAABZgEAAAABC1wBAAAAAV0BAAAABV4BAAAABV8BAAAAAWABAAAAAWEBAAAAAWIBAAAAAWMBAHsAIWQBAAAAAWUBAAAAAWYBAAAAAQlPAAB8ADBQAAA9ABBRAAB8ADBSAQB9ACFWEAB-ACFaQACAAQAhW0AAgAEAIWcBAH0AIWgBAH8AIQtcAQAAAAFdAQAAAAReAQAAAARfAQAAAAFgAQAAAAFhAQAAAAFiAQAAAAFjAQB3ACFkAQAAAAFlAQAAAAFmAQAAAAEIXBAAAAABXRAAAAAEXhAAAAAEXxAAAAABYBAAAAABYRAAAAABYhAAAAABYxAAdQAhC1wBAAAAAV0BAAAABV4BAAAABV8BAAAAAWABAAAAAWEBAAAAAWIBAAAAAWMBAHsAIWQBAAAAAWUBAAAAAWYBAAAAAQhcQAAAAAFdQAAAAAVeQAAAAAVfQAAAAAFgQAAAAAFhQAAAAAFiQAAAAAFjQABwACELTwAAgQEAMFAAADcAEFEAAIEBADBSAQBqACFaQACCAQAhW0AAggEAIWcBAGoAIWkBAGoAIWoBAGoAIWsBAHkAIWwBAHkAIQsGAAB0ACAZAACEAQAgGgAAhAEAIFxAAAAAAV1AAAAABF5AAAAABF9AAAAAAWBAAAAAAWFAAAAAAWJAAAAAAWNAAIMBACELBgAAdAAgGQAAhAEAIBoAAIQBACBcQAAAAAFdQAAAAAReQAAAAARfQAAAAAFgQAAAAAFhQAAAAAFiQAAAAAFjQACDAQAhCFxAAAAAAV1AAAAABF5AAAAABF9AAAAAAWBAAAAAAWFAAAAAAWJAAAAAAWNAAIQBACENBAAAhwEAIAUAAIgBACBPAACFAQAwUAAAJAAQUQAAhQEAMFIBAH0AIVpAAIYBACFbQACGAQAhZwEAfQAhaQEAfQAhagEAfQAhawEAfwAhbAEAfwAhCFxAAAAAAV1AAAAABF5AAAAABF9AAAAAAWBAAAAAAWFAAAAAAWJAAAAAAWNAAIQBACEDbQAAAwAgbgAAAwAgbwAAAwAgA20AAAcAIG4AAAcAIG8AAAcAIAlPAACJAQAwUAAAHgAQUQAAiQEAMFIBAGoAIVpAAIIBACFwAQBqACFyAACKAXIicwEAagAhdEAAggEAIQcGAAB0ACAZAACMAQAgGgAAjAEAIFwAAAByAl0AAAByCF4AAAByCGMAAIsBciIHBgAAdAAgGQAAjAEAIBoAAIwBACBcAAAAcgJdAAAAcgheAAAAcghjAACLAXIiBFwAAAByAl0AAAByCF4AAAByCGMAAIwBciIKAwAAjwEAIE8AAI0BADBQAAAHABBRAACNAQAwUgEAfQAhWkAAhgEAIXABAH0AIXIAAI4BciJzAQB9ACF0QACGAQAhBFwAAAByAl0AAAByCF4AAAByCGMAAIwBciIPBAAAhwEAIAUAAIgBACBPAACFAQAwUAAAJAAQUQAAhQEAMFIBAH0AIVpAAIYBACFbQACGAQAhZwEAfQAhaQEAfQAhagEAfQAhawEAfwAhbAEAfwAhdQAAJAAgdgAAJAAgDgMAAI8BACBPAACQAQAwUAAAAwAQUQAAkAEAMFIBAH0AIVMBAH0AIVQBAH0AIVUQAH4AIVYQAH4AIVcQAH4AIVgBAH0AIVkCAJEBACFaQACAAQAhW0AAgAEAIQhcAgAAAAFdAgAAAAVeAgAAAAVfAgAAAAFgAgAAAAFhAgAAAAFiAgAAAAFjAgBvACEAAAAAAAABegEAAAABBXoQAAAAAYABEAAAAAGBARAAAAABggEQAAAAAYMBEAAAAAEFegIAAAABgAECAAAAAYEBAgAAAAGCAQIAAAABgwECAAAAAQF6QAAAAAEFEwAA1AEAIBQAANcBACB3AADVAQAgeAAA1gEAIH0AACEAIAMTAADUAQAgdwAA1QEAIH0AACEAIAAAAAAAAXoBAAAAAQAAAAF6QAAAAAELEwAAtwEAMBQAALwBADB3AAC4AQAweAAAuQEAMHkAALoBACB6AAC7AQAwewAAuwEAMHwAALsBADB9AAC7AQAwfgAAvQEAMH8AAL4BADALEwAAqgEAMBQAAK8BADB3AACrAQAweAAArAEAMHkAAK0BACB6AACuAQAwewAArgEAMHwAAK4BADB9AACuAQAwfgAAsAEAMH8AALEBADAFUgEAAAABWkAAAAABcAEAAAABcgAAAHICdEAAAAABAgAAAAEAIBMAALYBACADAAAAAQAgEwAAtgEAIBQAALUBACABDAAA0wEAMAoDAACPAQAgTwAAjQEAMFAAAAcAEFEAAI0BADBSAQAAAAFaQACGAQAhcAEAAAABcgAAjgFyInMBAH0AIXRAAIYBACECAAAAAQAgDAAAtQEAIAIAAACyAQAgDAAAswEAIAlPAACxAQAwUAAAsgEAEFEAALEBADBSAQB9ACFaQACGAQAhcAEAfQAhcgAAjgFyInMBAH0AIXRAAIYBACEJTwAAsQEAMFAAALIBABBRAACxAQAwUgEAfQAhWkAAhgEAIXABAH0AIXIAAI4BciJzAQB9ACF0QACGAQAhBVIBAJgBACFaQACnAQAhcAEAmAEAIXIAALQBciJ0QACnAQAhAXoAAAByAgVSAQCYAQAhWkAApwEAIXABAJgBACFyAAC0AXIidEAApwEAIQVSAQAAAAFaQAAAAAFwAQAAAAFyAAAAcgJ0QAAAAAEJUgEAAAABVAEAAAABVRAAAAABVhAAAAABVxAAAAABWAEAAAABWQIAAAABWkAAAAABW0AAAAABAgAAAAUAIBMAAMIBACADAAAABQAgEwAAwgEAIBQAAMEBACABDAAA0gEAMA4DAACPAQAgTwAAkAEAMFAAAAMAEFEAAJABADBSAQAAAAFTAQB9ACFUAQB9ACFVEAB-ACFWEAB-ACFXEAB-ACFYAQB9ACFZAgCRAQAhWkAAgAEAIVtAAIABACECAAAABQAgDAAAwQEAIAIAAAC_AQAgDAAAwAEAIA1PAAC-AQAwUAAAvwEAEFEAAL4BADBSAQB9ACFTAQB9ACFUAQB9ACFVEAB-ACFWEAB-ACFXEAB-ACFYAQB9ACFZAgCRAQAhWkAAgAEAIVtAAIABACENTwAAvgEAMFAAAL8BABBRAAC-AQAwUgEAfQAhUwEAfQAhVAEAfQAhVRAAfgAhVhAAfgAhVxAAfgAhWAEAfQAhWQIAkQEAIVpAAIABACFbQACAAQAhCVIBAJgBACFUAQCYAQAhVRAAmQEAIVYQAJkBACFXEACZAQAhWAEAmAEAIVkCAJoBACFaQACbAQAhW0AAmwEAIQlSAQCYAQAhVAEAmAEAIVUQAJkBACFWEACZAQAhVxAAmQEAIVgBAJgBACFZAgCaAQAhWkAAmwEAIVtAAJsBACEJUgEAAAABVAEAAAABVRAAAAABVhAAAAABVxAAAAABWAEAAAABWQIAAAABWkAAAAABW0AAAAABBBMAALcBADB3AAC4AQAweQAAugEAIH0AALsBADAEEwAAqgEAMHcAAKsBADB5AACtAQAgfQAArgEAMAAAAAAABRMAAM0BACAUAADQAQAgdwAAzgEAIHgAAM8BACB9AAAhACADEwAAzQEAIHcAAM4BACB9AAAhACAEBAAAxQEAIAUAAMYBACBrAACSAQAgbAAAkgEAIAkEAADDAQAgUgEAAAABWkAAAAABW0AAAAABZwEAAAABaQEAAAABagEAAAABawEAAAABbAEAAAABAgAAACEAIBMAAM0BACADAAAAJAAgEwAAzQEAIBQAANEBACALAAAAJAAgBAAAqAEAIAwAANEBACBSAQCYAQAhWkAApwEAIVtAAKcBACFnAQCYAQAhaQEAmAEAIWoBAJgBACFrAQCjAQAhbAEAowEAIQkEAACoAQAgUgEAmAEAIVpAAKcBACFbQACnAQAhZwEAmAEAIWkBAJgBACFqAQCYAQAhawEAowEAIWwBAKMBACEJUgEAAAABVAEAAAABVRAAAAABVhAAAAABVxAAAAABWAEAAAABWQIAAAABWkAAAAABW0AAAAABBVIBAAAAAVpAAAAAAXABAAAAAXIAAAByAnRAAAAAAQkFAADEAQAgUgEAAAABWkAAAAABW0AAAAABZwEAAAABaQEAAAABagEAAAABawEAAAABbAEAAAABAgAAACEAIBMAANQBACADAAAAJAAgEwAA1AEAIBQAANgBACALAAAAJAAgBQAAqQEAIAwAANgBACBSAQCYAQAhWkAApwEAIVtAAKcBACFnAQCYAQAhaQEAmAEAIWoBAJgBACFrAQCjAQAhbAEAowEAIQkFAACpAQAgUgEAmAEAIVpAAKcBACFbQACnAQAhZwEAmAEAIWkBAJgBACFqAQCYAQAhawEAowEAIWwBAKMBACEBAwACAwQGAwUJAQYABAEDAAICBAoABQsAAAEDAAIBAwACAwYACRkAChoACwAAAAMGAAkZAAoaAAsAAAMGABAZABEaABIAAAADBgAQGQARGgASAAAABQYAGBkAGxoAHDsAGTwAGgAAAAAABQYAGBkAGxoAHDsAGTwAGgEDAAIBAwACBQYAIRkAJBoAJTsAIjwAIwAAAAAABQYAIRkAJBoAJTsAIjwAIwcCAQgMAQkNAQoOAQsPAQ0RAQ4TBQ8UBhAWAREYBRIZBxUaARYbARccBRsfCBwgDB0iAh4jAh8mAiAnAiEoAiIqAiMsBSQtDSUvAiYxBScyDigzAik0Aio1BSs4Dyw5Ey07FC48FC8_FDBAFDFBFDJDFDNFBTRGFTVIFDZKBTdLFjhMFDlNFDpOBT1RFz5SHT9TA0BUA0FVA0JWA0NXA0RZA0VbBUZcHkdeA0hgBUlhH0piA0tjA0xkBU1nIE5oJg" } async function decodeBase64AsWasm(wasmBase64: string): Promise { diff --git a/backend/src/generated/prisma/internal/prismaNamespace.ts b/backend/src/generated/prisma/internal/prismaNamespace.ts index 8a74b69..ce4e9c4 100644 --- a/backend/src/generated/prisma/internal/prismaNamespace.ts +++ b/backend/src/generated/prisma/internal/prismaNamespace.ts @@ -759,6 +759,8 @@ export const UsersScalarFieldEnum = { name: 'name', email: 'email', password: 'password', + profilePhoto: 'profilePhoto', + bio: 'bio', createdAt: 'createdAt', updatedAt: 'updatedAt' } as const diff --git a/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts b/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts index 3fa5b20..d72e48a 100644 --- a/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts +++ b/backend/src/generated/prisma/internal/prismaNamespaceBrowser.ts @@ -90,6 +90,8 @@ export const UsersScalarFieldEnum = { name: 'name', email: 'email', password: 'password', + profilePhoto: 'profilePhoto', + bio: 'bio', createdAt: 'createdAt', updatedAt: 'updatedAt' } as const diff --git a/backend/src/generated/prisma/models/companies.ts b/backend/src/generated/prisma/models/companies.ts index eeeac33..63a623e 100644 --- a/backend/src/generated/prisma/models/companies.ts +++ b/backend/src/generated/prisma/models/companies.ts @@ -379,10 +379,6 @@ export type DecimalFieldUpdateOperationsInput = { divide?: runtime.Decimal | runtime.DecimalJsLike | number | string } -export type NullableStringFieldUpdateOperationsInput = { - set?: string | null -} - export type NullableDateTimeFieldUpdateOperationsInput = { set?: Date | string | null } diff --git a/backend/src/generated/prisma/models/users.ts b/backend/src/generated/prisma/models/users.ts index 5397521..2472973 100644 --- a/backend/src/generated/prisma/models/users.ts +++ b/backend/src/generated/prisma/models/users.ts @@ -29,6 +29,8 @@ export type UsersMinAggregateOutputType = { name: string | null email: string | null password: string | null + profilePhoto: string | null + bio: string | null createdAt: Date | null updatedAt: Date | null } @@ -38,6 +40,8 @@ export type UsersMaxAggregateOutputType = { name: string | null email: string | null password: string | null + profilePhoto: string | null + bio: string | null createdAt: Date | null updatedAt: Date | null } @@ -47,6 +51,8 @@ export type UsersCountAggregateOutputType = { name: number email: number password: number + profilePhoto: number + bio: number createdAt: number updatedAt: number _all: number @@ -58,6 +64,8 @@ export type UsersMinAggregateInputType = { name?: true email?: true password?: true + profilePhoto?: true + bio?: true createdAt?: true updatedAt?: true } @@ -67,6 +75,8 @@ export type UsersMaxAggregateInputType = { name?: true email?: true password?: true + profilePhoto?: true + bio?: true createdAt?: true updatedAt?: true } @@ -76,6 +86,8 @@ export type UsersCountAggregateInputType = { name?: true email?: true password?: true + profilePhoto?: true + bio?: true createdAt?: true updatedAt?: true _all?: true @@ -158,6 +170,8 @@ export type UsersGroupByOutputType = { name: string email: string password: string + profilePhoto: string | null + bio: string | null createdAt: Date updatedAt: Date _count: UsersCountAggregateOutputType | null @@ -188,6 +202,8 @@ export type usersWhereInput = { name?: Prisma.StringFilter<"users"> | string email?: Prisma.StringFilter<"users"> | string password?: Prisma.StringFilter<"users"> | string + profilePhoto?: Prisma.StringNullableFilter<"users"> | string | null + bio?: Prisma.StringNullableFilter<"users"> | string | null createdAt?: Prisma.DateTimeFilter<"users"> | Date | string updatedAt?: Prisma.DateTimeFilter<"users"> | Date | string rides?: Prisma.RidesListRelationFilter @@ -199,6 +215,8 @@ export type usersOrderByWithRelationInput = { name?: Prisma.SortOrder email?: Prisma.SortOrder password?: Prisma.SortOrder + profilePhoto?: Prisma.SortOrderInput | Prisma.SortOrder + bio?: Prisma.SortOrderInput | Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder rides?: Prisma.ridesOrderByRelationAggregateInput @@ -213,6 +231,8 @@ export type usersWhereUniqueInput = Prisma.AtLeast<{ NOT?: Prisma.usersWhereInput | Prisma.usersWhereInput[] name?: Prisma.StringFilter<"users"> | string password?: Prisma.StringFilter<"users"> | string + profilePhoto?: Prisma.StringNullableFilter<"users"> | string | null + bio?: Prisma.StringNullableFilter<"users"> | string | null createdAt?: Prisma.DateTimeFilter<"users"> | Date | string updatedAt?: Prisma.DateTimeFilter<"users"> | Date | string rides?: Prisma.RidesListRelationFilter @@ -224,6 +244,8 @@ export type usersOrderByWithAggregationInput = { name?: Prisma.SortOrder email?: Prisma.SortOrder password?: Prisma.SortOrder + profilePhoto?: Prisma.SortOrderInput | Prisma.SortOrder + bio?: Prisma.SortOrderInput | Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder _count?: Prisma.usersCountOrderByAggregateInput @@ -239,6 +261,8 @@ export type usersScalarWhereWithAggregatesInput = { name?: Prisma.StringWithAggregatesFilter<"users"> | string email?: Prisma.StringWithAggregatesFilter<"users"> | string password?: Prisma.StringWithAggregatesFilter<"users"> | string + profilePhoto?: Prisma.StringNullableWithAggregatesFilter<"users"> | string | null + bio?: Prisma.StringNullableWithAggregatesFilter<"users"> | string | null createdAt?: Prisma.DateTimeWithAggregatesFilter<"users"> | Date | string updatedAt?: Prisma.DateTimeWithAggregatesFilter<"users"> | Date | string } @@ -248,6 +272,8 @@ export type usersCreateInput = { name: string email: string password: string + profilePhoto?: string | null + bio?: string | null createdAt?: Date | string updatedAt: Date | string rides?: Prisma.ridesCreateNestedManyWithoutUsersInput @@ -259,6 +285,8 @@ export type usersUncheckedCreateInput = { name: string email: string password: string + profilePhoto?: string | null + bio?: string | null createdAt?: Date | string updatedAt: Date | string rides?: Prisma.ridesUncheckedCreateNestedManyWithoutUsersInput @@ -270,6 +298,8 @@ export type usersUpdateInput = { name?: Prisma.StringFieldUpdateOperationsInput | string email?: Prisma.StringFieldUpdateOperationsInput | string password?: Prisma.StringFieldUpdateOperationsInput | string + profilePhoto?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string rides?: Prisma.ridesUpdateManyWithoutUsersNestedInput @@ -281,6 +311,8 @@ export type usersUncheckedUpdateInput = { name?: Prisma.StringFieldUpdateOperationsInput | string email?: Prisma.StringFieldUpdateOperationsInput | string password?: Prisma.StringFieldUpdateOperationsInput | string + profilePhoto?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string rides?: Prisma.ridesUncheckedUpdateManyWithoutUsersNestedInput @@ -292,6 +324,8 @@ export type usersCreateManyInput = { name: string email: string password: string + profilePhoto?: string | null + bio?: string | null createdAt?: Date | string updatedAt: Date | string } @@ -301,6 +335,8 @@ export type usersUpdateManyMutationInput = { name?: Prisma.StringFieldUpdateOperationsInput | string email?: Prisma.StringFieldUpdateOperationsInput | string password?: Prisma.StringFieldUpdateOperationsInput | string + profilePhoto?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string } @@ -310,6 +346,8 @@ export type usersUncheckedUpdateManyInput = { name?: Prisma.StringFieldUpdateOperationsInput | string email?: Prisma.StringFieldUpdateOperationsInput | string password?: Prisma.StringFieldUpdateOperationsInput | string + profilePhoto?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string } @@ -324,6 +362,8 @@ export type usersCountOrderByAggregateInput = { name?: Prisma.SortOrder email?: Prisma.SortOrder password?: Prisma.SortOrder + profilePhoto?: Prisma.SortOrder + bio?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder } @@ -333,6 +373,8 @@ export type usersMaxOrderByAggregateInput = { name?: Prisma.SortOrder email?: Prisma.SortOrder password?: Prisma.SortOrder + profilePhoto?: Prisma.SortOrder + bio?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder } @@ -342,6 +384,8 @@ export type usersMinOrderByAggregateInput = { name?: Prisma.SortOrder email?: Prisma.SortOrder password?: Prisma.SortOrder + profilePhoto?: Prisma.SortOrder + bio?: Prisma.SortOrder createdAt?: Prisma.SortOrder updatedAt?: Prisma.SortOrder } @@ -360,6 +404,10 @@ export type usersUpdateOneRequiredWithoutTokensNestedInput = { update?: Prisma.XOR, Prisma.usersUncheckedUpdateWithoutTokensInput> } +export type NullableStringFieldUpdateOperationsInput = { + set?: string | null +} + export type usersCreateNestedOneWithoutRidesInput = { create?: Prisma.XOR connectOrCreate?: Prisma.usersCreateOrConnectWithoutRidesInput @@ -379,6 +427,8 @@ export type usersCreateWithoutTokensInput = { name: string email: string password: string + profilePhoto?: string | null + bio?: string | null createdAt?: Date | string updatedAt: Date | string rides?: Prisma.ridesCreateNestedManyWithoutUsersInput @@ -389,6 +439,8 @@ export type usersUncheckedCreateWithoutTokensInput = { name: string email: string password: string + profilePhoto?: string | null + bio?: string | null createdAt?: Date | string updatedAt: Date | string rides?: Prisma.ridesUncheckedCreateNestedManyWithoutUsersInput @@ -415,6 +467,8 @@ export type usersUpdateWithoutTokensInput = { name?: Prisma.StringFieldUpdateOperationsInput | string email?: Prisma.StringFieldUpdateOperationsInput | string password?: Prisma.StringFieldUpdateOperationsInput | string + profilePhoto?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string rides?: Prisma.ridesUpdateManyWithoutUsersNestedInput @@ -425,6 +479,8 @@ export type usersUncheckedUpdateWithoutTokensInput = { name?: Prisma.StringFieldUpdateOperationsInput | string email?: Prisma.StringFieldUpdateOperationsInput | string password?: Prisma.StringFieldUpdateOperationsInput | string + profilePhoto?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string rides?: Prisma.ridesUncheckedUpdateManyWithoutUsersNestedInput @@ -435,6 +491,8 @@ export type usersCreateWithoutRidesInput = { name: string email: string password: string + profilePhoto?: string | null + bio?: string | null createdAt?: Date | string updatedAt: Date | string tokens?: Prisma.tokensCreateNestedManyWithoutUsersInput @@ -445,6 +503,8 @@ export type usersUncheckedCreateWithoutRidesInput = { name: string email: string password: string + profilePhoto?: string | null + bio?: string | null createdAt?: Date | string updatedAt: Date | string tokens?: Prisma.tokensUncheckedCreateNestedManyWithoutUsersInput @@ -471,6 +531,8 @@ export type usersUpdateWithoutRidesInput = { name?: Prisma.StringFieldUpdateOperationsInput | string email?: Prisma.StringFieldUpdateOperationsInput | string password?: Prisma.StringFieldUpdateOperationsInput | string + profilePhoto?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string tokens?: Prisma.tokensUpdateManyWithoutUsersNestedInput @@ -481,6 +543,8 @@ export type usersUncheckedUpdateWithoutRidesInput = { name?: Prisma.StringFieldUpdateOperationsInput | string email?: Prisma.StringFieldUpdateOperationsInput | string password?: Prisma.StringFieldUpdateOperationsInput | string + profilePhoto?: Prisma.NullableStringFieldUpdateOperationsInput | string | null + bio?: Prisma.NullableStringFieldUpdateOperationsInput | string | null createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string tokens?: Prisma.tokensUncheckedUpdateManyWithoutUsersNestedInput @@ -531,6 +595,8 @@ export type usersSelect @@ -543,6 +609,8 @@ export type usersSelectCreateManyAndReturn @@ -552,6 +620,8 @@ export type usersSelectUpdateManyAndReturn @@ -561,11 +631,13 @@ export type usersSelectScalar = { name?: boolean email?: boolean password?: boolean + profilePhoto?: boolean + bio?: boolean createdAt?: boolean updatedAt?: boolean } -export type usersOmit = runtime.Types.Extensions.GetOmit<"id" | "name" | "email" | "password" | "createdAt" | "updatedAt", ExtArgs["result"]["users"]> +export type usersOmit = runtime.Types.Extensions.GetOmit<"id" | "name" | "email" | "password" | "profilePhoto" | "bio" | "createdAt" | "updatedAt", ExtArgs["result"]["users"]> export type usersInclude = { rides?: boolean | Prisma.users$ridesArgs tokens?: boolean | Prisma.users$tokensArgs @@ -585,6 +657,8 @@ export type $usersPayload @@ -1016,6 +1090,8 @@ export interface usersFieldRefs { readonly name: Prisma.FieldRef<"users", 'String'> readonly email: Prisma.FieldRef<"users", 'String'> readonly password: Prisma.FieldRef<"users", 'String'> + readonly profilePhoto: Prisma.FieldRef<"users", 'String'> + readonly bio: Prisma.FieldRef<"users", 'String'> readonly createdAt: Prisma.FieldRef<"users", 'DateTime'> readonly updatedAt: Prisma.FieldRef<"users", 'DateTime'> } diff --git a/backend/src/repositories/users.repository.ts b/backend/src/repositories/users.repository.ts index 028b97a..918a735 100644 --- a/backend/src/repositories/users.repository.ts +++ b/backend/src/repositories/users.repository.ts @@ -20,7 +20,14 @@ export async function createUser(data: { export async function updateUser( id: string, - data: Partial<{ name: string; email: string; password: string; updatedAt: Date }> + data: Partial<{ + name: string; + email: string; + password: string; + profilePhoto: string; + bio: string; + updatedAt: Date; + }> ) { return prisma.users.update({ where: { id }, data }); } diff --git a/backend/src/routes/users.routes.ts b/backend/src/routes/users.routes.ts index 367a5be..1136ce1 100644 --- a/backend/src/routes/users.routes.ts +++ b/backend/src/routes/users.routes.ts @@ -7,7 +7,9 @@ const router = Router(); router.use(authenticate); router.get('/me', usersController.get); +router.get('/profile', usersController.getProfile); router.put('/me', usersController.update); +router.patch('/profile', usersController.updateProfile); router.delete('/me', usersController.remove); export default router; \ No newline at end of file diff --git a/backend/src/services/users.service.ts b/backend/src/services/users.service.ts index 2e6108b..52639f6 100644 --- a/backend/src/services/users.service.ts +++ b/backend/src/services/users.service.ts @@ -3,15 +3,40 @@ import { z } from 'zod'; import * as usersRepo from '../repositories/users.repository.js'; export const updateUserSchema = z.object({ - name: z.string().check(z.minLength(2)).optional(), + name: z.string().min(2).optional(), email: z.email().optional(), - password: z.string().check(z.minLength(6)).optional(), + password: z.string().min(6).optional(), +}); + +export const updateProfileSchema = z.object({ + name: z.string().min(2).optional(), + profilePhoto: z.string().optional(), + bio: z.string().max(500).optional(), }); export async function getUser(id: string) { const user = await usersRepo.findUserById(id); if (!user) throw new Error('User not found'); - return { id: user.id, name: user.name, email: user.email, createdAt: user.createdAt }; + return { + id: user.id, + name: user.name, + email: user.email, + profilePhoto: user.profilePhoto, + bio: user.bio, + createdAt: user.createdAt, + }; +} + +export async function getProfile(id: string) { + const user = await usersRepo.findUserById(id); + if (!user) throw new Error('User not found'); + return { + id: user.id, + name: user.name, + email: user.email, + profilePhoto: user.profilePhoto, + bio: user.bio, + }; } export async function updateUser(id: string, input: z.infer) { @@ -28,6 +53,26 @@ export async function updateUser(id: string, input: z.infer) { + const user = await usersRepo.findUserById(id); + if (!user) throw new Error('User not found'); + + const data: Parameters[1] = { updatedAt: new Date() }; + + if (input.name) data.name = input.name; + if (input.profilePhoto !== undefined) data.profilePhoto = input.profilePhoto; + if (input.bio !== undefined) data.bio = input.bio; + + const updated = await usersRepo.updateUser(id, data); + return { + id: updated.id, + name: updated.name, + email: updated.email, + profilePhoto: updated.profilePhoto, + bio: updated.bio, + }; +} + export async function deleteUser(id: string) { const user = await usersRepo.findUserById(id); if (!user) throw new Error('User not found');