mirror of https://github.com/buster-so/buster.git
create a versioned report
This commit is contained in:
parent
fce52b5b2b
commit
b8d5624304
|
@ -53,16 +53,13 @@ export default app;
|
|||
* This is the TypeScript equivalent of the Rust get_metric_handler
|
||||
*/
|
||||
async function getMetricHandler(
|
||||
params: GetMetricHandlerParams,
|
||||
{ metricId, ...params }: GetMetricHandlerParams,
|
||||
user: User
|
||||
): Promise<GetMetricResponse> {
|
||||
const { metricId, versionNumber, password } = params;
|
||||
|
||||
// Use shared helper to fetch and process metric data
|
||||
const processedData = await fetchAndProcessMetricData(metricId, user, {
|
||||
publicAccessPreviouslyVerified: false,
|
||||
password,
|
||||
versionNumber,
|
||||
...params,
|
||||
});
|
||||
|
||||
// Build and return the complete metric response
|
||||
|
|
|
@ -13,8 +13,8 @@ import { standardErrorHandler } from '../../../../utils/response';
|
|||
export async function getReportHandler(
|
||||
reportId: string,
|
||||
user: { id: string },
|
||||
_password?: string,
|
||||
_version_number?: number
|
||||
versionNumber?: number,
|
||||
_password?: string
|
||||
): Promise<GetReportResponse> {
|
||||
// Get report metadata for access control
|
||||
let reportData: Awaited<ReturnType<typeof getReportMetadata>>;
|
||||
|
@ -48,6 +48,7 @@ export async function getReportHandler(
|
|||
reportId,
|
||||
userId: user.id,
|
||||
permissionRole: assetPermissionResult.effectiveRole,
|
||||
versionNumber,
|
||||
});
|
||||
|
||||
const response: GetReportResponse = report;
|
||||
|
@ -63,7 +64,7 @@ const app = new Hono()
|
|||
async (c) => {
|
||||
const { id: reportId } = c.req.valid('param');
|
||||
const query = c.req.valid('query');
|
||||
const { password, version_number } = query;
|
||||
const { password, version_number: versionNumber } = query;
|
||||
const user = c.get('busterUser');
|
||||
|
||||
if (!reportId) {
|
||||
|
@ -73,8 +74,8 @@ const app = new Hono()
|
|||
const response: GetReportResponse = await getReportHandler(
|
||||
reportId,
|
||||
user,
|
||||
password,
|
||||
version_number
|
||||
versionNumber,
|
||||
password
|
||||
);
|
||||
return c.json(response);
|
||||
}
|
||||
|
|
|
@ -301,7 +301,7 @@ export async function buildMetricResponse(
|
|||
/**
|
||||
* Helper to get publicly enabled by user email
|
||||
*/
|
||||
export async function getPubliclyEnabledByUser(enabledById: string | null): Promise<string | null> {
|
||||
async function getPubliclyEnabledByUser(enabledById: string | null): Promise<string | null> {
|
||||
if (enabledById) {
|
||||
const publicEnabledByUser = await getUser({ id: enabledById });
|
||||
return publicEnabledByUser.email;
|
||||
|
|
|
@ -16,6 +16,7 @@ export const GetReportInputSchema = z.object({
|
|||
reportId: z.string().uuid('Report ID must be a valid UUID'),
|
||||
userId: z.string().uuid('User ID must be a valid UUID'),
|
||||
permissionRole: AssetPermissionRoleSchema.optional(),
|
||||
versionNumber: z.number().int().min(1).optional(),
|
||||
});
|
||||
|
||||
type GetReportInput = z.infer<typeof GetReportInputSchema>;
|
||||
|
@ -23,7 +24,7 @@ type GetReportInput = z.infer<typeof GetReportInputSchema>;
|
|||
export async function getReport(input: GetReportInput) {
|
||||
const validated = GetReportInputSchema.parse(input);
|
||||
|
||||
const { reportId, userId, permissionRole } = validated;
|
||||
const { reportId, userId, permissionRole, versionNumber } = validated;
|
||||
|
||||
const userOrg = await getUserOrganizationId(userId);
|
||||
|
||||
|
@ -150,5 +151,16 @@ export async function getReport(input: GetReportInput) {
|
|||
workspace_member_count: workspaceMemberCount,
|
||||
};
|
||||
|
||||
// if versionNumber is provided, create a versioned report
|
||||
if (versionNumber !== undefined) {
|
||||
const versionExists = reportData.version_history[versionNumber.toString()];
|
||||
if (!versionExists) {
|
||||
throw new Error(`Version ${versionNumber} not found`);
|
||||
}
|
||||
report.content = versionExists.content;
|
||||
report.version_number = versionExists.version_number;
|
||||
report.updated_at = versionExists.updated_at;
|
||||
}
|
||||
|
||||
return report;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue