diff --git a/src/entity/room.ts b/src/entity/room.ts index 2a7f10a..f3e03a8 100644 --- a/src/entity/room.ts +++ b/src/entity/room.ts @@ -1,7 +1,8 @@ -import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn } from "typeorm"; +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn, ManyToMany } from "typeorm"; import { Status } from "../types/status"; import { Poli } from "./poli"; +import { Service } from "./service"; @Entity("rooms") export class Room { @@ -36,6 +37,9 @@ export class Room { }) status: Status; + @ManyToMany(() => Service, (service) => service.rooms) + services: Service[]; + @CreateDateColumn() created_at: Date; diff --git a/src/entity/service.ts b/src/entity/service.ts new file mode 100644 index 0000000..d5a712b --- /dev/null +++ b/src/entity/service.ts @@ -0,0 +1,60 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + ManyToOne, + JoinColumn, + ManyToMany, + JoinTable, +} from 'typeorm'; + +import { ServiceType } from './service_type'; +import { Room } from './room'; + +@Entity('services') +export class Service { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ + nullable: false, + length: 256 + }) + name: string; + + @ManyToOne(() => ServiceType, { onDelete: 'NO ACTION' }) + @JoinColumn() + serviceType: ServiceType; + + @ManyToMany(() => Room, (room) => room.services) + @JoinTable({ + name: 'service_rooms', + joinColumn: { name: 'service_id', referencedColumnName: 'id' }, + inverseJoinColumn: { name: 'room_id', referencedColumnName: 'id' }, + }) + rooms: Room[]; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/entity/service_class.ts b/src/entity/service_class.ts new file mode 100644 index 0000000..707fc17 --- /dev/null +++ b/src/entity/service_class.ts @@ -0,0 +1,34 @@ +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from 'typeorm'; + +@Entity('service_classes') +export class ServiceClass { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ + nullable: false, + length: 256 + }) + name: string; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/entity/service_fare.ts b/src/entity/service_fare.ts new file mode 100644 index 0000000..f5697cb --- /dev/null +++ b/src/entity/service_fare.ts @@ -0,0 +1,57 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + ManyToOne, + JoinColumn, +} from 'typeorm'; + +import { ServiceClass } from './service_class'; +import { Service } from './service'; + +@Entity('service_fares') +export class ServiceFare { + @PrimaryGeneratedColumn('uuid') + id: string; + + @ManyToOne(() => ServiceClass, { onDelete: 'NO ACTION' }) + @JoinColumn() + serviceClass: ServiceClass; + + @ManyToOne(() => Service, { onDelete: 'NO ACTION' }) + @JoinColumn() + service: Service; + + @Column({ + type: 'decimal', + precision: 18, + scale: 2, + nullable: false, + default: 0 + }) + fare: string; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/entity/service_package.ts b/src/entity/service_package.ts new file mode 100644 index 0000000..bf593ec --- /dev/null +++ b/src/entity/service_package.ts @@ -0,0 +1,69 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + DeleteDateColumn, + ManyToOne, + JoinColumn, + ManyToMany, + JoinTable, +} from 'typeorm'; + +import { ServiceClass } from './service_class'; +import { Service } from './service'; + +@Entity('service_packages') +export class ServicePackage { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ + nullable: false, + length: 256 + }) + name: string; + + @ManyToOne(() => ServiceClass, { onDelete: 'NO ACTION' }) + @JoinColumn() + serviceClass: ServiceClass; + + @Column({ + type: 'decimal', + precision: 18, + scale: 2, + nullable: false, + default: 0 + }) + fare: string; + + @ManyToMany(() => Service) + @JoinTable({ + name: 'service_package_services', + joinColumn: { name: 'service_package_id', referencedColumnName: 'id' }, + inverseJoinColumn: { name: 'service_id', referencedColumnName: 'id' }, + }) + services: Service[]; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/entity/service_type.ts b/src/entity/service_type.ts new file mode 100644 index 0000000..532f922 --- /dev/null +++ b/src/entity/service_type.ts @@ -0,0 +1,42 @@ +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from 'typeorm'; + +import { Status } from '../types/status'; + +@Entity('service_types') +export class ServiceType { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ + nullable: false, + length: 256 + }) + name: string; + + @Column({ + nullable: false, + length: 64 + }) + status: Status; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/schema/public.ts b/src/schema/public.ts index 0033ed8..86d046d 100644 --- a/src/schema/public.ts +++ b/src/schema/public.ts @@ -14,6 +14,11 @@ export * from "../entity/diagnosis" export * from "../entity/diagnostic_procedure" export * from "../entity/poli" export * from "../entity/room" +export * from "../entity/service_type" +export * from "../entity/service_class" +export * from "../entity/service" +export * from "../entity/service_fare" +export * from "../entity/service_package" export * from "../types/action"; export * from "../types/error";