Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
kitchen/dlv
node_modules
test-results
playwright-report
playwright-report
.browser_screenshots
1 change: 1 addition & 0 deletions check/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ RUN pip install -r requirements.txt
COPY public public
COPY templates templates
COPY main.py .
COPY database.py .

EXPOSE 8000

Expand Down
8 changes: 8 additions & 0 deletions check/chart/templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ spec:
env:
- name: BUCKET
value: {{ .Values.bucket }}
- name: DB_HOST
value: {{ .Values.database.host | quote }}
- name: DB_NAME
value: {{ .Values.database.name | quote }}
- name: DB_USER
value: {{ .Values.database.user | quote }}
- name: DB_PASSWORD
value: {{ .Values.database.password | quote }}
envFrom:
- secretRef:
name: {{ .Values.credentials.secret.name }}
Expand Down
5 changes: 5 additions & 0 deletions check/chart/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ replicaCount: 1

image: external-resources-aws-demo-check:latest
bucket:
database:
host: ""
name: ""
user: ""
password: ""
credentials:
secret:
name: aws-credentials
Expand Down
58 changes: 58 additions & 0 deletions check/database.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import os
from sqlalchemy import create_engine, Column, String, Float, Boolean, DateTime, Text, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.dialects.postgresql import JSON
from datetime import datetime

# Database configuration
DB_HOST = os.getenv("DB_HOST", "localhost")
DB_NAME = os.getenv("DB_NAME", "checksdb")
DB_USER = os.getenv("DB_USER", "checksuser")
DB_PASSWORD = os.getenv("DB_PASSWORD", "checkspass123!")

# Remove port from host if present (RDS endpoints include port)
if ":" in DB_HOST:
DB_HOST = DB_HOST.split(":")[0]

DATABASE_URL = f"postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:5432/{DB_NAME}"

engine = create_engine(
DATABASE_URL,
pool_timeout=10,
pool_recycle=3600,
connect_args={"connect_timeout": 10}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

class CheckDB(Base):
__tablename__ = "checks"

order_id = Column(String, primary_key=True, index=True)
items = Column(JSON) # Store items as JSON
total = Column(Float)
receipt_url = Column(String)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
status = Column(String, default="active") # active, paid, cancelled

class CheckStatsDB(Base):
__tablename__ = "check_stats"

id = Column(Integer, primary_key=True, autoincrement=True)
date = Column(DateTime, default=datetime.utcnow)
total_checks = Column(Integer, default=0)
total_revenue = Column(Float, default=0.0)
avg_order_value = Column(Float, default=0.0)

def create_tables():
Base.metadata.create_all(bind=engine)

def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
Loading