instance XmlImport OddsGameCasinoXml
--- * OddsGameHomeTeamXml / OddsGameAwayTeamXml
+-- * OddsGameTeamXml
--- | The XML representation of a \<HomeTeam\>, as found in \<Game\>s.
--- This is basically the same as 'OddsGameAwayTeamXml', but the two
--- types have different picklers.
+-- | The XML representation of a \<HomeTeam\> or \<AwayTeam\>, as
+-- found in \<Game\>s. We can't use the 'Team' representation
+-- directly because there are some other fields we need to parse.
--
-- The starter id/name could perhaps be combined into an embedded
-- type, but can you make an entire embedded type optional with
-- Maybe? I doubt it works.
--
-data OddsGameHomeTeamXml =
- OddsGameHomeTeamXml {
- xml_home_team_id :: String, -- ^ The home/away team IDs
- -- are three characters but
- -- Postgres imposes no
- -- performance penalty on
- -- lengthless text fields,
- -- so we ignore the probable
- -- upper bound of three
- -- characters.
- xml_home_team_rotation_number :: Maybe Int,
- xml_home_team_abbr :: String,
- xml_home_team_name :: String,
- xml_home_team_starter :: Maybe (Int, String), -- ^ (id, name)
- xml_home_team_casinos :: [OddsGameCasinoXml] }
+data OddsGameTeamXml =
+ OddsGameTeamXml {
+ xml_team_id :: String, -- ^ The home/away team IDs
+ -- are three characters but
+ -- Postgres imposes no
+ -- performance penalty on
+ -- lengthless text fields,
+ -- so we ignore the probable
+ -- upper bound of three
+ -- characters.
+ xml_team_rotation_number :: Maybe Int,
+ xml_team_abbr :: String,
+ xml_team_name :: String,
+ xml_team_starter :: Maybe (Int, String), -- ^ (id, name)
+ xml_team_casinos :: [OddsGameCasinoXml] }
deriving (Eq, Show)
-instance ToDb OddsGameHomeTeamXml where
- -- | The database representation of an 'OddsGameHomeTeamXml' is an
+instance ToDb OddsGameTeamXml where
+ -- | The database representation of an 'OddsGameTeamXml' is an
-- 'OddsGameTeam'.
--
- type Db OddsGameHomeTeamXml = Team
+ type Db OddsGameTeamXml = Team
-instance FromXml OddsGameHomeTeamXml where
+instance FromXml OddsGameTeamXml where
-- | We convert from XML to the database by dropping the lines and
-- rotation number (which are specific to the games, not the teams
-- themselves).
--
- from_xml OddsGameHomeTeamXml{..} =
+ from_xml OddsGameTeamXml{..} =
Team {
- team_id = xml_home_team_id,
- abbreviation = Just xml_home_team_abbr,
- name = Just xml_home_team_name }
+ team_id = xml_team_id,
+ abbreviation = Just xml_team_abbr,
+ name = Just xml_team_name }
-- | This allows us to insert the XML representation
--- 'OddsGameHomeTeamXml' directly.
+-- 'OddsGameTeamXml' directly.
--
-instance XmlImport OddsGameHomeTeamXml where
+instance XmlImport OddsGameTeamXml where
--- | The XML representation of a \<AwayTeam\>, as found in \<Game\>s.
--- This is basically the same as 'OddsGameHomeTeamXml', but the two
--- types have different picklers.
---
-data OddsGameAwayTeamXml =
- OddsGameAwayTeamXml {
- xml_away_team_id :: String, -- ^ The home/away team IDs are
- -- three characters but Postgres
- -- imposes no performance penalty
- -- on lengthless text fields, so
- -- we ignore the probable upper
- -- bound of three characters
- xml_away_team_rotation_number :: Maybe Int,
- xml_away_team_abbr :: String,
- xml_away_team_name :: String,
- xml_away_team_starter :: Maybe (Int, String), -- ^ (id, name)
- xml_away_team_casinos :: [OddsGameCasinoXml] }
- deriving (Eq, Show)
-
-instance ToDb OddsGameAwayTeamXml where
- -- | The database representation of an 'OddsGameAwayTeamXml' is a
- -- 'Team'.
- --
- type Db OddsGameAwayTeamXml = Team
-
-instance FromXml OddsGameAwayTeamXml where
- -- | We convert from XML to the database by dropping the lines and
- -- rotation number (which are specific to the games, not the teams
- -- themselves).
- --
- from_xml OddsGameAwayTeamXml{..} = Team
- xml_away_team_id
- (Just xml_away_team_abbr)
- (Just xml_away_team_name)
-
--- | This allows us to insert the XML representation
--- 'OddsGameAwayTeamXml' directly.
---
-instance XmlImport OddsGameAwayTeamXml where
-
-
-- * OddsGameOverUnderXml
xml_game_id :: Int,
xml_game_date :: UTCTime, -- ^ Contains only the date
xml_game_time :: UTCTime, -- ^ Contains only the time
- xml_away_team :: OddsGameAwayTeamXml,
- xml_home_team :: OddsGameHomeTeamXml,
+ xml_away_team :: OddsGameTeamXml,
+ xml_home_team :: OddsGameTeamXml,
xml_over_under :: OddsGameOverUnderXml }
deriving (Eq, Show)
(utctDayTime xml_game_time), -- the time from the other.
db_away_team_rotation_number =
- (xml_away_team_rotation_number xml_away_team),
+ (xml_team_rotation_number xml_away_team),
db_home_team_rotation_number =
- (xml_home_team_rotation_number xml_home_team),
+ (xml_team_rotation_number xml_home_team),
db_away_team_starter_id =
- (fmap fst $ xml_away_team_starter xml_away_team),
+ (fmap fst $ xml_team_starter xml_away_team),
db_away_team_starter_name =
- (fmap snd $ xml_away_team_starter xml_away_team),
+ (fmap snd $ xml_team_starter xml_away_team),
db_home_team_starter_id =
- (fmap fst $ xml_home_team_starter xml_home_team),
+ (fmap fst $ xml_team_starter xml_home_team),
db_home_team_starter_name =
- (fmap snd $ xml_home_team_starter xml_home_team) }
+ (fmap snd $ xml_team_starter xml_home_team) }
-- | This lets us insert the XML representation 'OddsGameXml' directly.
-- ...but then when we insert the home/away team lines, we
-- prefer to update the existing entry rather than overwrite it
-- or add a new record.
- forM_ (xml_away_team_casinos $ xml_away_team game) $ \c -> do
+ forM_ (xml_team_casinos $ xml_away_team game) $ \c -> do
-- insert, or more likely retrieve the existing, casino
a_casino_id <- insert_xml_or_select c
Ogl_Odds_Casinos_Id ==. a_casino_id
-- Repeat all that for the home team.
- forM_ (xml_home_team_casinos $ xml_home_team game) $ \c ->do
+ forM_ (xml_team_casinos $ xml_home_team game) $ \c ->do
h_casino_id <- insert_xml_or_select c
let home_line = home_away_line c
update [Ogl_Home_Line =. home_line] $ -- WHERE
xml_casino_line)
--- | Pickler for an 'OddsGameHomeTeamXml'.
+-- | Pickler for an 'OddsGameTeamXml'.
--
-pickle_home_team :: PU OddsGameHomeTeamXml
+pickle_home_team :: PU OddsGameTeamXml
pickle_home_team =
xpElem "HomeTeam" $
xpWrap (from_tuple, to_tuple) $
xpOption (xpElem "HStarter" $ xpPair (xpAttr "ID" xpInt) xpText))
(xpList pickle_casino)
where
- from_tuple = uncurryN OddsGameHomeTeamXml
+ from_tuple = uncurryN OddsGameTeamXml
-- Use record wildcards to avoid unused field warnings.
- to_tuple OddsGameHomeTeamXml{..} = (xml_home_team_id,
- xml_home_team_rotation_number,
- xml_home_team_abbr,
- xml_home_team_name,
- xml_home_team_starter,
- xml_home_team_casinos)
+ to_tuple OddsGameTeamXml{..} = (xml_team_id,
+ xml_team_rotation_number,
+ xml_team_abbr,
+ xml_team_name,
+ xml_team_starter,
+ xml_team_casinos)
--- | Pickler for an 'OddsGameAwayTeamXml'.
+-- | Pickler for an 'OddsGameTeamXml'.
--
-pickle_away_team :: PU OddsGameAwayTeamXml
+pickle_away_team :: PU OddsGameTeamXml
pickle_away_team =
xpElem "AwayTeam" $
xpWrap (from_tuple, to_tuple) $
xpOption (xpElem "AStarter" $ xpPair (xpAttr "ID" xpInt) xpText))
(xpList pickle_casino)
where
- from_tuple = uncurryN OddsGameAwayTeamXml
+ from_tuple = uncurryN OddsGameTeamXml
-- Use record wildcards to avoid unused field warnings.
- to_tuple OddsGameAwayTeamXml{..} = (xml_away_team_id,
- xml_away_team_rotation_number,
- xml_away_team_abbr,
- xml_away_team_name,
- xml_away_team_starter,
- xml_away_team_casinos)
+ to_tuple OddsGameTeamXml{..} = (xml_team_id,
+ xml_team_rotation_number,
+ xml_team_abbr,
+ xml_team_name,
+ xml_team_starter,
+ xml_team_casinos)