Minor group validation changes

This commit is contained in:
Tuan Dang
2024-03-20 14:59:42 -07:00
parent 796d5e3540
commit 8ffbaa2f6c
4 changed files with 28 additions and 13 deletions
+17 -3
View File
@@ -1,3 +1,4 @@
import slugify from "@sindresorhus/slugify";
import { z } from "zod"; import { z } from "zod";
import { GroupsSchema, OrgMembershipRole, UsersSchema } from "@app/db/schemas"; import { GroupsSchema, OrgMembershipRole, UsersSchema } from "@app/db/schemas";
@@ -13,8 +14,15 @@ export const registerGroupRouter = async (server: FastifyZodProvider) => {
body: z.object({ body: z.object({
organizationId: z.string().trim(), organizationId: z.string().trim(),
name: z.string().trim().min(1), name: z.string().trim().min(1),
slug: z.string().trim().min(1), slug: z
role: z.string().trim().min(1).default(OrgMembershipRole.NoAccess) // TODO: add describe .string()
.min(5)
.max(36)
.refine((v) => slugify(v) === v, {
message: "Slug must be a valid slug"
})
.optional(),
role: z.string().trim().min(1).default(OrgMembershipRole.NoAccess)
}), }),
response: { response: {
200: GroupsSchema 200: GroupsSchema
@@ -45,7 +53,13 @@ export const registerGroupRouter = async (server: FastifyZodProvider) => {
body: z body: z
.object({ .object({
name: z.string().trim().min(1), name: z.string().trim().min(1),
slug: z.string().trim().min(1), slug: z
.string()
.min(5)
.max(36)
.refine((v) => slugify(v) === v, {
message: "Slug must be a valid slug"
}),
role: z.string().trim().min(1) role: z.string().trim().min(1)
}) })
.partial(), .partial(),
@@ -1,8 +1,10 @@
import { ForbiddenError } from "@casl/ability"; import { ForbiddenError } from "@casl/ability";
import slugify from "@sindresorhus/slugify";
import { OrgMembershipRole, TOrgRoles } from "@app/db/schemas"; import { OrgMembershipRole, TOrgRoles } from "@app/db/schemas";
import { isAtLeastAsPrivileged } from "@app/lib/casl"; import { isAtLeastAsPrivileged } from "@app/lib/casl";
import { BadRequestError, ForbiddenRequestError } from "@app/lib/errors"; import { BadRequestError, ForbiddenRequestError } from "@app/lib/errors";
import { alphaNumericNanoId } from "@app/lib/nanoid";
import { TOrgDALFactory } from "../../../services/org/org-dal"; import { TOrgDALFactory } from "../../../services/org/org-dal";
import { TUserDALFactory } from "../../../services/user/user-dal"; import { TUserDALFactory } from "../../../services/user/user-dal";
@@ -21,11 +23,10 @@ import {
import { TUserGroupMembershipDALFactory } from "./user-group-membership-dal"; import { TUserGroupMembershipDALFactory } from "./user-group-membership-dal";
type TGroupServiceFactoryDep = { type TGroupServiceFactoryDep = {
// TODO: Pick userDAL: Pick<TUserDALFactory, "findOne">;
userDAL: TUserDALFactory; groupDAL: Pick<TGroupDALFactory, "create" | "findOne" | "update" | "delete" | "findAllGroupMembers">;
groupDAL: TGroupDALFactory; orgDAL: Pick<TOrgDALFactory, "findMembership">;
orgDAL: TOrgDALFactory; userGroupMembershipDAL: Pick<TUserGroupMembershipDALFactory, "findOne" | "create" | "delete">;
userGroupMembershipDAL: TUserGroupMembershipDALFactory;
permissionService: Pick<TPermissionServiceFactory, "getOrgPermission" | "getOrgPermissionByRole">; permissionService: Pick<TPermissionServiceFactory, "getOrgPermission" | "getOrgPermissionByRole">;
licenseService: Pick<TLicenseServiceFactory, "getPlan">; licenseService: Pick<TLicenseServiceFactory, "getPlan">;
}; };
@@ -69,7 +70,7 @@ export const groupServiceFactory = ({
const group = await groupDAL.create({ const group = await groupDAL.create({
name, name,
slug, // TODO: slugify slug: slug || slugify(`${name}-${alphaNumericNanoId(4)}`),
orgId, orgId,
role: isCustomRole ? OrgMembershipRole.Custom : role, role: isCustomRole ? OrgMembershipRole.Custom : role,
roleId: customRole?.id roleId: customRole?.id
@@ -122,7 +123,7 @@ export const groupServiceFactory = ({
}, },
{ {
name, name,
slug, // TODO: slugify slug: slug ? slugify(slug) : undefined,
...(role ...(role
? { ? {
role: customRole ? OrgMembershipRole.Custom : role, role: customRole ? OrgMembershipRole.Custom : role,
+1 -1
View File
@@ -2,7 +2,7 @@ import { TOrgPermission } from "@app/lib/types";
export type TCreateGroupDTO = { export type TCreateGroupDTO = {
name: string; name: string;
slug: string; slug?: string;
role: string; role: string;
} & TOrgPermission; } & TOrgPermission;
@@ -22,12 +22,12 @@ import {
} from "./group-project-types"; } from "./group-project-types";
type TGroupProjectServiceFactoryDep = { type TGroupProjectServiceFactoryDep = {
groupProjectDAL: TGroupProjectDALFactory; groupProjectDAL: Pick<TGroupProjectDALFactory, "findOne" | "transaction" | "create" | "delete" | "findByProjectId">;
groupProjectMembershipRoleDAL: Pick< groupProjectMembershipRoleDAL: Pick<
TGroupProjectMembershipRoleDALFactory, TGroupProjectMembershipRoleDALFactory,
"create" | "transaction" | "insertMany" | "delete" "create" | "transaction" | "insertMany" | "delete"
>; >;
projectDAL: TProjectDALFactory; projectDAL: Pick<TProjectDALFactory, "findById">;
projectRoleDAL: Pick<TProjectRoleDALFactory, "find">; projectRoleDAL: Pick<TProjectRoleDALFactory, "find">;
groupDAL: Pick<TGroupDALFactory, "findOne">; groupDAL: Pick<TGroupDALFactory, "findOne">;
permissionService: Pick<TPermissionServiceFactory, "getProjectPermission" | "getProjectPermissionByRole">; permissionService: Pick<TPermissionServiceFactory, "getProjectPermission" | "getProjectPermissionByRole">;