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


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():
    db.drop_all()
    db.create_all()

    vacancy = Vacancy(
        title="Бизнес-аналитик (Middle)",
        department="Отдел цифровых продуктов",
        description="""
Сбор и анализ бизнес-требований;
Проведение интервью со стейкхолдерами;
Описание бизнес-процессов AS-IS и TO-BE;
Подготовка user stories, BRD и SRS;
Моделирование процессов в BPMN и UML;
Описание интеграционных сценариев и REST API;
Взаимодействие с командами разработки и тестирования.
""".strip(),
        requirements="""
Опыт работы бизнес-аналитиком от 2 лет;
Понимание SDLC;
Навыки BPMN и UML;
Опыт работы с Jira и Confluence;
Понимание REST API;
Базовое знание SQL;
Умение проводить интервью со стейкхолдерами;
Навыки фасилитации встреч и командного взаимодействия.
""".strip(),
        skills=[
            "Business Analysis",
            "BPMN",
            "UML",
            "REST API",
            "SQL",
            "Jira",
            "Confluence",
            "SDLC",
            "User Stories",
            "Stakeholder Interview"
        ],
        is_active=True,
    )

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

    resumes_data = [
        {
            "vk_user_id": "100001",
            "full_name": "Петров Алексей Сергеевич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 3.5,
            "skills": ["BPMN", "UML", "REST API", "Jira", "Confluence", "SQL", "SDLC"],
            "raw_text": """
Петров Алексей Сергеевич
Бизнес-аналитик

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

Работал в проектах автоматизации внутренних процессов и клиентских сервисов. Проводил интервью со стейкхолдерами, собирал и формализовал требования, описывал процессы AS-IS и TO-BE в BPMN. Готовил user stories, SRS и документацию в Confluence. Участвовал в описании REST API и интеграционных сценариев совместно с системным аналитиком.

Навыки: BPMN, UML, REST API, Jira, Confluence, SQL, SDLC, User Stories.
"""
        },
        {
            "vk_user_id": "100002",
            "full_name": "Иванова Мария Андреевна",
            "level": "Junior",
            "match_level": "medium",
            "experience_years": 1,
            "skills": ["BPMN", "Jira", "Confluence", "User Stories", "SDLC"],
            "raw_text": """
Иванова Мария Андреевна
Junior бизнес-аналитик

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

Участвовала в сборе требований и подготовке пользовательских сценариев. Описывала простые бизнес-процессы, работала с Jira и Confluence. Есть базовое понимание SDLC. Опыт самостоятельного проведения интервью и описания REST API ограничен.

Навыки: BPMN, Jira, Confluence, User Stories, основы SDLC.
"""
        },
        {
            "vk_user_id": "100003",
            "full_name": "Смирнов Дмитрий Олегович",
            "level": "Senior",
            "match_level": "high",
            "experience_years": 6,
            "skills": ["BPMN", "UML", "REST API", "SQL", "Jira", "Confluence", "System Analysis", "SDLC"],
            "raw_text": """
Смирнов Дмитрий Олегович
Системный аналитик / Бизнес-аналитик

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

Проектировал интеграционные решения, описывал REST API, готовил SRS и техническую документацию. Моделировал процессы в BPMN и UML, работал с командами разработки, тестирования и бизнеса. Участвовал в приоритизации требований и разрешении конфликтов между заказчиками и технической командой.

Навыки: BPMN, UML, REST API, SQL, Jira, Confluence, System Analysis, SDLC.
"""
        },
        {
            "vk_user_id": "100004",
            "full_name": "Кузнецова Елена Викторовна",
            "level": "Middle",
            "match_level": "medium",
            "experience_years": 2.2,
            "skills": ["Jira", "Confluence", "Testing", "SQL", "SDLC"],
            "raw_text": """
Кузнецова Елена Викторовна
QA-инженер / начинающий бизнес-аналитик

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

Основной опыт связан с тестированием веб-приложений. Работала с тест-кейсами, баг-репортами, Jira и Confluence. Участвовала в уточнении требований вместе с аналитиками и разработчиками. Есть понимание SDLC и базовые знания SQL, но самостоятельного опыта ведения аналитики немного.

Навыки: Jira, Confluence, Testing, SQL, SDLC.
"""
        },
        {
            "vk_user_id": "100005",
            "full_name": "Орлов Максим Игоревич",
            "level": "Not relevant",
            "match_level": "low",
            "experience_years": 4,
            "skills": ["SMM", "Digital Marketing", "Excel", "Analytics"],
            "raw_text": """
Орлов Максим Игоревич
Digital-маркетолог

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

Занимался настройкой рекламных кампаний, анализом трафика, подготовкой контент-планов и отчетов. Работал с Excel, Яндекс Метрикой и Google Analytics. Опыта бизнес-анализа, BPMN, REST API и сбора требований нет.

Навыки: SMM, digital marketing, Excel, аналитика трафика.
"""
        },
        {
            "vk_user_id": "100006",
            "full_name": "Васильев Андрей Николаевич",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 3,
            "skills": ["BPMN", "REST API", "Jira", "Confluence", "User Stories", "SQL"],
            "raw_text": """
Васильев Андрей Николаевич
Бизнес-аналитик

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

Собирал требования для CRM-системы и личного кабинета клиента. Проводил интервью с заказчиками, описывал user stories, готовил документацию в Confluence. Участвовал в обсуждении интеграций, описывал REST API совместно с системным аналитиком. Работал с Jira и SQL-запросами для проверки данных.

Навыки: BPMN, REST API, Jira, Confluence, User Stories, SQL.
"""
        },
        {
            "vk_user_id": "100007",
            "full_name": "Соколова Анна Павловна",
            "level": "Trainee",
            "match_level": "medium",
            "experience_years": 0.5,
            "skills": ["BPMN", "UML", "Jira", "Requirements Analysis"],
            "raw_text": """
Соколова Анна Павловна
Стажер бизнес-аналитик

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

Помогала старшему аналитику описывать бизнес-процессы и фиксировать требования после встреч. Работала с простыми BPMN-схемами и задачами в Jira. Коммерческого опыта самостоятельного ведения проекта нет, но есть учебные проекты по моделированию процессов.

Навыки: BPMN, UML, Jira, основы анализа требований.
"""
        },
        {
            "vk_user_id": "100008",
            "full_name": "Морозов Илья Романович",
            "level": "Developer",
            "match_level": "medium",
            "experience_years": 2.8,
            "skills": ["Python", "REST API", "SQL", "Git", "Docker"],
            "raw_text": """
Морозов Илья Романович
Backend-разработчик

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

Разрабатывал backend-сервисы на Python, работал с REST API, SQL и Docker. Участвовал в обсуждении требований с аналитиками, но сам требования не собирал и документацию не вел. Может быть полезен в роли технического аналитика, но опыта бизнес-анализа недостаточно.

Навыки: Python, REST API, SQL, Git, Docker.
"""
        },
        {
            "vk_user_id": "100009",
            "full_name": "Никитина Ольга Сергеевна",
            "level": "Middle",
            "match_level": "high",
            "experience_years": 4,
            "skills": ["BPMN", "UML", "Jira", "Confluence", "REST API", "SQL", "SDLC"],
            "raw_text": """
Никитина Ольга Сергеевна
Бизнес-аналитик

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

Вела проекты по автоматизации документооборота и клиентского сервиса. Проводила интервью со стейкхолдерами, формировала BRD и SRS, описывала процессы AS-IS и TO-BE. Работала с REST API, писала SQL-запросы для проверки данных и участвовала в приемочном тестировании.

Навыки: BPMN, UML, Jira, Confluence, REST API, SQL, SDLC.
"""
        },
        {
            "vk_user_id": "100010",
            "full_name": "Федоров Кирилл Максимович",
            "level": "Low",
            "match_level": "low",
            "experience_years": 0.3,
            "skills": ["Customer Support", "Excel", "Communication"],
            "raw_text": """
Федоров Кирилл Максимович
Специалист технической поддержки

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

Обрабатывал обращения пользователей, консультировал по работе сервиса, передавал ошибки в команду разработки. Опыта сбора требований, моделирования процессов, BPMN, REST API и подготовки аналитической документации нет.

Навыки: Customer Support, Excel, коммуникация с пользователями.
"""
        },
    ]

    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("✅ База очищена и заполнена заново")
    print("Vacancies:", Vacancy.query.count())
    print("Candidates:", Candidate.query.count())
    print("Resumes:", Resume.query.count())

    vacancy_from_db = Vacancy.query.first()
    print("Vacancy ID:", vacancy_from_db.id)
    print("Resume IDs for vacancy:", [resume.id for resume in vacancy_from_db.resumes])