Pārlūkot izejas kodu

More db normalization : use featured_article_id in article_snapshots

jherve 1 gadu atpakaļ
vecāks
revīzija
a66eaa2478

+ 6 - 4
src/de_quoi_parle_le_monde/main.py

@@ -41,12 +41,14 @@ class ArchiveDownloader:
         site_id = await storage.add_site(collection.url)
         snapshot_id = await storage.add_snapshot(site_id, main_page.snapshot.id, dt)
 
-        main_id = await storage.add_featured_article_snapshot(main_page.main_article.article)
-        await storage.add_main_article(snapshot_id, main_id)
+        article_id = await storage.add_featured_article(main_page.main_article.article.original)
+        main_article_snap_id = await storage.add_featured_article_snapshot(article_id, main_page.main_article.article)
+        await storage.add_main_article(snapshot_id, main_article_snap_id)
 
         for t in main_page.top_articles:
-            article_id = await storage.add_featured_article_snapshot(t.article)
-            await storage.add_top_article(snapshot_id, article_id, t)
+            article_id = await storage.add_featured_article(t.article.original)
+            top_article_snap_id = await storage.add_featured_article_snapshot(article_id, t.article)
+            await storage.add_top_article(snapshot_id, top_article_snap_id, t)
 
 
 async def main(dler: ArchiveDownloader):

+ 9 - 9
src/de_quoi_parle_le_monde/storage.py

@@ -98,16 +98,16 @@ class Storage:
                 """
                 CREATE TABLE IF NOT EXISTS featured_article_snapshots (
                     id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    featured_article_id INTEGER REFERENCES featured_articles (id) ON DELETE CASCADE,
                     title TEXT,
-                    url TEXT,
-                    original_url TEXT
+                    url TEXT
                 );
                 """
             )
             await conn.execute(
                 """
-                CREATE UNIQUE INDEX IF NOT EXISTS featured_article_snapshots_unique_idx_title_url
-                ON featured_article_snapshots (title, url);
+                CREATE UNIQUE INDEX IF NOT EXISTS featured_article_snapshots_unique_idx_featured_article_id_url
+                ON featured_article_snapshots (featured_article_id, url);
                 """
             )
 
@@ -252,11 +252,11 @@ class Storage:
             await conn.commit()
             return id_
 
-    async def add_featured_article_snapshot(self, article: FeaturedArticleSnapshot):
+    async def add_featured_article_snapshot(self, featured_article_id: int, article: FeaturedArticleSnapshot):
         async with self.conn as conn:
             (id_,) = await conn.execute_insert(
-                self._insert_stmt("featured_article_snapshots", ["title", "url", "original_url"]),
-                [article.title, article.url, str(article.original.url)],
+                self._insert_stmt("featured_article_snapshots", ["title", "url", "featured_article_id"]),
+                [article.title, article.url, featured_article_id],
             )
 
             if id_ == 0:
@@ -264,9 +264,9 @@ class Storage:
                     """
                     SELECT id
                     FROM featured_article_snapshots
-                    WHERE title = ? AND url = ?
+                    WHERE featured_article_id = ? AND url = ?
                     """,
-                    [article.title, article.url],
+                    [featured_article_id, article.url],
                 )
 
             await conn.commit()