From 92866f1017ec20bda0d50df090cdc5662521ff6f Mon Sep 17 00:00:00 2001 From: Oliver Bryan <04oliverbryan@gmail.com> Date: Mon, 22 Dec 2025 20:22:33 +0000 Subject: [PATCH] Organisation db query functions --- .../backend/src/db/queries/organisations.ts | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/packages/backend/src/db/queries/organisations.ts b/packages/backend/src/db/queries/organisations.ts index 3b73a62..be96566 100644 --- a/packages/backend/src/db/queries/organisations.ts +++ b/packages/backend/src/db/queries/organisations.ts @@ -1,5 +1,5 @@ import { Organisation, OrganisationMember } from "@issue/shared"; -import { eq } from "drizzle-orm"; +import { and, eq } from "drizzle-orm"; import { db } from "../client"; export async function createOrganisation(name: string, slug: string, description?: string) { @@ -43,3 +43,50 @@ export async function getOrganisationsByUserId(userId: number) { .innerJoin(Organisation, eq(OrganisationMember.organisationId, Organisation.id)); return organisations; } + +export async function updateOrganisation( + organisationId: number, + updates: { name?: string; description?: string; slug?: string }, +) { + const [organisation] = await db + .update(Organisation) + .set(updates) + .where(eq(Organisation.id, organisationId)) + .returning(); + return organisation; +} + +export async function deleteOrganisation(organisationId: number) { + // Delete all organisation members first + await db.delete(OrganisationMember).where(eq(OrganisationMember.organisationId, organisationId)); + // Delete the organisation + await db.delete(Organisation).where(eq(Organisation.id, organisationId)); +} + +export async function getOrganisationMembers(organisationId: number) { + const members = await db + .select() + .from(OrganisationMember) + .where(eq(OrganisationMember.organisationId, organisationId)) + .innerJoin(Organisation, eq(OrganisationMember.organisationId, Organisation.id)); + return members; +} + +export async function removeOrganisationMember(organisationId: number, userId: number) { + await db + .delete(OrganisationMember) + .where( + and(eq(OrganisationMember.organisationId, organisationId), eq(OrganisationMember.userId, userId)), + ); +} + +export async function updateOrganisationMemberRole(organisationId: number, userId: number, role: string) { + const [member] = await db + .update(OrganisationMember) + .set({ role }) + .where( + and(eq(OrganisationMember.organisationId, organisationId), eq(OrganisationMember.userId, userId)), + ) + .returning(); + return member; +}