]> gitweb.michael.orlitzky.com - dead/htsn-import.git/commitdiff
Add the TSN.Team module housing a common database representation of teams.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 24 Jun 2014 20:58:18 +0000 (16:58 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 24 Jun 2014 20:58:18 +0000 (16:58 -0400)
.ghci
htsn-import.cabal
src/TSN/Team.hs [new file with mode: 0644]

diff --git a/.ghci b/.ghci
index 07b1f832d1761c26742ec2f9735a0af6bb793322..d02fc64d02ca05e0036a1ed14940bb14ba2dcc33 100644 (file)
--- a/.ghci
+++ b/.ghci
@@ -14,6 +14,7 @@
   src/TSN/DbImport.hs
   src/TSN/Parse.hs
   src/TSN/Picklers.hs
+  src/TSN/Team.hs
   src/TSN/XmlImport.hs
   src/TSN/XML/AutoRacingResults.hs
   src/TSN/XML/AutoRacingSchedule.hs
@@ -41,6 +42,7 @@ import TSN.Database
 import TSN.DbImport
 import TSN.Parse
 import TSN.Picklers
+import TSN.Team
 import TSN.XmlImport
 import TSN.XML.AutoRacingResults
 import TSN.XML.AutoRacingSchedule
index 41226058a9c4cda7c2086482376ff2bad47a7528..aaea29be013e6d6f5997b5975ca27ad17219e838 100644 (file)
@@ -114,6 +114,7 @@ executable htsn-import
     TSN.DbImport
     TSN.Parse
     TSN.Picklers
+    TSN.Team
     TSN.XmlImport
     TSN.XML.AutoRacingResults
     TSN.XML.AutoRacingSchedule
diff --git a/src/TSN/Team.hs b/src/TSN/Team.hs
new file mode 100644 (file)
index 0000000..d022520
--- /dev/null
@@ -0,0 +1,51 @@
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeFamilies #-}
+
+-- | Two different XML types have a notion of teams: "TSN.XML.Odds"
+--   and "TSN.XML.JFile". And in fact those two types agree on the
+--   team id, abbreviation, and name -- at least for the database
+--   representation.
+--
+--   This module contains a data type for the common database
+--   representation.
+--
+module TSN.Team (
+  Team(..),
+  -- * WARNING: these are private but exported to silence warnings
+  TeamConstructor(..) )
+where
+
+-- System imports
+import Database.Groundhog () -- Required for some String instance
+import Database.Groundhog.TH (
+  defaultCodegenConfig,
+  groundhog,
+  mkPersist )
+
+
+-- | The database representation of a team. The 'team_id' is a
+--   'String' field because some teams do in fact have ids like
+--   \"B52\".
+--
+data Team =
+  Team {
+    team_id :: String, -- ^ Some of them contain characters
+    team_abbreviation :: String,
+    team_name :: String }
+  deriving (Eq, Show)
+
+
+-- Generate the Groundhog code for 'Team'.
+mkPersist defaultCodegenConfig [groundhog|
+- entity: Team
+  dbName: teams
+  constructors:
+    - name: Team
+      uniques:
+        - name: unique_odds_games_team
+          type: constraint
+          fields: [team_id]
+|]