This commit is contained in:
2025-07-18 14:24:35 +07:00
4 changed files with 170 additions and 31 deletions

View File

@ -0,0 +1,104 @@
import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinTable, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
import { BrizziHistoryActvity, BrizziHistoryRemarks, BrizziHistoryType } from "../types/brizzi";
import { BrilinkTerminal } from "./brilink_terminals";
import { BrizziCard } from "./brizzi_cards";
import { BrilinkMerchant } from "./brilink_merchants";
import { BrilinkMerchantTerminal } from "./brilink_merchant_terminals";
import { BrilinkMembershipCardHistoryActvity, BrilinkMembershipCardRemarks } from "../types/brilink";
import { BrilinkMembership } from "./brilink_memberships";
import { BrilinkMembershipCard } from "./brilink_membership_cards";
@Entity("brilink_membership_card_histories", { schema: "brilinks" })
export class BrilinkMembershipCardHistory {
@PrimaryGeneratedColumn("uuid")
id: string;
@Column({
nullable: false,
length: 64,
unique: true,
})
code: string;
@ManyToOne(() => BrilinkMembershipCard, { onDelete: "NO ACTION" })
@JoinTable()
membership_card: BrilinkMembershipCard;
@Column({
nullable: false,
length: 64,
})
activity: BrilinkMembershipCardHistoryActvity;
@Column({ nullable: true })
activity_at: Date;
@ManyToOne(() => BrilinkMembership, { onDelete: "NO ACTION" })
@JoinTable()
membership: BrilinkMembership;
@ManyToOne(() => BrilinkMerchant, { onDelete: "NO ACTION", nullable: true })
@JoinTable()
merchant: BrilinkMerchant;
@ManyToOne(() => BrilinkMerchantTerminal, { onDelete: "NO ACTION", nullable: true })
@JoinTable()
merchant_terminal: BrilinkMerchantTerminal;
@ManyToOne(() => BrilinkTerminal, { onDelete: "NO ACTION", nullable: true })
@JoinTable()
terminal: BrilinkTerminal;
@Column({ nullable: true })
prev_expired: Date;
@Column({ nullable: true })
next_expired: Date;
@Column({
nullable: false,
length: 64,
default: "unverified",
})
remarks: BrilinkMembershipCardRemarks;
@Column({
nullable: true,
length: 128,
})
description: string;
@Column({
nullable: true,
length: 64,
})
payload: string;
@Column({
type: "jsonb",
nullable: true,
})
payload_json: Record<string, any>;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ type: "varchar", length: 255 })
created_by: string;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ type: "varchar", length: 255, nullable: true })
updated_by: string;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ type: "varchar", length: 255, nullable: true })
deleted_by: string;
}

View File

@ -1,43 +1,51 @@
import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinTable, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'; import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinTable, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
import { BrilinkMerchant } from './brilink_merchants'; import { BrilinkMerchant } from "./brilink_merchants";
import { BrizziCard } from './brizzi_cards'; import { BrizziCard } from "./brizzi_cards";
import { BrilinkMembership } from './brilink_memberships'; import { BrilinkMembership } from "./brilink_memberships";
import { BrilinkMembershipCardStatus } from "../types/brilink";
@Entity('brilink_membership_cards', { schema: 'brilinks' }) @Entity("brilink_membership_cards", { schema: "brilinks" })
export class BrilinkMembershipCard { export class BrilinkMembershipCard {
@PrimaryGeneratedColumn('uuid') @PrimaryGeneratedColumn("uuid")
id: string; id: string;
@ManyToOne(() => BrilinkMembership, { onDelete: 'RESTRICT' }) @ManyToOne(() => BrilinkMembership, { onDelete: "RESTRICT" })
@JoinTable() @JoinTable()
membership: BrilinkMembership membership: BrilinkMembership;
@ManyToOne(() => BrizziCard, { onDelete: 'RESTRICT' }) @ManyToOne(() => BrizziCard, { onDelete: "RESTRICT" })
@JoinTable() @JoinTable()
card: BrizziCard card: BrizziCard;
@Column({ nullable: true }) @Column({ nullable: true })
expired_at: Date; expired_at: Date;
@Column() @Column({
@CreateDateColumn() nullable: false,
created_at: Date; length: 64,
default: "inactive",
})
status: BrilinkMembershipCardStatus;
@Column({ type: "varchar", length: 255 }) @Column()
created_by: string; @CreateDateColumn()
created_at: Date;
@Column({ nullable: true }) @Column({ type: "varchar", length: 255 })
@UpdateDateColumn() created_by: string;
updated_at: Date;
@Column({ type: "varchar", length: 255, nullable: true }) @Column({ nullable: true })
updated_by: string; @UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true }) @Column({ type: "varchar", length: 255, nullable: true })
@DeleteDateColumn() updated_by: string;
deleted_at: Date;
@Column({ type: "varchar", length: 255, nullable: true }) @Column({ nullable: true })
deleted_by: string; @DeleteDateColumn()
} deleted_at: Date;
@Column({ type: "varchar", length: 255, nullable: true })
deleted_by: string;
}

