]> gitweb.michael.orlitzky.com - dead/htsn-import.git/blobdiff - src/TSN/Team.hs
Add the TSN.Team module housing a common database representation of teams.
[dead/htsn-import.git] / src / TSN / Team.hs
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]
+|]