munch-ease-backend/households/repository.py

50 lines
1.5 KiB
Python

async def create(conn):
# Households table
await conn.execute(
"""
CREATE TABLE IF NOT EXISTS Household (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
slug TEXT NOT NULL UNIQUE
);
"""
)
# Membership table
await conn.execute(
"""
CREATE TABLE IF NOT EXISTS HouseholdMember (
user_id INTEGER NOT NULL,
household_id INTEGER NOT NULL,
role TEXT NOT NULL,
PRIMARY KEY (user_id, household_id),
FOREIGN KEY(user_id) REFERENCES User(id) ON DELETE CASCADE,
FOREIGN KEY(household_id) REFERENCES Household(id) ON DELETE CASCADE
);
"""
)
# Invitations table
await conn.execute(
"""
CREATE TABLE IF NOT EXISTS HouseholdInvitation (
id INTEGER PRIMARY KEY,
household_id INTEGER NOT NULL,
email TEXT NOT NULL,
invited_by_user_id INTEGER NOT NULL,
token TEXT NOT NULL UNIQUE,
expires_at DATETIME NOT NULL,
status TEXT NOT NULL,
FOREIGN KEY(household_id) REFERENCES Household(id) ON DELETE CASCADE,
FOREIGN KEY(invited_by_user_id) REFERENCES User(id) ON DELETE SET NULL
);
"""
)
# Indices
await conn.execute(
"CREATE INDEX IF NOT EXISTS idx_household_slug ON Household(slug);"
)
await conn.execute(
"CREATE INDEX IF NOT EXISTS idx_household_member_household ON HouseholdMember(household_id);"
)