import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, Index, ManyToOne, JoinColumn, } from 'typeorm'; import { Tenant } from './tenant.entity.js'; import { User } from './user.entity.js'; @Entity({ schema: 'auth', name: 'groups' }) @Index('idx_groups_tenant_id', ['tenantId']) @Index('idx_groups_code', ['code']) @Index('idx_groups_category', ['category']) @Index('idx_groups_is_system', ['isSystem']) export class Group { @PrimaryGeneratedColumn('uuid') id: string; @Column({ type: 'uuid', nullable: false, name: 'tenant_id' }) tenantId: string; @Column({ type: 'varchar', length: 100, nullable: false }) code: string; @Column({ type: 'varchar', length: 255, nullable: false }) name: string; @Column({ type: 'text', nullable: true }) description: string | null; // Configuración @Column({ type: 'boolean', default: false, nullable: false, name: 'is_system' }) isSystem: boolean; @Column({ type: 'varchar', length: 100, nullable: true }) category: string | null; @Column({ type: 'varchar', length: 20, nullable: true }) color: string | null; // API Keys @Column({ type: 'integer', default: 30, nullable: true, name: 'api_key_max_duration_days', }) apiKeyMaxDurationDays: number | null; // Relaciones @ManyToOne(() => Tenant, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'tenant_id' }) tenant: Tenant; @ManyToOne(() => User, { nullable: true }) @JoinColumn({ name: 'created_by' }) createdByUser: User | null; @ManyToOne(() => User, { nullable: true }) @JoinColumn({ name: 'updated_by' }) updatedByUser: User | null; @ManyToOne(() => User, { nullable: true }) @JoinColumn({ name: 'deleted_by' }) deletedByUser: User | null; // Auditoría @CreateDateColumn({ name: 'created_at', type: 'timestamp' }) createdAt: Date; @Column({ type: 'uuid', nullable: true, name: 'created_by' }) createdBy: string | null; @UpdateDateColumn({ name: 'updated_at', type: 'timestamp', nullable: true }) updatedAt: Date | null; @Column({ type: 'uuid', nullable: true, name: 'updated_by' }) updatedBy: string | null; @Column({ type: 'timestamp', nullable: true, name: 'deleted_at' }) deletedAt: Date | null; @Column({ type: 'uuid', nullable: true, name: 'deleted_by' }) deletedBy: string | null; }