mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-06 01:15:28 +02:00
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import type { Db } from '../../db/db';
|
|
import type {
|
|
Collaborator,
|
|
IFeatureCollaboratorsReadModel,
|
|
} from './types/feature-collaborators-read-model-type';
|
|
import { generateImageUrl } from '../../util';
|
|
|
|
export class FeatureCollaboratorsReadModel
|
|
implements IFeatureCollaboratorsReadModel
|
|
{
|
|
private db: Db;
|
|
|
|
constructor(db: Db) {
|
|
this.db = db;
|
|
}
|
|
|
|
async getFeatureCollaborators(
|
|
feature: string,
|
|
): Promise<Array<Collaborator>> {
|
|
const query = this.db
|
|
.with('recent_events', (queryBuilder) => {
|
|
queryBuilder
|
|
.select('created_by_user_id')
|
|
.max('created_at as max_created_at')
|
|
.from('events')
|
|
.where('feature_name', feature)
|
|
.groupBy('created_by_user_id');
|
|
})
|
|
.select('users.id', 'users.email', 'users.username', 'users.name')
|
|
.from('recent_events')
|
|
.join('users', 'recent_events.created_by_user_id', 'users.id')
|
|
.orderBy('recent_events.max_created_at', 'desc');
|
|
|
|
const rows = await query;
|
|
|
|
return rows.map((row) => {
|
|
const name = row.name || row.username || row.email || 'unknown';
|
|
return {
|
|
id: row.id,
|
|
name: name,
|
|
imageUrl: generateImageUrl({
|
|
id: row.id,
|
|
email: row.email,
|
|
username: name,
|
|
}),
|
|
};
|
|
});
|
|
}
|
|
}
|