From 63eb27a1603b28bfe9c9950041fbc82dda192d9c Mon Sep 17 00:00:00 2001 From: Tracewebstudio Dev Date: Mon, 13 Apr 2026 19:59:48 +0200 Subject: [PATCH] fix(auth): accept both full_name and first_name+last_name for backward compatibility RegisterPayload now accepts: - full_name (single field, for old frontend clients) - first_name + last_name (new format) Error returned only if none of these are provided. --- apps/users/src/handlers/auth.rs | 14 +++++++++++--- k8s-migration-job.yaml | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 k8s-migration-job.yaml diff --git a/apps/users/src/handlers/auth.rs b/apps/users/src/handlers/auth.rs index 377aad7..b0cd0ae 100644 --- a/apps/users/src/handlers/auth.rs +++ b/apps/users/src/handlers/auth.rs @@ -35,8 +35,12 @@ pub fn router() -> Router { #[derive(Deserialize)] pub struct RegisterPayload { - pub first_name: String, - pub last_name: String, + #[serde(default)] + pub first_name: Option, + #[serde(default)] + pub last_name: Option, + #[serde(default)] + pub full_name: Option, pub email: String, pub phone: Option, pub password: String, @@ -198,7 +202,11 @@ async fn register( let password_hash = hash_password(&payload.password) .map_err(|e| err(StatusCode::INTERNAL_SERVER_ERROR, &e.to_string(), "INTERNAL_ERROR"))?; - let full_name = format!("{} {}", payload.first_name.trim(), payload.last_name.trim()).trim().to_string(); + let full_name = match (&payload.first_name, &payload.last_name, &payload.full_name) { + (Some(fn_), Some(ln_), _) => format!("{} {}", fn_.trim(), ln_.trim()).trim().to_string(), + (_, _, Some(fn_)) => fn_.trim().to_string(), + _ => return Err(err(StatusCode::UNPROCESSABLE_ENTITY, "first_name and last_name are required", "VALIDATION_ERROR")), + }; let user = UserRepository::create(&state.pool, CreateUserPayload { name: full_name, diff --git a/k8s-migration-job.yaml b/k8s-migration-job.yaml new file mode 100644 index 0000000..1be5bba --- /dev/null +++ b/k8s-migration-job.yaml @@ -0,0 +1,33 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: nxtgauge-db-migrate + namespace: default + labels: + app: nxtgauge-db-migrate +spec: + ttlSecondsAfterFinished: 300 + backoffLimit: 3 + template: + metadata: + labels: + app: nxtgauge-db-migrate + spec: + restartPolicy: OnFailure + containers: + - name: migrate + image: ghcr.io/traceworks2023/nxtgauge-db-migrate:high-performance-latest + imagePullPolicy: Always + envFrom: + - secretRef: + name: nxtgauge-backend-rust-secrets + env: + - name: MIGRATIONS_DIR + value: "/migrations" + resources: + requests: + memory: "64Mi" + cpu: "50m" + limits: + memory: "256Mi" + cpu: "500m"