Files
dh-inspeccion-v2/api-v3/src/database/entities/audit-event.entity.ts
T

176 lines
8.5 KiB
TypeScript

import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm';
export enum AuditSource {
WEB = 'WEB',
ANDROID = 'ANDROID',
SYSTEM = 'SYSTEM',
IMPORT = 'IMPORT',
}
export enum AuditAction {
AUTH_LOGIN_SUCCESS = 'AUTH_LOGIN_SUCCESS',
AUTH_LOGIN_FAILED = 'AUTH_LOGIN_FAILED',
AUTH_LOGOUT = 'AUTH_LOGOUT',
AUTH_REFRESH = 'AUTH_REFRESH',
AUTH_REFRESH_REUSE_DETECTED = 'AUTH_REFRESH_REUSE_DETECTED',
AUTH_PASSWORD_CHANGED = 'AUTH_PASSWORD_CHANGED',
SYSTEM_BOOTSTRAP_ADMIN_CREATED = 'SYSTEM_BOOTSTRAP_ADMIN_CREATED',
USER_CREATED = 'USER_CREATED',
USER_UPDATED = 'USER_UPDATED',
USER_PASSWORD_RESET = 'USER_PASSWORD_RESET',
USER_STATUS_CHANGED = 'USER_STATUS_CHANGED',
USER_ROLES_CHANGED = 'USER_ROLES_CHANGED',
ROLE_CREATED = 'ROLE_CREATED',
ROLE_UPDATED = 'ROLE_UPDATED',
ROLE_PERMISSIONS_CHANGED = 'ROLE_PERMISSIONS_CHANGED',
ASSET_TYPE_CREATED = 'ASSET_TYPE_CREATED',
ASSET_TYPE_UPDATED = 'ASSET_TYPE_UPDATED',
ASSET_MASTER_BOOTSTRAPPED = 'ASSET_MASTER_BOOTSTRAPPED',
ASSET_ATTRIBUTE_CREATED = 'ASSET_ATTRIBUTE_CREATED',
ASSET_ATTRIBUTE_UPDATED = 'ASSET_ATTRIBUTE_UPDATED',
ASSET_CREATED = 'ASSET_CREATED',
ASSET_FIELD_DISCOVERY_CREATED = 'ASSET_FIELD_DISCOVERY_CREATED',
ASSET_FIELD_DISCOVERY_APPROVED = 'ASSET_FIELD_DISCOVERY_APPROVED',
ASSET_FIELD_DISCOVERY_MATCHED = 'ASSET_FIELD_DISCOVERY_MATCHED',
ASSET_FIELD_DISCOVERY_REJECTED = 'ASSET_FIELD_DISCOVERY_REJECTED',
ASSET_UPDATED = 'ASSET_UPDATED',
ASSET_CONTEXT_CHANGED = 'ASSET_CONTEXT_CHANGED',
ASSET_FUNCTION_CHANGED = 'ASSET_FUNCTION_CHANGED',
INVENTORY_FUNCTION_CREATED = 'INVENTORY_FUNCTION_CREATED',
INVENTORY_FUNCTION_UPDATED = 'INVENTORY_FUNCTION_UPDATED',
ASSET_INFORMATION_STATUS_CHANGED = 'ASSET_INFORMATION_STATUS_CHANGED',
ASSET_OPERATIONAL_STATUS_CHANGED = 'ASSET_OPERATIONAL_STATUS_CHANGED',
ASSET_REGISTRY_UPDATED = 'ASSET_REGISTRY_UPDATED',
ASSET_IMPORT_BATCH_ANALYZED = 'ASSET_IMPORT_BATCH_ANALYZED',
ASSET_IMPORT_BATCH_RECONCILED = 'ASSET_IMPORT_BATCH_RECONCILED',
ASSET_IMPORT_PLAN_GENERATED = 'ASSET_IMPORT_PLAN_GENERATED',
ASSET_IMPORT_PLAN_ITEM_RESOLVED = 'ASSET_IMPORT_PLAN_ITEM_RESOLVED',
ASSET_IMPORT_PLAN_APPLIED = 'ASSET_IMPORT_PLAN_APPLIED',
ASSET_IMPORT_PLAN_ROLLED_BACK = 'ASSET_IMPORT_PLAN_ROLLED_BACK',
ASSET_IMPORT_BATCH_CANCELLED = 'ASSET_IMPORT_BATCH_CANCELLED',
SOURCE_DOCUMENT_CREATED = 'SOURCE_DOCUMENT_CREATED',
AREA_LEGAL_RIGHT_CREATED = 'AREA_LEGAL_RIGHT_CREATED',
AREA_LEGAL_RIGHT_UPDATED = 'AREA_LEGAL_RIGHT_UPDATED',
AREA_LEGAL_RIGHT_ORGANIZATION_ENDED = 'AREA_LEGAL_RIGHT_ORGANIZATION_ENDED',
ASSET_GEOMETRY_UPDATED = 'ASSET_GEOMETRY_UPDATED',
ASSET_GEOMETRY_REMOVED = 'ASSET_GEOMETRY_REMOVED',
ASSET_MEDIA_UPLOADED = 'ASSET_MEDIA_UPLOADED',
ASSET_MEDIA_UPDATED = 'ASSET_MEDIA_UPDATED',
ASSET_MEDIA_REMOVED = 'ASSET_MEDIA_REMOVED',
ASSET_PROVENANCE_UPDATED = 'ASSET_PROVENANCE_UPDATED',
ASSET_PROVENANCE_VERIFIED = 'ASSET_PROVENANCE_VERIFIED',
ASSET_AREA_COMPANY_RELATION_CREATED = 'ASSET_AREA_COMPANY_RELATION_CREATED',
ASSET_AREA_COMPANY_RELATION_ENDED = 'ASSET_AREA_COMPANY_RELATION_ENDED',
SURVEY_CAMPAIGN_CREATED = 'SURVEY_CAMPAIGN_CREATED',
SURVEY_CAMPAIGN_UPDATED = 'SURVEY_CAMPAIGN_UPDATED',
SURVEY_CAMPAIGN_STATUS_CHANGED = 'SURVEY_CAMPAIGN_STATUS_CHANGED',
SURVEY_TARGET_ADDED = 'SURVEY_TARGET_ADDED',
SURVEY_TARGET_UPDATED = 'SURVEY_TARGET_UPDATED',
SURVEY_TARGET_ASSIGNED = 'SURVEY_TARGET_ASSIGNED',
SURVEY_TARGET_STATUS_CHANGED = 'SURVEY_TARGET_STATUS_CHANGED',
SURVEY_REPORT_SAVED = 'SURVEY_REPORT_SAVED',
SURVEY_REPORT_SUBMITTED = 'SURVEY_REPORT_SUBMITTED',
SURVEY_REPORT_APPROVED = 'SURVEY_REPORT_APPROVED',
SURVEY_REPORT_REJECTED = 'SURVEY_REPORT_REJECTED',
INSPECTION_VISIT_CREATED = 'INSPECTION_VISIT_CREATED',
INSPECTION_VISIT_UPDATED = 'INSPECTION_VISIT_UPDATED',
INSPECTION_VISIT_STATUS_CHANGED = 'INSPECTION_VISIT_STATUS_CHANGED',
INSPECTION_VISIT_ASSETS_UPDATED = 'INSPECTION_VISIT_ASSETS_UPDATED',
INSPECTION_VISIT_TEAM_UPDATED = 'INSPECTION_VISIT_TEAM_UPDATED',
INSPECTION_VISIT_CHECKLIST_GENERATED = 'INSPECTION_VISIT_CHECKLIST_GENERATED',
INSPECTION_VISIT_ASSET_EXCLUDED = 'INSPECTION_VISIT_ASSET_EXCLUDED',
INSPECTION_VISIT_ASSET_REINCLUDED = 'INSPECTION_VISIT_ASSET_REINCLUDED',
INSPECTION_VISIT_STARTED = 'INSPECTION_VISIT_STARTED',
INSPECTION_ACT_CREATED = 'INSPECTION_ACT_CREATED',
INSPECTION_ACT_UPDATED = 'INSPECTION_ACT_UPDATED',
INSPECTION_ACT_CANCELLED = 'INSPECTION_ACT_CANCELLED',
INSPECTION_ACT_RESPONSIBLE_UPDATED = 'INSPECTION_ACT_RESPONSIBLE_UPDATED',
INSPECTION_ACT_LOCKED = 'INSPECTION_ACT_LOCKED',
INSPECTION_ACT_SEALED = 'INSPECTION_ACT_SEALED',
INSPECTION_ACT_READY = 'INSPECTION_ACT_READY',
INSPECTION_ACT_REOPENED = 'INSPECTION_ACT_REOPENED',
INSPECTION_ACT_SIGNATURE_RECORDED = 'INSPECTION_ACT_SIGNATURE_RECORDED',
INSPECTION_ACT_COMPANY_OUTCOME_RECORDED = 'INSPECTION_ACT_COMPANY_OUTCOME_RECORDED',
INSPECTION_ACT_CLOSED = 'INSPECTION_ACT_CLOSED',
INSPECTION_REPORT_GENERATED = 'INSPECTION_REPORT_GENERATED',
INSPECTION_REPORT_UPDATED = 'INSPECTION_REPORT_UPDATED',
INSPECTION_REPORT_REVISION_ADDED = 'INSPECTION_REPORT_REVISION_ADDED',
INSPECTION_REPORT_OFFICIALIZED = 'INSPECTION_REPORT_OFFICIALIZED',
INSPECTION_REPORT_FOLLOW_UP_ADDED = 'INSPECTION_REPORT_FOLLOW_UP_ADDED',
INSPECTION_REPORT_APPROVED = 'INSPECTION_REPORT_APPROVED',
INSPECTION_REPORT_SIGNED = 'INSPECTION_REPORT_SIGNED',
INSPECTION_DEADLINE_POLICY_UPDATED = 'INSPECTION_DEADLINE_POLICY_UPDATED',
INSPECTION_BUSINESS_CALENDAR_UPDATED = 'INSPECTION_BUSINESS_CALENDAR_UPDATED',
SMTP_SETTINGS_UPDATED = 'SMTP_SETTINGS_UPDATED',
SMTP_TEST_SENT = 'SMTP_TEST_SENT',
DOCUMENT_DELIVERY_SETTINGS_UPDATED = 'DOCUMENT_DELIVERY_SETTINGS_UPDATED',
DOCUMENT_DELIVERY_RETRY_REQUESTED = 'DOCUMENT_DELIVERY_RETRY_REQUESTED',
DOCUMENT_DELIVERY_SENT = 'DOCUMENT_DELIVERY_SENT',
INSPECTION_VERIFICATION_PLANNED = 'INSPECTION_VERIFICATION_PLANNED',
INSPECTION_VERIFICATION_RESULT_RECORDED = 'INSPECTION_VERIFICATION_RESULT_RECORDED',
INSPECTION_FINDING_CREATED = 'INSPECTION_FINDING_CREATED',
INSPECTION_FINDING_UPDATED = 'INSPECTION_FINDING_UPDATED',
INSPECTION_FINDING_FOLLOW_UP_UPDATED = 'INSPECTION_FINDING_FOLLOW_UP_UPDATED',
INSPECTION_FINDING_CLOSED = 'INSPECTION_FINDING_CLOSED',
INSPECTION_FINDING_EVIDENCE_UPLOADED = 'INSPECTION_FINDING_EVIDENCE_UPLOADED',
INSPECTION_FINDING_COMMUNICATION_CREATED = 'INSPECTION_FINDING_COMMUNICATION_CREATED',
FINDING_CATEGORY_CREATED = 'FINDING_CATEGORY_CREATED',
FINDING_CATEGORY_UPDATED = 'FINDING_CATEGORY_UPDATED',
FINDING_CATALOG_ITEM_CREATED = 'FINDING_CATALOG_ITEM_CREATED',
FINDING_CATALOG_ITEM_UPDATED = 'FINDING_CATALOG_ITEM_UPDATED',
FINDING_CATALOG_TYPE_APPLICABILITY_UPDATED = 'FINDING_CATALOG_TYPE_APPLICABILITY_UPDATED',
FINDING_CATALOG_ASSET_SELECTION_UPDATED = 'FINDING_CATALOG_ASSET_SELECTION_UPDATED',
FINDING_CATALOG_PROPOSAL_MATCHED = 'FINDING_CATALOG_PROPOSAL_MATCHED',
FINDING_CATALOG_PROPOSAL_REJECTED = 'FINDING_CATALOG_PROPOSAL_REJECTED',
}
@Entity({ name: 'audit_events' })
@Index('idx_audit_events_occurred_at', ['occurredAt'])
@Index('idx_audit_events_actor_user_id', ['actorUserId'])
@Index('idx_audit_events_action', ['action'])
@Index('idx_audit_events_entity', ['entityType', 'entityId'])
@Index('idx_audit_events_request_id', ['requestId'])
export class AuditEvent {
@PrimaryGeneratedColumn('uuid')
id!: string;
@Column({ name: 'occurred_at', type: 'timestamptz', default: () => 'CURRENT_TIMESTAMP' })
occurredAt!: Date;
@Column({ name: 'actor_user_id', type: 'uuid', nullable: true })
actorUserId!: string | null;
@Column({ name: 'actor_username', type: 'varchar', length: 80, nullable: true })
actorUsername!: string | null;
@Column({ type: 'varchar', length: 100 })
action!: string;
@Column({ name: 'entity_type', type: 'varchar', length: 100, nullable: true })
entityType!: string | null;
@Column({ name: 'entity_id', type: 'varchar', length: 255, nullable: true })
entityId!: string | null;
@Column({ name: 'request_id', type: 'varchar', length: 128, nullable: true })
requestId!: string | null;
@Column({ type: 'varchar', length: 32 })
source!: AuditSource;
@Column({ type: 'inet', nullable: true })
ip!: string | null;
@Column({ name: 'user_agent', type: 'text', nullable: true })
userAgent!: string | null;
@Column({ name: 'before_data', type: 'jsonb', nullable: true })
beforeData!: Record<string, unknown> | null;
@Column({ name: 'after_data', type: 'jsonb', nullable: true })
afterData!: Record<string, unknown> | null;
@Column({ type: 'jsonb', nullable: true })
metadata!: Record<string, unknown> | null;
}