From 392991ca2a2343890242032938b6140ef611e5ce Mon Sep 17 00:00:00 2001
From: thomaswoehlke <thomas.woehlke@gmail.com>
Date: Wed, 26 May 2021 18:37:15 +0200
Subject: [PATCH] Refactoring: vaccination

---
 .../blueprints/data_rki/rki_model.py          | 19 +++--
 .../blueprints/data_rki/rki_service_update.py | 72 ++++++++-----------
 2 files changed, 39 insertions(+), 52 deletions(-)

diff --git a/src/flask_covid19/blueprints/data_rki/rki_model.py b/src/flask_covid19/blueprints/data_rki/rki_model.py
index 2ac83217..4b5c7a51 100644
--- a/src/flask_covid19/blueprints/data_rki/rki_model.py
+++ b/src/flask_covid19/blueprints/data_rki/rki_model.py
@@ -195,10 +195,6 @@ class RkiAltersgruppe(BlueprintEntity):
     processed_update = db.Column(db.Boolean, nullable=False)
     processed_full_update = db.Column(db.Boolean, nullable=False)
     altersgruppe = db.Column(db.String(255), nullable=False)
-    datas = db.relationship(
-        'RkiData',
-        secondary=association_table_rki_to_altersgruppe,
-        back_populates="altersgruppen")
 
     @classmethod
     def get_all_as_page(cls, page: int):
@@ -225,8 +221,14 @@ class RkiAltersgruppe(BlueprintEntity):
 class RkiData(BlueprintFactTable):
     __tablename__ = 'rki'
     __mapper_args__ = {'concrete': True}
+    __table_args__ = (
+        db.UniqueConstraint('fid', 'geschlecht', 'date_reported_id', 'datenstand_id', 'location_id',
+                            'ref_datum_id', 'altersgruppe_id', name="uix_rki"),
+    )
 
     id = db.Column(db.Integer, primary_key=True)
+    processed_update = db.Column(db.Boolean, nullable=False)
+    processed_full_update = db.Column(db.Boolean, nullable=False)
     #
     date_reported_id = db.Column(db.Integer, db.ForeignKey('rki_date_reported.id'), nullable=False)
     date_reported = db.relationship(
@@ -240,17 +242,14 @@ class RkiData(BlueprintFactTable):
         lazy='joined',
         cascade='save-update',
         order_by='asc(RkiLandkreis.location)')
-    processed_update = db.Column(db.Boolean, nullable=False)
-    processed_full_update = db.Column(db.Boolean, nullable=False)
     #
     fid = db.Column(db.String(255), nullable=False)
     # altersgruppe = db.Column(db.String(255), nullable=False)
