120 lines
3.9 KiB
Bash
120 lines
3.9 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Script pour promouvoir l'utilisateur de test en "artist"
|
||
|
|
# Usage: ./setup-test-user-role.sh
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# Configuration par défaut (peut être surchargée par variables d'environnement)
|
||
|
|
# Valeurs par défaut basées sur docker-compose.yml du projet
|
||
|
|
DB_HOST="${DB_HOST:-localhost}"
|
||
|
|
DB_PORT="${DB_PORT:-5432}"
|
||
|
|
DB_NAME="${DB_NAME:-veza}"
|
||
|
|
DB_USER="${DB_USER:-veza}"
|
||
|
|
DB_PASSWORD="${DB_PASSWORD:-password}"
|
||
|
|
TEST_USER_EMAIL="${TEST_USER_EMAIL:-user@example.com}"
|
||
|
|
POSTGRES_CONTAINER="${POSTGRES_CONTAINER:-veza_postgres}"
|
||
|
|
|
||
|
|
echo "🔧 [SETUP] Promoting test user to 'artist' role..."
|
||
|
|
echo " User: $TEST_USER_EMAIL"
|
||
|
|
echo " Database: $DB_NAME@$DB_HOST:$DB_PORT"
|
||
|
|
|
||
|
|
# Option 1: Utiliser psql directement
|
||
|
|
if command -v psql &> /dev/null; then
|
||
|
|
echo "📝 [SETUP] Using psql..."
|
||
|
|
PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" <<EOF
|
||
|
|
-- Ajouter le rôle artist s'il n'existe pas
|
||
|
|
-- NOTE: display_name est NOT NULL, il faut le fournir
|
||
|
|
INSERT INTO roles (name, display_name, description)
|
||
|
|
VALUES ('artist', 'Artist', 'Artist role for content creation')
|
||
|
|
ON CONFLICT (name) DO NOTHING;
|
||
|
|
|
||
|
|
-- Ajouter le rôle à l'utilisateur
|
||
|
|
-- Ajouter le rôle à l'utilisateur
|
||
|
|
-- NOTE: La colonne 'role' est aussi requise dans user_roles (pour compatibilité)
|
||
|
|
INSERT INTO user_roles (user_id, role_id, role)
|
||
|
|
SELECT
|
||
|
|
u.id,
|
||
|
|
r.id,
|
||
|
|
'artist'
|
||
|
|
FROM users u
|
||
|
|
CROSS JOIN roles r
|
||
|
|
WHERE u.email = '$TEST_USER_EMAIL'
|
||
|
|
AND r.name = 'artist'
|
||
|
|
ON CONFLICT (user_id, role) DO NOTHING;
|
||
|
|
|
||
|
|
-- Vérifier l'email de l'utilisateur (nécessaire pour certains endpoints)
|
||
|
|
UPDATE users
|
||
|
|
SET is_verified = true
|
||
|
|
WHERE email = '$TEST_USER_EMAIL';
|
||
|
|
|
||
|
|
-- Vérification
|
||
|
|
SELECT
|
||
|
|
u.email,
|
||
|
|
r.name as role_name,
|
||
|
|
u.is_verified
|
||
|
|
FROM users u
|
||
|
|
LEFT JOIN user_roles ur ON u.id = ur.user_id
|
||
|
|
LEFT JOIN roles r ON ur.role_id = r.id
|
||
|
|
WHERE u.email = '$TEST_USER_EMAIL';
|
||
|
|
EOF
|
||
|
|
echo "✅ [SETUP] Test user role updated successfully!"
|
||
|
|
|
||
|
|
# Option 2: Utiliser Docker exec si la DB est dans Docker
|
||
|
|
elif command -v docker &> /dev/null; then
|
||
|
|
echo "🐳 [SETUP] Using Docker exec..."
|
||
|
|
|
||
|
|
# Chercher le conteneur PostgreSQL
|
||
|
|
if docker ps --format "{{.Names}}" | grep -q "^${POSTGRES_CONTAINER}$"; then
|
||
|
|
CONTAINER_NAME="$POSTGRES_CONTAINER"
|
||
|
|
elif docker ps --format "{{.Names}}" | grep -qi postgres; then
|
||
|
|
CONTAINER_NAME=$(docker ps --format "{{.Names}}" | grep -i postgres | head -n 1)
|
||
|
|
else
|
||
|
|
echo "❌ [SETUP] No PostgreSQL container found"
|
||
|
|
echo " Tried: $POSTGRES_CONTAINER"
|
||
|
|
echo " Available containers:"
|
||
|
|
docker ps --format "{{.Names}}" || echo " (none running)"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo " Using container: $CONTAINER_NAME"
|
||
|
|
|
||
|
|
docker exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" <<EOF
|
||
|
|
-- Ajouter le rôle artist s'il n'existe pas
|
||
|
|
-- NOTE: display_name est NOT NULL, il faut le fournir
|
||
|
|
INSERT INTO roles (name, display_name, description)
|
||
|
|
VALUES ('artist', 'Artist', 'Artist role for content creation')
|
||
|
|
ON CONFLICT (name) DO NOTHING;
|
||
|
|
|
||
|
|
-- Ajouter le rôle à l'utilisateur
|
||
|
|
-- NOTE: La colonne 'role' est aussi requise dans user_roles (pour compatibilité)
|
||
|
|
INSERT INTO user_roles (user_id, role_id, role)
|
||
|
|
SELECT
|
||
|
|
u.id,
|
||
|
|
r.id,
|
||
|
|
'artist'
|
||
|
|
FROM users u
|
||
|
|
CROSS JOIN roles r
|
||
|
|
WHERE u.email = '$TEST_USER_EMAIL'
|
||
|
|
AND r.name = 'artist'
|
||
|
|
ON CONFLICT (user_id, role) DO NOTHING;
|
||
|
|
|
||
|
|
-- Vérifier l'email de l'utilisateur (nécessaire pour certains endpoints)
|
||
|
|
UPDATE users
|
||
|
|
SET is_verified = true
|
||
|
|
WHERE email = '$TEST_USER_EMAIL';
|
||
|
|
|
||
|
|
-- Vérification
|
||
|
|
SELECT u.email, r.name as role_name, u.is_verified
|
||
|
|
FROM users u
|
||
|
|
LEFT JOIN user_roles ur ON u.id = ur.user_id
|
||
|
|
LEFT JOIN roles r ON ur.role_id = r.id
|
||
|
|
WHERE u.email = '$TEST_USER_EMAIL';
|
||
|
|
EOF
|
||
|
|
echo "✅ [SETUP] Test user role updated successfully!"
|
||
|
|
else
|
||
|
|
echo "❌ [SETUP] Neither psql nor Docker found. Please run the SQL manually:"
|
||
|
|
echo ""
|
||
|
|
cat "$(dirname "$0")/setup-test-user-role.sql"
|
||
|
|
exit 1
|
||
|
|
fi
|