Skip to content

Commit 02a8996

Browse files
committed
changes to db schema
1 parent ee28842 commit 02a8996

File tree

4 files changed

+66
-24
lines changed

4 files changed

+66
-24
lines changed

main.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
22
import sys
3+
import os
34

45
import uvicorn
56
from fastapi import FastAPI
@@ -15,17 +16,14 @@
1516
from api.cart_api import cart_apis
1617
from models.db import create_db_and_tables
1718

18-
logger.add(
19-
sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO"
20-
)
21-
logger.add("file_{time}.log")
22-
logger.add(
23-
sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>"
24-
)
25-
logger = logging.getLogger("groceror")
19+
# Configure logging
20+
logging.basicConfig(level=logging.INFO)
21+
logger.add(sys.stderr, format="{time} {level} {message}", level="INFO")
2622

2723
app = FastAPI(debug=False)
28-
app.logger = logger
24+
25+
# Get port from environment variable (Heroku sets this)
26+
port = int(os.getenv("PORT", 8000))
2927

3028
# Allow requests from any origin
3129
origins = ["*"]
@@ -88,4 +86,14 @@ def custom_openapi():
8886
app.openapi = custom_openapi
8987

9088
if __name__ == "__main__":
91-
uvicorn.run(app, port=8000)
89+
try:
90+
uvicorn.run(
91+
"main:app",
92+
host="0.0.0.0",
93+
port=port,
94+
log_level="info",
95+
reload=False # Set to False in production
96+
)
97+
except Exception as e:
98+
logger.error(f"Failed to start server: {e}")
99+
sys.exit(1)

models/db.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,31 @@
1+
from sqlalchemy import text
12
from sqlalchemy_utils import create_database, database_exists
23
from sqlmodel import Session, SQLModel, create_engine
34

45
from config import DBConfig
56

6-
engine = create_engine(DBConfig.DB_URL, echo=True)
7+
engine = create_engine(
8+
DBConfig.DB_URL,
9+
echo=True,
10+
connect_args={"options": "-c search_path=public"}
11+
)
712
db_session = Session(engine)
813

914

1015
def create_db_and_tables():
1116
if not database_exists(engine.url):
1217
create_database(engine.url)
13-
# SQLModel.metadata.clear()
18+
19+
# Create schema if it doesn't exist
20+
with engine.begin() as conn:
21+
conn.execute(text("CREATE SCHEMA IF NOT EXISTS public"))
22+
# No need for explicit commit when using 'begin()'
23+
24+
# Create all tables
1425
SQLModel.metadata.create_all(bind=engine)
26+
27+
def get_session():
28+
try:
29+
yield db_session
30+
finally:
31+
db_session.close()

models/entity/inventory_entity.py

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,38 @@
66
from sqlmodel import Field, SQLModel
77

88

9-
class InventoryCategory(Enum):
10-
PRODUCE = "produce"
11-
MEAT_AND_POULTRY = "meat_and_poultry"
12-
DAIRY_AND_EGGS = "dairy_and_eggs"
13-
FROZEN_FOOD = "frozen_foods"
14-
CANNED_FOOD = "canned_food"
9+
class InventoryCategory(str, Enum):
10+
GROCERY = "GROCERY"
11+
PRODUCE = "PRODUCE"
12+
MEAT = "MEAT"
13+
DAIRY = "DAIRY"
14+
BAKERY = "BAKERY"
15+
OTHER = "OTHER"
1516

1617

1718
class Inventory(SQLModel, table=True):
1819
id: Optional[UUID] = Field(default_factory=uuid4, primary_key=True)
19-
name: str
20-
quantity: int
21-
category: Optional[str] = None
20+
name: str = Field(index=True)
21+
quantity: int = Field(default=0)
22+
category: InventoryCategory
23+
user_id: UUID = Field(foreign_key="user.id")
24+
store_id: UUID = Field(foreign_key="store.id")
25+
price: float = Field(default=0.0)
26+
notes: Optional[str] = None
2227
created_at: datetime = Field(default_factory=datetime.utcnow)
2328
updated_at: datetime = Field(default_factory=datetime.utcnow)
24-
notes: Optional[str] = None
25-
user_id: UUID = Field(foreign_key="user.id")
2629
# user: "User" = Relationship(back_populates="inventory")
30+
31+
def to_dict(self):
32+
return {
33+
"id": self.id,
34+
"name": self.name,
35+
"quantity": self.quantity,
36+
"category": self.category,
37+
"user_id": self.user_id,
38+
"store_id": self.store_id,
39+
"price": self.price,
40+
"notes": self.notes,
41+
"created_at": self.created_at,
42+
"updated_at": self.updated_at
43+
}

models/entity/store_entity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def __str__(self):
2828
def __hash__(self):
2929
return hash(self.id)
3030

31-
def is_active(self):
31+
def active(self):
3232
return self.is_active
3333

3434
def is_inactive(self):

0 commit comments

Comments
 (0)