Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions sitemap(1).xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->


<url>
<loc>https://www.wohlfahrt.com.ua/</loc>
<lastmod>2025-07-22T09:54:26+00:00</lastmod>
</url>


</urlset>
16 changes: 16 additions & 0 deletions sql/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

-- ENUM's --
CREATE TYPE lan AS ENUM ('UKRANIAN', 'ENGLISH');
CREATE TYPE routine_type AS ENUM ('morning', 'evening');

-- TABLE users
CREATE TABLE users (
Expand All @@ -13,6 +14,21 @@ CREATE TABLE users (
sleep_time TIME DEFAULT NULL
);

CREATE TABLE routines (
id SERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
routine_type routine_type NOT NULL,
routine_name VARCHAR(255) NOT NULL
);

CREATE TABLE routine_steps (
id SERIAL PRIMARY KEY,
routine_id INT NOT NULL REFERENCES routines(id) ON DELETE CASCADE,
step_order INT NOT NULL,
step_description TEXT NOT NULL,
UNIQUE(routine_id, step_order)
);

-- TABLE tasks
CREATE TABLE tasks (
id SERIAL PRIMARY KEY,
Expand Down
19 changes: 19 additions & 0 deletions telegram_bot_project/.idea/dataSources.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions telegram_bot_project/.idea/dictionaries/project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions telegram_bot_project/.idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions telegram_bot_project/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions telegram_bot_project/.idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions telegram_bot_project/.idea/sqldialects.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions telegram_bot_project/.idea/telegram_bot_project.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions telegram_bot_project/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 11 additions & 1 deletion telegram_bot_project/bot/buttons.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,14 @@ def routine_time_keyboard() -> ReplyKeyboardMarkup:
routine_time_keyboard.keyboard.append([wake_time_button, sleep_time_button])
routine_time_keyboard.keyboard.append([my_routine_button, settings_menu_button])

return routine_time_keyboard
return routine_time_keyboard

def routine_menu_keyboard() -> InlineKeyboardMarkup:
routine_markup: InlineKeyboardMarkup = InlineKeyboardMarkup(inline_keyboard=[], row_width=2)

morning_routine_btn: InlineKeyboardButton = InlineKeyboardButton(text=ROUTINE_MORNING_VIEW, callback_data="morning_view")
evening_routine_btn: InlineKeyboardButton = InlineKeyboardButton(text=ROUTINE_EVENING_VIEW, callback_data="evening_view")

routine_markup.inline_keyboard.append([morning_routine_btn, evening_routine_btn])

return routine_markup
12 changes: 12 additions & 0 deletions telegram_bot_project/bot/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,3 +279,15 @@ async def set_sleep_time_command(message: types.Message, state: FSMContext):
else:
await message.answer(MESSAGES[language]['SET_SLEEP_TIME_MSG'])
await state.set_state(DialogStates.set_sleep_time)


# Routine Menu Command Handler
async def routine_menu_command(message: types.Message):
user_id: int = message.from_user.id
user_find: Any = await UserService.get_user_by_id(user_id)
language: str = await UserService.get_user_language(user_id)

if not user_find:
await message.answer(MESSAGES['ENGLISH']['AUTHORIZATION_PROBLEM'])
else:
await message.answer(MESSAGES[language]['ROUTINE_MENU_DAY'], reply_markup=routine_menu_keyboard())
5 changes: 4 additions & 1 deletion telegram_bot_project/config.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import os
import logging
from dotenv import load_dotenv
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker
from contextlib import asynccontextmanager

load_dotenv()

logging.getLogger('sqlalchemy.engine').setLevel(logging.WARNING)

TOKEN: str = os.getenv("BOT_TOKEN")
DB_URL: str = os.getenv("DATABASE_URL")

engine = create_async_engine(DB_URL, echo=True)
engine = create_async_engine(DB_URL, echo=False)

async_session = sessionmaker(
engine,
Expand Down
8 changes: 8 additions & 0 deletions telegram_bot_project/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,14 @@ async def set_sleep_time(message: Message, state: FSMContext):
async def set_waketime(message: Message, state: FSMContext):
await set_wake_time_command(message, state)

@dp.message(Command("routine"))
async def routine(message: Message):
await routine_menu_command(message)

@dp.message(lambda m: m.text == SETTINGS_BUTTON_ROUTINE)
async def routine(message: Message):
await routine_menu_command(message)

@dp.callback_query(F.data.in_({"lang_ua", "lang_en"}))
async def callback_language(callback_query: CallbackQuery):
await start_callback_language(callback_query)
Expand Down
7 changes: 5 additions & 2 deletions telegram_bot_project/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,12 @@
"UPDATE_TASK_NAME_MSG": "📝 Введіть нову назву завдання:",
"UPDATE_TASK_NAME_INVALID": "❌ Неправильна назва! 🔄",
"SETTINGS_MENU": "⚙️ Ласкаво просимо в Налаштування",
"ROUTINE_MENU_DAY": "Встановіть розпорядок за кнопками -> Morning / Evening",
"ROUTINE_TIME": (
"⏰ Ваш розпорядок:\n"
"• Час підйому: {}\n"
"• Час сну: {}\n"
"• Загальна кількість годин неспання: {}"
"• Загальна кількість годин: {}"
),
"ROUTINE_TIME_NOT": "⚠️ Ви ще не встановили час підйому та сну. Налаштуйте їх, щоб тримати розпорядок під контролем!",
"ROUTINE_MENU": "🛠 Ласкаво просимо до налаштувань розпорядку! Тут ви можете встановити час підйому та сну.",
Expand Down Expand Up @@ -127,6 +128,7 @@
"UPDATE_TASK_NAME_MSG": "📝 Enter the new task name:",
"UPDATE_TASK_NAME_INVALID": "❌ Invalid task name! 🔄",
"SETTINGS_MENU": "⚙️ Welcome to Settings",
"ROUTINE_MENU_DAY": "Set the routine from buttons -> Morning/Evening",
"ROUTINE_TIME": (
"⏰ Your routine:\n"
"• Wake-up time: {}\n"
Expand Down Expand Up @@ -179,4 +181,5 @@
ROUTINE_SET_WAKE_BUTTON = "🌅 Set Wake-Up Time"
ROUTINE_SET_SLEEP_BUTTON = "🌙 Set Sleep Time"
ROUTINE_MY_TIME = "🕒 My Routine"

ROUTINE_MORNING_VIEW = "Morning Routine"
ROUTINE_EVENING_VIEW = "Afternoon Routine"
Loading