kontenhumas-be/docs/migrations/003_add_client_slug_field.sql

43 lines
1.2 KiB
MySQL
Raw Normal View History

2025-10-12 10:55:35 +00:00
-- Migration: Add slug field to clients table
-- Description: Adds a unique slug field to the clients table for URL-friendly client identification
ALTER TABLE clients
ADD COLUMN slug VARCHAR(255);
-- Add unique index on slug field
CREATE UNIQUE INDEX IF NOT EXISTS idx_clients_slug ON clients(slug);
-- Add comment
COMMENT ON COLUMN clients.slug IS 'URL-friendly slug generated from client name';
-- Update existing records with slugs based on their names
-- Note: This will generate slugs for existing clients
UPDATE clients
SET slug = LOWER(
REGEXP_REPLACE(
REGEXP_REPLACE(name, '[^a-zA-Z0-9\s-]', '', 'g'),
'\s+', '-', 'g'
)
)
WHERE slug IS NULL OR slug = '';
-- Handle potential duplicates by appending numbers
WITH numbered_slugs AS (
SELECT
id,
slug,
ROW_NUMBER() OVER (PARTITION BY slug ORDER BY created_at) as rn
FROM clients
WHERE slug IS NOT NULL
)
UPDATE clients
SET slug = CASE
WHEN ns.rn > 1 THEN ns.slug || '-' || ns.rn
ELSE ns.slug
END
FROM numbered_slugs ns
WHERE clients.id = ns.id AND ns.rn > 1;
-- Make slug field NOT NULL after populating existing data
ALTER TABLE clients ALTER COLUMN slug SET NOT NULL;