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);" )