From ff0baffce827faaee9b4bf4f8c686f53a573936b Mon Sep 17 00:00:00 2001 From: Tuluobo Date: Thu, 26 Sep 2024 21:32:07 +0800 Subject: [PATCH] refactor: update user field --- prisma/migrations/20240915095258_init/migration.sql | 8 ++++++-- prisma/schema.prisma | 9 +++++++-- src/app/api/oauth/user/route.ts | 4 +++- src/lib/discourse/verify.ts | 9 ++++++--- src/lib/dto/client.ts | 1 + src/lib/dto/user.ts | 11 ++++++----- 6 files changed, 29 insertions(+), 13 deletions(-) diff --git a/prisma/migrations/20240915095258_init/migration.sql b/prisma/migrations/20240915095258_init/migration.sql index 306746a..6cb2c85 100644 --- a/prisma/migrations/20240915095258_init/migration.sql +++ b/prisma/migrations/20240915095258_init/migration.sql @@ -9,8 +9,10 @@ CREATE TABLE "users" ( "name" TEXT, "avatarUrl" TEXT, "role" "UserRole" NOT NULL DEFAULT 'USER', - "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "moderator" BOOLEAN NOT NULL DEFAULT false, + "groups" TEXT[], + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "users_pkey" PRIMARY KEY ("id") ); @@ -26,6 +28,8 @@ CREATE TABLE "clients" ( "clientId" TEXT NOT NULL, "clientSecret" TEXT NOT NULL, "userId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "clients_pkey" PRIMARY KEY ("id") ); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 4742646..eddbc19 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -19,6 +19,8 @@ model User { name String? avatarUrl String? role UserRole @default(USER) + moderator Boolean @default(false) + groups String[] clients Client[] codes Code[] @@ -26,8 +28,8 @@ model User { authorizations Authorization[] - createdAt DateTime @default(now()) @map(name: "created_at") - updatedAt DateTime @default(now()) @map(name: "updated_at") + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt @@map("users") } @@ -51,6 +53,9 @@ model Client { authorizations Authorization[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + @@map("clients") } diff --git a/src/app/api/oauth/user/route.ts b/src/app/api/oauth/user/route.ts index 4978fa8..64a6700 100644 --- a/src/app/api/oauth/user/route.ts +++ b/src/app/api/oauth/user/route.ts @@ -25,8 +25,10 @@ export async function GET(req: Request) { id: user.id, email: user.email, username: user.username, - admin: user.role == UserRole.ADMIN, avatar_url: user.avatarUrl, name: user.name, + admin: user.role == UserRole.ADMIN, + moderator: user.moderator, + groups: user.groups, }); } diff --git a/src/lib/discourse/verify.ts b/src/lib/discourse/verify.ts index 4ef1b35..8c36d1b 100644 --- a/src/lib/discourse/verify.ts +++ b/src/lib/discourse/verify.ts @@ -33,6 +33,8 @@ export async function discourseCallbackVerify(sso: string, sig: string) { const name = searchParams.get("name"); const avatarUrl = searchParams.get("avatar_url"); const isAdmin = searchParams.get("admin") == "true"; + const moderator = searchParams.get("moderator") == "true"; + const groups = searchParams.get("groups")?.split(","); if (!id || !email || !username) { throw new Error("User not found."); } @@ -47,7 +49,8 @@ export async function discourseCallbackVerify(sso: string, sig: string) { name, avatarUrl, role: isAdmin ? UserRole.ADMIN : UserRole.USER, - updatedAt: new Date(), + moderator, + groups, }); } else { // 创建 @@ -58,8 +61,8 @@ export async function discourseCallbackVerify(sso: string, sig: string) { name, avatarUrl, role: isAdmin ? UserRole.ADMIN : UserRole.USER, - createdAt: new Date(), - updatedAt: new Date(), + moderator, + groups, }); } diff --git a/src/lib/dto/client.ts b/src/lib/dto/client.ts index 986a191..f5b1de4 100644 --- a/src/lib/dto/client.ts +++ b/src/lib/dto/client.ts @@ -21,6 +21,7 @@ export async function getClientsByUserId(userId: string) { clientId: true, clientSecret: true, redirectUri: true, + createdAt: true, }, }); } diff --git a/src/lib/dto/user.ts b/src/lib/dto/user.ts index 8460bd1..e07aa59 100644 --- a/src/lib/dto/user.ts +++ b/src/lib/dto/user.ts @@ -1,9 +1,7 @@ -import { User } from "@prisma/client"; +import { Prisma as PrismaType } from "@prisma/client"; import { prisma } from "../prisma"; -export interface UpdateUserForm extends Omit {} - export const getUserById = async (id: string) => { try { const user = await prisma.user.findUnique({ where: { id } }); @@ -14,7 +12,10 @@ export const getUserById = async (id: string) => { } }; -export const updateUser = async (userId: string, data: UpdateUserForm) => { +export const updateUser = async ( + userId: string, + data: PrismaType.UserUpdateInput, +) => { try { const session = await prisma.user.update({ where: { @@ -28,7 +29,7 @@ export const updateUser = async (userId: string, data: UpdateUserForm) => { } }; -export const createUser = async (data: User) => { +export const createUser = async (data: PrismaType.UserCreateInput) => { try { const session = await prisma.user.create({ data,