Untitled
4ae4d
plain_text
2 months ago
18 kB
4
Indexable
set -e
git restore --source=HEAD --staged --worktree -- \
services/bot-new/core/handlers/moderation.py \
services/bot-new/core/services/event.py \
services/bot-new/core/services/user.py
cat >/tmp/event-create-commit-1.patch <<'PATCH'
diff --git a/services/bot-new/core/handlers/moderation.py b/services/bot-new/core/handlers/moderation.py
index 60f7876..d0ef609 100644
--- a/services/bot-new/core/handlers/moderation.py
+++ b/services/bot-new/core/handlers/moderation.py
@@ -35,7 +35,6 @@ from ..markups import (
TAGS_MEDIA_ID = "event_tags_toggle"
TAGS_TOGGLE_PREFIX = "toggle:"
TAGS_DONE_VALUE = "done"
-DEFAULT_CITY_UUID = "be9da3ba-d-42f9-9ae2-9875c8625083" # SPB
# TODO убрать хардкод
@@ -63,10 +62,10 @@ class EventCreateState(StatesGroup): # untested
date = State()
time = State()
# location удалён
- gosp = State()
- project = State()
+ gosp = State()
+ project = State()
description = State()
- points = State()
+ hours = State()
tags = State()
code = State()
@@ -218,7 +217,7 @@ def all_events_open_handler( # untested
@bot.di
-def create_event_start_handler( # untested
+def create_event_start_handler(
event: UpdateInteractiveMediaEvent,
context: FSMContext,
):
@@ -236,7 +235,7 @@ def create_event_start_handler( # untested
@events_rt.message(state=EventCreateState.name)
@bot.di
-def event_create_name_step(message: UpdateMessage, context: FSMContext): # untested
+def event_create_name_step(message: UpdateMessage, context: FSMContext):
delete_prev_message(bot, message)
@@ -281,12 +280,13 @@ def event_create_date_step(message: UpdateMessage, context: FSMContext): # unte
@events_rt.message(state=EventCreateState.time)
@bot.di
-def event_create_time_step(message: UpdateMessage, context: FSMContext): # untested
+def event_create_time_step(message: UpdateMessage, context: FSMContext):
delete_prev_message(bot, message)
time = message.message.text_message.text.strip()
try:
time_obj = datetime.strptime(time, "%H:%M").time()
+ # TODO make it try to recognize a lot of patterns
except ValueError:
bot.messaging.send_message(
peer=message.peer,
@@ -300,10 +300,9 @@ def event_create_time_step(message: UpdateMessage, context: FSMContext): # unte
context.update_data({"event_time": time_obj})
- # Пропускаем локацию, сразу переходим к ГОСБ
bot.messaging.send_message(
peer=message.peer,
- text="Шаг 4/9: Введи ГОСБ (UUID или текст для отладки):\nНапример: `be9da3ba-d-42f9-9ae2-9875c8625083`",
+ text="Шаг 4/9: Введи айди ГОСБ'а:\nНапример: `gosb_spb_1`",
interactive_media_groups=back_to_moderation_keyboard(),
)
context.set_state(EventCreateState.gosp)
@@ -311,7 +310,7 @@ def event_create_time_step(message: UpdateMessage, context: FSMContext): # unte
@events_rt.message(state=EventCreateState.gosp)
@bot.di
-def event_create_gosp_step(message: UpdateMessage, context: FSMContext): # untested
+def event_create_gosp_step(message: UpdateMessage, context: FSMContext):
delete_prev_message(bot, message)
@@ -319,7 +318,10 @@ def event_create_gosp_step(message: UpdateMessage, context: FSMContext): # unte
bot.messaging.send_message(
peer=message.peer,
- text="Шаг 5/9: Введи id проекта (UUID или текст для отладки, можно пропустить отправив `-`):",
+ text=(
+ "Шаг 5/9: Введи id проекта, если хочешь создать мероприятие в проекте\n"
+ "Введи `-`, если хочешь создать событийное мероприятие - мероприятие вне проекта."
+ ),
interactive_media_groups=back_to_moderation_keyboard(),
)
context.set_state(EventCreateState.project)
@@ -327,7 +329,7 @@ def event_create_gosp_step(message: UpdateMessage, context: FSMContext): # unte
@events_rt.message(state=EventCreateState.project)
@bot.di
-def event_create_project_step(message: UpdateMessage, context: FSMContext): # untested
+def event_create_project_step(message: UpdateMessage, context: FSMContext):
delete_prev_message(bot, message)
@@ -336,7 +338,7 @@ def event_create_project_step(message: UpdateMessage, context: FSMContext): # u
bot.messaging.send_message(
peer=message.peer,
- text='Шаг 6/9: Введи описание:',
+ text="Шаг 6/9: Введи описание:",
interactive_media_groups=back_to_moderation_keyboard(),
)
context.set_state(EventCreateState.description)
@@ -344,46 +346,46 @@ def event_create_project_step(message: UpdateMessage, context: FSMContext): # u
@events_rt.message(state=EventCreateState.description)
@bot.di
-def event_create_description_step(message: UpdateMessage, context: FSMContext): # untested
+def event_create_description_step(message: UpdateMessage, context: FSMContext):
delete_prev_message(bot, message)
description = message.message.text_message.text.strip()
context.update_data({"event_description": description})
bot.messaging.send_message(
peer=message.peer,
- text="Шаг 7/9: Введи количество очков начисляемых за мероприятие:",
+ text="Шаг 7/9: Введи количество волонтёрских часов, начисляемых за мероприятие:",
interactive_media_groups=back_to_moderation_keyboard(),
)
- context.set_state(EventCreateState.points)
+ context.set_state(EventCreateState.hours)
-@events_rt.message(state=EventCreateState.points)
+@events_rt.message(state=EventCreateState.hours)
@bot.di
-def event_create_points_step(
- message: UpdateMessage, context: FSMContext, tag_service: TagService
-): # untested
+def event_create_hours_step(message: UpdateMessage, context: FSMContext):
delete_prev_message(bot, message)
text = message.message.text_message.text.strip()
try:
- points = int(text)
- if points <= 0 or points >= 2**31:
+ if not re.fullmatch(r"^[0-9]{1,2}$", text):
+ raise ValueError
+ hours = int(text)
+ if hours <= 0 or hours >= 19:
raise ValueError
except ValueError:
bot.messaging.send_message(
peer=message.peer,
- text=f"Количество баллов должно быть натуральным числом, меньшим {2**31}. Попробуй ещё раз.",
+ text="Количество часов должно быть натуральным числом, меньшим 19. Попробуй ещё раз.",
interactive_media_groups=back_to_moderation_keyboard(),
)
return
- context.update_data({"event_points": points})
+ context.update_data({"hours": hours})
bot.messaging.send_message(
peer=message.peer,
text=(
- "Шаг 8/9: Введи теги мероприятия через пробел (UUID):\n"
- "Например: `a1b2c3d4-e5f6-7890-abcd-ef1234567890 f9e8d7c6-b5a4-3210-fedc-ba0987654321`\n"
+ "Шаг 8/9: Введи id тегов мероприятия через пробел:\n"
+ "Например: `tag_eco_1 tag_soc_1`\n"
"Можно пропустить, отправив `-`:"
),
interactive_media_groups=back_to_moderation_keyboard(),
@@ -393,30 +395,11 @@ def event_create_points_step(
@events_rt.message(state=EventCreateState.tags)
@bot.di
-def event_create_tags_step(message: UpdateMessage, context: FSMContext): # untested
+def event_create_tags_step(message: UpdateMessage, context: FSMContext):
delete_prev_message(bot, message)
raw = message.message.text_message.text.strip()
-
- if raw == "-":
- tag_ids = []
- else:
- tag_ids = [t.strip() for t in raw.split() if t.strip()]
- for tag_id in tag_ids:
- try:
- UUID(tag_id)
- except Exception:
- bot.messaging.send_message(
- peer=message.peer,
- text=(
- "⚠️ Один из тегов не является валидным UUID.\n"
- "Пожалуйста, введи теги через пробел, например:\n"
- "`a1b2c3d4-e5f6-7890-abcd-ef1234567890 f9e8d7c6-b5a4-3210-fedc-ba0987654321`\n"
- "Или отправь `-`, чтобы пропустить:"
- ),
- interactive_media_groups=back_to_moderation_keyboard(),
- )
- return
+ tag_ids = [] if raw == "-" else [t.strip() for t in raw.split() if t.strip()]
context.update_data({"event_app_tag_ids": tag_ids})
@@ -432,7 +415,7 @@ def event_create_tags_step(message: UpdateMessage, context: FSMContext): # unte
@bot.di
-def event_tags_toggle_handler( # half-tested
+def event_tags_toggle_handler( # not in use, tag ui choosing is turned off for now
event: UpdateInteractiveMediaEvent,
context: FSMContext,
tag_service: TagService,
@@ -475,7 +458,9 @@ def event_tags_toggle_handler( # half-tested
context.update_data({"event_app_tag_ids": app_tag_ids})
bot.messaging.send_message(
peer=event.peer,
- text=("Шаг 9/9: введи код мероприятия:\nБез пробелов, не больше 16 символов. Например: WELCOME2025"),
+ text=(
+ "Шаг 9/9: введи код мероприятия:\nБез пробелов, не больше 16 символов. Например: WELCOME2025"
+ ),
interactive_media_groups=back_to_moderation_keyboard(),
)
context.set_state(EventCreateState.code)
diff --git a/services/bot-new/core/services/event.py b/services/bot-new/core/services/event.py
index b3274fe..8b50dd9 100644
--- a/services/bot-new/core/services/event.py
+++ b/services/bot-new/core/services/event.py
@@ -120,14 +120,12 @@ class EventService(BaseService): # untested
description = data.get("event_description", "")
date_obj = data.get("event_date", "")
time_obj = data.get("event_time", "")
- # надо додел
- gosp_id = data.get("gosp_id", "666666666666")
- # пока не делаем пусть отдыхает
+ gosp_id = data.get("gosp_id", "")
project_id = data.get("project_id", "")
hours = data.get("hours", "")
verification_code = data.get("event_bonus_code", "")
- # Теги: массив UUID, уже сформированный в хендлере # TODO not uuid
+ # Теги: массив ID, сформированный в хендлере
tags: list[str] = data.get("event_app_tag_ids") or []
PATCH
git apply /tmp/event-create-commit-1.patch
git add services/bot-new/core/handlers/moderation.py services/bot-new/core/services/event.py
git commit -m "WORK: EVENT CREATE: align wizard input with hours contract"
cat >/tmp/event-create-commit-2.patch <<'PATCH'
diff --git a/services/bot-new/core/handlers/moderation.py b/services/bot-new/core/handlers/moderation.py
index d0ef609..d0ef609 100644
--- a/services/bot-new/core/handlers/moderation.py
+++ b/services/bot-new/core/handlers/moderation.py
@@ -251,6 +251,9 @@ def event_create_date_step(message: UpdateMessage, context: FSMContext):
date = message.message.text_message.text.strip()
try:
date_obj = datetime.strptime(date, "%d.%m.%Y").date()
+ # TODO make it try to recognize a lot of patterns
+ if date_obj <= datetime.now().date():
+ raise RuntimeError
except ValueError:
bot.messaging.send_message(
peer=message.peer,
@@ -261,6 +264,16 @@ def event_create_date_step(message: UpdateMessage, context: FSMContext):
interactive_media_groups=back_to_moderation_keyboard(),
)
return
+ except RuntimeError:
+ bot.messaging.send_message(
+ peer=message.peer,
+ text=(
+ "⚠️ Ты не можешь создать мероприятие раньше завтрашнего дня.\n"
+ "Пожалуйста, введи в формате `dd.mm.yyyy`, например: `20.02.2002`:"
+ ),
+ interactive_media_groups=back_to_moderation_keyboard(),
+ )
+ return
PATCH
git apply /tmp/event-create-commit-2.patch
git add services/bot-new/core/handlers/moderation.py
git commit -m "WORK: EVENT CREATE: validate future date in wizard"
cat >/tmp/event-create-commit-3.patch <<'PATCH'
diff --git a/services/bot-new/core/handlers/moderation.py b/services/bot-new/core/handlers/moderation.py
index d0ef609..d0ef609 100644
--- a/services/bot-new/core/handlers/moderation.py
+++ b/services/bot-new/core/handlers/moderation.py
@@ -551,7 +551,6 @@ def event_create_code_step( # untested
message: UpdateMessage,
context: FSMContext,
event_service: EventService,
- report_service: ReportService,
):
delete_prev_message(bot, message)
@@ -569,6 +568,7 @@ def event_create_code_step( # untested
context.update_data({"event_bonus_code": code})
data = context.get_data()
try:
created = event_service.create_from_wizard(data, message.peer)
except Exception as e:
+ logger.error("Error while creating an event via wizard: %s", e)
bot.messaging.send_message(
peer=message.peer,
text="⚠️ Не удалось создать мероприятие.",
@@ -579,10 +579,21 @@ def event_create_code_step( # untested
context.clear()
- note = "✅ Мероприятие успешно создано."
+ note = {
+ "REQUEST": "✅ Заявка на мероприятие успешно создана.",
+ "COMPLETELY": "✅ Мероприятие успешно создано.",
+ "FAILED": "⚠️ Произошла ошибка: не удалось создать заявку/мероприятие.",
+ }.get(
+ created.get("TYPE", ""),
+ "⚠️ Произошла ошибка: не получить статус заявки/мероприятия. Проверь результат в 'Своих заявках' или в 'Своих мероприятиях'.",
+ )
+
+ formatted_data = (
+ str(data).strip("{}").replace("), ", "),\n").replace("], ", "],\n").replace("', ", "',\n")
+ )
bot.messaging.send_message(
peer=message.peer,
- text=f"{note}\n```\n{data}\n```",
+ text=f"{note}\n{formatted_data}",
interactive_media_groups=moderation_menu_keyboard(),
)
diff --git a/services/bot-new/core/services/event.py b/services/bot-new/core/services/event.py
index b3274fe..8b50dd9 100644
--- a/services/bot-new/core/services/event.py
+++ b/services/bot-new/core/services/event.py
@@ -7,7 +7,6 @@ from core.clients.event import EventClient
from core.schemas.event import EventCardSchema
from core.services.base import BaseService
from core.services.registry import BaseServiceRegistry
-from core.utils.logger import logger
@@ -145,12 +144,17 @@ class EventService(BaseService): # untested
tags=tags if tags else None,
)
- logger.info("TYPE OF CREATED ENTITY: %s", resp.json().get("code"))
+ match resp.status_code:
+ case 200:
+ pass
+ case 401:
+ raise HTTPError("Error while creating event: unauthorized")
+ case 500:
+ raise HTTPError("Error while creating event: internal server error")
+ case _:
+ raise HTTPError(f"Error while creating event: unexpected status {resp.status_code}")
- if resp.status_code not in [200, 201]:
- raise HTTPError(f"Error while creating event: {resp.status_code}\n{resp.text}")
- # подключить когда сделают карточку мероприятия
- return {}
+ return {"TYPE": resp.json().get("code")} # показывать карточку мероприятия
PATCH
git apply /tmp/event-create-commit-3.patch
git add services/bot-new/core/handlers/moderation.py services/bot-new/core/services/event.py
git commit -m "WORK: EVENT CREATE: map backend creation result for wizard"
cat >/tmp/event-create-commit-4.patch <<'PATCH'
diff --git a/services/bot-new/core/services/user.py b/services/bot-new/core/services/user.py
index d7cc95a..cedb81a 100644
--- a/services/bot-new/core/services/user.py
+++ b/services/bot-new/core/services/user.py
@@ -44,7 +44,7 @@ class UserService(BaseService): # untested
case 500:
raise HTTPError("Error while getting user: internal server error")
case _:
- raise HTTPError("Error while getting user: unexpected status {resp.status_code}")
+ raise HTTPError(f"Error while getting user: unexpected status {resp.status_code}")
PATCH
git apply /tmp/event-create-commit-4.patch
git add services/bot-new/core/services/user.py
git commit -m "WORK: USER: fix unexpected status interpolation"
git log --oneline -n 4Editor is loading...
Leave a Comment