/
gr.ev.vl
/
TestGen
Обзор
Документация
Войти
/
gr.ev.vl
/
TestGen
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master2
scripts/Init_BD.cmd
587 строк
22 KB
gr.ev.vl
Initial commit
06 июн 2026, 02:41
06 июн 2026, 02:41
02fb1fb
Код
Авторство
О чём код?
@echo off chcp 1251 >nul setlocal enabledelayedexpansion :: ============================================================================= :: TestGen � ��������� � ������������� ��� ������ (PostgreSQL + Redis) :: :: ��� ������: :: 1. ��������� ����������� PostgreSQL � Redis :: 2. ������ ���� ������ PostgreSQL (���� �� ����������) :: 3. ������ ������������ PostgreSQL (���� �� ����������) :: 4. ����������� ���������� PostgreSQL (uuid-ossp, pgcrypto, pgvector) :: 5. ��������� �������� Alembic :: 6. ����������� Redis (�������� �����������, ��������� persistence) :: 7. ������ ������� � ����������� PostgreSQL :: 8. ��������� �� ���������� ������� (�����������) :: 9. ������ ����������������� (�����������) :: ============================================================================= title TestGen � ��������� ��� ������ echo. echo �==============================================================� echo � TestGen � ��������� � ������������� ��� ������ � echo � PostgreSQL + Redis � echo L==============================================================- echo. :: ============================================================================= :: ����������� ����� :: ============================================================================= set "SCRIPT_DIR=%~dp0" set "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%" set "PROJECT_DIR=%SCRIPT_DIR%" set "BACKEND_DIR=%PROJECT_DIR%\..\backend" set "ENV_FILE=%PROJECT_DIR%\.env" cd /d "%PROJECT_DIR%" :: ============================================================================= :: �������� ���������� �� .env :: ============================================================================= echo [1/15] �������� ������������ �� .env... if not exist "%ENV_FILE%" ( echo [!] ���� .env �� ������. ������������ �������� �� ���������. set "DB_HOST=localhost" set "DB_PORT=5432" set "DB_NAME=testgen" set "DB_USER=postgres" set "DB_PASSWORD=1234" set "REDIS_HOST=localhost" set "REDIS_PORT=6379" set "REDIS_PASSWORD=" set "REDIS_DB=0" ) else ( echo [v] �������� ���������� �� .env... :: ������� .env ����� for /f "tokens=1,2 delims==" %%a in ('type "%ENV_FILE%" ^| findstr /b /v "#" ^| findstr "="') do ( set "%%a=%%b" ) :: ��������� �������� �� ��������� ��� ������������� ���������� if not defined DB_HOST set "DB_HOST=localhost" if not defined DB_PORT set "DB_PORT=5432" if not defined DB_NAME set "DB_NAME=testgen" if not defined DB_USER set "DB_USER=testgen" if not defined DB_PASSWORD set "DB_PASSWORD=1234" if not defined REDIS_HOST set "REDIS_HOST=localhost" if not defined REDIS_PORT set "REDIS_PORT=6379" if not defined REDIS_DB set "REDIS_DB=0" ) echo. :: ============================================================================= :: �������� ����������� PostgreSQL :: ============================================================================= echo [2/15] �������� ����������� PostgreSQL... :: ��������, ���������� �� psql where psql >nul 2>&1 if %errorlevel% neq 0 ( echo [!] psql �� ������ � PATH. echo ���������, ��� PostgreSQL ���������� � psql ��������. echo ���� ������: C:\Program Files\PostgreSQL\16\bin echo. :: ������� ����� psql � ����������� ����� set "PSQL_PATH=" for /d %%i in ("C:\Program Files\PostgreSQL\*\bin") do ( if exist "%%i\psql.exe" ( set "PSQL_PATH=%%i" ) ) if defined PSQL_PATH ( echo [v] ������ psql: !PSQL_PATH!\psql.exe set "PATH=!PSQL_PATH!;!PATH!" set "PG_BIN_DIR=!PSQL_PATH!" ) else ( echo [X] PostgreSQL �� ������. echo ���������� PostgreSQL 16+: https://www.postgresql.org/download/windows/ pause exit /b 1 ) ) else ( for /f "tokens=*" %%i in ('where psql') do set "PG_BIN_DIR=%%~dpi" echo [v] psql ������. ) :: �������� ����������� � PostgreSQL set "PGPASSWORD=%DB_PASSWORD%" psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d postgres -c "SELECT 1;" >nul 2>&1 if %errorlevel% neq 0 ( echo [!] �� ������� ������������ � PostgreSQL ��� %DB_USER%. echo ���������, ��� PostgreSQL ������� � ��������� ����������� �����. echo. echo ������� ����������� � postgres � ������������� postgres... psql -h %DB_HOST% -p %DB_PORT% -U postgres -d postgres -c "SELECT 1;" >nul 2>&1 if %errorlevel% neq 0 ( echo [X] �� ������� ������������ � PostgreSQL. echo ���������, ���: echo - PostgreSQL ������� (services.msc ^> postgresql) echo - ���� %DB_PORT% �������� echo - ������������ ���������� pause exit /b 1 ) else ( echo [v] ����������� ����� ������������ postgres �������. set "ADMIN_USER=postgres" set "NEED_CREATE_USER=1" ) ) else ( echo [v] ����������� � PostgreSQL �������. set "ADMIN_USER=%DB_USER%" set "NEED_CREATE_USER=0" ) echo. :: ============================================================================= :: �������� ������������ PostgreSQL (���� �����) :: ============================================================================= if "%NEED_CREATE_USER%"=="1" ( echo [3/15] �������� ������������ PostgreSQL... :: �������� ������������� ������������ psql -h %DB_HOST% -p %DB_PORT% -U postgres -d postgres -t -c "SELECT 1 FROM pg_roles WHERE rolname='%DB_USER%';" > "%TEMP%\pg_user_check.tmp" 2>&1 set /p USER_EXISTS=<"%TEMP%\pg_user_check.tmp" del "%TEMP%\pg_user_check.tmp" >nul 2>&1 if "!USER_EXISTS!"=="1" ( echo [v] ������������ %DB_USER% ��� ����������. ) else ( echo �������� ������������ %DB_USER%... psql -h %DB_HOST% -p %DB_PORT% -U postgres -d postgres -c "CREATE USER %DB_USER% WITH PASSWORD '%DB_PASSWORD%';" 2>&1 if %errorlevel% neq 0 ( echo [X] ������ �������� ������������. pause exit /b 1 ) psql -h %DB_HOST% -p %DB_PORT% -U postgres -d postgres -c "ALTER USER %DB_USER% CREATEDB;" 2>&1 echo [v] ������������ %DB_USER% ������. ) echo. ) else ( echo [3/15] ������������ PostgreSQL ��� ��������. echo. ) :: ============================================================================= :: �������� ���� ������ :: ============================================================================= echo [4/15] �������� ���� ������... :: �������� ������������� �� psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d postgres -t -c "SELECT 1 FROM pg_database WHERE datname='%DB_NAME%';" > "%TEMP%\pg_db_check.tmp" 2>&1 set /p DB_EXISTS=<"%TEMP%\pg_db_check.tmp" del "%TEMP%\pg_db_check.tmp" >nul 2>&1 if "!DB_EXISTS!"=="1" ( echo [v] ���� ������ %DB_NAME% ��� ����������. echo. echo ��������: ���� ������ ��� ����������. set /p RECREATE="����������� ���� ������? ��� ������ ����� �������! (y/n) [n]: " if /i "!RECREATE!"=="y" ( echo �������� ������������ ���� ������... psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d postgres -c "DROP DATABASE IF EXISTS %DB_NAME%;" 2>&1 if %errorlevel% neq 0 ( echo [X] ������ �������� ���� ������. pause exit /b 1 ) set "DB_EXISTS=0" echo [v] ���� ������ �������. ) echo. ) if not "!DB_EXISTS!"=="1" ( echo �������� ���� ������ %DB_NAME%... psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d postgres -c "CREATE DATABASE %DB_NAME% OWNER %DB_USER% ENCODING 'UTF8' LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8' TEMPLATE template0;" 2>&1 :: ���� �� ������� ������� � ������� �������, ������� � ������� �� ��������� if %errorlevel% neq 0 ( echo [!] �� ������� ������� � ������� �������. ������������ ������ �� ���������. psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d postgres -c "CREATE DATABASE %DB_NAME% OWNER %DB_USER% ENCODING 'UTF8';" 2>&1 ) if %errorlevel% neq 0 ( echo [X] ������ �������� ���� ������. pause exit /b 1 ) echo [v] ���� ������ %DB_NAME% �������. ) echo. :: ============================================================================= :: ��������� ���������� PostgreSQL :: ============================================================================= echo [5/15] ��������� ���������� PostgreSQL... echo �������� ����������... psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";" 2>&1 if %errorlevel% neq 0 ( echo [!] ��������������: �� ������� ������� ���������� uuid-ossp. ) psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "CREATE EXTENSION IF NOT EXISTS \"pgcrypto\";" 2>&1 if %errorlevel% neq 0 ( echo [!] ��������������: �� ������� ������� ���������� pgcrypto. ) :: �������� � ��������� pgvector ::echo �������� ���������� pgvector... ::psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "CREATE EXTENSION IF NOT EXISTS \"vector\";" 2>&1 ::if %errorlevel% neq 0 ( :: echo [!] ��������������: �� ������� ������� ���������� vector (pgvector). :: echo ��� ��������� pgvector: :: echo 1. �������� pgvector: https://github.com/pgvector/pgvector :: echo 2. ��� ����������� Docker-�����: pgvector/pgvector:pg16 :: echo. :: echo ������� ����� �������� ��� �������������� ��������� ������������. ::) echo [v] ���������� ���������. echo. :: ============================================================================= :: ��������� ���� ������� :: ============================================================================= echo [6/15] ��������� ���� �������... psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "GRANT ALL PRIVILEGES ON DATABASE %DB_NAME% TO %DB_USER%;" 2>&1 psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "GRANT ALL ON SCHEMA public TO %DB_USER%;" 2>&1 psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO %DB_USER%;" 2>&1 psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO %DB_USER%;" 2>&1 echo [v] ����� ������� ���������. echo. :: ============================================================================= :: ��������� ���������� PostgreSQL :: ============================================================================= echo [7/15] ����������� ���������� PostgreSQL... psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "ALTER SYSTEM SET max_connections = '100';" 2>&1 psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "ALTER SYSTEM SET shared_buffers = '256MB';" 2>&1 psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "ALTER SYSTEM SET effective_cache_size = '1GB';" 2>&1 psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "ALTER SYSTEM SET work_mem = '16MB';" 2>&1 psql -h %DB_HOST% -p %DB_PORT% -U %ADMIN_USER% -d %DB_NAME% -c "ALTER SYSTEM SET maintenance_work_mem = '128MB';" 2>&1 echo [v] ��������� PostgreSQL ��������������. echo [!] ��� ���������� ��������� ������������� PostgreSQL. echo. :: ============================================================================= :: �������� ����������� Redis :: ============================================================================= echo [8/15] �������� ����������� Redis... where redis-cli >nul 2>&1 if %errorlevel% neq 0 ( echo [!] redis-cli �� ������ � PATH. echo Redis CLI ����� ���������� �������� ��� ������������ Docker. echo �������� ����� ��������� ����� Python. set "REDIS_CLI_AVAILABLE=0" ) else ( set "REDIS_CLI_AVAILABLE=1" echo [v] redis-cli ������. :: �������� ����������� if defined REDIS_PASSWORD ( redis-cli -h %REDIS_HOST% -p %REDIS_PORT% -a "%REDIS_PASSWORD%" --no-auth-warning ping >nul 2>&1 ) else ( redis-cli -h %REDIS_HOST% -p %REDIS_PORT% ping >nul 2>&1 ) if %errorlevel% equ 0 ( echo [v] ����������� � Redis �������. set "REDIS_OK=1" ) else ( echo [!] �� ������� ������������ � Redis. echo ���������, ��� Redis ������� � �������� �� ������ %REDIS_HOST%:%REDIS_PORT% set "REDIS_OK=0" ) ) echo. :: ============================================================================= :: ��������� Redis :: ============================================================================= echo [9/15] ��������� Redis... if "%REDIS_CLI_AVAILABLE%"=="1" if "%REDIS_OK%"=="1" ( echo ��������� ���������� Redis... ) else ( echo [!] Redis CLI ����������. ���������� ���������. echo Redis ����� �������� ����� ���������� ��������� ��� ������� ����������. exit ) :: ��������� maxmemory redis-cli -h %REDIS_HOST% -p %REDIS_PORT% CONFIG SET maxmemory 256mb :: ��������� �������� �������� redis-cli -h %REDIS_HOST% -p %REDIS_PORT% CONFIG SET maxmemory-policy allkeys-lru :: ��������� AOF persistence redis-cli -h %REDIS_HOST% -p %REDIS_PORT% CONFIG SET appendonly yes :: ���������� ������������ redis-cli -h %REDIS_HOST% -p %REDIS_PORT% CONFIG REWRITE echo [v] Redis ��������: echo - maxmemory: 256MB echo - ��������: allkeys-lru echo - persistence: AOF :: ������� �������� �� (���� ������������) echo ������� �������� ���� ������ Redis (DB %REDIS_DB%)... redis-cli -h %REDIS_HOST% -p %REDIS_PORT% -n %REDIS_DB% FLUSHDB echo [v] ���� ������ Redis %REDIS_DB% �������. echo. :: ============================================================================= :: ���������� �������� Alembic :: ============================================================================= echo [10/15] ���������� �������� ���� ������... cd /d "%BACKEND_DIR%" :: �������� ������� Python � ������������ ��������� if exist "%BACKEND_DIR%\.venv\Scripts\python.exe" ( set "PYTHON=%BACKEND_DIR%\.venv\Scripts\python.exe" echo [v] ������������ ����������� ���������. ) else ( where python >nul 2>&1 if %errorlevel% neq 0 ( echo [X] Python �� ������. �������� �� ����� ���� ���������. pause exit /b 1 ) set "PYTHON=python" echo [!] ����������� ��������� �� �������. ������������ ��������� Python. ) :: �������� alembic %PYTHON% -c "import alembic" if %errorlevel% neq 0 ( echo [!] Alembic �� ����������. ���������... %PYTHON% -m pip install alembic --quiet ) :: ��������� ���������� ��������� ��� ����������� set "DATABASE_URL=postgresql://%DB_USER%:%DB_PASSWORD%@%DB_HOST%:%DB_PORT%/%DB_NAME%" :: ������������� �������� echo ������������������ ��: :: %PYTHON% -m alembic init migrations %PYTHON% -m alembic revision --autogenerate -m "initial" :: �������� ������� ������ �������� echo ������� ������ ����� ��: %PYTHON% -m alembic current :: ���������� �������� echo. echo ���������� ��������... %PYTHON% -m alembic upgrade head if %errorlevel% neq 0 ( echo [X] ������ ���������� ��������. echo ���������: echo - ����������� ���� ������ echo - ����� ������������ %DB_USER% echo - ������� ������ pause exit /b 1 ) echo [v] �������� ��������� �������. echo. :: ============================================================================= :: �������� �������� (�������������� �����������) :: ============================================================================= echo [11/15] �������� �������������� ��������... set "PGPASSWORD=%DB_PASSWORD%" psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -c ^ "CREATE INDEX IF NOT EXISTS idx_questions_subtopic_status ON questions(subtopic_id, status); ^ CREATE INDEX IF NOT EXISTS idx_questions_bloom ON questions(bloom_level); ^ CREATE INDEX IF NOT EXISTS idx_distractors_question_type ON question_distractors(question_id, distractor_type); ^ CREATE INDEX IF NOT EXISTS idx_misconceptions_subtopic_status ON misconceptions(subtopic_id, status); ^ CREATE INDEX IF NOT EXISTS idx_generation_runs_subtopic_status ON generation_runs(subtopic_id, status); ^ CREATE INDEX IF NOT EXISTS idx_verification_question_type ON verification_results(question_id, verification_type); " if %errorlevel% equ 0 ( echo [v] �������������� ������� �������. ) else ( echo [!] ��������������: �� ������� ������� ��������� �������. ) echo. :: ============================================================================= :: ������� ��������� ������ (������) :: ============================================================================= echo [12/15] ������� ����������������� �������... psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -c ^ "INSERT INTO prompts (id, name, prompt_type, description, is_system, is_active, created_at, updated_at) ^ VALUES ^ (gen_random_uuid(), 'question_generation_v1', 'question_generation', '������� ��������� �������� ��������', true, true, now(), now()), ^ (gen_random_uuid(), 'misconception_generation_v1', 'misconception_generation', '��������� ������� �����������', true, true, now(), now()), ^ (gen_random_uuid(), 'distractor_generation_v1', 'distractor_generation', '��������� ������������', true, true, now(), now()), ^ (gen_random_uuid(), 'question_verification_v1', 'question_verification', '����������� ��������', true, true, now(), now()), ^ (gen_random_uuid(), 'distractor_verification_v1', 'distractor_verification', '����������� ������������', true, true, now(), now()) ^ ON CONFLICT (name) DO NOTHING; " :: ============================================================================= :: �������� ����������������� :: ============================================================================= echo [13/15] �������� �����������������... echo. echo ������ �������������� �� ���������: echo Email: admin@testgen.local echo ������: Admin123! echo. set /p CREATE_ADMIN="������� �������������� � ����������� �� ���������? (y/n) [y]: " if "%CREATE_ADMIN%"=="" set "CREATE_ADMIN=y" if /i "%CREATE_ADMIN%"=="y" ( set /p ADMIN_EMAIL="Email [admin@testgen.local]: " if "!ADMIN_EMAIL!"=="" set "ADMIN_EMAIL=admin@testgen.local" set /p ADMIN_PASS="������ [Admin123!]: " if "!ADMIN_PASS!"=="" set "ADMIN_PASS=Admin123!" set /p ADMIN_NAME="��� [�������������]: " if "!ADMIN_NAME!"=="" set "ADMIN_NAME=�������������" echo. echo �������� ������������... cd /d "%BACKEND_DIR%" %PYTHON% scripts/create_superuser.py --email "!ADMIN_EMAIL!" --password "!ADMIN_PASS!" --name "!ADMIN_NAME!" if %errorlevel% neq 0 ( echo [!] ������ �������� �����������������. ) else ( echo [v] ����������������� ������. ) echo. ) else ( echo ���������. �������� ������������ �����: echo cd backend echo python scripts/create_superuser.py echo. ) :: ============================================================================= :: ���������� ��������� ������� :: ============================================================================= echo [14/15] ���������� ��������� �������... echo. echo �������� ������ ��������: echo - ����-����� � ������ � ��������� echo - �������� ������ echo - ������ ���������� ����� echo - ��������� ������������� echo. set /p SEED_DATA="��������� �������� ������? (y/n) [n]: " if /i "!SEED_DATA!"=="y" ( cd /d "%BACKEND_DIR%" %PYTHON% scripts/seed_data.py if %errorlevel% neq 0 ( echo [!] ������ �������� �������� ������. ) else ( echo [v] �������� ������ ���������. ) echo. ) else ( echo ���������. ��������� ������ �����: echo cd backend echo python scripts/seed_data.py echo. ) :: ������� ������ ������� (���������� ����������, ������ ������ � ����� ���������) psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -c ^ "INSERT INTO prompt_versions (id, prompt_id, version_number, content, variables, response_format, is_current, created_by, created_at, updated_at) ^ SELECT ^ gen_random_uuid(), p.id, 1, '���������� {{count}} �������� �� ���� {{subtopic_name}}.', '{}'::jsonb, '{}'::jsonb, true, (SELECT id FROM users WHERE role = 'admin' LIMIT 1), now(), now() ^ FROM prompts p ^ WHERE NOT EXISTS ( SELECT 1 FROM prompt_versions pv WHERE pv.prompt_id = p.id ); " echo [v] ����������������� ������ ���������. echo. :: ============================================================================= :: ���������������� ���������� � �� :: ============================================================================= echo [14/15] ���������������� ���������� gigachat � �� echo. cd /d "%BACKEND_DIR%" %PYTHON% scripts/register_gigachat.py :: uv run python scripts/register_gigachat.py :: ============================================================================= :: �������� ��������� ��������� :: ============================================================================= echo [15/15] �������� ��������� ���������... echo. echo �������� PostgreSQL... psql -h %DB_HOST% -p %DB_PORT% -U %DB_USER% -d %DB_NAME% -c ^ " SELECT ^ (SELECT COUNT(*) FROM users) AS users_count, ^ (SELECT COUNT(*) FROM courses) AS courses_count, ^ (SELECT COUNT(*) FROM topics) AS topics_count, ^ (SELECT COUNT(*) FROM questions) AS questions_count, ^ (SELECT COUNT(*) FROM prompts) AS prompts_count; " 2>&1 echo. if "%REDIS_CLI_AVAILABLE%"=="1" if "%REDIS_OK%"=="1" ( echo �������� Redis... redis-cli -h %REDIS_HOST% -p %REDIS_PORT% INFO stats | findstr "keyspace" echo. ) :: ============================================================================= :: ���������� :: ============================================================================= echo �==============================================================� echo � ��������� ��� ������ ���������! � echo L==============================================================- echo. echo ��������� �����������: echo PostgreSQL: %DB_HOST%:%DB_PORT%/%DB_NAME% echo ������������: %DB_USER% echo Redis: %REDIS_HOST%:%REDIS_PORT% (DB %REDIS_DB%) echo. echo ����������: echo ��������: cd backend ^&^& alembic upgrade head echo �����: cd backend ^&^& alembic downgrade -1 echo �������: cd backend ^&^& alembic history echo. echo ������ ����������: echo Docker: docker compose up -d echo ��������: ��. README.md echo. pause exit /b 0