* Init billing tables * Create `IBillingRepository` types * Create billing repositories * Create billingRepositoryFactory * Eslint fix - remove unused organizationOnboarding * internal-team-billing create saveTeamBilling method using repositories * On new teams write to team billing table * On new org write to org billing table * Change fields to organizationId * Add todo comment * Revert "Change fields to organizationId" This reverts commit bbb2e5dfa6b4c20a8a395f5730848a492cd70d68. * test: add comprehensive tests for team billing tables - Fix credit-service.test.ts Prisma mock to export prisma object - Replace any types with proper TypeScript types in credit-service.test.ts - Add unit tests for PrismaTeamBillingRepository covering record creation, enum casting, and error handling - Add unit tests for PrismaOrganizationBillingRepository with same coverage - Add unit tests for BillingRepositoryFactory to verify correct repository selection - Add unit tests for InternalTeamBilling.saveTeamBilling() method testing delegation to correct repositories - All 53 tests pass with TZ=UTC yarn test - Type checking passes with yarn type-check:ci --force Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * refactor: update saveTeamBilling tests to mock repository interface - Replace prismaMock usage with BillingRepositoryFactory mock - Mock IBillingRepository interface instead of Prisma directly - Follow repository mocking pattern from handleResponse.test.ts - All tests passing (53 total) Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * Remove log statement * Remove repository tests * Address feedback --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
27 lines
699 B
TypeScript
27 lines
699 B
TypeScript
import type { PrismaClient } from "@calcom/prisma";
|
|
|
|
import {
|
|
IBillingRepository,
|
|
IBillingRepositoryCreateArgs,
|
|
BillingRecord,
|
|
Plan,
|
|
SubscriptionStatus,
|
|
} from "./IBillingRepository";
|
|
|
|
export class PrismaOrganizationBillingRepository implements IBillingRepository {
|
|
constructor(private readonly prismaClient: PrismaClient) {}
|
|
async create(args: IBillingRepositoryCreateArgs): Promise<BillingRecord> {
|
|
const billingRecord = await this.prismaClient.organizationBilling.create({
|
|
data: {
|
|
...args,
|
|
},
|
|
});
|
|
|
|
return {
|
|
...billingRecord,
|
|
planName: billingRecord.planName as Plan,
|
|
status: billingRecord.status as SubscriptionStatus,
|
|
};
|
|
}
|
|
}
|