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
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:
parent
e80ce2901c
commit
bb616c6db1
4 changed files with 29 additions and 11 deletions
|
|
@ -70,7 +70,10 @@ async fn login(
|
|||
|
||||
let employee = EmployeeRepository::get_by_email(&state.pool, &email)
|
||||
.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"))?;
|
||||
|
||||
if employee.status != "ACTIVE" {
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
name VARCHAR(150) NOT NULL,
|
||||
description TEXT,
|
||||
|
|
@ -9,10 +9,16 @@ CREATE TABLE ai_credit_packages (
|
|||
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
|
||||
('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);
|
||||
-- name has no unique constraint to key an ON CONFLICT off of, so guard the
|
||||
-- whole seed on the table being empty (this migration only ever ran once
|
||||
-- successfully; a second run inserted zero extra rows before this fix).
|
||||
INSERT INTO ai_credit_packages (name, description, credits, price_inr)
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,14 @@
|
|||
-- 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.
|
||||
-- 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;
|
||||
ALTER TABLE payments RENAME COLUMN razorpay_payment_id TO payu_mihpayid;
|
||||
DO $$
|
||||
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 $$;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@
|
|||
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE users ADD COLUMN litellm_key TEXT;
|
||||
ALTER TABLE users ADD COLUMN IF NOT EXISTS litellm_key TEXT;
|
||||
|
||||
COMMIT;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue