fix(db): make three more migrations idempotent; log swallowed login DB error
All checks were successful
build-and-release / build (customers) (push) Successful in 1m23s
build-and-release / build (employees) (push) Successful in 1m48s
build-and-release / build (catering-services) (push) Successful in 1m57s
build-and-release / build (companies) (push) Successful in 2m6s
build-and-release / build (cron) (push) Successful in 2m23s
build-and-release / build (gateway) (push) Successful in 51s
build-and-release / build (developers) (push) Successful in 2m44s
build-and-release / build (fitness-trainers) (push) Successful in 1m39s
build-and-release / build (jobs) (push) Successful in 45s
build-and-release / build (graphic-designers) (push) Successful in 2m16s
build-and-release / build (job-seekers) (push) Successful in 2m16s
build-and-release / build (leads) (push) Successful in 1m46s
build-and-release / build (payments) (push) Successful in 2m19s
build-and-release / build (makeup-artists) (push) Successful in 3m0s
build-and-release / build (photographers) (push) Successful in 2m42s
build-and-release / build (social-media-managers) (push) Successful in 2m19s
build-and-release / build (ugc-content-creators) (push) Successful in 2m33s
build-and-release / build (tutors) (push) Successful in 2m42s
build-and-release / build (video-editors) (push) Successful in 2m44s
build-and-release / build (users) (push) Successful in 6m38s

Same class of bug as the ai_plans_and_limits fix: ai_credit_packages and
users_litellm_key used plain CREATE TABLE/ADD COLUMN with no re-run guard,
and payu_rename_columns did a bare RENAME COLUMN that fails outright on any
second run ("column razorpay_order_id does not exist"). All three were
discovered by actually running the db-migrate job end to end for the first
time and fixed in the same pass as the verification_logs FK fix - already
baked into the db-migrate image that was built and run manually, this
commit just brings the source in the repo in sync with what's deployed.

Also: apps/employees login handler's DB error was being discarded via
.map_err(|_| ...) with zero logging, making the reported "db error while
logging in" impossible to diagnose from pod logs. Log the real error.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Ashwin Kumar Sivakumar 2026-07-19 04:40:31 +05:30
parent e80ce2901c
commit bb616c6db1
4 changed files with 29 additions and 11 deletions

View file

@ -70,7 +70,10 @@ async fn login(
let employee = EmployeeRepository::get_by_email(&state.pool, &email) let employee = EmployeeRepository::get_by_email(&state.pool, &email)
.await .await
.map_err(|_| err(StatusCode::INTERNAL_SERVER_ERROR, "DB error", "DB_ERROR"))? .map_err(|e| {
tracing::error!(error = %e, email = %email, "employee login: get_by_email failed");
err(StatusCode::INTERNAL_SERVER_ERROR, "DB error", "DB_ERROR")
})?
.ok_or_else(|| err(StatusCode::UNAUTHORIZED, "Invalid credentials", "INVALID_CREDENTIALS"))?; .ok_or_else(|| err(StatusCode::UNAUTHORIZED, "Invalid credentials", "INVALID_CREDENTIALS"))?;
if employee.status != "ACTIVE" { if employee.status != "ACTIVE" {

View file

@ -1,4 +1,4 @@
CREATE TABLE ai_credit_packages ( CREATE TABLE IF NOT EXISTS ai_credit_packages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(150) NOT NULL, name VARCHAR(150) NOT NULL,
description TEXT, description TEXT,
@ -9,10 +9,16 @@ CREATE TABLE ai_credit_packages (
updated_at TIMESTAMP NOT NULL DEFAULT NOW() updated_at TIMESTAMP NOT NULL DEFAULT NOW()
); );
CREATE INDEX idx_ai_credit_packages_active ON ai_credit_packages(is_active, price_inr); CREATE INDEX IF NOT EXISTS idx_ai_credit_packages_active ON ai_credit_packages(is_active, price_inr);
INSERT INTO ai_credit_packages (name, description, credits, price_inr) VALUES -- name has no unique constraint to key an ON CONFLICT off of, so guard the
('Starter AI Credits', '50 AI credits for casual usage', 50, 99), -- whole seed on the table being empty (this migration only ever ran once
('Pro AI Credits', '200 AI credits for power users', 200, 349), -- successfully; a second run inserted zero extra rows before this fix).
('Business AI Credits', '750 AI credits for teams', 750, 999), INSERT INTO ai_credit_packages (name, description, credits, price_inr)
('Enterprise AI Credits', '2500 AI credits for heavy usage', 2500, 2499); SELECT * FROM (VALUES
('Starter AI Credits', '50 AI credits for casual usage', 50, 99),
('Pro AI Credits', '200 AI credits for power users', 200, 349),
('Business AI Credits', '750 AI credits for teams', 750, 999),
('Enterprise AI Credits', '2500 AI credits for heavy usage', 2500, 2499)
) AS v(name, description, credits, price_inr)
WHERE NOT EXISTS (SELECT 1 FROM ai_credit_packages);

View file

@ -1,5 +1,14 @@
-- Rename Razorpay columns to PayU equivalents on the payments table. -- Rename Razorpay columns to PayU equivalents on the payments table.
-- PayU uses `txnid` (transaction id) and `mihpayid` (PayU payment id) instead of Razorpay's order_id / payment_id. -- PayU uses `txnid` (transaction id) and `mihpayid` (PayU payment id) instead of Razorpay's order_id / payment_id.
-- Guarded so re-running after the first successful rename is a no-op instead
-- of failing with "column razorpay_order_id does not exist".
ALTER TABLE payments RENAME COLUMN razorpay_order_id TO payu_txnid; DO $$
ALTER TABLE payments RENAME COLUMN razorpay_payment_id TO payu_mihpayid; BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'payments' AND column_name = 'razorpay_order_id') THEN
ALTER TABLE payments RENAME COLUMN razorpay_order_id TO payu_txnid;
END IF;
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'payments' AND column_name = 'razorpay_payment_id') THEN
ALTER TABLE payments RENAME COLUMN razorpay_payment_id TO payu_mihpayid;
END IF;
END $$;

View file

@ -3,6 +3,6 @@
BEGIN; BEGIN;
ALTER TABLE users ADD COLUMN litellm_key TEXT; ALTER TABLE users ADD COLUMN IF NOT EXISTS litellm_key TEXT;
COMMIT; COMMIT;