From 66e3d0004190e788e05037646038cd2cef81d385 Mon Sep 17 00:00:00 2001 From: yuler Date: Sun, 4 Feb 2024 13:35:38 +0800 Subject: [PATCH] refactor: move to sqlite --- prisma/db.sqlite | Bin 0 -> 110592 bytes prisma/db.sqlite-journal | Bin 0 -> 8720 bytes .../20230925103252_init/migration.sql | 24 ---- .../20231001005812_project/migration.sql | 32 ----- .../migration.sql | 22 ---- .../20231009054458_api/migration.sql | 42 ------ .../20231012093339_user_avatar/migration.sql | 12 -- .../20231013035744_team/migration.sql | 27 ---- .../migration.sql | 11 -- .../20231016164156_collection/migration.sql | 30 ----- .../migration.sql | 10 -- .../20231113032008_team_invite/migration.sql | 2 - .../migration.sql | 14 -- .../migration.sql | 2 - .../20240204053459_init/migration.sql | 122 ++++++++++++++++++ prisma/migrations/migration_lock.toml | 2 +- prisma/schema.prisma | 93 ++++--------- server/trpc/routers/api.ts | 19 ++- server/trpc/routers/project.ts | 20 +-- server/trpc/routers/team.ts | 15 +-- types.d.ts | 39 +++++- 21 files changed, 210 insertions(+), 328 deletions(-) create mode 100644 prisma/db.sqlite create mode 100644 prisma/db.sqlite-journal delete mode 100644 prisma/migrations/20230925103252_init/migration.sql delete mode 100644 prisma/migrations/20231001005812_project/migration.sql delete mode 100644 prisma/migrations/20231004084305_project_relation/migration.sql delete mode 100644 prisma/migrations/20231009054458_api/migration.sql delete mode 100644 prisma/migrations/20231012093339_user_avatar/migration.sql delete mode 100644 prisma/migrations/20231013035744_team/migration.sql delete mode 100644 prisma/migrations/20231013051930_team_relation/migration.sql delete mode 100644 prisma/migrations/20231016164156_collection/migration.sql delete mode 100644 prisma/migrations/20231017041831_rename_collection_title_name/migration.sql delete mode 100644 prisma/migrations/20231113032008_team_invite/migration.sql delete mode 100644 prisma/migrations/20231122082949_visited_history/migration.sql delete mode 100644 prisma/migrations/20231122091108_visited_proeject_date/migration.sql create mode 100644 prisma/migrations/20240204053459_init/migration.sql diff --git a/prisma/db.sqlite b/prisma/db.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..9ed7538685600aab6fb3ebb60f0ec524af6637a1 GIT binary patch literal 110592 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 { @@ -64,8 +63,8 @@ export const apiRouter = router({ if (!projectMember) throw new Error('Project not found') if (![ - $Enums.Role.Owner, - $Enums.Role.Maintainer, + Role.Owner, + Role.Maintainer, ].includes(projectMember.role)) throw new Error('Permission denied') @@ -82,7 +81,7 @@ export const apiRouter = router({ name: z.string().min(3).max(50).optional(), description: z.string().min(3).max(255).optional(), endpoint: z.string(), - method: z.nativeEnum($Enums.ApiMethod), + method: z.nativeEnum(ApiMethod), params: z.array(z.object({ key: z.string(), type: z.enum(['string', 'number']), @@ -99,7 +98,7 @@ export const apiRouter = router({ tags: z.array(z.string()), versions: z.array(z.string()), order: z.number(), - status: z.nativeEnum($Enums.ApiStatus).optional(), + status: z.nativeEnum(ApiStatus).optional(), projectId: z.string(), }), ).mutation(async (event) => { @@ -115,8 +114,8 @@ export const apiRouter = router({ if (!projectMember) throw new Error('Project not found') if (![ - $Enums.Role.Owner, - $Enums.Role.Maintainer, + Role.Owner, + Role.Maintainer, ].includes(projectMember.role)) throw new Error('Permission denied') diff --git a/server/trpc/routers/project.ts b/server/trpc/routers/project.ts index d77f9cd..1da6e68 100644 --- a/server/trpc/routers/project.ts +++ b/server/trpc/routers/project.ts @@ -1,6 +1,6 @@ -import { $Enums } from '@prisma/client' import { z } from 'zod' import { protectedProcedure, router } from '../trpc' +import { ProjectVisibility, Role } from '~/types' export const projectRouter = router({ userList: protectedProcedure @@ -90,7 +90,7 @@ export const projectRouter = router({ name: z.string().min(3).max(50), description: z.string().min(3).max(255), teamId: z.string(), - visibility: z.nativeEnum($Enums.ProjectVisibility), + visibility: z.nativeEnum(ProjectVisibility), }), ) .mutation(async (event) => { @@ -105,7 +105,7 @@ export const projectRouter = router({ members: { create: { userId: user.id, - role: $Enums.Role.Owner, + role: Role.Owner, }, }, }, @@ -131,14 +131,14 @@ export const projectRouter = router({ throw new Error('Project not found') // add or update visted history - const visitedRecord = await ctx.prisma.visitedHisotry.findFirst({ + const visitedRecord = await ctx.prisma.visitedHistory.findFirst({ where: { projectId: input.id, userId: user.id, }, }) if (visitedRecord) { - await ctx.prisma.visitedHisotry.update({ + await ctx.prisma.visitedHistory.update({ where: { id: visitedRecord.id, }, @@ -148,7 +148,7 @@ export const projectRouter = router({ }) } else { - await ctx.prisma.visitedHisotry.create({ + await ctx.prisma.visitedHistory.create({ data: { projectId: input.id, userId: user.id, @@ -165,7 +165,7 @@ export const projectRouter = router({ id: z.string(), name: z.string().min(3).max(50), description: z.string().min(3).max(255), - visibility: z.nativeEnum($Enums.ProjectVisibility), + visibility: z.nativeEnum(ProjectVisibility), }), ) .mutation(async (event) => { @@ -174,7 +174,7 @@ export const projectRouter = router({ const existed = await ctx.prisma.project.update({ where: { id: input.id, - members: { some: { userId: user.id, role: $Enums.Role.Owner } }, + members: { some: { userId: user.id, role: Role.Owner } }, }, data: { name: input.name, @@ -198,7 +198,7 @@ export const projectRouter = router({ const existed = await ctx.prisma.project.delete({ where: { id: input.id, - members: { some: { userId: user.id, role: $Enums.Role.Owner } }, + members: { some: { userId: user.id, role: Role.Owner } }, }, }) if (!existed) @@ -210,7 +210,7 @@ export const projectRouter = router({ .query(async (event) => { const { ctx } = event const user = ctx.session.data.user - const projects = await ctx.prisma.visitedHisotry.findMany({ + const visitedList = await ctx.prisma.visitedHistory.findMany({ where: { userId: user.id, }, diff --git a/server/trpc/routers/team.ts b/server/trpc/routers/team.ts index f58cc00..42a13d2 100644 --- a/server/trpc/routers/team.ts +++ b/server/trpc/routers/team.ts @@ -1,11 +1,10 @@ import process from 'node:process' -import type { Role } from '@prisma/client' -import { $Enums, InviteStatus } from '@prisma/client' import { z } from 'zod' import nodemailer from 'nodemailer' import { protectedProcedure, router } from '../trpc' import { useCompiler } from '#vue-email' import { generateUUID } from '~/server/utils/uuid' +import { InviteStatus, Role } from '~/types' export const teamRouter = router({ // Team, TODO: permission @@ -39,8 +38,8 @@ export const teamRouter = router({ members: { create: { userId: user.id, - role: $Enums.Role.Owner, - status: $Enums.InviteStatus.Success, + role: Role.Owner, + status: InviteStatus.Success, }, }, }, @@ -130,13 +129,13 @@ export const teamRouter = router({ userId, role: input.role as Role, teamId: input.teamId, - status: $Enums.InviteStatus.Pending, + status: InviteStatus.Pending, } }) // insert into team member record - const res = await ctx.prisma.teamMember.createMany({ - data, - }) + // const res = await ctx.prisma.teamMember.createMany({ + // data, + // }) // send email data.forEach(async (item) => { diff --git a/types.d.ts b/types.d.ts index a02b2da..f144549 100644 --- a/types.d.ts +++ b/types.d.ts @@ -1,4 +1,4 @@ -import type { $Enums, User } from '@prisma/client' +import type { User } from '@prisma/client' // RouteMeta` w/ custom properties, like `requiredAuth` declare module 'vue-router' { @@ -7,11 +7,38 @@ declare module 'vue-router' { } } -// Re Export `prisma` enums -export type ApiMethod = $Enums.ApiMethod -export type ApiStatus = $Enums.ApiStatus -export type ProjectVisibility = $Enums.ProjectVisibility -export type Role = $Enums.Role +// refs: https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods +export enum ApiMethod { + GET = 'GET', + PUT = 'PUT', + DELETE = 'DELETE', + POST = 'POST', + HEAD = 'HEAD', + CONNECT = 'CONNECT', + OPTIONS = 'OPTIONS', + TRACE = 'TRACE', + PATCH = 'PATCH', + CUSTOM = 'CUSTOM', +} +export enum ApiStatus { + DRAFT = 'DRAFT', + PUBLISHED = 'PUBLISHED', +} +export enum ProjectVisibility { + PUBLIC = 'PUBLIC', + PRIVATE = 'PRIVATE', +} +export enum Role { + Owner = 'Owner', + Maintainer = 'Maintainer', + Developer = 'Developer', + Viewer = 'Viewer', +} +export enum InviteStatus { + Pending = 'Pending', + Success = 'Success', + Reject = 'Reject', +} export type SessionUser = Pick export interface Session {