Files
api-copp/route/holland_crud.py
2026-02-27 15:37:15 +05:00

86 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from fastapi import APIRouter, HTTPException
from typing import Optional
import uuid
from bd import Settings
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from bd.tables.poll import Poll
from bd.tables.question import Question
from bd.tables.choice import Choice
router = APIRouter(tags=["polls"], prefix="/polls")
PAIRS = [
("инженер-техник", "инженер-контролер"),
("вязальщик", "санитарный врач"),
("повар", "наборщик"),
("фотограф", "зав. магазином"),
("чертежник", "дизайнер"),
("философ", "психиатр"),
("ученый-химик", "бухгалтер"),
("редактор научного журнала", "адвокат"),
("лингвист", "переводчик художественной литературы"),
("педиатр", "статистик"),
("организатор воспитательной работы", "председатель профсоюза"),
("спортивный врач", "фельетонист"),
("нотариус", "снабженец"),
("перфоратор", "карикатурист"),
("политический деятель", "писатель"),
("садовник", "метеоролог"),
("водитель", "медсестра"),
("инженер-электрик", "секретарь-машинистка"),
("маляр", "художник по металлу"),
("биолог", "главный врач"),
("телеоператор", "режиссер"),
("гидролог", "ревизор"),
("зоолог", "зоотехник"),
("математик", "архитектор"),
("работник ИДН", "счетовод"),
("учитель", "милиционер"),
("воспитатель", "художник по керамике"),
("экономист", "заведующий отделом"),
("корректор", "критик"),
("завхоз", "директор"),
("радиоинженер", "специалист по ядерной физике"),
("водопроводчик", "наборщик"),
("агроном", "председатель сельхозкооператива"),
("закройщик-модельер", "декоратор"),
("археолог", "эксперт"),
("работник музея", "консультант"),
("ученый", "актер"),
("логопед", "стенографист"),
("врач", "дипломат"),
("главный бухгалтер", "директор"),
("поэт", "психолог"),
("архивариус", "скульптор"),
]
def get_session():
settings = Settings()
engine = create_engine(settings.DATABASE_URL_syncpg, future=True)
return sessionmaker(bind=engine, future=True)
@router.post("/holland", status_code=201)
def create_holland_poll(author_id: Optional[str] = None):
Session = get_session()
with Session() as session:
poll = Poll(title="Тест Д. Голланда — определение типа личности",
description="Тест Д. Голланда: выберите из каждой пары предпочитаемую профессию.")
# polls are anonymous; ignore author_id
session.add(poll)
for idx, (a, b) in enumerate(PAIRS, start=1):
q = Question(text=f"Вариант {idx}", position=idx, type="single", poll=poll)
session.add(q)
ch1 = Choice(question=q, text=f"а) {a}", position=1)
ch2 = Choice(question=q, text=f"б) {b}", position=2)
session.add(ch1)
session.add(ch2)
session.commit()
session.refresh(poll)
return {"id": str(poll.id), "questions": len(poll.questions)}