+
+-- * NewsTeam
+
+-- | The database/XML type for teams as they show up in the news. We
+-- can't reuse the representation from "TSN.Team" because they
+-- require a team id. We wouldn't want to make the team ID optional
+-- and then insert a team with no id, only to find the same team
+-- later with an id and be unable to update the record. (We could
+-- add the update logic, but it would be more trouble than it's
+-- worth.)
+--
+data NewsTeam =
+ NewsTeam { team_name :: String }
+ deriving (Eq, Show)
+
+
+
+-- * News_NewsTeam
+
+-- | Mapping between News records and NewsTeam records in the
+-- database. We don't name the fields because we don't use the names
+-- explicitly; that means we have to give them nice database names
+-- via groundhog.
+--
+data News_NewsTeam = News_NewsTeam
+ (DefaultKey News)
+ (DefaultKey NewsTeam)
+
+
+-- * NewsLocationXml
+
+-- | The XML type for locations as they show up in the news. The
+-- associated database type comes from "TSN.Location".
+--
+data NewsLocationXml =
+ NewsLocationXml {
+ xml_city :: Maybe String,
+ xml_state :: Maybe String,
+ xml_country :: String }
+ deriving (Eq, Show)
+
+
+instance ToDb NewsLocationXml where
+ -- | The database analogue of a NewsLocationXml is a Location.
+ type Db NewsLocationXml = Location
+
+
+instance FromXml NewsLocationXml where
+ -- | To convert from the XML representation to the database one, we
+ -- don't have to do anything. Just copy the fields.
+ --
+ from_xml NewsLocationXml{..} =
+ Location xml_city xml_state xml_country
+
+
+-- | Allow us to import the XML representation directly into the
+-- database, without having to perform the conversion manually first.
+--
+instance XmlImport NewsLocationXml
+
+
+-- * News_Location
+
+-- | Mapping between 'News' records and 'Location' records in the
+-- database. We don't name the fields because we don't use the names
+-- explicitly; that means we have to give them nice database names
+-- via groundhog.
+--
+data News_Location = News_Location
+ (DefaultKey News)
+ (DefaultKey Location)
+
+
+
+--
+-- Database code
+--
+
+-- | Define 'dbmigrate' and 'dbimport' for 'Message's. The import is
+-- slightly non-generic because of our 'News_NewsTeam' and
+-- 'News_Location' join tables.
+--