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


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="Frontend-разработчик (Middle)",
        department="Frontend Development",
        description="""
Разработка пользовательских интерфейсов для веб-приложений;
Верстка адаптивных интерфейсов;
Разработка компонентов на React;
Интеграция frontend-части с REST API;
Оптимизация производительности интерфейса;
Участие в code review;
Взаимодействие с дизайнерами, backend-разработчиками и QA.
""".strip(),
        requirements="""
Опыт frontend-разработки от 2 лет;
Уверенное знание JavaScript и TypeScript;
Опыт работы с React;
Знание HTML и CSS;
Понимание REST API;
Опыт работы с Git;
Понимание принципов адаптивной верстки;
Навыки работы с Figma будут преимуществом.
""".strip(),
        skills=[
            "JavaScript",
            "TypeScript",
            "React",
            "HTML",
            "CSS",
            "REST API",
            "Git",
            "Figma",
            "Redux",
            "Adaptive Layout"
        ],
        is_active=True,
    )

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

    resumes_data = [
        {
            "vk_user_id": "600001",
            "full_name": "Александров Никита Сергеевич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 3,
            "skills": ["JavaScript", "TypeScript", "React", "Redux", "REST API", "Git"],
            "raw_text": """
Александров Никита Сергеевич
Frontend-разработчик

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

Разрабатывал интерфейсы для личного кабинета клиента и внутренней CRM-системы. Работал с React, TypeScript, Redux и REST API. Участвовал в code review, оптимизировал загрузку страниц и исправлял проблемы адаптивной верстки.

Навыки: JavaScript, TypeScript, React, Redux, REST API, Git.
"""
        },
        {
            "vk_user_id": "600002",
            "full_name": "Гордеева Марина Павловна",
            "level": "Junior",
            "match_level": "medium",
            "experience_years": 1,
            "skills": ["HTML", "CSS", "JavaScript", "React", "Git"],
            "raw_text": """
Гордеева Марина Павловна
Junior Frontend Developer

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

Верстала страницы для корпоративного сайта, исправляла UI-баги и разрабатывала простые компоненты на React. Есть базовый опыт работы с Git и REST API.

Навыки: HTML, CSS, JavaScript, React, Git.
"""
        },
        {
            "vk_user_id": "600003",
            "full_name": "Лебедев Артем Игоревич",
            "level": "Senior",
            "match_level": "high",
            "experience_years": 6,
            "skills": ["JavaScript", "TypeScript", "React", "Next.js", "Redux", "Performance Optimization"],
            "raw_text": """
Лебедев Артем Игоревич
Senior Frontend Developer

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

Проектировал frontend-архитектуру для высоконагруженного веб-приложения. Работал с React, Next.js, TypeScript и Redux. Настраивал оптимизацию производительности, участвовал в выборе UI-архитектуры и наставничестве junior-разработчиков.

Навыки: JavaScript, TypeScript, React, Next.js, Redux, Performance Optimization.
"""
        },
        {
            "vk_user_id": "600004",
            "full_name": "Сафонова Елена Андреевна",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 4,
            "skills": ["React", "TypeScript", "HTML", "CSS", "REST API", "Figma"],
            "raw_text": """
Сафонова Елена Андреевна
Frontend-разработчик

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

Разрабатывала пользовательские интерфейсы для e-commerce платформы. Работала с React, TypeScript, Figma и REST API. Взаимодействовала с дизайнерами и backend-командой, участвовала в приемке UI-функционала.

Навыки: React, TypeScript, HTML, CSS, REST API, Figma.
"""
        },
        {
            "vk_user_id": "600005",
            "full_name": "Козлов Денис Максимович",
            "level": "Low",
            "match_level": "low",
            "experience_years": 2,
            "skills": ["Python", "Flask", "SQL"],
            "raw_text": """
Козлов Денис Максимович
Backend-разработчик

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

Разрабатывал backend-сервисы на Python и Flask, работал с SQL и REST API. Frontend-разработкой занимался только на уровне базовой верстки в учебных проектах.

Навыки: Python, Flask, SQL.
"""
        },
        {
            "vk_user_id": "600006",
            "full_name": "Миронова Алина Дмитриевна",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 3.5,
            "skills": ["JavaScript", "TypeScript", "React", "Redux Toolkit", "CSS Modules", "Git"],
            "raw_text": """
Миронова Алина Дмитриевна
Frontend Developer

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

Разрабатывала frontend-часть аналитической платформы. Создавала переиспользуемые компоненты на React, работала с Redux Toolkit и TypeScript. Исправляла UI-баги, проводила рефакторинг компонентов и участвовала в code review.

Навыки: JavaScript, TypeScript, React, Redux Toolkit, CSS Modules, Git.
"""
        },
        {
            "vk_user_id": "600007",
            "full_name": "Панин Кирилл Олегович",
            "level": "Trainee",
            "match_level": "medium",
            "experience_years": 0.5,
            "skills": ["HTML", "CSS", "JavaScript", "React"],
            "raw_text": """
Панин Кирилл Олегович
Стажер Frontend Developer

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

Проходил стажировку во frontend-команде. Верстал адаптивные страницы, исправлял мелкие ошибки интерфейса, писал простые компоненты на React. Коммерческий опыт ограничен.

Навыки: HTML, CSS, JavaScript, React.
"""
        },
        {
            "vk_user_id": "600008",
            "full_name": "Борисова Ольга Романовна",
            "level": "Designer",
            "match_level": "medium",
            "experience_years": 3,
            "skills": ["Figma", "UX/UI", "HTML", "CSS"],
            "raw_text": """
Борисова Ольга Романовна
UX/UI Designer

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

Проектировала интерфейсы в Figma, готовила дизайн-системы и прототипы. Имеет базовые знания HTML и CSS, но полноценного опыта frontend-разработки на React нет.

Навыки: Figma, UX/UI, HTML, CSS.
"""
        },
        {
            "vk_user_id": "600009",
            "full_name": "Егоров Владислав Николаевич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 5,
            "skills": ["JavaScript", "TypeScript", "React", "REST API", "Webpack", "Git"],
            "raw_text": """
Егоров Владислав Николаевич
Frontend-разработчик

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

Работал над SPA-приложениями для банковского сектора. Разрабатывал компоненты на React и TypeScript, интегрировал frontend с REST API, настраивал сборку через Webpack и участвовал в оптимизации интерфейса.

Навыки: JavaScript, TypeScript, React, REST API, Webpack, Git.
"""
        },
        {
            "vk_user_id": "600010",
            "full_name": "Соловьева Кристина Ильинична",
            "level": "Low",
            "match_level": "low",
            "experience_years": 1,
            "skills": ["Customer Support", "Excel", "Communication"],
            "raw_text": """
Соловьева Кристина Ильинична
Специалист технической поддержки

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

Консультировала пользователей по работе веб-сервиса, оформляла обращения и передавала баги команде разработки. Опыта frontend-разработки, React и TypeScript нет.

Навыки: Customer 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("✅ Frontend Developer 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])