feat(construccion): Add construction module entities
- Add Fraccionamiento entity - Add Proyecto entity - Add entities index export 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
436aafae62
commit
94371c0e75
@ -0,0 +1,90 @@
|
|||||||
|
/**
|
||||||
|
* Fraccionamiento Entity
|
||||||
|
* Obras/fraccionamientos dentro de un proyecto
|
||||||
|
*
|
||||||
|
* @module Construction
|
||||||
|
* @table construction.fraccionamientos
|
||||||
|
* @ddl schemas/01-construction-schema-ddl.sql
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {
|
||||||
|
Entity,
|
||||||
|
PrimaryGeneratedColumn,
|
||||||
|
Column,
|
||||||
|
CreateDateColumn,
|
||||||
|
UpdateDateColumn,
|
||||||
|
ManyToOne,
|
||||||
|
JoinColumn,
|
||||||
|
Index,
|
||||||
|
} from 'typeorm';
|
||||||
|
import { Tenant } from '../../core/entities/tenant.entity';
|
||||||
|
import { User } from '../../core/entities/user.entity';
|
||||||
|
import { Proyecto } from './proyecto.entity';
|
||||||
|
|
||||||
|
export type EstadoFraccionamiento = 'activo' | 'pausado' | 'completado' | 'cancelado';
|
||||||
|
|
||||||
|
@Entity({ schema: 'construction', name: 'fraccionamientos' })
|
||||||
|
@Index(['tenantId', 'codigo'], { unique: true })
|
||||||
|
export class Fraccionamiento {
|
||||||
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
id: string;
|
||||||
|
|
||||||
|
@Column({ name: 'tenant_id', type: 'uuid' })
|
||||||
|
tenantId: string;
|
||||||
|
|
||||||
|
@Column({ name: 'proyecto_id', type: 'uuid' })
|
||||||
|
proyectoId: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 20 })
|
||||||
|
codigo: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 200 })
|
||||||
|
nombre: string;
|
||||||
|
|
||||||
|
@Column({ type: 'text', nullable: true })
|
||||||
|
descripcion: string;
|
||||||
|
|
||||||
|
@Column({ type: 'text', nullable: true })
|
||||||
|
direccion: string;
|
||||||
|
|
||||||
|
// PostGIS geometry - stored as GeoJSON for TypeORM compatibility
|
||||||
|
@Column({
|
||||||
|
name: 'ubicacion_geo',
|
||||||
|
type: 'geometry',
|
||||||
|
spatialFeatureType: 'Point',
|
||||||
|
srid: 4326,
|
||||||
|
nullable: true
|
||||||
|
})
|
||||||
|
ubicacionGeo: string;
|
||||||
|
|
||||||
|
@Column({ name: 'fecha_inicio', type: 'date', nullable: true })
|
||||||
|
fechaInicio: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'fecha_fin_estimada', type: 'date', nullable: true })
|
||||||
|
fechaFinEstimada: Date;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 20, default: 'activo' })
|
||||||
|
estado: EstadoFraccionamiento;
|
||||||
|
|
||||||
|
@CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
|
||||||
|
createdAt: Date;
|
||||||
|
|
||||||
|
@UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' })
|
||||||
|
updatedAt: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'created_by', type: 'uuid', nullable: true })
|
||||||
|
createdById: string;
|
||||||
|
|
||||||
|
// Relations
|
||||||
|
@ManyToOne(() => Tenant)
|
||||||
|
@JoinColumn({ name: 'tenant_id' })
|
||||||
|
tenant: Tenant;
|
||||||
|
|
||||||
|
@ManyToOne(() => Proyecto, (p) => p.fraccionamientos)
|
||||||
|
@JoinColumn({ name: 'proyecto_id' })
|
||||||
|
proyecto: Proyecto;
|
||||||
|
|
||||||
|
@ManyToOne(() => User)
|
||||||
|
@JoinColumn({ name: 'created_by' })
|
||||||
|
createdBy: User;
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
/**
|
||||||
|
* Construction Entities Index
|
||||||
|
* @module Construction
|
||||||
|
*/
|
||||||
|
|
||||||
|
export * from './proyecto.entity';
|
||||||
|
export * from './fraccionamiento.entity';
|
||||||
@ -0,0 +1,88 @@
|
|||||||
|
/**
|
||||||
|
* Proyecto Entity
|
||||||
|
* Proyectos de desarrollo inmobiliario
|
||||||
|
*
|
||||||
|
* @module Construction
|
||||||
|
* @table construction.proyectos
|
||||||
|
* @ddl schemas/01-construction-schema-ddl.sql
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {
|
||||||
|
Entity,
|
||||||
|
PrimaryGeneratedColumn,
|
||||||
|
Column,
|
||||||
|
CreateDateColumn,
|
||||||
|
UpdateDateColumn,
|
||||||
|
ManyToOne,
|
||||||
|
OneToMany,
|
||||||
|
JoinColumn,
|
||||||
|
Index,
|
||||||
|
} from 'typeorm';
|
||||||
|
import { Tenant } from '../../core/entities/tenant.entity';
|
||||||
|
import { User } from '../../core/entities/user.entity';
|
||||||
|
import { Fraccionamiento } from './fraccionamiento.entity';
|
||||||
|
|
||||||
|
export type EstadoProyecto = 'activo' | 'pausado' | 'completado' | 'cancelado';
|
||||||
|
|
||||||
|
@Entity({ schema: 'construction', name: 'proyectos' })
|
||||||
|
@Index(['tenantId', 'codigo'], { unique: true })
|
||||||
|
export class Proyecto {
|
||||||
|
@PrimaryGeneratedColumn('uuid')
|
||||||
|
id: string;
|
||||||
|
|
||||||
|
@Column({ name: 'tenant_id', type: 'uuid' })
|
||||||
|
tenantId: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 20 })
|
||||||
|
codigo: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 200 })
|
||||||
|
nombre: string;
|
||||||
|
|
||||||
|
@Column({ type: 'text', nullable: true })
|
||||||
|
descripcion: string;
|
||||||
|
|
||||||
|
@Column({ type: 'text', nullable: true })
|
||||||
|
direccion: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 100, nullable: true })
|
||||||
|
ciudad: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 100, nullable: true })
|
||||||
|
estado: string;
|
||||||
|
|
||||||
|
@Column({ name: 'fecha_inicio', type: 'date', nullable: true })
|
||||||
|
fechaInicio: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'fecha_fin_estimada', type: 'date', nullable: true })
|
||||||
|
fechaFinEstimada: Date;
|
||||||
|
|
||||||
|
@Column({
|
||||||
|
name: 'estado_proyecto',
|
||||||
|
type: 'varchar',
|
||||||
|
length: 20,
|
||||||
|
default: 'activo'
|
||||||
|
})
|
||||||
|
estadoProyecto: EstadoProyecto;
|
||||||
|
|
||||||
|
@CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
|
||||||
|
createdAt: Date;
|
||||||
|
|
||||||
|
@UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' })
|
||||||
|
updatedAt: Date;
|
||||||
|
|
||||||
|
@Column({ name: 'created_by', type: 'uuid', nullable: true })
|
||||||
|
createdById: string;
|
||||||
|
|
||||||
|
// Relations
|
||||||
|
@ManyToOne(() => Tenant)
|
||||||
|
@JoinColumn({ name: 'tenant_id' })
|
||||||
|
tenant: Tenant;
|
||||||
|
|
||||||
|
@ManyToOne(() => User)
|
||||||
|
@JoinColumn({ name: 'created_by' })
|
||||||
|
createdBy: User;
|
||||||
|
|
||||||
|
@OneToMany(() => Fraccionamiento, (f) => f.proyecto)
|
||||||
|
fraccionamientos: Fraccionamiento[];
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user