From 13d422100b243b46b3df7ab135fd3a7ec82a220b Mon Sep 17 00:00:00 2001 From: Jonathan Lamothe Date: Tue, 27 Aug 2019 11:10:57 -0400 Subject: [PATCH] added _dbHomeGameStats and _dbAwayGameStats with associated lenses --- src/Mtlstats/Types.hs | 42 ++++++++++++++++++++++++++++-------------- test/TypesSpec.hs | 16 ++++++++++------ 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/src/Mtlstats/Types.hs b/src/Mtlstats/Types.hs index 7c38d72..3822b2f 100644 --- a/src/Mtlstats/Types.hs +++ b/src/Mtlstats/Types.hs @@ -54,6 +54,8 @@ module Mtlstats.Types ( dbPlayers, dbGoalies, dbGames, + dbHomeGameStats, + dbAwayGameStats, -- ** Player Lenses pNumber, pName, @@ -154,12 +156,16 @@ data GameType -- | Represents the database data Database = Database - { _dbPlayers :: [Player] + { _dbPlayers :: [Player] -- ^ The list of players - , _dbGoalies :: [Goalie] + , _dbGoalies :: [Goalie] -- ^ The list of goalies - , _dbGames :: Int + , _dbGames :: Int -- ^ The number of games recorded + , _dbHomeGameStats :: GameStats + -- ^ Statistics for home games + , _dbAwayGameStats :: GameStats + -- ^ Statistics for away games } deriving (Eq, Show) instance FromJSON Database where @@ -167,17 +173,23 @@ instance FromJSON Database where <$> v .: "players" <*> v .: "goalies" <*> v .: "games" + <*> v .: "home_game_stats" + <*> v .: "away_game_stats" instance ToJSON Database where - toJSON (Database players goalies games) = object - [ "players" .= players - , "goalies" .= goalies - , "games" .= games + toJSON (Database players goalies games hgs ags) = object + [ "players" .= players + , "goalies" .= goalies + , "games" .= games + , "home_game_stats" .= hgs + , "away_game_stats" .= ags ] - toEncoding (Database players goalies games) = pairs $ - "players" .= players <> - "goalies" .= goalies <> - "games" .= games + toEncoding (Database players goalies games hgs ags) = pairs $ + "players" .= players <> + "goalies" .= goalies <> + "games" .= games <> + "home_game_stats" .= hgs <> + "away_game_stats" .= ags -- | Represents a (non-goalie) player data Player = Player @@ -426,9 +438,11 @@ newGameState = GameState -- | Constructor for a 'Database' newDatabase :: Database newDatabase = Database - { _dbPlayers = [] - , _dbGoalies = [] - , _dbGames = 0 + { _dbPlayers = [] + , _dbGoalies = [] + , _dbGames = 0 + , _dbHomeGameStats = newGameStats + , _dbAwayGameStats = newGameStats } -- | Constructor for a 'Player' diff --git a/test/TypesSpec.hs b/test/TypesSpec.hs index 680f0a4..84dfdae 100644 --- a/test/TypesSpec.hs +++ b/test/TypesSpec.hs @@ -312,13 +312,17 @@ gameStatsJSON n = Object $ HM.fromList db :: Database db = newDatabase - & dbPlayers .~ [player] - & dbGoalies .~ [goalie] - & dbGames .~ 1 + & dbPlayers .~ [player] + & dbGoalies .~ [goalie] + & dbGames .~ 1 + & dbHomeGameStats .~ gameStats 1 + & dbAwayGameStats .~ gameStats 2 dbJSON :: Value dbJSON = Object $ HM.fromList - [ ( "players", toJSON [playerJSON] ) - , ( "goalies", toJSON [goalieJSON] ) - , ( "games", toJSON (1 :: Int) ) + [ ( "players", toJSON [playerJSON] ) + , ( "goalies", toJSON [goalieJSON] ) + , ( "games", toJSON (1 :: Int) ) + , ( "home_game_stats", gameStatsJSON 1 ) + , ( "away_game_stats", gameStatsJSON 2 ) ]