This commit is contained in:
carlosmonastyrski
2025-05-06 08:11:50 -03:00
parent c6e56f0380
commit 32a3e1d200
17 changed files with 895 additions and 28 deletions
@@ -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
};
};