/** * Copyright (c) 2021 Gitpod GmbH. All rights reserved. * Licensed under the GNU Affero General Public License (AGPL). * See License.AGPL.txt in the project root for license information. */ import { AccountEntry, Subscription, SubscriptionAndUser, Credit, } from "@gitpod/gitpod-protocol/lib/accounting-protocol"; import { DBSubscriptionAdditionalData } from "./typeorm/entity/db-subscription"; import { EntityManager } from "typeorm"; export const TransactionalAccountingDBFactory = Symbol("TransactionalAccountingDBFactory"); export interface TransactionalAccountingDBFactory { (manager: EntityManager): AccountingDB; } export const AccountingDB = Symbol("AccountingDB"); export interface AccountingDB { newAccountEntry(entry: Omit): Promise; storeAccountEntry(AccountEntry: AccountEntry): void; findAccountEntriesFor(userId: string, fromDate: string, toDate: string): Promise; findOpenCredits(userId: string, date: string): Promise; newSubscription(subscription: Omit): Promise; storeSubscription(subscription: Subscription): Promise; findSubscriptionById(id: string): Promise; deleteSubscription(subscription: Subscription): Promise; findActiveSubscriptions(fromDate: string, toDate: string): Promise; findActiveSubscriptionsForUser(userId: string, fromDate: string): Promise; findActiveSubscriptionsByIdentity( authId: string[], authProvider: string, ): Promise<{ [authId: string]: SubscriptionAndUser[] }>; findActiveSubscriptionByPlanID(planID: string, date: string): Promise; findAllSubscriptionsForUser(userId: string): Promise; findSubscriptionsForUserInPeriod(userId: string, fromDate: string, toDate: string): Promise; findNotYetCancelledSubscriptions(userId: string, date: string): Promise; findSubscriptionForUserByPaymentRef(userId: string, paymentReference: string): Promise; findSubscriptionsByTeamSubscriptionSlotId(teamSubscriptionSlotId: string): Promise; hadSubscriptionCreatedWithCoupon(userId: string, coupon: string): Promise; findSubscriptionAdditionalData(paymentReference: string): Promise; transaction( closure: (db: AccountingDB) => Promise, closures?: ((manager: EntityManager) => Promise)[], ): Promise; storeSubscriptionAdditionalData( subscriptionData: DBSubscriptionAdditionalData, ): Promise; }