X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTSN%2FXML%2FJFile.hs;h=51db0abfa32af3b0be591e1099803a5289b4b853;hb=d88388235ec3df702f80e70d50898850befef6ed;hp=84b28b10260a3a9e532c12fd97b088857a99bdbd;hpb=2bf6ea31afc5d87e2c953d44ff89ff7e4ec73c32;p=dead%2Fhtsn-import.git diff --git a/src/TSN/XML/JFile.hs b/src/TSN/XML/JFile.hs index 84b28b1..51db0ab 100644 --- a/src/TSN/XML/JFile.hs +++ b/src/TSN/XML/JFile.hs @@ -61,6 +61,7 @@ import Text.XML.HXT.Core ( -- Local imports import TSN.Codegen ( tsn_codegen_config ) +import TSN.Database ( insert_or_select ) import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate ) import TSN.Picklers ( xp_date, @@ -148,67 +149,6 @@ instance FromXml Message where instance XmlImport Message --- * JFileGameAwayTeamXml / JFileGameHomeTeamXml - --- | The XML representation of a JFile away team. Its corresponding --- database representation (along with that of the home team) is a --- TSN.Team, but their XML representations are different. -data JFileGameAwayTeamXml = - JFileGameAwayTeamXml { - away_team_id :: String, - away_team_abbreviation :: Maybe String, - away_team_name :: Maybe String } - deriving (Eq, Show) - -instance ToDb JFileGameAwayTeamXml where - -- | The database analogue of an 'JFileGameAwayTeamXml' is - -- a 'Team'. - -- - type Db JFileGameAwayTeamXml = Team - -instance FromXml JFileGameAwayTeamXml where - -- | To convert a 'JFileGameAwayTeamXml' to a 'Team', we do just - -- about nothing. - -- - from_xml JFileGameAwayTeamXml{..} = - Team { - team_id = away_team_id, - abbreviation = away_team_abbreviation, - name = away_team_name } - --- | Allow us to import JFileGameAwayTeamXml directly. -instance XmlImport JFileGameAwayTeamXml - - --- | The XML representation of a JFile home team. Its corresponding --- database representation (along with that of the away team) is a --- TSN.Team, but their XML representations are different. -data JFileGameHomeTeamXml = - JFileGameHomeTeamXml { - home_team_id :: String, - home_team_abbreviation :: Maybe String, - home_team_name :: Maybe String } - deriving (Eq, Show) - -instance ToDb JFileGameHomeTeamXml where - -- | The database analogue of an 'JFileGameHomeTeamXml' is - -- a 'Team'. - -- - type Db JFileGameHomeTeamXml = Team - -instance FromXml JFileGameHomeTeamXml where - -- | To convert a 'JFileGameHomeTeamXml' to a 'Team', we do just - -- about nothing. - -- - from_xml JFileGameHomeTeamXml{..} = - Team { - team_id = home_team_id, - abbreviation = home_team_abbreviation, - name = home_team_name } - --- | Allow us to import JFileGameHomeTeamXml directly. -instance XmlImport JFileGameHomeTeamXml - -- * JFileGame/JFileGameXml @@ -294,9 +234,9 @@ data JFileGameXml = xml_season_type :: Maybe String, xml_game_date :: UTCTime, xml_game_time :: UTCTime, - xml_vteam :: JFileGameAwayTeamXml, + xml_vteam :: Team, xml_vleague :: Maybe String, - xml_hteam :: JFileGameHomeTeamXml, + xml_hteam :: Team, xml_hleague :: Maybe String, xml_vscore :: Int, xml_hscore :: Int, @@ -385,8 +325,8 @@ instance DbImport Message where -- Now loop through the message's games forM_ (xml_games $ xml_gamelist m) $ \game -> do -- First we insert the home and away teams. - away_team_id <- insert_xml_or_select (xml_vteam game) - home_team_id <- insert_xml_or_select (xml_hteam game) + away_team_id <- insert_or_select (xml_vteam game) + home_team_id <- insert_or_select (xml_hteam game) -- Now insert the game keyed to the "jfile" and its teams. insert_xml_fk_teams_ msg_id away_team_id home_team_id game @@ -598,7 +538,10 @@ pickle_odds_info = (_:_:_:_:notes5:_) -> notes5 _ -> "" -pickle_home_team :: PU JFileGameHomeTeamXml +-- | (Un)pickle a home team to/from the dual XML/DB representation +-- 'Team'. +-- +pickle_home_team :: PU Team pickle_home_team = xpElem "hteam" $ xpWrap (from_tuple, to_tuple) $ @@ -606,13 +549,16 @@ pickle_home_team = (xpAttr "abbr" (xpOption xpText)) -- Some are blank (xpOption xpText) -- Yup, some are nameless where - from_tuple = uncurryN JFileGameHomeTeamXml - to_tuple t = (home_team_id t, - home_team_abbreviation t, - home_team_name t) + from_tuple = uncurryN Team + to_tuple t = (team_id t, + abbreviation t, + name t) -pickle_away_team :: PU JFileGameAwayTeamXml +-- | (Un)pickle an away team to/from the dual XML/DB representation +-- 'Team'. +-- +pickle_away_team :: PU Team pickle_away_team = xpElem "vteam" $ xpWrap (from_tuple, to_tuple) $ @@ -620,10 +566,10 @@ pickle_away_team = (xpAttr "abbr" (xpOption xpText)) -- Some are blank (xpOption xpText) -- Yup, some are nameless where - from_tuple = uncurryN JFileGameAwayTeamXml - to_tuple t = (away_team_id t, - away_team_abbreviation t, - away_team_name t) + from_tuple = uncurryN Team + to_tuple t = (team_id t, + abbreviation t, + name t) pickle_status :: PU JFileGameStatus