97 lines
2.2 KiB
TypeScript
97 lines
2.2 KiB
TypeScript
import { z } from "zod";
|
|
|
|
import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc";
|
|
import { db } from "@/server/db";
|
|
import { hashPassword } from "@/server/services/hash.service";
|
|
import { randomUUID } from "crypto";
|
|
import { getOrganizationBySlug } from "@/server/services/organization.service";
|
|
|
|
export const clientRouter = createTRPCRouter({
|
|
list: protectedProcedure
|
|
.input(
|
|
z.object({
|
|
organizationSlug: z.string(),
|
|
}),
|
|
)
|
|
.query(async ({ input }) => {
|
|
const organization = await getOrganizationBySlug(input.organizationSlug);
|
|
return db.client.findMany({
|
|
where: {
|
|
organization_id: organization.id,
|
|
},
|
|
include: {
|
|
project: true,
|
|
},
|
|
});
|
|
}),
|
|
get: protectedProcedure
|
|
.input(
|
|
z.object({
|
|
id: z.string(),
|
|
}),
|
|
)
|
|
.query(({ input }) => {
|
|
return db.client.findUniqueOrThrow({
|
|
where: {
|
|
id: input.id,
|
|
},
|
|
});
|
|
}),
|
|
update: protectedProcedure
|
|
.input(
|
|
z.object({
|
|
id: z.string(),
|
|
name: z.string(),
|
|
}),
|
|
)
|
|
.mutation(({ input }) => {
|
|
return db.client.update({
|
|
where: {
|
|
id: input.id,
|
|
},
|
|
data: {
|
|
name: input.name,
|
|
},
|
|
});
|
|
}),
|
|
create: protectedProcedure
|
|
.input(
|
|
z.object({
|
|
name: z.string(),
|
|
projectId: z.string(),
|
|
organizationSlug: z.string(),
|
|
}),
|
|
)
|
|
.mutation(async ({ input }) => {
|
|
const organization = await getOrganizationBySlug(input.organizationSlug);
|
|
const secret = randomUUID();
|
|
const client = await db.client.create({
|
|
data: {
|
|
organization_id: organization.id,
|
|
project_id: input.projectId,
|
|
name: input.name,
|
|
secret: await hashPassword(secret),
|
|
},
|
|
});
|
|
|
|
return {
|
|
clientSecret: secret,
|
|
clientId: client.id,
|
|
};
|
|
}),
|
|
remove: protectedProcedure
|
|
.input(
|
|
z.object({
|
|
id: z.string(),
|
|
}),
|
|
)
|
|
.mutation(async ({ input }) => {
|
|
await db.client.delete({
|
|
where: {
|
|
id: input.id,
|
|
},
|
|
});
|
|
return true;
|
|
}),
|
|
});
|