Untitled

 avatar
4ae4d
plain_text
2 months ago
18 kB
5
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 4
Editor is loading...
Leave a Comment