55 lines
2.2 KiB
Python
55 lines
2.2 KiB
Python
from loguru import logger
|
|
import re
|
|
|
|
from aiogram import types
|
|
from aiogram.dispatcher import FSMContext
|
|
|
|
from states.project import ProjectStates
|
|
from services.repositories import Repos, ProjectRepo
|
|
|
|
|
|
async def ask_for_project_fields(message: types.Message, state: FSMContext):
|
|
await state.set_state(ProjectStates.create)
|
|
await message.reply(
|
|
"Название проекта: Превращение песиков в котиков\n\n"
|
|
"Описание: Наши цели прямы и понятны! Мы хотим написать "
|
|
"алгоритм конвертации песиков в котиков.\n\n"
|
|
"Контакты: @создатель\n\n"
|
|
"Кол-во участников: 2 "
|
|
"(пожалуйста напишите число участников не раскрывая личные данные)\n\n"
|
|
"Статус: 1 (1 - проект ищет людей, 2 - в работе, "
|
|
"3 - проект завершен, 0 - отменен)\n\n"
|
|
"Теги: #python\n\n"
|
|
"Категория: написание алгоритма"
|
|
)
|
|
await message.reply(
|
|
"Пожалуйста отправьте анкету вашего проекта по шаблону "
|
|
"из сообщения выше (скопируйте сообщение и замените данные)"
|
|
)
|
|
|
|
|
|
async def create_project(
|
|
message: types.Message, repo: Repos, state: FSMContext
|
|
):
|
|
await state.reset_state()
|
|
field_types = {
|
|
"Название проекта": str, "Описание": str, "Контакты": str,
|
|
"Кол-во участников": int, "Статус": int, "Теги": str,
|
|
"Категория": str
|
|
}
|
|
field_values = {name: None for name in field_types}
|
|
|
|
for name, data_type in field_types.items():
|
|
try:
|
|
field_values[name] = data_type(
|
|
re.findall(rf"(?<={name}: ).*", message.text)[0]
|
|
)
|
|
except IndexError:
|
|
pass
|
|
|
|
logger.debug(field_values)
|
|
|
|
await repo.get_repo(ProjectRepo).add(
|
|
*field_values.values(), user_id=message.from_user.id
|
|
)
|