feat: implement billing, usage tracking, and administrative geocoding features in API with infrastructure updates
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
export declare enum SubscriptionStatus {
|
||||
ACTIVE = "ACTIVE",
|
||||
PAST_DUE = "PAST_DUE",
|
||||
CANCELED = "CANCELED",
|
||||
TRIALING = "TRIALING"
|
||||
}
|
||||
export declare class Subscription {
|
||||
id: string;
|
||||
tenantId: string;
|
||||
plan: string;
|
||||
status: SubscriptionStatus;
|
||||
monthlyRequestLimit: number;
|
||||
currentPeriodStart: Date;
|
||||
currentPeriodEnd: Date;
|
||||
canceledAt: Date;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Subscription = exports.SubscriptionStatus = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
var SubscriptionStatus;
|
||||
(function (SubscriptionStatus) {
|
||||
SubscriptionStatus["ACTIVE"] = "ACTIVE";
|
||||
SubscriptionStatus["PAST_DUE"] = "PAST_DUE";
|
||||
SubscriptionStatus["CANCELED"] = "CANCELED";
|
||||
SubscriptionStatus["TRIALING"] = "TRIALING";
|
||||
})(SubscriptionStatus || (exports.SubscriptionStatus = SubscriptionStatus = {}));
|
||||
let Subscription = class Subscription {
|
||||
id;
|
||||
tenantId;
|
||||
plan;
|
||||
status;
|
||||
monthlyRequestLimit;
|
||||
currentPeriodStart;
|
||||
currentPeriodEnd;
|
||||
canceledAt;
|
||||
createdAt;
|
||||
updatedAt;
|
||||
};
|
||||
exports.Subscription = Subscription;
|
||||
__decorate([
|
||||
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
||||
__metadata("design:type", String)
|
||||
], Subscription.prototype, "id", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Index)(),
|
||||
(0, typeorm_1.Column)(),
|
||||
__metadata("design:type", String)
|
||||
], Subscription.prototype, "tenantId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ default: 'FREE' }),
|
||||
__metadata("design:type", String)
|
||||
], Subscription.prototype, "plan", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({
|
||||
type: 'enum',
|
||||
enum: SubscriptionStatus,
|
||||
default: SubscriptionStatus.ACTIVE,
|
||||
}),
|
||||
__metadata("design:type", String)
|
||||
], Subscription.prototype, "status", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ type: 'int', default: 8000 }),
|
||||
__metadata("design:type", Number)
|
||||
], Subscription.prototype, "monthlyRequestLimit", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ type: 'timestamp', nullable: true }),
|
||||
__metadata("design:type", Date)
|
||||
], Subscription.prototype, "currentPeriodStart", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ type: 'timestamp', nullable: true }),
|
||||
__metadata("design:type", Date)
|
||||
], Subscription.prototype, "currentPeriodEnd", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ type: 'timestamp', nullable: true }),
|
||||
__metadata("design:type", Date)
|
||||
], Subscription.prototype, "canceledAt", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.CreateDateColumn)(),
|
||||
__metadata("design:type", Date)
|
||||
], Subscription.prototype, "createdAt", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.UpdateDateColumn)(),
|
||||
__metadata("design:type", Date)
|
||||
], Subscription.prototype, "updatedAt", void 0);
|
||||
exports.Subscription = Subscription = __decorate([
|
||||
(0, typeorm_1.Entity)('subscriptions')
|
||||
], Subscription);
|
||||
//# sourceMappingURL=subscription.entity.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"subscription.entity.js","sourceRoot":"","sources":["../../../src/billing/entities/subscription.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAQiB;AAGjB,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,uCAAiB,CAAA;IACjB,2CAAqB,CAAA;IACrB,2CAAqB,CAAA;IACrB,2CAAqB,CAAA;AACvB,CAAC,EALW,kBAAkB,kCAAlB,kBAAkB,QAK7B;AAGM,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEvB,EAAE,CAAS;IAIX,QAAQ,CAAS;IAGjB,IAAI,CAAS;IAOb,MAAM,CAAqB;IAG3B,mBAAmB,CAAS;IAG5B,kBAAkB,CAAO;IAGzB,gBAAgB,CAAO;IAGvB,UAAU,CAAO;IAGjB,SAAS,CAAO;IAGhB,SAAS,CAAO;CACjB,CAAA;AAnCY,oCAAY;AAEvB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;wCACpB;AAIX;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,GAAE;;8CACQ;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;;0CACf;AAOb;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,kBAAkB,CAAC,MAAM;KACnC,CAAC;;4CACyB;AAG3B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;yDACX;AAG5B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAC1B,IAAI;wDAAC;AAGzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAC5B,IAAI;sDAAC;AAGvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAClC,IAAI;gDAAC;AAGjB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;+CAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;+CAAC;uBAlCL,YAAY;IADxB,IAAA,gBAAM,EAAC,eAAe,CAAC;GACX,YAAY,CAmCxB"}
|
||||
@@ -0,0 +1,23 @@
|
||||
export declare enum PaymentStatus {
|
||||
PENDING = "PENDING",
|
||||
SUCCESS = "SUCCESS",
|
||||
FAILED = "FAILED",
|
||||
REFUNDED = "REFUNDED"
|
||||
}
|
||||
export declare enum PaymentProvider {
|
||||
PAYMOB = "PAYMOB",
|
||||
BINANCE = "BINANCE",
|
||||
MANUAL = "MANUAL"
|
||||
}
|
||||
export declare class Transaction {
|
||||
id: string;
|
||||
tenantId: string;
|
||||
subscriptionId: string;
|
||||
amount: number;
|
||||
currency: string;
|
||||
provider: PaymentProvider;
|
||||
externalTransactionId: string;
|
||||
status: PaymentStatus;
|
||||
metadata: Record<string, any>;
|
||||
createdAt: Date;
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
"use strict";
|
||||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
||||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
||||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
||||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
||||
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
||||
};
|
||||
var __metadata = (this && this.__metadata) || function (k, v) {
|
||||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Transaction = exports.PaymentProvider = exports.PaymentStatus = void 0;
|
||||
const typeorm_1 = require("typeorm");
|
||||
var PaymentStatus;
|
||||
(function (PaymentStatus) {
|
||||
PaymentStatus["PENDING"] = "PENDING";
|
||||
PaymentStatus["SUCCESS"] = "SUCCESS";
|
||||
PaymentStatus["FAILED"] = "FAILED";
|
||||
PaymentStatus["REFUNDED"] = "REFUNDED";
|
||||
})(PaymentStatus || (exports.PaymentStatus = PaymentStatus = {}));
|
||||
var PaymentProvider;
|
||||
(function (PaymentProvider) {
|
||||
PaymentProvider["PAYMOB"] = "PAYMOB";
|
||||
PaymentProvider["BINANCE"] = "BINANCE";
|
||||
PaymentProvider["MANUAL"] = "MANUAL";
|
||||
})(PaymentProvider || (exports.PaymentProvider = PaymentProvider = {}));
|
||||
let Transaction = class Transaction {
|
||||
id;
|
||||
tenantId;
|
||||
subscriptionId;
|
||||
amount;
|
||||
currency;
|
||||
provider;
|
||||
externalTransactionId;
|
||||
status;
|
||||
metadata;
|
||||
createdAt;
|
||||
};
|
||||
exports.Transaction = Transaction;
|
||||
__decorate([
|
||||
(0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
|
||||
__metadata("design:type", String)
|
||||
], Transaction.prototype, "id", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Index)(),
|
||||
(0, typeorm_1.Column)(),
|
||||
__metadata("design:type", String)
|
||||
], Transaction.prototype, "tenantId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], Transaction.prototype, "subscriptionId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ type: 'decimal', precision: 10, scale: 2 }),
|
||||
__metadata("design:type", Number)
|
||||
], Transaction.prototype, "amount", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ default: 'USD' }),
|
||||
__metadata("design:type", String)
|
||||
], Transaction.prototype, "currency", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({
|
||||
type: 'enum',
|
||||
enum: PaymentProvider,
|
||||
}),
|
||||
__metadata("design:type", String)
|
||||
], Transaction.prototype, "provider", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Index)(),
|
||||
(0, typeorm_1.Column)({ nullable: true }),
|
||||
__metadata("design:type", String)
|
||||
], Transaction.prototype, "externalTransactionId", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({
|
||||
type: 'enum',
|
||||
enum: PaymentStatus,
|
||||
default: PaymentStatus.PENDING,
|
||||
}),
|
||||
__metadata("design:type", String)
|
||||
], Transaction.prototype, "status", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
|
||||
__metadata("design:type", Object)
|
||||
], Transaction.prototype, "metadata", void 0);
|
||||
__decorate([
|
||||
(0, typeorm_1.CreateDateColumn)(),
|
||||
__metadata("design:type", Date)
|
||||
], Transaction.prototype, "createdAt", void 0);
|
||||
exports.Transaction = Transaction = __decorate([
|
||||
(0, typeorm_1.Entity)('transactions')
|
||||
], Transaction);
|
||||
//# sourceMappingURL=transaction.entity.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"transaction.entity.js","sourceRoot":"","sources":["../../../src/billing/entities/transaction.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAMiB;AAEjB,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;IACnB,kCAAiB,CAAA;IACjB,sCAAqB,CAAA;AACvB,CAAC,EALW,aAAa,6BAAb,aAAa,QAKxB;AAED,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,oCAAiB,CAAA;AACnB,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B;AAGM,IAAM,WAAW,GAAjB,MAAM,WAAW;IAEtB,EAAE,CAAS;IAIX,QAAQ,CAAS;IAGjB,cAAc,CAAS;IAGvB,MAAM,CAAS;IAGf,QAAQ,CAAS;IAMjB,QAAQ,CAAkB;IAI1B,qBAAqB,CAAS;IAO9B,MAAM,CAAgB;IAGtB,QAAQ,CAAsB;IAG9B,SAAS,CAAO;CACjB,CAAA;AAvCY,kCAAW;AAEtB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;uCACpB;AAIX;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,GAAE;;6CACQ;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACJ;AAGvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;;2CACtC;AAGf;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;6CACV;AAMjB;IAJC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,eAAe;KACtB,CAAC;;6CACwB;AAI1B;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DACG;AAO9B;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B,CAAC;;2CACoB;AAGtB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACZ;AAG9B;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;8CAAC;sBAtCL,WAAW;IADvB,IAAA,gBAAM,EAAC,cAAc,CAAC;GACV,WAAW,CAuCvB"}
|
||||
Reference in New Issue
Block a user