Compare commits
No commits in common. "7787cc5b698d23385b91a2110d82bd7151a66bf7" and "aff94c7e6caa3903e276e116c6007011aeb2ab2d" have entirely different histories.
7787cc5b69
...
aff94c7e6c
21
TODO
21
TODO
|
@ -1,21 +0,0 @@
|
||||||
Написать docker-compose, в котором работают:
|
|
||||||
|
|
||||||
WEB-приложение на FastApi. У приложения должно быть несколько end-поинтов:
|
|
||||||
1) GET 'api/v1/messages/' показывает список всех сообщений;
|
|
||||||
2) POST 'api/v1/message/' позволяет написать сообщение;
|
|
||||||
|
|
||||||
Веб сервер должен быть Nginx.
|
|
||||||
mongo как бд для сообщений.
|
|
||||||
|
|
||||||
Телеграм бот (aiogram3), который показывает сообщения и позволяет создать сообщение самому.
|
|
||||||
|
|
||||||
Будет плюсом:
|
|
||||||
1) Добавление кэширования при помощи Redis (кеш стирается, когда появляется новое сообщение)
|
|
||||||
2) Развертывание на удалённом сервере и добавление SSL через CertBot.
|
|
||||||
3) Реализовать код так, чтобы было видно, кто написал сообщение.
|
|
||||||
4) Добавление пагинации.
|
|
||||||
|
|
||||||
Проект залить на Github с подробно описанным Readme
|
|
||||||
|
|
||||||
|
|
||||||
Сроки 1-2 суток
|
|
|
@ -1,12 +0,0 @@
|
||||||
include:
|
|
||||||
- bot/compose.yml
|
|
||||||
- web/compose.yml
|
|
||||||
|
|
||||||
services:
|
|
||||||
mongo:
|
|
||||||
image: mongo
|
|
||||||
environment:
|
|
||||||
MONGO_INITDB_ROOT_USERNAME: admin
|
|
||||||
MONGO_INITDB_ROOT_PASSWORD: admin
|
|
||||||
redis:
|
|
||||||
image: "redis:alpine"
|
|
|
@ -1 +0,0 @@
|
||||||
pymongo[srv]
|
|
|
@ -1,3 +0,0 @@
|
||||||
services:
|
|
||||||
tgbot:
|
|
||||||
build: .
|
|
|
@ -1,4 +0,0 @@
|
||||||
from os import getenv
|
|
||||||
|
|
||||||
TOKEN="7231211385:AAGMO2R4T_87j7pULfJNWnYV42N1QJy5ncY"
|
|
||||||
CHAT_ID="-4173707216"
|
|
|
@ -1,26 +0,0 @@
|
||||||
import asyncio
|
|
||||||
from config import *
|
|
||||||
from aiogram import Bot, Dispatcher
|
|
||||||
from aiogram.types import Message
|
|
||||||
from aiogram.enums import ParseMode
|
|
||||||
from aiogram.client.default import DefaultBotProperties
|
|
||||||
|
|
||||||
|
|
||||||
dp = Dispatcher()
|
|
||||||
|
|
||||||
|
|
||||||
@dp.message()
|
|
||||||
async def echo_handler(message: Message):
|
|
||||||
try:
|
|
||||||
await message.send_copy(chat_id=message.chat.id)
|
|
||||||
except TypeError:
|
|
||||||
await message.answer('Nice try!')
|
|
||||||
|
|
||||||
|
|
||||||
async def main(self):
|
|
||||||
bot = Bot(token=TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
|
|
||||||
await dp.start_polling(bot)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
asyncio.run(self.main())
|
|
|
@ -1 +0,0 @@
|
||||||
aiogram=3.10.0
|
|
|
@ -1,6 +0,0 @@
|
||||||
FROM python:3.10-alpine
|
|
||||||
WORKDIR /code
|
|
||||||
COPY ./requirements.txt /code/requirements.txt
|
|
||||||
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
|
||||||
COPY ./app /code/app
|
|
||||||
CMD ["fastapi", "run", "main.py", "--port", "80"]
|
|
|
@ -1,10 +0,0 @@
|
||||||
services:
|
|
||||||
web:
|
|
||||||
build: .
|
|
||||||
environment:
|
|
||||||
- TOKEN=
|
|
||||||
- CHAT_ID=
|
|
||||||
- MONGO_USERNAME=admin
|
|
||||||
- MONGO_PASSWORD=admin
|
|
||||||
ports:
|
|
||||||
- "8000:5000"
|
|
16
web/main.py
16
web/main.py
|
@ -1,16 +0,0 @@
|
||||||
from os import sysenv
|
|
||||||
from fastapi import FastAPI
|
|
||||||
from pymongo import MongoClient
|
|
||||||
|
|
||||||
app = FastAPI()
|
|
||||||
client = MongoClient('mongodb+srv://admin:admin@mongo/chat')
|
|
||||||
|
|
||||||
|
|
||||||
@app.get('/api/v1/messages')
|
|
||||||
async def v1_messages():
|
|
||||||
return {'message': 'Hello World'}
|
|
||||||
|
|
||||||
|
|
||||||
@app.post('/api/v1/message')
|
|
||||||
async def v1_message():
|
|
||||||
return {'message': 'Hello World'}
|
|
|
@ -1,3 +0,0 @@
|
||||||
fastapi[standard]>=0.113.0,<0.114.0
|
|
||||||
pydantic>=2.7.0,<3.0.0
|
|
||||||
pymongo[srv]>=4.8.0,<5
|
|
Loading…
Reference in New Issue