all repos — stealth-developers @ 0034b53eccf9ab0f19cc43c837b39e1a6d05021e

apps/bot/src/lib/tickets.ts (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
import db, { tickets, eq, getUser, getUserByDiscordId } from "@stealth-developers/db";

export async function hasAccessToTicket(userId: string, ticketId: number) {
	const [ticket] = await db.select().from(tickets).where(eq(tickets.id, ticketId)).limit(1);
	if (!ticket) return false;

	const userPromise = getUserByDiscordId(userId);
	const subjectPromise = getUser(ticket.subject);
	const openedByPromise = ticket.subject === ticket.openedBy ? null : getUser(ticket.openedBy);

	const [user, subject, openedByResult] = await Promise.all([
		userPromise,
		subjectPromise,
		openedByPromise,
	]);
	const openedBy = ticket.subject === ticket.openedBy ? subject : openedByResult;
	if (!user) return false;

	if (user.moderator) return true;
	if (!subject || !openedBy) return false;
	if (user.id === subject.id || user.id === openedBy.id) return true;
}