complete rule engine and booking flow

This commit is contained in:
marshal
2026-05-30 11:52:50 +03:00
parent 7bbb95e9fd
commit badeeff345
15 changed files with 575 additions and 348 deletions

View File

@@ -44,7 +44,7 @@ export class CustomersRepository {
async findByName(name: string): Promise<Customer[]> {
return await this.repository
.createQueryBuilder("customer")
.where("customer.name ILIKE :name", { name: `%${name}%` })
.where("customer.companyName ILIKE :name", { name: `%${name}%` })
.getMany();
}

View File

@@ -43,7 +43,7 @@ export class ResponseCustomerDto {
this.contactPersonName = customer.contactPersonName;
this.contactPersonPhone = customer.contactPersonPhone;
this.tinNumber = customer.tinNumber;
this.vatNumber = customer.vatNumber;
this.vatNumber = customer.vatNumber ?? undefined;
this.fanNumber = customer.fanNumber;
this.generalManagerName = customer.generalManagerName;
this.generalManagerEmail = customer.generalManagerEmail;

View File

@@ -1,100 +1,87 @@
import {
Column,
Entity,
CreateDateColumn,
UpdateDateColumn,
Index,
BaseEntity,
PrimaryGeneratedColumn,
} from "typeorm";
import { BaseEntity } from '@edr/api-common';
import { Column, Entity, Index } from 'typeorm';
@Entity("customers")
@Entity({ schema: 'freight', name: 'customers' })
@Index(['email'])
@Index(['userId'])
@Index(['tinNumber'])
@Index(['fanNumber'])
export class Customer extends BaseEntity {
@PrimaryGeneratedColumn("uuid")
id!: string;
@Column({ type: "uuid" })
@Index()
@Column({ name: 'user_id', type: 'uuid' })
userId!: string;
@Column({ length: 100 })
@Index()
@Column({ name: 'first_name', type: 'varchar', length: 100 })
firstName!: string;
@Column({ length: 100 })
@Index()
@Column({ name: 'last_name', type: 'varchar', length: 100 })
lastName!: string;
@Column({ unique: true, length: 150 })
@Index()
@Column({ name: 'email', type: 'varchar', length: 150, unique: true })
email!: string;
@Column({ length: 20 })
@Column({ name: 'phone', type: 'varchar', length: 20 })
phone!: string;
@Column({ length: 200 })
@Index()
@Column({ name: 'company_name', type: 'varchar', length: 200 })
companyName!: string;
@Column({ length: 150 })
@Column({ name: 'company_email', type: 'varchar', length: 150 })
companyEmail!: string;
@Column({ length: 20 })
@Column({ name: 'company_phone', type: 'varchar', length: 20 })
companyPhone!: string;
@Column({ length: 100 })
@Column({ name: 'company_location', type: 'varchar', length: 100 })
companyLocation!: string;
@Column({ type: "text" })
@Column({ name: 'company_address', type: 'text' })
companyAddress!: string;
@Column({ length: 100 })
@Column({ name: 'customer_type', type: 'varchar', length: 32, nullable: true })
customerType?: string | null;
@Column({ name: 'status', type: 'varchar', length: 32, nullable: true })
status?: string | null;
@Column({ name: 'contact_person_name', type: 'varchar', length: 100 })
contactPersonName!: string;
@Column({ length: 20 })
@Column({ name: 'contact_person_phone', type: 'varchar', length: 20 })
contactPersonPhone!: string;
@Column({ length: 10, unique: true })
@Index()
@Column({ name: 'tin_number', type: 'varchar', length: 10, unique: true })
tinNumber!: string;
@Column({ length: 50, nullable: true })
vatNumber?: string;
@Column({ name: 'vat_number', type: 'varchar', length: 50, nullable: true })
vatNumber?: string | null;
@Column({ length: 16, unique: true })
@Index()
@Column({ name: 'fan_number', type: 'varchar', length: 16, unique: true })
fanNumber!: string;
@Column({ length: 100 })
@Column({ name: 'general_manager_name', type: 'varchar', length: 100 })
generalManagerName!: string;
@Column({ length: 150 })
@Column({ name: 'general_manager_email', type: 'varchar', length: 150 })
generalManagerEmail!: string;
@Column({ length: 20 })
@Column({ name: 'general_manager_phone', type: 'varchar', length: 20 })
generalManagerPhone!: string;
@Column({ length: 100, nullable: true })
poaName?: string;
@Column({ name: 'poa_name', type: 'varchar', length: 100, nullable: true })
poaName?: string | null;
@Column({ length: 20, nullable: true })
poaPhone?: string;
@Column({ name: 'poa_phone', type: 'varchar', length: 20, nullable: true })
poaPhone?: string | null;
@Column({ type: "text", nullable: true })
poaAddress?: string;
@Column({ name: 'poa_address', type: 'text', nullable: true })
poaAddress?: string | null;
@Column({ nullable: true, length: 150 })
poaEmail?: string;
@Column({ name: 'poa_email', type: 'varchar', length: 150, nullable: true })
poaEmail?: string | null;
@Column({ length: 100, nullable: true })
poaLocation?: string;
@Column({ name: 'poa_location', type: 'varchar', length: 100, nullable: true })
poaLocation?: string | null;
@Column({ type: "text", nullable: true })
notes?: string;
@CreateDateColumn()
createdAt!: Date;
@UpdateDateColumn()
updatedAt!: Date;
}
@Column({ name: 'notes', type: 'text', nullable: true })
notes?: string | null;
}