View File

@ -173,6 +173,9 @@ import {
BrilinkDiscountStatus, BrilinkDiscountStatus,
BrilinkDiscountType, BrilinkDiscountType,
BrilinkProductCategorySupplier, BrilinkProductCategorySupplier,
BrilinkMembershipCardStatus,
BrilinkMembershipCardHistoryActvity,
BrilinkMembershipCardRemarks,
} from "./types/brilink"; } from "./types/brilink";
import { BrilinkMerchant } from "./entity/brilink_merchants"; import { BrilinkMerchant } from "./entity/brilink_merchants";
@ -200,6 +203,7 @@ import { BrilinkProductType } from "./entity/brilink_product_types";
import { BrilinkProductItem } from "./entity/brilink_product_items"; import { BrilinkProductItem } from "./entity/brilink_product_items";
import { BrilinkMerchantProductItem } from "./entity/brilink_merchant_product_items"; import { BrilinkMerchantProductItem } from "./entity/brilink_merchant_product_items";
import { BrilinkTransactionLog } from "./entity/brilink_transaction_logs"; import { BrilinkTransactionLog } from "./entity/brilink_transaction_logs";
import { BrilinkMembershipCardHistory } from "./entity/brilink_membership_card_history";
import { BriapiConfig } from "./entity/briapi_configs"; import { BriapiConfig } from "./entity/briapi_configs";
import { BriapiLog } from "./entity/briapi_logs"; import { BriapiLog } from "./entity/briapi_logs";
@ -364,6 +368,10 @@ export {
BrilinkProductItem, BrilinkProductItem,
BrilinkMerchantProductItem, BrilinkMerchantProductItem,
BrilinkTransactionLog, BrilinkTransactionLog,
BrilinkMembershipCardStatus,
BrilinkMembershipCardHistoryActvity,
BrilinkMembershipCardRemarks,
BrilinkMembershipCardHistory,
BriapiConfig, BriapiConfig,
BriapiLog, BriapiLog,
BriapiAppendixBank, BriapiAppendixBank,

View File

@ -142,3 +142,22 @@ export enum BrilinkDiscountModule {
export enum BrilinkProductCategorySupplier { export enum BrilinkProductCategorySupplier {
"tcel" = "tcel", "tcel" = "tcel",
} }
export enum BrilinkMembershipCardStatus {
"active" = "active",
"inactive" = "inactive",
"expired" = "expired",
}
export enum BrilinkMembershipCardHistoryActvity {
"activation" = "activation",
"validation" = "validation",
"extend" = "extend",
"deactivation" = "deactivation",
}
export enum BrilinkMembershipCardRemarks {
"unverified" = "unverified",
"verified" = "verified",
"suspicious" = "suspicious",
}