90 lines
2.3 KiB
TypeScript
90 lines
2.3 KiB
TypeScript
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;
|
|
}
|