-    altersgruppen = db.relationship(
+    altersgruppe_id = db.Column(db.Integer, db.ForeignKey('rki_altersgruppe.id'), nullable=False)
+    altersgruppe = db.relationship(
         'RkiAltersgruppe',
-        secondary=association_table_rki_to_altersgruppe,
         lazy='joined',
-        back_populates="datas",
-        cascade='save-update, delete',
+        cascade='save-update',
         order_by='desc(RkiAltersgruppe.altersgruppe)')
     neuer_fall = db.Column(db.String(255), nullable=False)
     geschlecht = db.Column(db.String(255), nullable=False)
diff --git a/src/flask_covid19/blueprints/data_rki/rki_service_update.py b/src/flask_covid19/blueprints/data_rki/rki_service_update.py
index 00e6045b..99c9911a 100644
--- a/src/flask_covid19/blueprints/data_rki/rki_service_update.py
+++ b/src/flask_covid19/blueprints/data_rki/rki_service_update.py
@@ -189,9 +189,6 @@ class RkiServiceUpdateFull(RkiServiceUpdateBase):
         i = 0
         d = 0
         k = 0
-        written_data_rows = 0
-        hold_location = ""
-        hold_meldedatum = ""
         dict_locations = RkiLandkreis.find_all_as_dict()
         dict_altersgruppen = RkiAltersgruppe.find_all_as_dict()
         dict_ref_datum = RkiRefDatum.find_all_as_dict()
@@ -216,51 +213,42 @@ class RkiServiceUpdateFull(RkiServiceUpdateBase):
                 key_altersgruppen = o_import.altersgruppe
                 my_altersgruppe = dict_altersgruppen[key_altersgruppen]
                 my_landkreis = dict_locations[key_location]
-                if hold_location == key_location and hold_meldedatum == my_meldedatum_datum:
-                    o = RkiData.find_by_date_reported_and_location(date_reported=my_meldedatum, location=my_landkreis)
-                    o.altersgruppen.append(my_altersgruppe)
-                else:
-                    hold_location = key_location
-                    hold_meldedatum = my_meldedatum_datum
-                    key_datenstand = o_import.datenstand
-                    key_ref_datum = o_import.ref_datum
-                    my_datenstand = dict_datenstand[key_datenstand]
-                    my_ref_datum = dict_ref_datum[key_ref_datum]
-                    # app.logger.info(str(my_landkreis))
-                    o = RkiData(
-                        date_reported=my_meldedatum,
-                        datenstand=my_datenstand,
-                        location=my_landkreis,
-                        ref_datum=my_ref_datum,
-                        fid=o_import.fid,
-                        geschlecht=o_import.geschlecht,
-                        anzahl_fall=o_import.anzahl_fall,
-                        anzahl_todesfall=o_import.anzahl_todesfall,
-                        neuer_fall=o_import.neuer_fall,
-                        neuer_todesfall=o_import.neuer_todesfall,
-                        neu_genesen=o_import.neu_genesen,
-                        anzahl_genesen=o_import.anzahl_genesen,
-                        ist_erkrankungsbeginn=o_import.ist_erkrankungsbeginn,
-                        altersgruppe2=o_import.altersgruppe2,
-                        processed_update=False,
-                        processed_full_update=True,
-                    )
-                    o.altersgruppen.append(my_altersgruppe)
-                    db.session.add(o)
-                    written_data_rows += 1
-                    k += 1
+                key_datenstand = o_import.datenstand
+                key_ref_datum = o_import.ref_datum
+                my_datenstand = dict_datenstand[key_datenstand]
+                my_ref_datum = dict_ref_datum[key_ref_datum]
+                # app.logger.info(str(my_landkreis))
+                o = RkiData(
+                    date_reported=my_meldedatum,
+                    datenstand=my_datenstand,
+                    location=my_landkreis,
+                    ref_datum=my_ref_datum,
+                    altersgruppe=my_altersgruppe,
+                    fid=o_import.fid,
+                    geschlecht=o_import.geschlecht,
+                    #
+                    anzahl_fall=o_import.anzahl_fall,
+                    anzahl_todesfall=o_import.anzahl_todesfall,
+                    neuer_fall=o_import.neuer_fall,
+                    neuer_todesfall=o_import.neuer_todesfall,
+                    neu_genesen=o_import.neu_genesen,
+                    anzahl_genesen=o_import.anzahl_genesen,
+                    ist_erkrankungsbeginn=o_import.ist_erkrankungsbeginn,
+                    altersgruppe2=o_import.altersgruppe2,
+                    processed_update=False,
+                    processed_full_update=True,
+                )
+                db.session.add(o)
+                k += 1
                 i += 1
             d += 1
             if d % 7 == 0:
                 db.session.commit()
-                s1 = str(i)
-                s2 = str(my_meldedatum)
-                s3 = str(k)
-                s4 = str(written_data_rows)
-                app.logger.info(" full update RKI data ... " + s1 + " rows ... " + s2 + " (" + s3 + " / " + s4 + ")")
+                sd = str(my_meldedatum)
+                app.logger.info(" full update RKI data ... " + str(i) + " rows ... " + sd + " (" + str(k) + ")")
                 k = 0
         db.session.commit()
-        app.logger.info(" full update RKI data ...  "+str(i)+" total rows")
+        app.logger.info(" full update RKI data ... " + str(i) + " total rows")
         app.logger.info("")
         app.logger.info(" RkiServiceUpdateFull.__full_update_data [done]")
         app.logger.info("------------------------------------------------------------")
-- 
GitLab