feat: linbot

restruct the project
This commit is contained in:
2026-03-10 10:15:22 +08:00
parent 00c76bec37
commit c0edc06ab1
11 changed files with 748 additions and 241 deletions

59
app/DB/Models.py Normal file
View File

@@ -0,0 +1,59 @@
from sqlalchemy import Column, String, Numeric, Date, DateTime, BigInteger
from sqlalchemy.orm import declarative_base
from datetime import datetime
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(BigInteger, primary_key=True)
name = Column(String)
email = Column(String, unique=True)
created_at = Column(DateTime, default=datetime.now)
updated_at = Column(DateTime, default=datetime.now)
class LineUser(Base):
__tablename__ = "line_users"
id = Column(BigInteger, primary_key=True)
line_user_id = Column(String, unique=True)
user_id = Column(BigInteger)
created_at = Column(DateTime, default=datetime.now)
class Category(Base):
__tablename__ = "categories"
id = Column(BigInteger, primary_key=True)
user_id = Column(BigInteger)
parent_id = Column(BigInteger, nullable=True)
name = Column(String)
color = Column(String, default='#3B82F6')
icon = Column(String, nullable=True)
created_at = Column(DateTime, default=datetime.now)
updated_at = Column(DateTime, default=datetime.now)
class CategoryRule(Base):
__tablename__ = "category_rules"
id = Column(BigInteger, primary_key=True)
user_id = Column(BigInteger)
category_id = Column(BigInteger)
keyword = Column(String)
created_at = Column(DateTime, default=datetime.now)
updated_at = Column(DateTime, default=datetime.now)
class Expense(Base):
__tablename__ = "expenses"
id = Column(BigInteger, primary_key=True)
user_id = Column(BigInteger)
category_id = Column(BigInteger, nullable=True)
amount = Column(Numeric(10, 2))
note = Column(String, nullable=True)
invoice_number = Column(String, nullable=True)
seller_name = Column(String, nullable=True)
item_name = Column(String, nullable=True)
date = Column(Date)
created_at = Column(DateTime, default=datetime.now)
updated_at = Column(DateTime, default=datetime.now)

13
app/DB/Session.py Normal file
View File

@@ -0,0 +1,13 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.config import DATABASE_URL
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(bind=engine)
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()