50 lines
1.5 KiB
Python
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);"
|
|
)
|