mirror of
https://github.com/henry4682/linebot_finance.git
synced 2026-05-16 04:41:52 +00:00
feat:linebot
1. change Dockerfile 2. change the way import
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
from app.config import DATABASE_URL
|
from config import DATABASE_URL
|
||||||
|
|
||||||
engine = create_engine(DATABASE_URL)
|
engine = create_engine(DATABASE_URL)
|
||||||
SessionLocal = sessionmaker(bind=engine)
|
SessionLocal = sessionmaker(bind=engine)
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
FROM python:3.11-slim
|
FROM python:3.11-slim
|
||||||
|
|
||||||
# 安裝 uv
|
|
||||||
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
|
||||||
|
|
||||||
# 安裝 Playwright 需要的系統依賴
|
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
wget \
|
wget \
|
||||||
gnupg \
|
gnupg \
|
||||||
@@ -24,17 +22,15 @@ RUN apt-get update && apt-get install -y \
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# 複製 uv 設定檔
|
# pyproject.toml 在 app/ 裡
|
||||||
COPY pyproject.toml .
|
COPY app/pyproject.toml .
|
||||||
COPY uv.lock* .
|
COPY app/uv.lock* .
|
||||||
|
|
||||||
# 安裝依賴
|
|
||||||
RUN uv sync --frozen
|
RUN uv sync --frozen
|
||||||
|
|
||||||
# 安裝 Playwright Chromium
|
|
||||||
RUN uv run playwright install chromium
|
RUN uv run playwright install chromium
|
||||||
RUN uv run playwright install-deps chromium
|
RUN uv run playwright install-deps chromium
|
||||||
|
|
||||||
COPY . .
|
# 只複製 app/ 的內容進去
|
||||||
|
COPY app/ .
|
||||||
|
|
||||||
CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|
CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
||||||
@@ -2,8 +2,8 @@ import re
|
|||||||
from datetime import datetime, date
|
from datetime import datetime, date
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from sqlalchemy import text
|
from sqlalchemy import text
|
||||||
from app.db.models import User, LineUser, Category, CategoryRule, Expense
|
from db.models import User, LineUser, Category, CategoryRule, Expense
|
||||||
from app.db.session import SessionLocal
|
from db.session import SessionLocal
|
||||||
|
|
||||||
EXPENSE_TEMPLATE = (
|
EXPENSE_TEMPLATE = (
|
||||||
"請填寫以下記帳資料後傳回:\n\n"
|
"請填寫以下記帳資料後傳回:\n\n"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from app.line import captcha_state
|
from line import captcha_state
|
||||||
from app.line.expense import (
|
from line.expense import (
|
||||||
EXPENSE_TEMPLATE,
|
EXPENSE_TEMPLATE,
|
||||||
save_expense,
|
save_expense,
|
||||||
delete_expense,
|
delete_expense,
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ from linebot.v3.messaging import (
|
|||||||
)
|
)
|
||||||
from linebot.v3.webhooks import MessageEvent, TextMessageContent, FollowEvent
|
from linebot.v3.webhooks import MessageEvent, TextMessageContent, FollowEvent
|
||||||
from linebot.v3.exceptions import InvalidSignatureError
|
from linebot.v3.exceptions import InvalidSignatureError
|
||||||
from app.config import LINE_CHANNEL_ACCESS_TOKEN, LINE_CHANNEL_SECRET
|
from config import LINE_CHANNEL_ACCESS_TOKEN, LINE_CHANNEL_SECRET
|
||||||
from app.line.handlers import handle_text, handle_captcha
|
from line.handlers import handle_text, handle_captcha
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
configuration = Configuration(access_token=LINE_CHANNEL_ACCESS_TOKEN)
|
configuration = Configuration(access_token=LINE_CHANNEL_ACCESS_TOKEN)
|
||||||
|
|||||||
21
app/config.py
Normal file
21
app/config.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import os
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
# LINE
|
||||||
|
LINE_CHANNEL_ACCESS_TOKEN = os.getenv("LINE_CHANNEL_ACCESS_TOKEN")
|
||||||
|
LINE_CHANNEL_SECRET = os.getenv("LINE_CHANNEL_SECRET")
|
||||||
|
LINE_USER_ID = os.getenv("LINE_USER_ID")
|
||||||
|
|
||||||
|
# DB
|
||||||
|
DATABASE_URL = os.getenv("DATABASE_URL")
|
||||||
|
|
||||||
|
# 發票
|
||||||
|
EINVOICE_USER = os.getenv("EINVOICE_USER")
|
||||||
|
EINVOICE_PASS = os.getenv("EINVOICE_PASS")
|
||||||
|
|
||||||
|
# Cloudinary
|
||||||
|
CLOUDINARY_CLOUD_NAME = os.getenv("CLOUDINARY_CLOUD_NAME")
|
||||||
|
CLOUDINARY_API_KEY = os.getenv("CLOUDINARY_API_KEY")
|
||||||
|
CLOUDINARY_API_SECRET = os.getenv("CLOUDINARY_API_SECRET")
|
||||||
Reference in New Issue
Block a user