Compare commits
9 Commits
aff94c7e6c
...
7787cc5b69
Author | SHA1 | Date |
---|---|---|
BitHeaven | 7787cc5b69 | |
BitHeaven | b3b11d2d01 | |
BitHeaven | 37fceb5bd4 | |
BitHeaven | 7029495656 | |
BitHeaven | 04b41cb85d | |
BitHeaven | 477670ca28 | |
BitHeaven | 0a456d4458 | |
BitHeaven | 060bc8b827 | |
BitHeaven | 902e1c84ab |
|
@ -0,0 +1,21 @@
|
||||||
|
Написать 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 суток
|
|
@ -0,0 +1,12 @@
|
||||||
|
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"
|
|
@ -0,0 +1 @@
|
||||||
|
pymongo[srv]
|
|
@ -0,0 +1,3 @@
|
||||||
|
services:
|
||||||
|
tgbot:
|
||||||
|
build: .
|
|
@ -0,0 +1,4 @@
|
||||||
|
from os import getenv
|
||||||
|
|
||||||
|
TOKEN="7231211385:AAGMO2R4T_87j7pULfJNWnYV42N1QJy5ncY"
|
||||||
|
CHAT_ID="-4173707216"
|
|
@ -0,0 +1,26 @@
|
||||||
|
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())
|
|
@ -0,0 +1 @@
|
||||||
|
aiogram=3.10.0
|
|
@ -0,0 +1,6 @@
|
||||||
|
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"]
|
|
@ -0,0 +1,10 @@
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
build: .
|
||||||
|
environment:
|
||||||
|
- TOKEN=
|
||||||
|
- CHAT_ID=
|
||||||
|
- MONGO_USERNAME=admin
|
||||||
|
- MONGO_PASSWORD=admin
|
||||||
|
ports:
|
||||||
|
- "8000:5000"
|
|
@ -0,0 +1,16 @@
|
||||||
|
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'}
|
|
@ -0,0 +1,3 @@
|
||||||
|
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