X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;ds=inline;f=src%2FTSN%2FXML%2FAutoRacingResults.hs;h=d96c7495f8c171cd10b71d315a5c849a22b5d5cf;hb=5b051a15402e5ebbe4e388265dbf8cef6c31df6f;hp=596b0bd46c4d7fff742a444f304ef3a7ec462360;hpb=f2c3c36ec22bbf8d56a9a2cfdfc49276facc349b;p=dead%2Fhtsn-import.git
diff --git a/src/TSN/XML/AutoRacingResults.hs b/src/TSN/XML/AutoRacingResults.hs
index 596b0bd..d96c749 100644
--- a/src/TSN/XML/AutoRacingResults.hs
+++ b/src/TSN/XML/AutoRacingResults.hs
@@ -60,7 +60,7 @@ import Text.XML.HXT.Core (
import TSN.Codegen (
tsn_codegen_config )
import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
-import TSN.Picklers ( xp_earnings, xp_racedate, xp_time_stamp )
+import TSN.Picklers ( xp_earnings, xp_datetime, xp_time_stamp )
import TSN.XmlImport ( XmlImport(..), XmlImportFk(..) )
import Xml (
FromXml(..),
@@ -82,7 +82,9 @@ dtd = "AutoRacingResultsXML.dtd"
-- * AutoRacingResults/Message
--- | Database representation of a 'Message'.
+-- | Database representation of a 'Message'. Comparatively, it lacks
+-- the listings and race information since they are linked via a
+-- foreign key.
--
data AutoRacingResults =
AutoRacingResults {
@@ -101,7 +103,9 @@ data AutoRacingResults =
--- | XML Representation of an 'AutoRacingResults'.
+-- | XML Representation of an 'AutoRacingResults'. It has the same
+-- fields, but in addition contains the 'xml_listings' and
+-- 'xml_race_information'.
--
data Message =
Message {
@@ -177,6 +181,7 @@ data AutoRacingResultsListing =
db_nc :: Maybe Bool,
db_earnings :: Maybe Int }
+
-- | XML representation of a \
contained within a
-- \.
--
@@ -204,6 +209,7 @@ instance ToDb AutoRacingResultsListingXml where
--
type Db AutoRacingResultsListingXml = AutoRacingResultsListing
+
instance FromXmlFk AutoRacingResultsListingXml where
-- | Each 'AutoRacingResultsListingXml' is contained in (i.e. has a
-- foreign key to) a 'AutoRacingResults'.
@@ -261,7 +267,7 @@ data MostLapsLeading =
data AutoRacingResultsRaceInformation =
AutoRacingResultsRaceInformation {
-- Note the apostrophe to disambiguate it from the
- -- AutoRacingResultsListing filed.
+ -- AutoRacingResultsListing field.
db_auto_racing_results_id' :: DefaultKey AutoRacingResults,
db_track_length :: Double,
db_track_length_kph :: Double,
@@ -385,19 +391,24 @@ mkPersist tsn_codegen_config [groundhog|
reference:
onDelete: cascade
-
+# Note the apostrophe in the foreign key. This is to disambiguate
+# it from the AutoRacingResultsListing foreign key of the same name.
+# We strip it out of the dbName.
- entity: AutoRacingResultsRaceInformation
dbName: auto_racing_results_race_information
constructors:
- name: AutoRacingResultsRaceInformation
fields:
- name: db_auto_racing_results_id'
+ dbName: auto_racing_results_id
reference:
onDelete: cascade
- name: db_most_laps_leading
embeddedType:
- - {name: most_laps_leading_driver_id, dbName: most_laps_leading_driver_id}
- - {name: most_laps_leading_driver, dbName: most_laps_leading_driver}
+ - {name: most_laps_leading_driver_id,
+ dbName: most_laps_leading_driver_id}
+ - {name: most_laps_leading_driver,
+ dbName: most_laps_leading_driver}
- embedded: MostLapsLeading
fields:
@@ -414,6 +425,8 @@ mkPersist tsn_codegen_config [groundhog|
--- Pickling
---
+-- | Pickler for the \s contained within \s.
+--
pickle_listing :: PU AutoRacingResultsListingXml
pickle_listing =
xpElem "Listing" $
@@ -449,6 +462,7 @@ pickle_listing =
-- | Pickler for the top-level 'Message'.
+--
pickle_message :: PU Message
pickle_message =
xpElem "message" $
@@ -458,7 +472,7 @@ pickle_message =
(xpElem "category" xpText)
(xpElem "sport" xpText)
(xpElem "RaceID" xpInt)
- (xpElem "RaceDate" xp_racedate)
+ (xpElem "RaceDate" xp_datetime)
(xpElem "Title" xpText)
(xpElem "Track_Location" xpText)
(xpElem "Laps_Remaining" xpInt)
@@ -483,6 +497,9 @@ pickle_message =
xml_time_stamp m)
+-- | Pickler for the \ child of a
+-- \.
+--
pickle_most_laps_leading :: PU MostLapsLeading
pickle_most_laps_leading =
xpElem "Most_Laps_Leading" $
@@ -496,13 +513,16 @@ pickle_most_laps_leading =
db_most_laps_leading_driver m,
db_most_laps_leading_number_of_laps m)
+
+-- | Pickler for the \ child of \.
+--
pickle_race_information :: PU AutoRacingResultsRaceInformationXml
pickle_race_information =
xpElem "Race_Information" $
xpWrap (from_tuple, to_tuple) $
xp11Tuple (-- I can't think of another way to get both the
-- TrackLength and its KPH attribute. So we shove them
- -- both in a 2-tuple.
+ -- both in a 2-tuple. This should probably be an embedded type!
xpElem "TrackLength" $ xpPair xpPrim (xpAttr "KPH" xpPrim) )
(xpElem "Laps" xpInt)
(xpOption $ xpElem "AverageSpeedMPH" xpPrim)