Compare commits

...

9 Commits

Author SHA1 Message Date
BitHeaven 7787cc5b69 Make base web 2024-08-03 17:40:56 +03:00
BitHeaven b3b11d2d01 Add Docker file 2024-08-03 17:40:40 +03:00
BitHeaven 37fceb5bd4 Add tg config 2024-08-03 17:40:27 +03:00
BitHeaven 7029495656 Add compose file 2024-08-03 17:39:44 +03:00
BitHeaven 04b41cb85d Add compose file 2024-08-03 17:39:39 +03:00
BitHeaven 477670ca28 Make base tg bot 2024-08-03 17:39:11 +03:00
BitHeaven 0a456d4458 Add req files 2024-08-03 17:38:43 +03:00
BitHeaven 060bc8b827 Create docker-compose file 2024-08-03 17:36:58 +03:00
BitHeaven 902e1c84ab Add TODO file 2024-08-03 17:36:31 +03:00
11 changed files with 103 additions and 0 deletions

21
TODO Normal file
View File

@ -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 суток

12
docker-compose.yml Normal file
View File

@ -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"

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
pymongo[srv]

3
tgbot/compose.yml Normal file
View File

@ -0,0 +1,3 @@
services:
tgbot:
build: .

4
tgbot/config.py Normal file
View File

@ -0,0 +1,4 @@
from os import getenv
TOKEN="7231211385:AAGMO2R4T_87j7pULfJNWnYV42N1QJy5ncY"
CHAT_ID="-4173707216"

26
tgbot/main.py Normal file
View File

@ -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())

1
tgbot/requirements.txt Normal file
View File

@ -0,0 +1 @@
aiogram=3.10.0

6
web/Docker Normal file
View File

@ -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"]

10
web/compose.yml Normal file
View File

@ -0,0 +1,10 @@
services:
web:
build: .
environment:
- TOKEN=
- CHAT_ID=
- MONGO_USERNAME=admin
- MONGO_PASSWORD=admin
ports:
- "8000:5000"

16
web/main.py Normal file
View File

@ -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'}

3
web/requirements.txt Normal file
View File

@ -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