🚀 Initialize Musadaq SaaS: Full Backend + AI + React Dashboard + Docker Setup
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
/**
|
||||
* ════════════════════════════════════════════════════════════
|
||||
* مُصادَق (Musadaq) — Subscription Entity
|
||||
* ════════════════════════════════════════════════════════════
|
||||
*/
|
||||
|
||||
import {
|
||||
Entity,
|
||||
PrimaryGeneratedColumn,
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
UpdateDateColumn,
|
||||
ManyToOne,
|
||||
JoinColumn,
|
||||
} from 'typeorm';
|
||||
import { Tenant } from '../../tenants/entities/tenant.entity';
|
||||
|
||||
export enum SubscriptionPlan {
|
||||
BASIC = 'basic',
|
||||
OFFICE = 'office',
|
||||
PRO = 'pro',
|
||||
ENTERPRISE = 'enterprise',
|
||||
}
|
||||
|
||||
export enum SubscriptionStatus {
|
||||
ACTIVE = 'active',
|
||||
PAST_DUE = 'past_due',
|
||||
CANCELLED = 'cancelled',
|
||||
}
|
||||
|
||||
@Entity('subscriptions')
|
||||
export class Subscription {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id!: string;
|
||||
|
||||
@Column({ name: 'tenant_id', type: 'uuid' })
|
||||
tenant_id!: string;
|
||||
|
||||
@ManyToOne(() => Tenant, (tenant) => tenant.subscriptions, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'tenant_id' })
|
||||
tenant!: Tenant;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: SubscriptionPlan,
|
||||
})
|
||||
plan!: SubscriptionPlan;
|
||||
|
||||
@Column({ type: 'int' })
|
||||
max_companies!: number;
|
||||
|
||||
@Column({ type: 'int' })
|
||||
max_invoices_per_month!: number;
|
||||
|
||||
@Column({ type: 'decimal', precision: 10, scale: 2 })
|
||||
price_jod!: number;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: ['monthly', 'annual'],
|
||||
default: 'monthly',
|
||||
})
|
||||
billing_cycle!: string;
|
||||
|
||||
@Column({ type: 'timestamp', nullable: true })
|
||||
current_period_start?: Date;
|
||||
|
||||
@Column({ type: 'timestamp', nullable: true })
|
||||
current_period_end?: Date;
|
||||
|
||||
@Column({ type: 'int', default: 0 })
|
||||
invoices_used_this_month!: number;
|
||||
|
||||
@Column({
|
||||
type: 'enum',
|
||||
enum: SubscriptionStatus,
|
||||
default: SubscriptionStatus.ACTIVE,
|
||||
})
|
||||
status!: SubscriptionStatus;
|
||||
|
||||
@CreateDateColumn({ type: 'timestamp' })
|
||||
created_at!: Date;
|
||||
|
||||
@UpdateDateColumn({ type: 'timestamp' })
|
||||
updated_at!: Date;
|
||||
}
|
||||
Reference in New Issue
Block a user