Browse Source

Add asset profile split service

pull/7251/head
Thomas Kaul 4 weeks ago
parent
commit
6438f522e6
  1. 12
      apps/api/src/services/asset-profile-split/asset-profile-split.module.ts
  2. 89
      apps/api/src/services/asset-profile-split/asset-profile-split.service.ts

12
apps/api/src/services/asset-profile-split/asset-profile-split.module.ts

@ -0,0 +1,12 @@
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { Module } from '@nestjs/common';
import { AssetProfileSplitService } from './asset-profile-split.service';
@Module({
exports: [AssetProfileSplitService],
imports: [PrismaModule],
providers: [AssetProfileSplitService]
})
export class AssetProfileSplitModule {}

89
apps/api/src/services/asset-profile-split/asset-profile-split.service.ts

@ -0,0 +1,89 @@
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { resetHours } from '@ghostfolio/common/helper';
import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces';
import { Injectable } from '@nestjs/common';
import { AssetProfileSplit } from '@prisma/client';
@Injectable()
export class AssetProfileSplitService {
public constructor(private readonly prismaService: PrismaService) {}
/**
* Deletes the split with the given id of an asset profile and returns
* whether it existed
*/
public async deleteById({
id,
symbolProfileId
}: {
id: string;
symbolProfileId: string;
}) {
const { count } = await this.prismaService.assetProfileSplit.deleteMany({
where: {
id,
symbolProfileId
}
});
return count > 0;
}
public async getSplits({
assetProfileIdentifiers
}: {
assetProfileIdentifiers: AssetProfileIdentifier[];
}): Promise<AssetProfileSplit[]> {
if (assetProfileIdentifiers.length === 0) {
return [];
}
return this.prismaService.assetProfileSplit.findMany({
orderBy: [
{
date: 'asc'
}
],
where: {
symbolProfile: {
OR: assetProfileIdentifiers.map(({ dataSource, symbol }) => {
return {
dataSource,
symbol
};
})
}
}
});
}
public async upsert({
date,
factor,
symbolProfileId
}: {
date: Date;
factor: number;
symbolProfileId: string;
}): Promise<AssetProfileSplit> {
const dateOfSplit = resetHours(date);
return this.prismaService.assetProfileSplit.upsert({
create: {
factor,
symbolProfileId,
date: dateOfSplit
},
update: {
factor
},
where: {
symbolProfileId_date: {
symbolProfileId,
date: dateOfSplit
}
}
});
}
}
Loading…
Cancel
Save