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


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 Scientist (Middle)",
        department="AI & Data Science",

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

        requirements="""
Опыт работы Data Scientist от 2 лет;
Уверенное знание Python;
Опыт работы с Pandas, NumPy, Scikit-learn;
Понимание ML-алгоритмов;
Навыки анализа данных;
Опыт работы с SQL;
Опыт работы с нейронными сетями будет преимуществом.
""".strip(),

        skills=[
            "Python",
            "Machine Learning",
            "Pandas",
            "NumPy",
            "Scikit-learn",
            "SQL",
            "Deep Learning",
            "TensorFlow",
            "PyTorch",
            "Data Analysis"
        ],

        is_active=True,
    )

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

    resumes_data = [

        {
            "vk_user_id": "500001",
            "full_name": "Крылов Максим Сергеевич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 3,

            "skills": [
                "Python",
                "Pandas",
                "Scikit-learn",
                "SQL",
                "Machine Learning"
            ],

            "raw_text": """
Крылов Максим Сергеевич
Data Scientist

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

Разрабатывал ML-модели для прогнозирования пользовательского поведения и анализа данных.

Навыки: Python, Pandas, Scikit-learn, SQL, Machine Learning.
"""
        },

        {
            "vk_user_id": "500002",
            "full_name": "Морозова Анна Дмитриевна",
            "level": "Junior",
            "match_level": "medium",
            "experience_years": 1,

            "skills": [
                "Python",
                "NumPy",
                "Pandas"
            ],

            "raw_text": """
Морозова Анна Дмитриевна
Junior Data Scientist

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

Участвовала в анализе данных и обучении моделей классификации.

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

        {
            "vk_user_id": "500003",
            "full_name": "Соловьев Илья Викторович",
            "level": "Senior",
            "match_level": "high",
            "experience_years": 7,

            "skills": [
                "Python",
                "TensorFlow",
                "PyTorch",
                "Deep Learning",
                "SQL"
            ],

            "raw_text": """
Соловьев Илья Викторович
Senior Data Scientist

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

Разрабатывал deep learning модели и рекомендательные системы для e-commerce платформ.

Навыки: Python, TensorFlow, PyTorch, Deep Learning, SQL.
"""
        },

        {
            "vk_user_id": "500004",
            "full_name": "Елисеева Полина Андреевна",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 4,

            "skills": [
                "Python",
                "Scikit-learn",
                "Pandas",
                "Machine Learning"
            ],

            "raw_text": """
Елисеева Полина Андреевна
ML Engineer

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

Работала над задачами прогнозирования спроса и сегментации клиентов.

Навыки: Python, Scikit-learn, Pandas, Machine Learning.
"""
        },

        {
            "vk_user_id": "500005",
            "full_name": "Тарасов Никита Олегович",
            "level": "Low",
            "match_level": "low",
            "experience_years": 2,

            "skills": [
                "Java",
                "Spring",
                "REST API"
            ],

            "raw_text": """
Тарасов Никита Олегович
Java Developer

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

Разрабатывал backend-сервисы на Java и Spring.

Навыки: Java, Spring, REST API.
"""
        },

        {
            "vk_user_id": "500006",
            "full_name": "Киселева Дарья Игоревна",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 3,

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

            "raw_text": """
Киселева Дарья Игоревна
Data Scientist

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

Занималась обработкой данных и разработкой ML-моделей для финансового сектора.

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

        {
            "vk_user_id": "500007",
            "full_name": "Беляев Артем Константинович",
            "level": "Trainee",
            "match_level": "medium",
            "experience_years": 0.5,

            "skills": [
                "Python",
                "Pandas",
                "Jupyter"
            ],

            "raw_text": """
Беляев Артем Константинович
Стажер Data Science

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

Проходил стажировку по анализу данных и построению ML-моделей.

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

        {
            "vk_user_id": "500008",
            "full_name": "Леонтьев Роман Евгеньевич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 5,

            "skills": [
                "Python",
                "Machine Learning",
                "SQL",
                "TensorFlow"
            ],

            "raw_text": """
Леонтьев Роман Евгеньевич
Machine Learning Engineer

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

Разрабатывал ML-сервисы и модели прогнозирования для fintech-продуктов.

Навыки: Python, Machine Learning, SQL, TensorFlow.
"""
        },

        {
            "vk_user_id": "500009",
            "full_name": "Жукова Ольга Максимовна",
            "level": "Low",
            "match_level": "low",
            "experience_years": 1,

            "skills": [
                "Excel",
                "Accounting",
                "1C"
            ],

            "raw_text": """
Жукова Ольга Максимовна
Бухгалтер

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

Работала с финансовой отчетностью и 1С.

Навыки: Excel, Accounting, 1C.
"""
        },

        {
            "vk_user_id": "500010",
            "full_name": "Фролов Денис Алексеевич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 4,

            "skills": [
                "Python",
                "PyTorch",
                "Deep Learning",
                "Pandas"
            ],

            "raw_text": """
Фролов Денис Алексеевич
Data Scientist

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

Разрабатывал нейронные сети и NLP-модели для обработки текстовых данных.

Навыки: Python, PyTorch, Deep Learning, Pandas.
"""
        },
    ]

    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 Scientist 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])