mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Billing for formula assistant
Summary: Adding limits for AI calls and connecting those limits with a Stripe Account. - New table in homedb called `limits` - All calls to the AI are not routed through DocApi and measured. - All products now contain a special key `assistantLimit`, with a default value 0 - Limit is reset every time the subscription has changed its period - The billing page is updated with two new options that describe the AI plan - There is a new popup that allows the user to upgrade to a higher plan - Tiers are read directly from the Stripe product with a volume pricing model Test Plan: Updated and added Reviewers: georgegevoian, paulfitz Reviewed By: georgegevoian Subscribers: dsagal Differential Revision: https://phab.getgrist.com/D3907
This commit is contained in:
46
app/gen-server/entity/Limit.ts
Normal file
46
app/gen-server/entity/Limit.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import {BaseEntity, Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn} from 'typeorm';
|
||||
import {BillingAccount} from 'app/gen-server/entity/BillingAccount';
|
||||
import {nativeValues} from 'app/gen-server/lib/values';
|
||||
|
||||
@Entity('limits')
|
||||
export class Limit extends BaseEntity {
|
||||
@PrimaryGeneratedColumn()
|
||||
public id: number;
|
||||
|
||||
@Column()
|
||||
public limit: number;
|
||||
|
||||
@Column()
|
||||
public usage: number;
|
||||
|
||||
@Column()
|
||||
public type: string;
|
||||
|
||||
@Column({name: 'billing_account_id'})
|
||||
public billingAccountId: number;
|
||||
|
||||
@ManyToOne(type => BillingAccount)
|
||||
@JoinColumn({name: 'billing_account_id'})
|
||||
public billingAccount: BillingAccount;
|
||||
|
||||
@Column({name: 'created_at', default: () => "CURRENT_TIMESTAMP"})
|
||||
public createdAt: Date;
|
||||
|
||||
/**
|
||||
* Last time the Limit.limit value was changed, by an upgrade or downgrade. Null if it has never been changed.
|
||||
*/
|
||||
@Column({name: 'changed_at', type: nativeValues.dateTimeType, nullable: true})
|
||||
public changedAt: Date|null;
|
||||
|
||||
/**
|
||||
* Last time the Limit.usage was used (by sending a request to the model). Null if it has never been used.
|
||||
*/
|
||||
@Column({name: 'used_at', type: nativeValues.dateTimeType, nullable: true})
|
||||
public usedAt: Date|null;
|
||||
|
||||
/**
|
||||
* Last time the Limit.usage was reset, probably by billing cycle change. Null if it has never been reset.
|
||||
*/
|
||||
@Column({name: 'reset_at', type: nativeValues.dateTimeType, nullable: true})
|
||||
public resetAt: Date|null;
|
||||
}
|
||||
Reference in New Issue
Block a user