Загрузка данных


import sys
import os

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

from backend.app import app
from backend.db import db
from backend.models import Candidate, Resume, Vacancy


def create_candidate(vk_user_id, full_name, email, phone):
    candidate = Candidate(
        vk_user_id=vk_user_id,
        full_name=full_name,
        email=email,
        phone=phone,
    )

    db.session.add(candidate)
    db.session.flush()

    return candidate


def create_resume(candidate, vacancy, file_name, raw_text, parsed_json):
    resume = Resume(
        candidate_id=candidate.id,
        vacancy_id=vacancy.id,
        file_name=file_name,
        raw_text=raw_text.strip(),
        parsed_json=parsed_json,
    )

    db.session.add(resume)
    db.session.flush()

    return resume


with app.app_context():

    vacancy = Vacancy(
        title="Data Analyst (Middle)",
        department="Data Analytics",

        description="""
Анализ бизнес-данных;
Подготовка аналитических отчетов;
Создание дашбордов;
Работа с SQL-запросами;
Визуализация данных;
Поиск закономерностей и метрик;
Взаимодействие с бизнес-командой.
""".strip(),

        requirements="""
Опыт работы аналитиком от 2 лет;
Уверенное знание SQL;
Навыки работы с Power BI или Tableau;
Понимание метрик и KPI;
Навыки визуализации данных;
Опыт обработки больших объемов данных;
Базовые знания Python будут преимуществом.
""".strip(),

        skills=[
            "SQL",
            "Power BI",
            "Tableau",
            "Python",
            "Data Analysis",
            "Excel",
            "Visualization",
            "KPI",
            "Statistics",
            "Pandas"
        ],

        is_active=True,
    )

    db.session.add(vacancy)
    db.session.flush()

    resumes_data = [

        {
            "vk_user_id": "400001",
            "full_name": "Орлова Виктория Сергеевна",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 3,

            "skills": [
                "SQL",
                "Power BI",
                "Excel",
                "Python",
                "Pandas"
            ],

            "raw_text": """
Орлова Виктория Сергеевна
Data Analyst

Опыт работы: 3 года.

Анализировала продуктовые метрики, строила дашборды в Power BI, работала с SQL и Python для обработки данных.

Навыки: SQL, Power BI, Excel, Python, Pandas.
"""
        },

        {
            "vk_user_id": "400002",
            "full_name": "Семенов Артем Павлович",
            "level": "Junior",
            "match_level": "medium",
            "experience_years": 1,

            "skills": [
                "SQL",
                "Excel",
                "Tableau"
            ],

            "raw_text": """
Семенов Артем Павлович
Junior Data Analyst

Опыт работы: 1 год.

Готовил отчеты в Excel и Tableau, писал SQL-запросы для аналитики продаж.

Навыки: SQL, Excel, Tableau.
"""
        },

        {
            "vk_user_id": "400003",
            "full_name": "Кузьмина Дарья Андреевна",
            "level": "Senior",
            "match_level": "high",
            "experience_years": 6,

            "skills": [
                "SQL",
                "Python",
                "Power BI",
                "Statistics",
                "Pandas",
                "Machine Learning"
            ],

            "raw_text": """
Кузьмина Дарья Андреевна
Senior Data Analyst

Опыт работы: 6 лет.

Разрабатывала аналитические модели, автоматизировала отчетность, анализировала продуктовые KPI и строила BI-дашборды.

Навыки: SQL, Python, Power BI, Statistics, Pandas, Machine Learning.
"""
        },

        {
            "vk_user_id": "400004",
            "full_name": "Лазарев Дмитрий Игоревич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 4,

            "skills": [
                "SQL",
                "Power BI",
                "KPI",
                "Excel"
            ],

            "raw_text": """
Лазарев Дмитрий Игоревич
BI Analyst

Опыт работы: 4 года.

Создавал BI-дашборды и анализировал ключевые метрики бизнеса. Работал с SQL и Excel.

Навыки: SQL, Power BI, KPI, Excel.
"""
        },

        {
            "vk_user_id": "400005",
            "full_name": "Тихонова Алина Евгеньевна",
            "level": "Low",
            "match_level": "low",
            "experience_years": 2,

            "skills": [
                "SMM",
                "Marketing",
                "Canva"
            ],

            "raw_text": """
Тихонова Алина Евгеньевна
SMM-специалист

Опыт работы: 2 года.

Работала в digital-маркетинге и занималась ведением социальных сетей.

Навыки: SMM, Marketing, Canva.
"""
        },

        {
            "vk_user_id": "400006",
            "full_name": "Поляков Кирилл Максимович",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 3,

            "skills": [
                "SQL",
                "Python",
                "Pandas",
                "Visualization"
            ],

            "raw_text": """
Поляков Кирилл Максимович
Data Analyst

Опыт работы: 3 года.

Проводил анализ пользовательских данных, строил визуализации и автоматизировал отчеты.

Навыки: SQL, Python, Pandas, Visualization.
"""
        },

        {
            "vk_user_id": "400007",
            "full_name": "Гусева Мария Алексеевна",
            "level": "Trainee",
            "match_level": "medium",
            "experience_years": 0.5,

            "skills": [
                "Excel",
                "SQL",
                "Power BI"
            ],

            "raw_text": """
Гусева Мария Алексеевна
Стажер Data Analyst

Опыт работы: 6 месяцев.

Проходила стажировку по аналитике данных, работала с Excel и SQL.

Навыки: Excel, SQL, Power BI.
"""
        },

        {
            "vk_user_id": "400008",
            "full_name": "Егоров Никита Владимирович",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 5,

            "skills": [
                "SQL",
                "Tableau",
                "Python",
                "KPI"
            ],

            "raw_text": """
Егоров Никита Владимирович
Product Analyst

Опыт работы: 5 лет.

Анализировал продуктовые метрики, строил Tableau-дашборды и работал с SQL и Python.

Навыки: SQL, Tableau, Python, KPI.
"""
        },

        {
            "vk_user_id": "400009",
            "full_name": "Жданова Оксана Ильинична",
            "level": "Low",
            "match_level": "low",
            "experience_years": 1,

            "skills": [
                "HR",
                "Communication",
                "Recruitment"
            ],

            "raw_text": """
Жданова Оксана Ильинична
HR-специалист

Опыт работы: 1 год.

Подбирала персонал и занималась HR-документооборотом.

Навыки: HR, Communication, Recruitment.
"""
        },

        {
            "vk_user_id": "400010",
            "full_name": "Чернов Илья Сергеевич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 4,

            "skills": [
                "SQL",
                "Python",
                "Power BI",
                "Statistics"
            ],

            "raw_text": """
Чернов Илья Сергеевич
Data Analyst

Опыт работы: 4 года.

Занимался аналитикой продаж и финансовых показателей. Разрабатывал дашборды и SQL-отчеты.

Навыки: SQL, Python, Power BI, Statistics.
"""
        },
    ]

    for item in resumes_data:

        candidate = create_candidate(
            vk_user_id=item["vk_user_id"],
            full_name=item["full_name"],
            email=f'{item["vk_user_id"]}@example.com',
            phone="+375290000000",
        )

        create_resume(
            candidate=candidate,
            vacancy=vacancy,
            file_name=f'{item["vk_user_id"]}_resume.txt',
            raw_text=item["raw_text"],
            parsed_json={
                "full_name": item["full_name"],
                "target_vacancy_id": vacancy.id,
                "target_vacancy": vacancy.title,
                "level": item["level"],
                "match_level": item["match_level"],
                "experience_years": item["experience_years"],
                "skills": item["skills"],
            }
        )

    db.session.commit()

    print("✅ Data Analyst dataset added")
    print("Vacancies:", Vacancy.query.count())
    print("Candidates:", Candidate.query.count())
    print("Resumes:", Resume.query.count())

    print("New Vacancy ID:", vacancy.id)
    print("Resume IDs:", [r.id for r in vacancy.resumes])