add + remove users from organisation

This commit is contained in:
Oliver Bryan
2026-01-01 10:46:54 +00:00
parent 8511c6472c
commit 63fef4a0e9
20 changed files with 560 additions and 32 deletions

View File

@@ -0,0 +1,32 @@
import { getAuthHeaders, getServerURL } from "@/lib/utils";
import type { ServerQueryInput } from "..";
export async function addMember({
organisationId,
userId,
role = "member",
onSuccess,
onError,
}: {
organisationId: number;
userId: number;
role?: string;
} & ServerQueryInput) {
const url = new URL(`${getServerURL()}/organisation/add-member`);
url.searchParams.set("organisationId", `${organisationId}`);
url.searchParams.set("userId", `${userId}`);
url.searchParams.set("role", role);
const res = await fetch(url.toString(), {
method: "POST",
headers: getAuthHeaders(),
});
if (!res.ok) {
const error = await res.text();
onError?.(error || `failed to add member (${res.status})`);
} else {
const data = await res.json();
onSuccess?.(data, res);
}
}

View File

@@ -1,2 +1,5 @@
export { addMember } from "./addMember";
export { byUser } from "./byUser";
export { create } from "./create";
export { members } from "./members";
export { removeMember } from "./removeMember";

View File

@@ -0,0 +1,26 @@
import type { OrganisationMemberResponse } from "@issue/shared";
import { getAuthHeaders, getServerURL } from "@/lib/utils";
import type { ServerQueryInput } from "..";
export async function members({
organisationId,
onSuccess,
onError,
}: {
organisationId: number;
} & ServerQueryInput) {
const url = new URL(`${getServerURL()}/organisation/members`);
url.searchParams.set("organisationId", `${organisationId}`);
const res = await fetch(url.toString(), {
headers: getAuthHeaders(),
});
if (!res.ok) {
const error = await res.text();
onError?.(error || `failed to get members (${res.status})`);
} else {
const data = (await res.json()) as OrganisationMemberResponse[];
onSuccess?.(data, res);
}
}

View File

@@ -0,0 +1,29 @@
import { getAuthHeaders, getServerURL } from "@/lib/utils";
import type { ServerQueryInput } from "..";
export async function removeMember({
organisationId,
userId,
onSuccess,
onError,
}: {
organisationId: number;
userId: number;
} & ServerQueryInput) {
const url = new URL(`${getServerURL()}/organisation/remove-member`);
url.searchParams.set("organisationId", `${organisationId}`);
url.searchParams.set("userId", `${userId}`);
const res = await fetch(url.toString(), {
method: "POST",
headers: getAuthHeaders(),
});
if (!res.ok) {
const error = await res.text();
onError?.(error || `failed to remove member (${res.status})`);
} else {
const data = await res.json();
onSuccess?.(data, res);
}
}

View File

@@ -0,0 +1,26 @@
import type { UserRecord } from "@issue/shared";
import { getAuthHeaders, getServerURL } from "@/lib/utils";
import type { ServerQueryInput } from "..";
export async function byUsername({
username,
onSuccess,
onError,
}: {
username: string;
} & ServerQueryInput) {
const url = new URL(`${getServerURL()}/user/by-username`);
url.searchParams.set("username", username);
const res = await fetch(url.toString(), {
headers: getAuthHeaders(),
});
if (!res.ok) {
const error = await res.text();
onError?.(error || `failed to get user (${res.status})`);
} else {
const data = (await res.json()) as UserRecord;
onSuccess?.(data, res);
}
}

View File

@@ -1,2 +1,3 @@
export { byUsername } from "./byUsername";
export { update } from "./update";
export { uploadAvatar } from "./uploadAvatar";