Skip to content

Commit

Permalink
Basic upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
joshuasilva414 committed Sep 27, 2024
1 parent afc38b5 commit 11d7908
Show file tree
Hide file tree
Showing 20 changed files with 512 additions and 313 deletions.
2 changes: 1 addition & 1 deletion apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
"lucide-react": "^0.411.0",
"nanoid": "^5.0.7",
"next": "14.2.5",
"next-safe-action": "^5.2.3",
"next-safe-action": "^7.9.3",
"no-profanity": "^1.5.1",
"pg": "^8.12.0",
"postcss": "8.4.39",
Expand Down
42 changes: 22 additions & 20 deletions apps/web/src/actions/admin/modify-nav-item.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ const metadataSchema = z.object({
// Maybe a better way to do this for revalidation? Who knows.
const navAdminPage = "/admin/toggles/landing";

export const setItem = adminAction(
metadataSchema,
async ({ name, url }, { user, userId }) => {
export const setItem = adminAction
.schema(metadataSchema)
.action(async ({ parsedInput: { name, url }, ctx: { user, userId } }) => {
await kv.sadd("config:navitemslist", encodeURIComponent(name));
await kv.hset(`config:navitems:${encodeURIComponent(name)}`, {
url,
Expand All @@ -24,29 +24,31 @@ export const setItem = adminAction(
});
revalidatePath(navAdminPage);
return { success: true };
},
);
});

export const removeItem = adminAction(
z.string(),
async (name, { user, userId }) => {
export const removeItem = adminAction
.schema(z.string())
.action(async ({ parsedInput: name, ctx: { user, userId } }) => {
const pipe = kv.pipeline();
pipe.srem("config:navitemslist", encodeURIComponent(name));
pipe.del(`config:navitems:${encodeURIComponent(name)}`);
await pipe.exec();
// await new Promise((resolve) => setTimeout(resolve, 1500));
revalidatePath(navAdminPage);
return { success: true };
},
);
});

export const toggleItem = adminAction(
z.object({ name: z.string(), statusToSet: z.boolean() }),
async ({ name, statusToSet }, { user, userId }) => {
await kv.hset(`config:navitems:${encodeURIComponent(name)}`, {
enabled: statusToSet,
});
revalidatePath(navAdminPage);
return { success: true, itemStatus: statusToSet };
},
);
export const toggleItem = adminAction
.schema(z.object({ name: z.string(), statusToSet: z.boolean() }))
.action(
async ({
parsedInput: { name, statusToSet },
ctx: { user, userId },
}) => {
await kv.hset(`config:navitems:${encodeURIComponent(name)}`, {
enabled: statusToSet,
});
revalidatePath(navAdminPage);
return { success: true, itemStatus: statusToSet };
},
);
36 changes: 16 additions & 20 deletions apps/web/src/actions/admin/registration-actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,38 +9,34 @@ const defaultRegistrationToggleSchema = z.object({
enabled: z.boolean(),
});

export const toggleRegistrationEnabled = adminAction(
defaultRegistrationToggleSchema,
async ({ enabled }, { user, userId }) => {
export const toggleRegistrationEnabled = adminAction
.schema(defaultRegistrationToggleSchema)
.action(async ({ parsedInput: { enabled }, ctx: { user, userId } }) => {
await kv.set("config:registration:registrationEnabled", enabled);
revalidatePath("/admin/toggles/registration");
return { success: true, statusSet: enabled };
},
);
});

export const toggleRegistrationMessageEnabled = adminAction(
defaultRegistrationToggleSchema,
async ({ enabled }, { user, userId }) => {
export const toggleRegistrationMessageEnabled = adminAction
.schema(defaultRegistrationToggleSchema)
.action(async ({ parsedInput: { enabled }, ctx: { user, userId } }) => {
await kv.set("config:registration:registrationMessageEnabled", enabled);
revalidatePath("/admin/toggles/registration");
return { success: true, statusSet: enabled };
},
);
});

export const toggleSecretRegistrationEnabled = adminAction(
defaultRegistrationToggleSchema,
async ({ enabled }, { user, userId }) => {
export const toggleSecretRegistrationEnabled = adminAction
.schema(defaultRegistrationToggleSchema)
.action(async ({ parsedInput: { enabled }, ctx: { user, userId } }) => {
await kv.set("config:registration:secretRegistrationEnabled", enabled);
revalidatePath("/admin/toggles/registration");
return { success: true, statusSet: enabled };
},
);
});

export const toggleRSVPs = adminAction(
defaultRegistrationToggleSchema,
async ({ enabled }, { user, userId }) => {
export const toggleRSVPs = adminAction
.schema(defaultRegistrationToggleSchema)
.action(async ({ parsedInput: { enabled }, ctx: { user, userId } }) => {
await kv.set("config:registration:allowRSVPs", enabled);
revalidatePath("/admin/toggles/registration");
return { success: true, statusSet: enabled };
},
);
});
113 changes: 67 additions & 46 deletions apps/web/src/actions/admin/scanner-admin-actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,51 +5,72 @@ import { z } from "zod";
import { db, sql } from "db";
import { scans, userCommonData } from "db/schema";
import { eq, and } from "db/drizzle";
export const createScan = adminAction(
z.object({
eventID: z.number(),
userID: z.string(),
creationTime: z.date(),
countToSet: z.number(),
alreadyExists: z.boolean(),
}),
async (
{ eventID, userID, creationTime, countToSet, alreadyExists },
{ user, userId },
) => {
if (alreadyExists) {
await db
.update(scans)
.set({ count: countToSet, updatedAt: creationTime })
.where(
and(eq(scans.eventID, eventID), eq(scans.userID, userID)),
);
} else {
await db.insert(scans).values({
userID: userID,
updatedAt: creationTime,
count: 1,
eventID: eventID,
});
}
return { success: true };
},
);
export const createScan = adminAction
.schema(
z.object({
eventID: z.number(),
userID: z.string(),
creationTime: z.date(),
countToSet: z.number(),
alreadyExists: z.boolean(),
}),
)
.action(
async ({
parsedInput: {
eventID,
userID,
creationTime,
countToSet,
alreadyExists,
},
ctx: { user, userId },
}) => {
if (alreadyExists) {
await db
.update(scans)
.set({ count: countToSet, updatedAt: creationTime })
.where(
and(
eq(scans.eventID, eventID),
eq(scans.userID, userID),
),
);
} else {
await db.insert(scans).values({
userID: userID,
updatedAt: creationTime,
count: 1,
eventID: eventID,
});
}
return { success: true };
},
);

export const getScan = adminAction(
z.object({ eventID: z.number(), userID: z.string() }),
async ({ eventID, userID }, { user, userId: adminUserID }) => {
const scan = await db.query.scans.findFirst({
where: and(eq(scans.eventID, eventID), eq(scans.userID, userID)),
});
return scan;
},
);
export const getScan = adminAction
.schema(z.object({ eventID: z.number(), userID: z.string() }))
.action(
async ({
parsedInput: { eventID, userID },
ctx: { user, userId: adminUserID },
}) => {
const scan = await db.query.scans.findFirst({
where: and(
eq(scans.eventID, eventID),
eq(scans.userID, userID),
),
});
return scan;
},
);

export const checkInUser = adminAction(z.string(), async (user) => {
// Set checkinTimestamp
return await db
.update(userCommonData)
.set({ checkinTimestamp: sql`now()` })
.where(eq(userCommonData.clerkID, user));
});
export const checkInUser = adminAction
.schema(z.string())
.action(async ({ parsedInput: user }) => {
// Set checkinTimestamp
return await db
.update(userCommonData)
.set({ checkinTimestamp: sql`now()` })
.where(eq(userCommonData.clerkID, user));
});
81 changes: 46 additions & 35 deletions apps/web/src/actions/admin/user-actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,39 +8,50 @@ import { db } from "db";
import { eq } from "db/drizzle";
import { revalidatePath } from "next/cache";

export const updateRole = adminAction(
z.object({
userIDToUpdate: z.string(),
roleToSet: z.enum(perms),
}),
async ({ userIDToUpdate, roleToSet }, { user, userId }) => {
if (
user.role !== "super_admin" &&
(roleToSet === "super_admin" || roleToSet === "admin")
) {
throw new Error("You are not allowed to do this");
}
await db
.update(userCommonData)
.set({ role: roleToSet })
.where(eq(userCommonData.clerkID, userIDToUpdate));
revalidatePath(`/admin/users/${userIDToUpdate}`);
return { success: true };
},
);
export const updateRole = adminAction
.schema(
z.object({
userIDToUpdate: z.string(),
roleToSet: z.enum(perms),
}),
)
.action(
async ({
parsedInput: { userIDToUpdate, roleToSet },
ctx: { user, userId },
}) => {
if (
user.role !== "super_admin" &&
(roleToSet === "super_admin" || roleToSet === "admin")
) {
throw new Error("You are not allowed to do this");
}
await db
.update(userCommonData)
.set({ role: roleToSet })
.where(eq(userCommonData.clerkID, userIDToUpdate));
revalidatePath(`/admin/users/${userIDToUpdate}`);
return { success: true };
},
);

export const setUserApproval = adminAction(
z.object({
userIDToUpdate: z.string().min(1),
approved: z.boolean(),
}),

async ({ userIDToUpdate, approved }, { user, userId }) => {
await db
.update(userCommonData)
.set({ isApproved: approved })
.where(eq(userCommonData.clerkID, userIDToUpdate));
revalidatePath(`/admin/users/${userIDToUpdate}`);
return { success: true };
},
);
export const setUserApproval = adminAction
.schema(
z.object({
userIDToUpdate: z.string().min(1),
approved: z.boolean(),
}),
)
.action(
async ({
parsedInput: { userIDToUpdate, approved },
ctx: { user, userId },
}) => {
await db
.update(userCommonData)
.set({ isApproved: approved })
.where(eq(userCommonData.clerkID, userIDToUpdate));
revalidatePath(`/admin/users/${userIDToUpdate}`);
return { success: true };
},
);
15 changes: 8 additions & 7 deletions apps/web/src/actions/discord-verify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import { eq, and } from "db/drizzle";
import { discordVerification } from "db/schema";
import { env } from "@/env";

export const confirmVerifyDiscord = authenticatedAction(
z.object({
code: z.string().min(20).max(20),
}),
async ({ code }, { userId }) => {
export const confirmVerifyDiscord = authenticatedAction
.schema(
z.object({
code: z.string().min(20).max(20),
}),
)
.action(async ({ parsedInput: { code }, ctx: { userId } }) => {
const verification = await db.query.discordVerification.findFirst({
where: and(
eq(discordVerification.code, code),
Expand Down Expand Up @@ -49,5 +51,4 @@ export const confirmVerifyDiscord = authenticatedAction(
return {
success: true,
};
},
);
});
5 changes: 2 additions & 3 deletions apps/web/src/actions/rsvp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ import { eq } from "db/drizzle";
import { userCommonData } from "db/schema";
import { getUser } from "db/functions";

export const rsvpMyself = authenticatedAction(
z.any(),
async (_, { userId }) => {
export const rsvpMyself = authenticatedAction.action(
async ({ ctx: { userId } }) => {
const user = await getUser(userId);
if (!user) throw new Error("User not found");

Expand Down
5 changes: 2 additions & 3 deletions apps/web/src/actions/teams.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@ import { eq } from "db/drizzle";
import { revalidatePath } from "next/cache";
import { getHacker } from "db/functions";

export const leaveTeam = authenticatedAction(
z.null(),
async (_, { userId }) => {
export const leaveTeam = authenticatedAction.action(
async ({ ctx: { userId } }) => {
const user = await getHacker(userId, false);
if (!user) throw new Error("User not found");

Expand Down
Loading

0 comments on commit 11d7908

Please sign in to comment.