/api/mek/register/initial Endpoint 추가

This commit is contained in:
static
2024-12-30 00:37:53 +09:00
parent ee752494cd
commit 04780d2493
9 changed files with 145 additions and 35 deletions

View File

@@ -25,15 +25,6 @@ export const getAllUserClients = async (userId: number) => {
return await db.select().from(userClient).where(eq(userClient.userId, userId)).execute();
};
export const countActiveUserClients = async (userId: number) => {
const userClients = await db
.select({ count: count() })
.from(userClient)
.where(and(eq(userClient.userId, userId), eq(userClient.state, "active")))
.execute();
return userClients[0]?.count ?? null;
};
export const getUserClient = async (userId: number, clientId: number) => {
const userClients = await db
.select()
@@ -57,6 +48,20 @@ export const setUserClientStateToPending = async (userId: number, clientId: numb
.execute();
};
export const setUserClientStateToActive = async (userId: number, clientId: number) => {
await db
.update(userClient)
.set({ state: "active" })
.where(
and(
eq(userClient.userId, userId),
eq(userClient.clientId, clientId),
eq(userClient.state, "pending"),
),
)
.execute();
};
export const createUserClientChallenge = async (
userId: number,
clientId: number,

View File

@@ -1,4 +1,4 @@
import { and, or, eq, lt } from "drizzle-orm";
import { and, or, eq, lt, desc } from "drizzle-orm";
import db from "./drizzle";
import { mek, clientMek, userClient } from "./schema";
@@ -7,6 +7,30 @@ export interface ClientMek {
encMek: string;
}
export const registerInitialMek = async (userId: number, createdBy: number, encMek: string) => {
await db.transaction(async (tx) => {
await tx
.insert(mek)
.values({
userId,
version: 1,
createdBy,
createdAt: new Date(),
state: "active",
})
.execute();
await tx
.insert(clientMek)
.values({
userId,
clientId: createdBy,
mekVersion: 1,
encMek,
})
.execute();
});
};
export const registerActiveMek = async (
userId: number,
version: number,
@@ -63,15 +87,29 @@ export const registerActiveMek = async (
});
};
export const getActiveMek = async (userId: number) => {
export const getInitialMek = async (userId: number) => {
const meks = await db
.select()
.from(mek)
.where(and(eq(mek.userId, userId), eq(mek.state, "active")))
.where(and(eq(mek.userId, userId), eq(mek.version, 1)))
.execute();
return meks[0] ?? null;
};
export const getNextActiveMekVersion = async (userId: number) => {
const meks = await db
.select({ version: mek.version })
.from(mek)
.where(eq(mek.userId, userId))
.orderBy(desc(mek.version))
.limit(1)
.execute();
if (!meks[0]) {
throw new Error("No MEK found");
}
return meks[0].version + 1;
};
export const getAllValidClientMeks = async (userId: number, clientId: number) => {
return await db
.select()