1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-11-10 01:19:53 +01:00
unleash.unleash/src/lib/features/change-request-segment-usage-service/sql-change-request-segment-usage-read-model.ts
Christopher Kolstad 53354224fc
chore: Bump biome and configure husky (#6589)
Upgrades biome to 1.6.1, and updates husky pre-commit hook.

Most changes here are making type imports explicit.
2024-03-18 13:58:05 +01:00

48 lines
1.6 KiB
TypeScript

import type { Db } from '../../db/db';
import type {
ChangeRequestStrategy,
IChangeRequestSegmentUsageReadModel,
} from './change-request-segment-usage-read-model';
export class ChangeRequestSegmentUsageReadModel
implements IChangeRequestSegmentUsageReadModel
{
private db: Db;
constructor(db: Db) {
this.db = db;
}
public async getStrategiesUsedInActiveChangeRequests(
segmentId: number,
): Promise<ChangeRequestStrategy[]> {
const query = this.db.raw(
`SELECT events.*, cr.project, cr.environment, cr.title
FROM change_request_events events
JOIN change_requests cr ON events.change_request_id = cr.id
WHERE cr.state NOT IN ('Applied', 'Cancelled', 'Rejected')
AND events.action IN ('updateStrategy', 'addStrategy');`,
);
const queryResult = await query;
const strategies = queryResult.rows
.filter((row) => row.payload?.segments?.includes(segmentId))
.map((row) => {
const { payload, project, environment, feature } = row;
return {
projectId: project,
featureName: feature,
environment: environment,
strategyName: payload.name,
...(payload.id ? { id: payload.id } : {}),
changeRequest: {
id: row.change_request_id,
title: row.title || null,
},
};
});
return strategies;
}
}