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


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="Product Manager (Middle)",
        department="Product Management",
        description="""
Разработка и развитие цифровых продуктов;
Сбор и приоритизация требований;
Формирование roadmap продукта;
Работа с аналитикой и пользовательскими метриками;
Постановка задач команде разработки;
Проведение customer development;
Участие в A/B тестировании;
Взаимодействие с дизайнерами, аналитиками и разработчиками.
""".strip(),

        requirements="""
Опыт работы Product Manager от 2 лет;
Понимание Agile/Scrum;
Навыки работы с Jira и Confluence;
Опыт анализа продуктовых метрик;
Умение формировать backlog;
Навыки проведения CustDev;
Понимание UX/UI;
Навыки коммуникации и управления приоритетами.
""".strip(),

        skills=[
            "Product Management",
            "Agile",
            "Scrum",
            "Jira",
            "Confluence",
            "CustDev",
            "Analytics",
            "A/B Testing",
            "Roadmap",
            "UX/UI"
        ],

        is_active=True,
    )

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

    resumes_data = [

        {
            "vk_user_id": "200001",
            "full_name": "Семенов Артем Игоревич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 3,
            "skills": [
                "Product Management",
                "Agile",
                "Scrum",
                "Jira",
                "Analytics",
                "CustDev"
            ],

            "raw_text": """
Семенов Артем Игоревич
Product Manager

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

Развивал мобильный fintech-продукт. Формировал roadmap, проводил CustDev, анализировал продуктовые метрики и координировал работу команды разработки. Работал с Jira, Confluence и аналитическими dashboard.

Навыки: Product Management, Agile, Scrum, Jira, Analytics, CustDev.
"""
        },

        {
            "vk_user_id": "200002",
            "full_name": "Крылова Марина Олеговна",
            "level": "Junior",
            "match_level": "medium",
            "experience_years": 1,
            "skills": [
                "Agile",
                "Jira",
                "Backlog",
                "User Stories"
            ],

            "raw_text": """
Крылова Марина Олеговна
Junior Product Manager

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

Помогала senior product manager управлять backlog и формировать user stories. Работала с Jira и Confluence. Имеет базовое понимание CustDev и продуктовой аналитики.

Навыки: Agile, Jira, Backlog, User Stories.
"""
        },

        {
            "vk_user_id": "200003",
            "full_name": "Белов Андрей Сергеевич",
            "level": "Senior",
            "match_level": "high",
            "experience_years": 6,
            "skills": [
                "Product Strategy",
                "Roadmap",
                "A/B Testing",
                "Analytics",
                "UX/UI",
                "Scrum"
            ],

            "raw_text": """
Белов Андрей Сергеевич
Senior Product Manager

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

Управлял B2B SaaS-продуктом. Формировал стратегию развития, управлял roadmap, запускал A/B тесты и анализировал продуктовые метрики. Координировал кросс-функциональные команды.

Навыки: Product Strategy, Roadmap, A/B Testing, Analytics, UX/UI, Scrum.
"""
        },

        {
            "vk_user_id": "200004",
            "full_name": "Орехова Виктория Павловна",
            "level": "Middle",
            "match_level": "medium",
            "experience_years": 2,
            "skills": [
                "Agile",
                "Scrum",
                "Jira",
                "UX/UI"
            ],

            "raw_text": """
Орехова Виктория Павловна
Product Owner

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

Работала с agile-командой над развитием e-commerce платформы. Формировала backlog, участвовала в sprint planning и взаимодействовала с UX/UI дизайнерами.

Навыки: Agile, Scrum, Jira, UX/UI.
"""
        },

        {
            "vk_user_id": "200005",
            "full_name": "Ларионов Максим Денисович",
            "level": "Low",
            "match_level": "low",
            "experience_years": 4,
            "skills": [
                "Sales",
                "CRM",
                "Excel"
            ],

            "raw_text": """
Ларионов Максим Денисович
Менеджер по продажам

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

Работал в B2B продажах, вел CRM и коммерческие предложения. Не имеет опыта продуктового менеджмента и управления IT-продуктами.

Навыки: Sales, CRM, Excel.
"""
        },

        {
            "vk_user_id": "200006",
            "full_name": "Романова Дарья Алексеевна",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 4,
            "skills": [
                "Roadmap",
                "CustDev",
                "Analytics",
                "Agile",
                "Jira"
            ],

            "raw_text": """
Романова Дарья Алексеевна
Product Manager

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

Развивала EdTech-платформу. Проводила интервью с пользователями, анализировала retention и engagement метрики, управляла roadmap продукта и взаимодействовала с командами разработки.

Навыки: Roadmap, CustDev, Analytics, Agile, Jira.
"""
        },

        {
            "vk_user_id": "200007",
            "full_name": "Громов Кирилл Евгеньевич",
            "level": "Trainee",
            "match_level": "medium",
            "experience_years": 0.5,
            "skills": [
                "Jira",
                "Agile",
                "User Stories"
            ],

            "raw_text": """
Громов Кирилл Евгеньевич
Стажер Product Manager

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

Помогал в описании user stories и ведении backlog. Изучал Agile и Scrum. Коммерческий опыт ограничен.

Навыки: Jira, Agile, User Stories.
"""
        },

        {
            "vk_user_id": "200008",
            "full_name": "Фролов Илья Викторович",
            "level": "Developer",
            "match_level": "medium",
            "experience_years": 3,
            "skills": [
                "Python",
                "SQL",
                "REST API",
                "Analytics"
            ],

            "raw_text": """
Фролов Илья Викторович
Backend Developer

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

Разрабатывал backend-сервисы, участвовал в обсуждении roadmap и оценке задач. Имеет технический опыт, но ограниченный опыт управления продуктом.

Навыки: Python, SQL, REST API, Analytics.
"""
        },

        {
            "vk_user_id": "200009",
            "full_name": "Савина Екатерина Романовна",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 5,
            "skills": [
                "Product Management",
                "A/B Testing",
                "Analytics",
                "UX/UI",
                "CustDev"
            ],

            "raw_text": """
Савина Екатерина Романовна
Product Manager

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

Развивала маркетплейс и мобильное приложение. Работала с A/B тестированием, анализом продуктовых метрик и UX/UI исследованиями.

Навыки: Product Management, A/B Testing, Analytics, UX/UI, CustDev.
"""
        },

        {
            "vk_user_id": "200010",
            "full_name": "Тихонов Павел Дмитриевич",
            "level": "Low",
            "match_level": "low",
            "experience_years": 1,
            "skills": [
                "Support",
                "Excel",
                "Communication"
            ],

            "raw_text": """
Тихонов Павел Дмитриевич
Специалист поддержки

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

Работал в технической поддержке пользователей. Продуктовым управлением и аналитикой не занимался.

Навыки: Support, Excel, Communication.
"""
        },
    ]

    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("✅ Product Manager 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])