Skip to content

Commit 6d8ceae

Browse files
add logic to find filesize
1 parent f6e5c26 commit 6d8ceae

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

src/models/releaseFactory.ts

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
import { Collection, Db } from 'mongodb';
2-
import { ReleaseDBScheme } from '@hawk.so/types';
1+
import { Collection, Db, ObjectId } from 'mongodb';
2+
import { ReleaseDBScheme, SourceMapFileChunk } from '@hawk.so/types';
33
import DataLoaders from '../dataLoaders';
44

5+
interface ReleaseWithFileDetails extends ReleaseDBScheme {
6+
fileDetails?: SourceMapFileChunk[];
7+
}
8+
59
export default class ReleasesFactory {
610
/**
711
* Releases collection
@@ -37,12 +41,54 @@ export default class ReleasesFactory {
3741
}
3842

3943
/**
40-
* Get releases by project identifier
44+
* Get releases by project identifier with file sizes
4145
* @param projectId - project identifier
4246
*/
4347
public async findManyByProjectId(projectId: string): Promise<ReleaseDBScheme[]> {
4448
try {
45-
return await this.collection.find({ projectId: projectId }).toArray();
49+
const releases = await this.collection.aggregate<ReleaseWithFileDetails>([
50+
{
51+
$match: {
52+
projectId: projectId
53+
}
54+
},
55+
{
56+
$lookup: {
57+
from: 'releases.files',
58+
let: { fileIds: '$files._id' },
59+
pipeline: [
60+
{
61+
$match: {
62+
$expr: {
63+
$in: ['$_id', '$$fileIds']
64+
}
65+
}
66+
},
67+
{
68+
$project: {
69+
_id: 1,
70+
length: 1,
71+
chunkSize: 1
72+
}
73+
}
74+
],
75+
as: 'fileDetails'
76+
}
77+
}
78+
]).toArray();
79+
80+
return releases.map(release => ({
81+
...release,
82+
files: release.files?.map(file => {
83+
const fileDetail = release.fileDetails?.find(
84+
(detail: SourceMapFileChunk) => detail._id.toString() === file._id?.toString()
85+
);
86+
return {
87+
...file,
88+
size: fileDetail ? fileDetail.length : 0
89+
};
90+
})
91+
}));
4692
} catch (error) {
4793
console.error(`[ReleasesFactory] Error in findManyByProjectId:`, error);
4894
throw error;

src/typeDefs/event.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ type SourceMapData {
2929
Original source filename
3030
"""
3131
originFileName: String!
32+
33+
"""
34+
File size in bytes
35+
"""
36+
size: Int!
3237
}
3338
3439
"""

0 commit comments

Comments
 (0)