]> gitweb.michael.orlitzky.com - dead/htsn-import.git/commitdiff
Add time_stamp and xml_file_id to Weather.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 21 Jan 2014 17:45:22 +0000 (12:45 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 21 Jan 2014 17:45:22 +0000 (12:45 -0500)
src/TSN/XML/Weather.hs

index f3b60af69c7fb52e013bdab5d5b11d2d6d21b24d..4951951c3d47101cf531f7125e1fe451696361aa 100644 (file)
@@ -50,11 +50,14 @@ import Text.XML.HXT.Core (
 import TSN.Codegen (
   tsn_codegen_config )
 import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
-import TSN.Picklers ( xp_gamedate )
+import TSN.Picklers ( xp_gamedate, xp_time_stamp )
 import TSN.XmlImport ( XmlImport(..) )
 import Xml ( FromXml(..), ToDb(..), pickle_unpickle, unpickleable )
 
 
+--
+-- DB/XML Data types
+--
 
 -- | Database/XML representation of a weather forecast listing.
 --
@@ -136,8 +139,10 @@ instance XmlImport WeatherForecastXml
 --
 data Weather =
   Weather {
+    db_xml_file_id :: Int,
     db_sport :: String,
-    db_title :: String }
+    db_title :: String,
+    db_time_stamp :: UTCTime }
 
 
 -- | The XML representation of a weather message.
@@ -150,7 +155,7 @@ data Message =
     xml_sport :: String,
     xml_title :: String,
     xml_forecasts :: [WeatherForecastXml],
-    xml_time_stamp :: String }
+    xml_time_stamp :: UTCTime }
   deriving (Eq, Show)
 
 
@@ -165,8 +170,10 @@ instance FromXml Message where
   --
   from_xml Message{..} =
     Weather {
+      db_xml_file_id = xml_xml_file_id,
       db_sport = xml_sport,
-      db_title = xml_title }
+      db_title = xml_title,
+      db_time_stamp = xml_time_stamp }
 
 -- | This allows us to call 'insert_xml' on a 'Message' without first
 --   converting it to the database representation.
@@ -192,6 +199,13 @@ data WeatherForecast_WeatherForecastListing =
 
 mkPersist tsn_codegen_config [groundhog|
 - entity: Weather
+  constructors:
+    - name: Weather
+      uniques:
+        - name: unique_weather
+          type: constraint
+          # Prevent multiple imports of the same message.
+          fields: [db_xml_file_id]
 
 - entity: WeatherForecast
   dbName: weather_forecasts
@@ -313,7 +327,7 @@ pickle_message =
         (xpElem "sport" xpText)
         (xpElem "title" xpText)
         (xpList pickle_forecast)
-        (xpElem "time_stamp" xpText)
+        (xpElem "time_stamp" xp_time_stamp)
   where
     from_tuple = uncurryN Message
     to_tuple Message{..} = (xml_xml_file_id,