From d1e8d7213d05fcdc259c6abc0bf27f2c57878726 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Tue, 24 Jun 2014 16:58:18 -0400 Subject: [PATCH] Add the TSN.Team module housing a common database representation of teams. --- .ghci | 2 ++ htsn-import.cabal | 1 + src/TSN/Team.hs | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/TSN/Team.hs diff --git a/.ghci b/.ghci index 07b1f83..d02fc64 100644 --- 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 diff --git a/htsn-import.cabal b/htsn-import.cabal index 4122605..aaea29b 100644 --- a/htsn-import.cabal +++ b/htsn-import.cabal @@ -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 index 0000000..d022520 --- /dev/null +++ b/src/TSN/Team.hs @@ -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] +|] -- 2.43.2