diff --git a/database/schema.sql b/database/schema.sql index baeab98..692bc65 100644 --- a/database/schema.sql +++ b/database/schema.sql @@ -149,7 +149,7 @@ CREATE INDEX IF NOT EXISTS idx_tbl_revenue_segments_tenant ON masters.tbl_revenu CREATE TABLE IF NOT EXISTS masters.tbl_rules_categories ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), "tenantId" UUID NOT NULL REFERENCES tenant.tbl_tenants(id) ON DELETE CASCADE, - code VARCHAR(100) UNIQUE NOT NULL, + code VARCHAR(100) NOT NULL, name VARCHAR(150) NOT NULL, description TEXT, "displayOrder" INT DEFAULT 0, @@ -158,6 +158,8 @@ CREATE TABLE IF NOT EXISTS masters.tbl_rules_categories ( "updatedAt" TIMESTAMP NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_tbl_rules_categories_tenant ON masters.tbl_rules_categories("tenantId"); +CREATE UNIQUE INDEX IF NOT EXISTS uq_tbl_rules_categories_tenant_code + ON masters.tbl_rules_categories("tenantId", code); CREATE TABLE IF NOT EXISTS masters.tbl_rule_categories_values ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), @@ -176,7 +178,7 @@ CREATE INDEX IF NOT EXISTS idx_tbl_rule_categories_values_category ON masters.tb CREATE TABLE IF NOT EXISTS masters.tbl_operators ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), "tenantId" UUID NOT NULL REFERENCES tenant.tbl_tenants(id) ON DELETE CASCADE, - code VARCHAR(50) UNIQUE NOT NULL, + code VARCHAR(50) NOT NULL, name VARCHAR(100) NOT NULL, symbol VARCHAR(20), "dataTypes" TEXT[], @@ -186,6 +188,8 @@ CREATE TABLE IF NOT EXISTS masters.tbl_operators ( "updatedAt" TIMESTAMP NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_tbl_operators_tenant ON masters.tbl_operators("tenantId"); +CREATE UNIQUE INDEX IF NOT EXISTS uq_tbl_operators_tenant_code + ON masters.tbl_operators("tenantId", code); -- ─── Cohorts ──────────────────────────────────────────────────────────────── diff --git a/src/common/entities/tenant-owned.entity.ts b/src/common/entities/tenant-owned.entity.ts index 74bddb8..d17b632 100644 --- a/src/common/entities/tenant-owned.entity.ts +++ b/src/common/entities/tenant-owned.entity.ts @@ -4,9 +4,9 @@ import { Tenant } from '../../modules/tenant/tenant.entity'; export abstract class TenantOwnedEntity { @Column({ type: 'uuid' }) @Index() - tenantId: string; + tenantId!: string; @ManyToOne(() => Tenant, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'tenantId' }) - tenant: Tenant; + tenant!: Tenant; } diff --git a/src/modules/cohort/cohort.entity.ts b/src/modules/cohort/cohort.entity.ts index 3ef1273..9bfd82f 100644 --- a/src/modules/cohort/cohort.entity.ts +++ b/src/modules/cohort/cohort.entity.ts @@ -11,101 +11,101 @@ import { TripPurpose } from '../master-data/entities/trip-purpose.entity'; @Entity({ name: 'tbl_cohorts', schema: 'cohort' }) export class Cohort extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column({ nullable: true }) - scopeType: string; + scopeType!: string; @Column() - name: string; + name!: string; @Column({ nullable: true }) - description: string; + description!: string; @Column({ default: 'Draft' }) - status: string; // Draft, Active, Inactive + status!: string; // Draft, Active, Inactive // Passenger Attributes @ManyToMany(() => CabinClass) - @JoinTable({ + @JoinTable({ name: 'tbl_cohort_cabin_classes', joinColumn: { name: 'cohortId', referencedColumnName: 'id' }, inverseJoinColumn: { name: 'cabinClassId', referencedColumnName: 'id' } }) - cabinClasses: CabinClass[]; + cabinClasses!: CabinClass[]; @ManyToMany(() => PassengerType) - @JoinTable({ + @JoinTable({ name: 'tbl_cohort_passenger_types', joinColumn: { name: 'cohortId', referencedColumnName: 'id' }, inverseJoinColumn: { name: 'passengerTypeId', referencedColumnName: 'id' } }) - passengerTypes: PassengerType[]; + passengerTypes!: PassengerType[]; @ManyToMany(() => AncillaryPurchase) - @JoinTable({ + @JoinTable({ name: 'tbl_cohort_ancillary_purchases', joinColumn: { name: 'cohortId', referencedColumnName: 'id' }, inverseJoinColumn: { name: 'ancillaryPurchaseId', referencedColumnName: 'id' } }) - ancillaryPurchases: AncillaryPurchase[]; + ancillaryPurchases!: AncillaryPurchase[]; // Customer Value @ManyToMany(() => MembershipTier) - @JoinTable({ + @JoinTable({ name: 'tbl_cohort_loyalty_tiers', joinColumn: { name: 'cohortId', referencedColumnName: 'id' }, inverseJoinColumn: { name: 'membershipTierId', referencedColumnName: 'id' } }) - loyaltyTiers: MembershipTier[]; + loyaltyTiers!: MembershipTier[]; @ManyToMany(() => RevenueSegment) - @JoinTable({ + @JoinTable({ name: 'tbl_cohort_revenue_segments', joinColumn: { name: 'cohortId', referencedColumnName: 'id' }, inverseJoinColumn: { name: 'revenueSegmentId', referencedColumnName: 'id' } }) - revenueSegments: RevenueSegment[]; + revenueSegments!: RevenueSegment[]; @Column({ type: 'enum', enum: ['Any', 'Yes(VIP/Strategic)', 'No'], default: 'Any' }) - highValuePassenger: string; + highValuePassenger!: string; @Column({ type: 'enum', enum: ['Domestic Only', 'International Only', 'Both (All)'], nullable: true }) - flightType: string; + flightType!: string; @ManyToMany(() => Region) - @JoinTable({ + @JoinTable({ name: 'tbl_cohort_regions', joinColumn: { name: 'cohortId', referencedColumnName: 'id' }, inverseJoinColumn: { name: 'regionId', referencedColumnName: 'id' } }) - regions: Region[]; + regions!: Region[]; @ManyToMany(() => TripPurpose) - @JoinTable({ + @JoinTable({ name: 'tbl_cohort_trip_purposes', joinColumn: { name: 'cohortId', referencedColumnName: 'id' }, inverseJoinColumn: { name: 'tripPurposeId', referencedColumnName: 'id' } }) - tripPurposes: TripPurpose[]; + tripPurposes!: TripPurpose[]; @Column('simple-array', { nullable: true }) - originAirport: string[]; + originAirport!: string[]; @Column('simple-array', { nullable: true }) - destinationAirport: string[]; + destinationAirport!: string[]; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/cohort/dto/create-cohort.dto.ts b/src/modules/cohort/dto/create-cohort.dto.ts index e043ea5..e97d11e 100644 --- a/src/modules/cohort/dto/create-cohort.dto.ts +++ b/src/modules/cohort/dto/create-cohort.dto.ts @@ -3,7 +3,7 @@ import { IsString, IsNotEmpty, IsOptional, IsArray } from 'class-validator'; export class CreateCohortDto { @IsString() @IsNotEmpty() - name: string; + name!: string; @IsString() @IsOptional() diff --git a/src/modules/master-data/entities/ancillary-purchase.entity.ts b/src/modules/master-data/entities/ancillary-purchase.entity.ts index 1f2a6d4..d732061 100644 --- a/src/modules/master-data/entities/ancillary-purchase.entity.ts +++ b/src/modules/master-data/entities/ancillary-purchase.entity.ts @@ -10,20 +10,20 @@ import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity' @Entity({ name: 'tbl_ancillary_purchases', schema: 'masters' }) export class AncillaryPurchase extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column() - label: string; + label!: string; @Column() - value: string; + value!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/cabin-class.entity.ts b/src/modules/master-data/entities/cabin-class.entity.ts index fcdd2ce..80e0f38 100644 --- a/src/modules/master-data/entities/cabin-class.entity.ts +++ b/src/modules/master-data/entities/cabin-class.entity.ts @@ -10,20 +10,20 @@ import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity' @Entity({ name: 'tbl_cabin_classes', schema: 'masters' }) export class CabinClass extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column() - label: string; + label!: string; @Column() - value: string; + value!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/customer-value.entity.ts b/src/modules/master-data/entities/customer-value.entity.ts index 9842e28..fbf0572 100644 --- a/src/modules/master-data/entities/customer-value.entity.ts +++ b/src/modules/master-data/entities/customer-value.entity.ts @@ -10,20 +10,20 @@ import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity' @Entity({ name: 'tbl_customer_values', schema: 'masters' }) export class CustomerValue extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column() - label: string; + label!: string; @Column() - value: string; + value!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/jurisdiction.entity.ts b/src/modules/master-data/entities/jurisdiction.entity.ts index 7f9b5b6..ce7da49 100644 --- a/src/modules/master-data/entities/jurisdiction.entity.ts +++ b/src/modules/master-data/entities/jurisdiction.entity.ts @@ -10,20 +10,20 @@ import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity' @Entity({ name: 'tbl_jurisdictions', schema: 'masters' }) export class Jurisdiction extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column() - label: string; + label!: string; @Column() - value: string; + value!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/membership-tier.entity.ts b/src/modules/master-data/entities/membership-tier.entity.ts index 6a498b7..bb73d36 100644 --- a/src/modules/master-data/entities/membership-tier.entity.ts +++ b/src/modules/master-data/entities/membership-tier.entity.ts @@ -10,20 +10,20 @@ import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity' @Entity({ name: 'tbl_membership_tiers', schema: 'masters' }) export class MembershipTier extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column() - label: string; + label!: string; @Column() - value: string; + value!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/operator.entity.ts b/src/modules/master-data/entities/operator.entity.ts index ea6171e..ebca134 100644 --- a/src/modules/master-data/entities/operator.entity.ts +++ b/src/modules/master-data/entities/operator.entity.ts @@ -3,33 +3,35 @@ import { PrimaryGeneratedColumn, Column, CreateDateColumn, + Index, UpdateDateColumn, } from 'typeorm'; import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity'; @Entity({ name: 'tbl_operators', schema: 'masters' }) +@Index('UQ_operator_tenant_code', ['tenantId', 'code'], { unique: true }) export class Operator extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; - - @Column({ unique: true }) - code: string; + id!: string; @Column() - name: string; + code!: string; + + @Column() + name!: string; @Column({ nullable: true }) symbol?: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @Column({ default: 0 }) - displayOrder: number; + displayOrder!: number; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/passenger-type.entity.ts b/src/modules/master-data/entities/passenger-type.entity.ts index cbd777b..2120724 100644 --- a/src/modules/master-data/entities/passenger-type.entity.ts +++ b/src/modules/master-data/entities/passenger-type.entity.ts @@ -10,20 +10,20 @@ import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity' @Entity({ name: 'tbl_passenger_types', schema: 'masters' }) export class PassengerType extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column() - label: string; + label!: string; @Column() - value: string; + value!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/region.entity.ts b/src/modules/master-data/entities/region.entity.ts index 23c59ae..dc4e4f9 100644 --- a/src/modules/master-data/entities/region.entity.ts +++ b/src/modules/master-data/entities/region.entity.ts @@ -10,20 +10,20 @@ import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity' @Entity({ name: 'tbl_regions', schema: 'masters' }) export class Region extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column() - label: string; + label!: string; @Column() - value: string; + value!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/revenue-segment.entity.ts b/src/modules/master-data/entities/revenue-segment.entity.ts index 729ef81..0288dd2 100644 --- a/src/modules/master-data/entities/revenue-segment.entity.ts +++ b/src/modules/master-data/entities/revenue-segment.entity.ts @@ -10,20 +10,20 @@ import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity' @Entity({ name: 'tbl_revenue_segments', schema: 'masters' }) export class RevenueSegment extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column() - label: string; + label!: string; @Column() - value: string; + value!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/rule-category-value.entity.ts b/src/modules/master-data/entities/rule-category-value.entity.ts index 577233c..c4c8653 100644 --- a/src/modules/master-data/entities/rule-category-value.entity.ts +++ b/src/modules/master-data/entities/rule-category-value.entity.ts @@ -13,30 +13,30 @@ import { RuleCategory } from './rule-category.entity'; @Entity({ name: 'tbl_rule_categories_values', schema: 'masters' }) export class RuleCategoryValue extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column({ type: 'uuid' }) - categoryId: string; + categoryId!: string; @ManyToOne(() => RuleCategory, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'categoryId' }) - category: RuleCategory; + category!: RuleCategory; @Column({ nullable: true }) code?: string; @Column() - value: string; + value!: string; @Column({ default: 0 }) - displayOrder: number; + displayOrder!: number; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/rule-category.entity.ts b/src/modules/master-data/entities/rule-category.entity.ts index d39703d..63965f3 100644 --- a/src/modules/master-data/entities/rule-category.entity.ts +++ b/src/modules/master-data/entities/rule-category.entity.ts @@ -3,33 +3,35 @@ import { PrimaryGeneratedColumn, Column, CreateDateColumn, + Index, UpdateDateColumn, } from 'typeorm'; import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity'; @Entity({ name: 'tbl_rules_categories', schema: 'masters' }) +@Index('UQ_rule_category_tenant_code', ['tenantId', 'code'], { unique: true }) export class RuleCategory extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; - - @Column({ unique: true }) - code: string; + id!: string; @Column() - name: string; + code!: string; + + @Column() + name!: string; @Column({ type: 'text', nullable: true }) description?: string; @Column({ default: 0 }) - displayOrder: number; + displayOrder!: number; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/master-data/entities/trip-purpose.entity.ts b/src/modules/master-data/entities/trip-purpose.entity.ts index 144655d..8f80760 100644 --- a/src/modules/master-data/entities/trip-purpose.entity.ts +++ b/src/modules/master-data/entities/trip-purpose.entity.ts @@ -10,20 +10,20 @@ import { TenantOwnedEntity } from '../../../common/entities/tenant-owned.entity' @Entity({ name: 'tbl_trip_purposes', schema: 'masters' }) export class TripPurpose extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column() - label: string; + label!: string; @Column() - value: string; + value!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; } diff --git a/src/modules/policy-engine/entities/policy-action.entity.ts b/src/modules/policy-engine/entities/policy-action.entity.ts index 4e95c3d..cf53ab8 100644 --- a/src/modules/policy-engine/entities/policy-action.entity.ts +++ b/src/modules/policy-engine/entities/policy-action.entity.ts @@ -4,24 +4,24 @@ import { PolicyRule } from './policy-rule.entity'; @Entity({ name: 'policy_actions', schema: 'policy_engine' }) export class PolicyAction { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column({ name: 'rule_id', type: 'uuid' }) - ruleId: string; + ruleId!: string; @Column({ name: 'action_type_id', type: 'uuid' }) - actionTypeId: string; + actionTypeId!: string; @Column({ name: 'parameter_id', type: 'uuid', nullable: true }) - parameterId: string; + parameterId!: string; @Column({ name: 'value_text', type: 'text', nullable: true }) - valueText: string; + valueText!: string; @Column({ type: 'int', default: 0 }) - sequence: number; + sequence!: number; @ManyToOne(() => PolicyRule, (rule) => rule.actions, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'rule_id' }) - rule: PolicyRule; + rule!: PolicyRule; } diff --git a/src/modules/policy-engine/entities/policy-rule.entity.ts b/src/modules/policy-engine/entities/policy-rule.entity.ts index c0efe05..5acac77 100644 --- a/src/modules/policy-engine/entities/policy-rule.entity.ts +++ b/src/modules/policy-engine/entities/policy-rule.entity.ts @@ -6,24 +6,24 @@ import { PolicyAction } from './policy-action.entity'; @Entity({ name: 'policy_rules', schema: 'policy_engine' }) export class PolicyRule { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column({ name: 'policy_id', type: 'uuid' }) - policyId: string; + policyId!: string; @Column({ name: 'rule_category_id', type: 'uuid', nullable: true }) - ruleCategoryId: string; + ruleCategoryId!: string; @Column({ type: 'int', default: 0 }) - priority: number; + priority!: number; @ManyToOne(() => Policy, (policy) => policy.rules, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'policy_id' }) - policy: Policy; + policy!: Policy; @OneToMany(() => RuleCondition, (condition) => condition.rule, { cascade: true, onDelete: 'CASCADE' }) - conditions: RuleCondition[]; + conditions!: RuleCondition[]; @OneToMany(() => PolicyAction, (action) => action.rule, { cascade: true, onDelete: 'CASCADE' }) - actions: PolicyAction[]; + actions!: PolicyAction[]; } diff --git a/src/modules/policy-engine/entities/policy-target-audience.entity.ts b/src/modules/policy-engine/entities/policy-target-audience.entity.ts index 189d413..a79cee2 100644 --- a/src/modules/policy-engine/entities/policy-target-audience.entity.ts +++ b/src/modules/policy-engine/entities/policy-target-audience.entity.ts @@ -5,22 +5,22 @@ import { AudienceType } from './policy.enums'; @Entity({ name: 'policy_target_audience', schema: 'policy_engine' }) export class PolicyTargetAudience { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column({ name: 'policy_id', type: 'uuid' }) - policyId: string; + policyId!: string; @Column({ name: 'target_type', type: 'enum', enum: AudienceType, }) - targetType: AudienceType; + targetType!: AudienceType; @Column({ name: 'target_id', type: 'uuid', nullable: true }) - targetId: string; + targetId!: string; @ManyToOne(() => Policy, (policy) => policy.targetAudiences, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'policy_id' }) - policy: Policy; + policy!: Policy; } diff --git a/src/modules/policy-engine/entities/policy.entity.ts b/src/modules/policy-engine/entities/policy.entity.ts index 5c2fece..7bb4440 100644 --- a/src/modules/policy-engine/entities/policy.entity.ts +++ b/src/modules/policy-engine/entities/policy.entity.ts @@ -8,26 +8,26 @@ import { Jurisdiction } from '../../master-data/entities/jurisdiction.entity'; @Entity({ name: 'policies', schema: 'policy_engine' }) export class Policy extends TenantOwnedEntity { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column({ name: 'policy_name', type: 'varchar', length: 200 }) - policyName: string; + policyName!: string; @Column({ name: 'jurisdiction_id', type: 'uuid', nullable: true }) - jurisdictionId: string; + jurisdictionId!: string; @Column({ type: 'text', nullable: true }) - description: string; + description!: string; @Column({ type: 'enum', enum: PolicyStatus, default: PolicyStatus.DRAFT, }) - status: PolicyStatus; + status!: PolicyStatus; @Column({ type: 'int', default: 1 }) - version: number; + version!: number; @Column({ name: 'audience_type', @@ -35,28 +35,28 @@ export class Policy extends TenantOwnedEntity { enum: AudienceType, default: AudienceType.ALL, }) - audienceType: AudienceType; + audienceType!: AudienceType; @Column({ name: 'created_by', type: 'uuid', nullable: true }) - createdBy: string; + createdBy!: string; @Column({ name: 'updated_by', type: 'uuid', nullable: true }) - updatedBy: string; + updatedBy!: string; @CreateDateColumn({ name: 'created_at' }) - createdAt: Date; + createdAt!: Date; @UpdateDateColumn({ name: 'updated_at' }) - updatedAt: Date; + updatedAt!: Date; // Relations @OneToMany(() => PolicyTargetAudience, (target) => target.policy, { cascade: true, onDelete: 'CASCADE' }) - targetAudiences: PolicyTargetAudience[]; + targetAudiences!: PolicyTargetAudience[]; @OneToMany(() => PolicyRule, (rule) => rule.policy, { cascade: true, onDelete: 'CASCADE' }) - rules: PolicyRule[]; + rules!: PolicyRule[]; @ManyToOne(() => Jurisdiction, { nullable: true, eager: false, createForeignKeyConstraints: false }) @JoinColumn({ name: 'jurisdiction_id' }) - jurisdiction: Jurisdiction; + jurisdiction!: Jurisdiction; } diff --git a/src/modules/policy-engine/entities/rule-condition.entity.ts b/src/modules/policy-engine/entities/rule-condition.entity.ts index 57c08be..8e230e4 100644 --- a/src/modules/policy-engine/entities/rule-condition.entity.ts +++ b/src/modules/policy-engine/entities/rule-condition.entity.ts @@ -5,19 +5,19 @@ import { LogicalOperator } from './policy.enums'; @Entity({ name: 'policy_rule_conditions', schema: 'policy_engine' }) export class RuleCondition { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column({ name: 'rule_id', type: 'uuid' }) - ruleId: string; + ruleId!: string; @Column({ name: 'field_id', type: 'uuid' }) - fieldId: string; + fieldId!: string; @Column({ name: 'operator_id', type: 'uuid' }) - operatorId: string; + operatorId!: string; @Column({ name: 'value_text', type: 'text', nullable: true }) - valueText: string; + valueText!: string; @Column({ name: 'logical_operator', @@ -25,12 +25,12 @@ export class RuleCondition { enum: LogicalOperator, nullable: true, }) - logicalOperator: LogicalOperator; + logicalOperator!: LogicalOperator; @Column({ type: 'int', default: 0 }) - sequence: number; + sequence!: number; @ManyToOne(() => PolicyRule, (rule) => rule.conditions, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'rule_id' }) - rule: PolicyRule; + rule!: PolicyRule; } diff --git a/src/modules/tenant/tenant.entity.ts b/src/modules/tenant/tenant.entity.ts index f971c78..13e5671 100644 --- a/src/modules/tenant/tenant.entity.ts +++ b/src/modules/tenant/tenant.entity.ts @@ -9,23 +9,23 @@ import { @Entity({ name: 'tbl_tenants', schema: 'tenant' }) export class Tenant { @PrimaryGeneratedColumn('uuid') - id: string; + id!: string; @Column({ unique: true }) - slug: string; + slug!: string; @Column() - name: string; + name!: string; @Column({ default: 'standard' }) - tier: string; + tier!: string; @Column({ default: true }) - isActive: boolean; + isActive!: boolean; @CreateDateColumn() - createdAt: Date; + createdAt!: Date; @UpdateDateColumn() - updatedAt: Date; + updatedAt!: Date; }