X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FTSN%2FTeam.hs;h=7ca326d80203b613467a57aec5a8c311cddb56c3;hb=c024d97dd3686c140de40a039b1298d2a7882506;hp=d02252011a8025e743efc755fdc49ff5b18cdd0c;hpb=d1e8d7213d05fcdc259c6abc0bf27f2c57878726;p=dead%2Fhtsn-import.git diff --git a/src/TSN/Team.hs b/src/TSN/Team.hs index d022520..7ca326d 100644 --- a/src/TSN/Team.hs +++ b/src/TSN/Team.hs @@ -4,16 +4,18 @@ {-# 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. +-- | (At least) 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 ( + HTeam(..), Team(..), + VTeam(..), -- * WARNING: these are private but exported to silence warnings TeamConstructor(..) ) where @@ -26,18 +28,43 @@ import Database.Groundhog.TH ( mkPersist ) +-- * Team + -- | The database representation of a team. The 'team_id' is a -- 'String' field because some teams do in fact have ids like --- \"B52\". +-- \"B52\". The pointless \"team_\" prefix is left on the 'team_id' +-- field because otherwise the auto-generated column name would +-- conflict with the default \"id\" primary key. -- data Team = Team { team_id :: String, -- ^ Some of them contain characters - team_abbreviation :: String, - team_name :: String } + abbreviation :: Maybe String, -- ^ Some teams don't have abbreviations, + -- or at least, some sample jfilexml + -- don't have them for some teams. + name :: Maybe String -- ^ Some teams don't even have names! + } deriving (Eq, Show) +-- * VTeam / HTeam + +-- | A wrapper around 'Team' that lets us distinguish between home and +-- away teams. See also 'HTeam'. \"V\" (visiting) was chosen instead +-- of \"A\" (away) simply because \"vteam" looks better than +-- \"ateam\". This is purely for type-safety. +-- +newtype VTeam = VTeam { vteam :: Team } deriving (Eq, Show) + + +-- | A wrapper around 'Team' that lets us distinguish between home and +-- away teams. See also 'VTeam'. This is purely for type-safety. +-- +newtype HTeam = HTeam { hteam :: Team } deriving (Eq, Show) + + +-- * Database stuff + -- Generate the Groundhog code for 'Team'. mkPersist defaultCodegenConfig [groundhog| - entity: Team @@ -45,7 +72,7 @@ mkPersist defaultCodegenConfig [groundhog| constructors: - name: Team uniques: - - name: unique_odds_games_team + - name: unique_team type: constraint fields: [team_id] |]