|
|
@@ -17,6 +17,21 @@ class Storage:
|
|
|
|
|
|
async def _create_db(self):
|
|
|
async with aiosqlite.connect(self.conn_str) as conn:
|
|
|
+ await conn.execute(
|
|
|
+ """
|
|
|
+ CREATE TABLE IF NOT EXISTS sites (
|
|
|
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
|
+ original_url TEXT
|
|
|
+ );
|
|
|
+ """
|
|
|
+ )
|
|
|
+ await conn.execute(
|
|
|
+ """
|
|
|
+ CREATE UNIQUE INDEX IF NOT EXISTS sites_unique_original_url
|
|
|
+ ON sites (original_url);
|
|
|
+ """
|
|
|
+ )
|
|
|
+
|
|
|
await conn.execute(
|
|
|
"""
|
|
|
CREATE TABLE IF NOT EXISTS snapshots (
|
|
|
@@ -68,6 +83,30 @@ class Storage:
|
|
|
"""
|
|
|
)
|
|
|
|
|
|
+ async def add_site(self, original_url: str) -> int:
|
|
|
+ async with aiosqlite.connect(self.conn_str) as conn:
|
|
|
+ (id_,) = await conn.execute_insert(
|
|
|
+ """
|
|
|
+ INSERT INTO sites (original_url)
|
|
|
+ VALUES (?)
|
|
|
+ ON CONFLICT DO NOTHING;
|
|
|
+ """,
|
|
|
+ [original_url],
|
|
|
+ )
|
|
|
+
|
|
|
+ if id_ == 0:
|
|
|
+ [(id_,)] = await conn.execute_fetchall(
|
|
|
+ """
|
|
|
+ SELECT id
|
|
|
+ FROM sites
|
|
|
+ WHERE original_url = ?
|
|
|
+ """,
|
|
|
+ [original_url],
|
|
|
+ )
|
|
|
+
|
|
|
+ await conn.commit()
|
|
|
+ return id_
|
|
|
+
|
|
|
async def add_snapshot(
|
|
|
self, snapshot: InternetArchiveSnapshotId, virtual: datetime
|
|
|
) -> int:
|