86 lines
3.9 KiB
Python
86 lines
3.9 KiB
Python
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)}
|