sip_huellas/api/app/commands.py

139 lines
6.8 KiB
Python

import click
from flask.cli import with_appcontext
from app.database import db
from app.models import Role, User
from app.models.biometria import (
Persona, OrigenHuella, TiposF, Subclasificacion,
Huella, PuntoCaracteristico, HuellaPuntoCaracteristico, FichaClasificacion
)
from datetime import datetime
@click.command(name="seed") # Definimos explícitamente el nombre del comando CLI
@with_appcontext
def seed_db():
"""Siembra de roles, usuarios administrativos y datos iniciales del S.I.P"""
click.echo("Iniciando el sembrado de datos en PostgreSQL...")
# ---------------------------------------------------------
# [ROLES Y USUARIOS]
# ---------------------------------------------------------
admin_role = Role.query.filter_by(name='admin').first()
if not admin_role:
admin_role = Role(name='admin', permissions=['read:users', 'write:users', 'manage:biometria'])
db.session.add(admin_role)
db.session.commit()
investigador_role = Role.query.filter_by(name='investigador').first()
if not investigador_role:
investigador_role = Role(name='investigador', permissions=['manage:biometria'])
db.session.add(investigador_role)
db.session.commit()
admin_user = User.query.filter_by(username='admin_root').first()
if not admin_user:
admin_user = User(username='admin_root', email='admin@uader.edu.ar', role_id=admin_role.id)
admin_user.set_password('admin1234')
db.session.add(admin_user)
db.session.commit()
investigador_user = User.query.filter_by(username='investigador_demo').first()
if not investigador_user:
investigador_user = User(username='investigador_demo', email='investigador@uader.edu.ar', role_id=investigador_role.id)
investigador_user.set_password('investigador1234')
db.session.add(investigador_user)
db.session.commit()
# ---------------------------------------------------------
# 1. TABLA MAESTRA: PERSONAS
# ---------------------------------------------------------
if Persona.query.count() == 0:
personas_data = [
Persona(cod_id=1, cod_nombre='Juan Pérez', fecha_nacimiento=datetime.strptime('1990-05-20', '%Y-%m-%d').date(), sexo='M'),
Persona(cod_id=2, cod_nombre='Ana Gómez', fecha_nacimiento=datetime.strptime('1985-12-01', '%Y-%m-%d').date(), sexo='F'),
Persona(cod_id=3, cod_nombre='Carlos López', fecha_nacimiento=datetime.strptime('2000-07-15', '%Y-%m-%d').date(), sexo='M')
]
db.session.bulk_save_objects(personas_data)
# ---------------------------------------------------------
# 2. TABLA MAESTRA: ORIGEN DE HUELLAS
# ---------------------------------------------------------
if OrigenHuella.query.count() == 0:
origenes_data = [
OrigenHuella(id=1, descripcion='Índice derecho', lado='derecho'),
OrigenHuella(id=2, descripcion='Índice izquierdo', lado='izquierdo'),
OrigenHuella(id=3, descripcion='Pulgar derecho', lado='derecho')
]
db.session.bulk_save_objects(origenes_data)
# ---------------------------------------------------------
# 3. TABLA MAESTRA: TIPOS F
# ---------------------------------------------------------
if TiposF.query.count() == 0:
tipos_data = [
TiposF(id=1, nombre='Arco', descripcion='Huella en forma de arco', foto=None),
TiposF(id=2, nombre='Presilla', descripcion='Huella en forma de presilla', foto=None),
TiposF(id=3, nombre='Verticilo', descripcion='Huella en forma de espiral', foto=None)
]
db.session.bulk_save_objects(tipos_data)
db.session.commit()
# ---------------------------------------------------------
# 4. SUBTABLA DEPENDIENTE: SUBCLASIFICACIÓN
# ---------------------------------------------------------
if Subclasificacion.query.count() == 0:
sub_data = [
Subclasificacion(id=1, nombre='Arco simple', tipo_f_id=1),
Subclasificacion(id=2, nombre='Presilla derecha', tipo_f_id=2),
Subclasificacion(id=3, nombre='Verticilo central', tipo_f_id=3)
]
db.session.bulk_save_objects(sub_data)
# ---------------------------------------------------------
# 5. TABLA MAESTRA: PUNTOS CARACTERÍSTICOS
# ---------------------------------------------------------
if PuntoCaracteristico.query.count() == 0:
puntos_data = [
PuntoCaracteristico(id=1, nombre='Bifurcación', foto=None),
PuntoCaracteristico(id=2, nombre='Final de cresta', foto=None),
PuntoCaracteristico(id=3, nombre='Punto de isla', foto=None)
]
db.session.bulk_save_objects(puntos_data)
db.session.commit()
# ---------------------------------------------------------
# 6. NÚCLEO BIOMÉTRICO: HUELLAS
# ---------------------------------------------------------
if Huella.query.count() == 0:
huellas_data = [
Huella(id=1, descripcion='Huella digital clara', origen_hd='Escáner', foto=None, persona_cod_id=1, origen_huella_id=1),
Huella(id=2, descripcion='Huella con ligera distorsión', origen_hd='Tinta', foto=None, persona_cod_id=2, origen_huella_id=2),
Huella(id=3, descripcion='Huella poco definida', origen_hd='Escáner', foto=None, persona_cod_id=3, origen_huella_id=3)
]
db.session.bulk_save_objects(huellas_data)
db.session.commit()
# ---------------------------------------------------------
# 7. TABLA PIVOTE: HUELLA / PUNTOS
# ---------------------------------------------------------
if HuellaPuntoCaracteristico.query.count() == 0:
coordenadas_data = [
HuellaPuntoCaracteristico(huella_id=1, punto_id=1, x=12.345678, y=45.678912, angulo=30.00),
HuellaPuntoCaracteristico(huella_id=1, punto_id=2, x=15.111111, y=50.222222, angulo=45.00),
HuellaPuntoCaracteristico(huella_id=2, punto_id=3, x=20.333333, y=60.444444, angulo=60.00)
]
db.session.bulk_save_objects(coordenadas_data)
# ---------------------------------------------------------
# 8. FICHA DE CLASIFICACIÓN
# ---------------------------------------------------------
if FichaClasificacion.query.count() == 0:
fichas_data = [
FichaClasificacion(id=1, huella_id=1, subclasificacion_id=1, tipos_f_id=1, fecha=datetime.strptime('2025-09-30', '%Y-%m-%d').date()),
FichaClasificacion(id=2, huella_id=2, subclasificacion_id=2, tipos_f_id=2, fecha=datetime.strptime('2025-09-30', '%Y-%m-%d').date()),
FichaClasificacion(id=3, huella_id=3, subclasificacion_id=3, tipos_f_id=3, fecha=datetime.strptime('2025-09-30', '%Y-%m-%d').date())
]
db.session.bulk_save_objects(fichas_data)
db.session.commit()
click.echo("¡Base de datos del S.I.P sembrada e integrada al 100%!")