Skip to content

Commit ffa67cf

Browse files
committed
fix: use insert and update instead of upsert
1 parent c3e2c4f commit ffa67cf

File tree

4 files changed

+65
-16
lines changed

4 files changed

+65
-16
lines changed

site/src/api/api.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -603,11 +603,26 @@ class ApiMethods {
603603
/**
604604
* @param organization Can be the organization's ID or name
605605
*/
606-
patchOrganizationRole = async (
606+
createOrganizationRole = async (
607607
organization: string,
608608
role: TypesGen.Role,
609609
): Promise<TypesGen.Role> => {
610-
const response = await this.axios.patch<TypesGen.Role>(
610+
const response = await this.axios.post<TypesGen.Role>(
611+
`/api/v2/organizations/${organization}/members/roles`,
612+
role,
613+
);
614+
615+
return response.data;
616+
};
617+
618+
/**
619+
* @param organization Can be the organization's ID or name
620+
*/
621+
updateOrganizationRole = async (
622+
organization: string,
623+
role: TypesGen.Role,
624+
): Promise<TypesGen.Role> => {
625+
const response = await this.axios.put<TypesGen.Role>(
611626
`/api/v2/organizations/${organization}/members/roles`,
612627
role,
613628
);

site/src/api/queries/roles.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,27 @@ export const organizationRoles = (organization: string) => {
2323
};
2424
};
2525

26-
export const patchOrganizationRole = (
26+
export const createOrganizationRole = (
2727
queryClient: QueryClient,
2828
organization: string,
2929
) => {
3030
return {
3131
mutationFn: (request: Role) =>
32-
API.patchOrganizationRole(organization, request),
32+
API.createOrganizationRole(organization, request),
33+
onSuccess: async (updatedRole: Role) =>
34+
await queryClient.invalidateQueries(
35+
getRoleQueryKey(organization, updatedRole.name),
36+
),
37+
};
38+
};
39+
40+
export const updateOrganizationRole = (
41+
queryClient: QueryClient,
42+
organization: string,
43+
) => {
44+
return {
45+
mutationFn: (request: Role) =>
46+
API.updateOrganizationRole(organization, request),
3347
onSuccess: async (updatedRole: Role) =>
3448
await queryClient.invalidateQueries(
3549
getRoleQueryKey(organization, updatedRole.name),

site/src/pages/ManagementSettingsPage/CustomRolesPage/CreateEditRolePage.tsx

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@ import { useMutation, useQuery, useQueryClient } from "react-query";
44
import { useNavigate, useParams } from "react-router-dom";
55
import { getErrorMessage } from "api/errors";
66
import { organizationPermissions } from "api/queries/organizations";
7-
import { patchOrganizationRole, organizationRoles } from "api/queries/roles";
8-
import type { PatchRoleRequest } from "api/typesGenerated";
7+
import {
8+
organizationRoles,
9+
createOrganizationRole,
10+
updateOrganizationRole,
11+
} from "api/queries/roles";
12+
import type { CustomRoleRequest } from "api/typesGenerated";
913
import { displayError } from "components/GlobalSnackbar/utils";
1014
import { Loader } from "components/Loader/Loader";
1115
import { pageTitle } from "utils/page";
@@ -22,8 +26,11 @@ export const CreateEditRolePage: FC = () => {
2226
const { organizations } = useOrganizationSettings();
2327
const organization = organizations?.find((o) => o.name === organizationName);
2428
const permissionsQuery = useQuery(organizationPermissions(organization?.id));
25-
const patchOrganizationRoleMutation = useMutation(
26-
patchOrganizationRole(queryClient, organizationName),
29+
const createOrganizationRoleMutation = useMutation(
30+
createOrganizationRole(queryClient, organizationName),
31+
);
32+
const updateOrganizationRoleMutation = useMutation(
33+
updateOrganizationRole(queryClient, organizationName),
2734
);
2835
const { data: roleData, isLoading } = useQuery(
2936
organizationRoles(organizationName),
@@ -47,18 +54,31 @@ export const CreateEditRolePage: FC = () => {
4754

4855
<CreateEditRolePageView
4956
role={role}
50-
onSubmit={async (data: PatchRoleRequest) => {
57+
onSubmit={async (data: CustomRoleRequest) => {
5158
try {
52-
await patchOrganizationRoleMutation.mutateAsync(data);
53-
navigate(`/organizations/${organizationName}/roles`);
59+
if (role) {
60+
await updateOrganizationRoleMutation.mutateAsync(data);
61+
navigate(`/organizations/${organizationName}/roles`);
62+
} else {
63+
await createOrganizationRoleMutation.mutateAsync(data);
64+
navigate(`/organizations/${organizationName}/roles`);
65+
}
5466
} catch (error) {
5567
displayError(
5668
getErrorMessage(error, "Failed to update custom role"),
5769
);
5870
}
5971
}}
60-
error={patchOrganizationRoleMutation.error}
61-
isLoading={patchOrganizationRoleMutation.isLoading}
72+
error={
73+
role
74+
? updateOrganizationRoleMutation.error
75+
: createOrganizationRoleMutation.error
76+
}
77+
isLoading={
78+
role
79+
? updateOrganizationRoleMutation.isLoading
80+
: createOrganizationRoleMutation.isLoading
81+
}
6282
organizationName={organizationName}
6383
canAssignOrgRole={permissions.assignOrgRole}
6484
/>

site/src/pages/ManagementSettingsPage/CustomRolesPage/CreateEditRolePageView.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { isApiValidationError } from "api/errors";
2020
import { RBACResourceActions } from "api/rbacresources_gen";
2121
import type {
2222
Role,
23-
PatchRoleRequest,
23+
CustomRoleRequest,
2424
Permission,
2525
AssignableRoles,
2626
RBACResource,
@@ -38,7 +38,7 @@ const validationSchema = Yup.object({
3838

3939
export type CreateEditRolePageViewProps = {
4040
role: AssignableRoles | undefined;
41-
onSubmit: (data: PatchRoleRequest) => void;
41+
onSubmit: (data: CustomRoleRequest) => void;
4242
error?: unknown;
4343
isLoading: boolean;
4444
organizationName: string;
@@ -58,7 +58,7 @@ export const CreateEditRolePageView: FC<CreateEditRolePageViewProps> = ({
5858
const navigate = useNavigate();
5959
const onCancel = () => navigate(-1);
6060

61-
const form = useFormik<PatchRoleRequest>({
61+
const form = useFormik<CustomRoleRequest>({
6262
initialValues: {
6363
name: role?.name || "",
6464
display_name: role?.display_name || "",

0 commit comments

Comments
 (0)