feat: updated more types to avoid infer

This commit is contained in:
=
2025-06-13 23:52:40 +05:30
parent 5311daed64
commit 7a00ade119
125 changed files with 1974 additions and 571 deletions
@@ -1,7 +1,8 @@
import { TDbClient } from "@app/db";
import { TableName } from "@app/db/schemas";
import { ormify } from "@app/lib/knex";
import { ormify, TOrmify } from "@app/lib/knex";
export type TProjectTemplateDALFactory = ReturnType<typeof projectTemplateDALFactory>;
export type TProjectTemplateDALFactory = TOrmify<TableName.ProjectTemplates>;
export const projectTemplateDALFactory = (db: TDbClient) => ormify(db, TableName.ProjectTemplates);
export const projectTemplateDALFactory = (db: TDbClient): TProjectTemplateDALFactory =>
ormify(db, TableName.ProjectTemplates);
@@ -4,18 +4,16 @@ import { packRules } from "@casl/ability/extra";
import { ProjectType, TProjectTemplates } from "@app/db/schemas";
import { TLicenseServiceFactory } from "@app/ee/services/license/license-service";
import { OrgPermissionActions, OrgPermissionSubjects } from "@app/ee/services/permission/org-permission";
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service";
import { TPermissionServiceFactory } from "@app/ee/services/permission/permission-service-types";
import { ProjectTemplateDefaultEnvironments } from "@app/ee/services/project-template/project-template-constants";
import { getDefaultProjectTemplate } from "@app/ee/services/project-template/project-template-fns";
import {
TCreateProjectTemplateDTO,
TProjectTemplateEnvironment,
TProjectTemplateRole,
TUnpackedPermission,
TUpdateProjectTemplateDTO
TProjectTemplateServiceFactory,
TUnpackedPermission
} from "@app/ee/services/project-template/project-template-types";
import { BadRequestError, NotFoundError } from "@app/lib/errors";
import { OrgServiceActor } from "@app/lib/types";
import { unpackPermissions } from "@app/server/routes/sanitizedSchema/permission";
import { getPredefinedRoles } from "@app/services/project-role/project-role-fns";
@@ -27,8 +25,6 @@ type TProjectTemplatesServiceFactoryDep = {
projectTemplateDAL: TProjectTemplateDALFactory;
};
export type TProjectTemplateServiceFactory = ReturnType<typeof projectTemplateServiceFactory>;
const $unpackProjectTemplate = ({ roles, environments, ...rest }: TProjectTemplates) => ({
...rest,
environments: environments as TProjectTemplateEnvironment[],
@@ -51,8 +47,11 @@ export const projectTemplateServiceFactory = ({
licenseService,
permissionService,
projectTemplateDAL
}: TProjectTemplatesServiceFactoryDep) => {
const listProjectTemplatesByOrg = async (actor: OrgServiceActor, type?: ProjectType) => {
}: TProjectTemplatesServiceFactoryDep): TProjectTemplateServiceFactory => {
const listProjectTemplatesByOrg: TProjectTemplateServiceFactory["listProjectTemplatesByOrg"] = async (
actor,
type
) => {
const plan = await licenseService.getPlan(actor.orgId);
if (!plan.projectTemplates)
@@ -83,7 +82,10 @@ export const projectTemplateServiceFactory = ({
];
};
const findProjectTemplateByName = async (name: string, actor: OrgServiceActor) => {
const findProjectTemplateByName: TProjectTemplateServiceFactory["findProjectTemplateByName"] = async (
name,
actor
) => {
const plan = await licenseService.getPlan(actor.orgId);
if (!plan.projectTemplates)
@@ -111,7 +113,7 @@ export const projectTemplateServiceFactory = ({
};
};
const findProjectTemplateById = async (id: string, actor: OrgServiceActor) => {
const findProjectTemplateById: TProjectTemplateServiceFactory["findProjectTemplateById"] = async (id, actor) => {
const plan = await licenseService.getPlan(actor.orgId);
if (!plan.projectTemplates)
@@ -139,9 +141,9 @@ export const projectTemplateServiceFactory = ({
};
};
const createProjectTemplate = async (
{ roles, environments, type, ...params }: TCreateProjectTemplateDTO,
actor: OrgServiceActor
const createProjectTemplate: TProjectTemplateServiceFactory["createProjectTemplate"] = async (
{ roles, environments, type, ...params },
actor
) => {
const plan = await licenseService.getPlan(actor.orgId);
@@ -195,10 +197,10 @@ export const projectTemplateServiceFactory = ({
return $unpackProjectTemplate(projectTemplate);
};
const updateProjectTemplateById = async (
id: string,
{ roles, environments, ...params }: TUpdateProjectTemplateDTO,
actor: OrgServiceActor
const updateProjectTemplateById: TProjectTemplateServiceFactory["updateProjectTemplateById"] = async (
id,
{ roles, environments, ...params },
actor
) => {
const plan = await licenseService.getPlan(actor.orgId);
@@ -259,7 +261,7 @@ export const projectTemplateServiceFactory = ({
return $unpackProjectTemplate(updatedProjectTemplate);
};
const deleteProjectTemplateById = async (id: string, actor: OrgServiceActor) => {
const deleteProjectTemplateById: TProjectTemplateServiceFactory["deleteProjectTemplateById"] = async (id, actor) => {
const plan = await licenseService.getPlan(actor.orgId);
if (!plan.projectTemplates)
@@ -1,7 +1,8 @@
import { z } from "zod";
import { ProjectType, TProjectEnvironments } from "@app/db/schemas";
import { ProjectMembershipRole, ProjectType, TProjectEnvironments } from "@app/db/schemas";
import { TProjectPermissionV2Schema } from "@app/ee/services/permission/project-permission";
import { OrgServiceActor } from "@app/lib/types";
import { UnpackedPermissionSchema } from "@app/server/routes/sanitizedSchema/permission";
export type TProjectTemplateEnvironment = Pick<TProjectEnvironments, "name" | "slug" | "position">;
@@ -27,3 +28,177 @@ export type TUnpackedPermission = z.infer<typeof UnpackedPermissionSchema>;
export enum InfisicalProjectTemplate {
Default = "default"
}
export type TProjectTemplateServiceFactory = {
listProjectTemplatesByOrg: (
actor: OrgServiceActor,
type?: ProjectType
) => Promise<
(
| {
id: string;
type: ProjectType;
name: InfisicalProjectTemplate;
createdAt: Date;
updatedAt: Date;
description: string;
environments:
| {
name: string;
slug: string;
position: number;
}[]
| null;
roles: {
name: string;
slug: ProjectMembershipRole;
permissions: {
action: string[];
subject?: string | undefined;
conditions?: unknown;
inverted?: boolean | undefined;
}[];
}[];
orgId: string;
}
| {
environments: TProjectTemplateEnvironment[];
roles: {
permissions: {
action: string[];
subject?: string | undefined;
conditions?: unknown;
inverted?: boolean | undefined;
}[];
slug: string;
name: string;
}[];
name: string;
type: string;
orgId: string;
id: string;
createdAt: Date;
updatedAt: Date;
description?: string | null | undefined;
}
)[]
>;
createProjectTemplate: (
arg: TCreateProjectTemplateDTO,
actor: OrgServiceActor
) => Promise<{
environments: TProjectTemplateEnvironment[];
roles: {
permissions: {
action: string[];
subject?: string | undefined;
conditions?: unknown;
inverted?: boolean | undefined;
}[];
slug: string;
name: string;
}[];
name: string;
type: string;
orgId: string;
id: string;
createdAt: Date;
updatedAt: Date;
description?: string | null | undefined;
}>;
updateProjectTemplateById: (
id: string,
{ roles, environments, ...params }: TUpdateProjectTemplateDTO,
actor: OrgServiceActor
) => Promise<{
environments: TProjectTemplateEnvironment[];
roles: {
permissions: {
action: string[];
subject?: string | undefined;
conditions?: unknown;
inverted?: boolean | undefined;
}[];
slug: string;
name: string;
}[];
name: string;
type: string;
orgId: string;
id: string;
createdAt: Date;
updatedAt: Date;
description?: string | null | undefined;
}>;
deleteProjectTemplateById: (
id: string,
actor: OrgServiceActor
) => Promise<{
environments: TProjectTemplateEnvironment[];
roles: {
permissions: {
action: string[];
subject?: string | undefined;
conditions?: unknown;
inverted?: boolean | undefined;
}[];
slug: string;
name: string;
}[];
name: string;
type: string;
orgId: string;
id: string;
createdAt: Date;
updatedAt: Date;
description?: string | null | undefined;
}>;
findProjectTemplateById: (
id: string,
actor: OrgServiceActor
) => Promise<{
packedRoles: TProjectTemplateRole[];
environments: TProjectTemplateEnvironment[];
roles: {
permissions: {
action: string[];
subject?: string | undefined;
conditions?: unknown;
inverted?: boolean | undefined;
}[];
slug: string;
name: string;
}[];
name: string;
type: string;
orgId: string;
id: string;
createdAt: Date;
updatedAt: Date;
description?: string | null | undefined;
}>;
findProjectTemplateByName: (
name: string,
actor: OrgServiceActor
) => Promise<{
packedRoles: TProjectTemplateRole[];
environments: TProjectTemplateEnvironment[];
roles: {
permissions: {
action: string[];
subject?: string | undefined;
conditions?: unknown;
inverted?: boolean | undefined;
}[];
slug: string;
name: string;
}[];
name: string;
type: string;
orgId: string;
id: string;
createdAt: Date;
updatedAt: Date;
description?: string | null | undefined;
}>;
};