feat: add middle_name field and map all three Evotor name fields
- Add middle_name column to users table (migration 0012) - Map Evotor's second_name → last_name, middle_name → middle_name in /user/create webhook handler - Update name fields on existing users when Evotor sends them Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
16
web/migrations/versions/0012_users_middle_name.py
Normal file
16
web/migrations/versions/0012_users_middle_name.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
"""Add middle_name to users."""
|
||||||
|
revision = "0012"
|
||||||
|
down_revision = "0011"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.add_column("users", sa.Column("middle_name", sa.String(100), nullable=True))
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_column("users", "middle_name")
|
||||||
@@ -23,6 +23,7 @@ class User(Base):
|
|||||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
first_name = Column(String(100), nullable=False)
|
first_name = Column(String(100), nullable=False)
|
||||||
last_name = Column(String(100), nullable=False)
|
last_name = Column(String(100), nullable=False)
|
||||||
|
middle_name = Column(String(100), nullable=True)
|
||||||
email = Column(String(255), nullable=False)
|
email = Column(String(255), nullable=False)
|
||||||
phone = Column(String(20), nullable=True)
|
phone = Column(String(20), nullable=True)
|
||||||
password_hash = Column(String(255), nullable=True)
|
password_hash = Column(String(255), nullable=True)
|
||||||
|
|||||||
@@ -106,7 +106,8 @@ async def user_create(request: Request, db: Session = Depends(get_db)):
|
|||||||
email = (body.get("email") or custom.get("email") or "").strip().lower() or None
|
email = (body.get("email") or custom.get("email") or "").strip().lower() or None
|
||||||
phone = (body.get("phone_number") or body.get("phone") or custom.get("phone_number") or custom.get("phone") or "").strip() or None
|
phone = (body.get("phone_number") or body.get("phone") or custom.get("phone_number") or custom.get("phone") or "").strip() or None
|
||||||
first_name = (body.get("first_name") or body.get("firstName") or custom.get("first_name") or custom.get("firstName") or "").strip() or None
|
first_name = (body.get("first_name") or body.get("firstName") or custom.get("first_name") or custom.get("firstName") or "").strip() or None
|
||||||
last_name = (body.get("last_name") or body.get("lastName") or custom.get("last_name") or custom.get("lastName") or "").strip() or None
|
last_name = (body.get("second_name") or body.get("last_name") or body.get("lastName") or custom.get("second_name") or custom.get("last_name") or custom.get("lastName") or "").strip() or None
|
||||||
|
middle_name = (body.get("middle_name") or custom.get("middle_name") or "").strip() or None
|
||||||
|
|
||||||
# Try to find existing user
|
# Try to find existing user
|
||||||
user: User | None = None
|
user: User | None = None
|
||||||
@@ -125,9 +126,15 @@ async def user_create(request: Request, db: Session = Depends(get_db)):
|
|||||||
now = datetime.now(timezone.utc).replace(tzinfo=None)
|
now = datetime.now(timezone.utc).replace(tzinfo=None)
|
||||||
|
|
||||||
if user:
|
if user:
|
||||||
# Link Evotor to existing user
|
# Link Evotor to existing user; update name fields if Evotor provided them
|
||||||
user.evotor_user_id = evotor_user_id
|
user.evotor_user_id = evotor_user_id
|
||||||
user.evotor_meta = body
|
user.evotor_meta = body
|
||||||
|
if first_name:
|
||||||
|
user.first_name = first_name
|
||||||
|
if last_name:
|
||||||
|
user.last_name = last_name
|
||||||
|
if middle_name:
|
||||||
|
user.middle_name = middle_name
|
||||||
if user.status == UserStatusEnum.pending:
|
if user.status == UserStatusEnum.pending:
|
||||||
user.status = UserStatusEnum.active
|
user.status = UserStatusEnum.active
|
||||||
db.flush()
|
db.flush()
|
||||||
@@ -136,6 +143,7 @@ async def user_create(request: Request, db: Session = Depends(get_db)):
|
|||||||
user = User(
|
user = User(
|
||||||
first_name=first_name or "",
|
first_name=first_name or "",
|
||||||
last_name=last_name or "",
|
last_name=last_name or "",
|
||||||
|
middle_name=middle_name,
|
||||||
email=email or f"{evotor_user_id}@evotor.invalid",
|
email=email or f"{evotor_user_id}@evotor.invalid",
|
||||||
phone=phone or None,
|
phone=phone or None,
|
||||||
password_hash=None,
|
password_hash=None,
|
||||||
|
|||||||
Reference in New Issue
Block a user