normalize project structure: rename app/ → src/, add .mise.toml, .env.example, CLAUDE.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2
.mise.toml
Normal file
2
.mise.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
[tools]
|
||||
python = "3.14.2"
|
||||
44
CLAUDE.md
Normal file
44
CLAUDE.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# sticker-cloner — Telegram Sticker Cloner
|
||||
|
||||
Telegram bot that clones sticker packs. Built with Python (FastAPI + uvicorn).
|
||||
|
||||
## Stack
|
||||
|
||||
- **Backend:** Python 3.14, FastAPI, uvicorn, tstickers, Pillow
|
||||
- **Bot:** python-telegram-bot
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
backend/
|
||||
├── src/ ← FastAPI application
|
||||
├── requirements.txt
|
||||
├── deploy.sh
|
||||
└── .env.example
|
||||
```
|
||||
|
||||
## Local Development
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
uvicorn src.main:app --reload --port 8080
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
Deploys to Uberspace (`serve.uber.space`):
|
||||
- Backend → `~/services/sticker-cloner/` (systemd: `sticker-cloner.service`, port 8080)
|
||||
- Route: `/sticker-cloner/*` → port 8080 (prefix removed)
|
||||
|
||||
## Environment Variables
|
||||
|
||||
See `.env.example`:
|
||||
- `BOT_TOKEN` — Telegram bot API token
|
||||
1
backend/.env.example
Normal file
1
backend/.env.example
Normal file
@@ -0,0 +1 @@
|
||||
BOT_TOKEN=
|
||||
1
backend/.gitignore
vendored
1
backend/.gitignore
vendored
@@ -8,3 +8,4 @@ __pycache__/
|
||||
.idea/
|
||||
.cache/
|
||||
.vscode/
|
||||
.mise.local.toml
|
||||
|
||||
@@ -44,7 +44,7 @@ Description=sticker-cloner backend
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=${REMOTE_APP_DIR}
|
||||
ExecStart=${REMOTE_APP_DIR}/.venv/bin/uvicorn app.main:app --host 0.0.0.0 --port ${PORT} --root-path ${URL_PATH}
|
||||
ExecStart=${REMOTE_APP_DIR}/.venv/bin/uvicorn src.main:app --host 0.0.0.0 --port ${PORT} --root-path ${URL_PATH}
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
from app.routers import stickersets
|
||||
from src.routers import stickersets
|
||||
|
||||
app = FastAPI(title="StickerCloner API")
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from fastapi.responses import FileResponse
|
||||
|
||||
from app.models import StickerSetResponse
|
||||
from app.services import sticker_service
|
||||
from src.models import StickerSetResponse
|
||||
from src.services import sticker_service
|
||||
|
||||
router = APIRouter(prefix="/api/stickersets")
|
||||
|
||||
@@ -3,8 +3,8 @@ from pathlib import Path
|
||||
from tstickers.convert import Backend
|
||||
from tstickers.manager import StickerManager
|
||||
|
||||
from app.config import settings
|
||||
from app.models import StickerResponse, StickerSetResponse
|
||||
from src.config import settings
|
||||
from src.models import StickerResponse, StickerSetResponse
|
||||
|
||||
_manager: StickerManager | None = None
|
||||
|
||||
Reference in New Issue
Block a user