26 lines
1016 B
Python
26 lines
1016 B
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from sqlalchemy import inspect, text
|
||
|
|
from sqlalchemy.orm import Session
|
||
|
|
|
||
|
|
EMPLOYEE_SCHEMA_COLUMNS: dict[str, str] = {
|
||
|
|
"password_hash": "ALTER TABLE employees ADD COLUMN password_hash VARCHAR(255)",
|
||
|
|
"compliance_score": "ALTER TABLE employees ADD COLUMN compliance_score INTEGER DEFAULT 100 NOT NULL",
|
||
|
|
"bank_name": "ALTER TABLE employees ADD COLUMN bank_name VARCHAR(120)",
|
||
|
|
"bank_account_no": "ALTER TABLE employees ADD COLUMN bank_account_no VARCHAR(80)",
|
||
|
|
"bank_account_name": "ALTER TABLE employees ADD COLUMN bank_account_name VARCHAR(100)",
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
def ensure_employee_schema(db: Session) -> None:
|
||
|
|
bind = db.get_bind()
|
||
|
|
inspector = inspect(bind)
|
||
|
|
if "employees" not in inspector.get_table_names():
|
||
|
|
return
|
||
|
|
|
||
|
|
column_names = {column["name"] for column in inspector.get_columns("employees")}
|
||
|
|
for column_name, ddl in EMPLOYEE_SCHEMA_COLUMNS.items():
|
||
|
|
if column_name not in column_names:
|
||
|
|
db.execute(text(ddl))
|
||
|
|
db.flush()
|