Реализован MVP телеграм бота для изучения языков
Основные компоненты: - База данных (PostgreSQL) с моделями User, Vocabulary, Task - Интеграция с OpenAI API для перевода слов - Команды: /start, /add, /vocabulary, /help - Сервисы для работы с пользователями, словарем и AI Реализовано: ✅ Регистрация и приветствие пользователя ✅ Добавление слов в словарь с автоматическим переводом ✅ Просмотр личного словаря ✅ Архитектура проекта с разделением на слои 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
59
services/user_service.py
Normal file
59
services/user_service.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from database.models import User, LanguageLevel
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class UserService:
|
||||
"""Сервис для работы с пользователями"""
|
||||
|
||||
@staticmethod
|
||||
async def get_or_create_user(session: AsyncSession, telegram_id: int, username: Optional[str] = None) -> User:
|
||||
"""
|
||||
Получить пользователя или создать нового
|
||||
|
||||
Args:
|
||||
session: Сессия базы данных
|
||||
telegram_id: Telegram ID пользователя
|
||||
username: Username пользователя
|
||||
|
||||
Returns:
|
||||
Объект пользователя
|
||||
"""
|
||||
# Попытка найти существующего пользователя
|
||||
result = await session.execute(
|
||||
select(User).where(User.telegram_id == telegram_id)
|
||||
)
|
||||
user = result.scalar_one_or_none()
|
||||
|
||||
if user:
|
||||
return user
|
||||
|
||||
# Создание нового пользователя
|
||||
new_user = User(
|
||||
telegram_id=telegram_id,
|
||||
username=username,
|
||||
level=LanguageLevel.A1
|
||||
)
|
||||
session.add(new_user)
|
||||
await session.commit()
|
||||
await session.refresh(new_user)
|
||||
|
||||
return new_user
|
||||
|
||||
@staticmethod
|
||||
async def get_user_by_telegram_id(session: AsyncSession, telegram_id: int) -> Optional[User]:
|
||||
"""
|
||||
Получить пользователя по Telegram ID
|
||||
|
||||
Args:
|
||||
session: Сессия базы данных
|
||||
telegram_id: Telegram ID пользователя
|
||||
|
||||
Returns:
|
||||
Объект пользователя или None
|
||||
"""
|
||||
result = await session.execute(
|
||||
select(User).where(User.telegram_id == telegram_id)
|
||||
)
|
||||
return result.scalar_one_or_none()
|
||||
Reference in New Issue
Block a user