mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-17 21:58:52 +00:00
commit
This commit is contained in:
+131
@@ -0,0 +1,131 @@
|
||||
import { Knex } from "knex";
|
||||
|
||||
import { TDbClient } from "@app/db";
|
||||
import {
|
||||
TableName,
|
||||
TEnvironments,
|
||||
TFolderTreeCheckpointResources,
|
||||
TFolderTreeCheckpoints,
|
||||
TSecretFolders
|
||||
} from "@app/db/schemas";
|
||||
import { DatabaseError } from "@app/lib/errors";
|
||||
import { ormify, selectAllTableCols } from "@app/lib/knex";
|
||||
|
||||
export type TFolderTreeCheckpointResourcesDALFactory = ReturnType<typeof folderTreeCheckpointResourcesDALFactory>;
|
||||
|
||||
type ResourceWithCheckpointInfo = TFolderTreeCheckpointResources & {
|
||||
folderCommitId: string;
|
||||
date: Date;
|
||||
};
|
||||
|
||||
type ResourceWithFolderInfo = TFolderTreeCheckpointResources & {
|
||||
name: string;
|
||||
parentId: string | null;
|
||||
slug: string;
|
||||
envName: string;
|
||||
};
|
||||
|
||||
export const folderTreeCheckpointResourcesDALFactory = (db: TDbClient) => {
|
||||
const folderTreeCheckpointResourcesOrm = ormify<TFolderTreeCheckpointResources>(
|
||||
db,
|
||||
TableName.FolderTreeCheckpointResources
|
||||
);
|
||||
|
||||
const findByTreeCheckpointId = async (
|
||||
folderTreeCheckpointId: string,
|
||||
tx?: Knex
|
||||
): Promise<TFolderTreeCheckpointResources[]> => {
|
||||
try {
|
||||
const docs = await (tx || db.replicaNode())<TFolderTreeCheckpointResources>(
|
||||
TableName.FolderTreeCheckpointResources
|
||||
)
|
||||
.where({ folderTreeCheckpointId })
|
||||
.select(selectAllTableCols(TableName.FolderTreeCheckpointResources));
|
||||
return docs;
|
||||
} catch (error) {
|
||||
throw new DatabaseError({ error, name: "FindByTreeCheckpointId" });
|
||||
}
|
||||
};
|
||||
|
||||
const findByFolderId = async (folderId: string, tx?: Knex): Promise<ResourceWithCheckpointInfo[]> => {
|
||||
try {
|
||||
const docs = await (tx || db.replicaNode())<
|
||||
TFolderTreeCheckpointResources & Pick<TFolderTreeCheckpoints, "folderCommitId" | "date">
|
||||
>(TableName.FolderTreeCheckpointResources)
|
||||
.where({ folderId })
|
||||
.select(selectAllTableCols(TableName.FolderTreeCheckpointResources))
|
||||
.join(
|
||||
TableName.FolderTreeCheckpoint,
|
||||
`${TableName.FolderTreeCheckpointResources}.folderTreeCheckpointId`,
|
||||
`${TableName.FolderTreeCheckpoint}.id`
|
||||
)
|
||||
.select(
|
||||
db.ref("folderCommitId").withSchema(TableName.FolderTreeCheckpoint),
|
||||
db.ref("date").withSchema(TableName.FolderTreeCheckpoint)
|
||||
);
|
||||
return docs;
|
||||
} catch (error) {
|
||||
throw new DatabaseError({ error, name: "FindByFolderId" });
|
||||
}
|
||||
};
|
||||
|
||||
const findByFolderCommitId = async (
|
||||
folderCommitId: string,
|
||||
tx?: Knex
|
||||
): Promise<(TFolderTreeCheckpointResources & { date: Date })[]> => {
|
||||
try {
|
||||
const docs = await (tx || db.replicaNode())<
|
||||
TFolderTreeCheckpointResources & Pick<TFolderTreeCheckpoints, "date">
|
||||
>(TableName.FolderTreeCheckpointResources)
|
||||
.where({ folderCommitId })
|
||||
.select(selectAllTableCols(TableName.FolderTreeCheckpointResources))
|
||||
.join(
|
||||
TableName.FolderTreeCheckpoint,
|
||||
`${TableName.FolderTreeCheckpointResources}.folderTreeCheckpointId`,
|
||||
`${TableName.FolderTreeCheckpoint}.id`
|
||||
)
|
||||
.select(db.ref("date").withSchema(TableName.FolderTreeCheckpoint));
|
||||
return docs;
|
||||
} catch (error) {
|
||||
throw new DatabaseError({ error, name: "FindByFolderCommitId" });
|
||||
}
|
||||
};
|
||||
|
||||
const findFoldersInTreeCheckpoint = async (
|
||||
folderTreeCheckpointId: string,
|
||||
tx?: Knex
|
||||
): Promise<ResourceWithFolderInfo[]> => {
|
||||
try {
|
||||
const docs = await (tx || db.replicaNode())<
|
||||
TFolderTreeCheckpointResources &
|
||||
Pick<TSecretFolders, "name" | "parentId"> &
|
||||
Pick<TEnvironments, "slug"> & { envName: string }
|
||||
>(TableName.FolderTreeCheckpointResources)
|
||||
.where({ folderTreeCheckpointId })
|
||||
.select(selectAllTableCols(TableName.FolderTreeCheckpointResources))
|
||||
.join(
|
||||
TableName.SecretFolder,
|
||||
`${TableName.FolderTreeCheckpointResources}.folderId`,
|
||||
`${TableName.SecretFolder}.id`
|
||||
)
|
||||
.join(TableName.Environment, `${TableName.SecretFolder}.envId`, `${TableName.Environment}.id`)
|
||||
.select(
|
||||
db.ref("name").withSchema(TableName.SecretFolder),
|
||||
db.ref("parentId").withSchema(TableName.SecretFolder),
|
||||
db.ref("slug").withSchema(TableName.Environment),
|
||||
db.ref("name").withSchema(TableName.Environment).as("envName")
|
||||
);
|
||||
return docs;
|
||||
} catch (error) {
|
||||
throw new DatabaseError({ error, name: "FindFoldersInTreeCheckpoint" });
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
...folderTreeCheckpointResourcesOrm,
|
||||
findByTreeCheckpointId,
|
||||
findByFolderId,
|
||||
findByFolderCommitId,
|
||||
findFoldersInTreeCheckpoint
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user