implemented GameStats and newGameStats
This commit is contained in:
parent
954490fc6d
commit
3e4a9dd525
|
@ -33,6 +33,7 @@ module Mtlstats.Types (
|
|||
PlayerStats (..),
|
||||
Goalie (..),
|
||||
GoalieStats (..),
|
||||
GameStats (..),
|
||||
Prompt (..),
|
||||
-- * Lenses
|
||||
-- ** ProgState Lenses
|
||||
|
@ -76,6 +77,10 @@ module Mtlstats.Types (
|
|||
gsWins,
|
||||
gsLosses,
|
||||
gsTies,
|
||||
-- ** GameStats Lenses
|
||||
gmsWins,
|
||||
gmsLosses,
|
||||
gmsOvertime,
|
||||
-- * Constructors
|
||||
newProgState,
|
||||
newGameState,
|
||||
|
@ -84,6 +89,7 @@ module Mtlstats.Types (
|
|||
newPlayerStats,
|
||||
newGoalie,
|
||||
newGoalieStats,
|
||||
newGameStats,
|
||||
-- * Helper Functions
|
||||
-- ** ProgState Helpers
|
||||
teamScore,
|
||||
|
@ -316,6 +322,33 @@ instance ToJSON GoalieStats where
|
|||
"losses" .= l <>
|
||||
"ties" .= t
|
||||
|
||||
-- | Game statistics
|
||||
data GameStats = GameStats
|
||||
{ _gmsWins :: Int
|
||||
-- ^ Games won
|
||||
, _gmsLosses :: Int
|
||||
-- ^ Games lost
|
||||
, _gmsOvertime :: Int
|
||||
-- ^ Games lost in overtime
|
||||
} deriving (Eq, Show)
|
||||
|
||||
instance FromJSON GameStats where
|
||||
parseJSON = withObject "GameStats" $ \v -> GameStats
|
||||
<$> v .: "wins"
|
||||
<*> v .: "losses"
|
||||
<*> v .: "overtime"
|
||||
|
||||
instance ToJSON GameStats where
|
||||
toJSON (GameStats w l ot) = object
|
||||
[ "wins" .= w
|
||||
, "losses" .= l
|
||||
, "overtime" .= ot
|
||||
]
|
||||
toEncoding (GameStats w l ot) = pairs $
|
||||
"wins" .= w <>
|
||||
"losses" .= l <>
|
||||
"overtime" .= ot
|
||||
|
||||
-- | Defines a user prompt
|
||||
data Prompt = Prompt
|
||||
{ promptDrawer :: ProgState -> Update ()
|
||||
|
@ -335,6 +368,7 @@ makeLenses ''Player
|
|||
makeLenses ''PlayerStats
|
||||
makeLenses ''Goalie
|
||||
makeLenses ''GoalieStats
|
||||
makeLenses ''GameStats
|
||||
|
||||
gameTypeL :: Lens' ProgMode (Maybe GameType)
|
||||
gameTypeL = lens
|
||||
|
@ -448,6 +482,14 @@ newGoalieStats = GoalieStats
|
|||
, _gsTies = 0
|
||||
}
|
||||
|
||||
-- | Constructor for a 'GameStats' value
|
||||
newGameStats :: GameStats
|
||||
newGameStats = GameStats
|
||||
{ _gmsWins = 0
|
||||
, _gmsLosses = 0
|
||||
, _gmsOvertime = 0
|
||||
}
|
||||
|
||||
-- | Determines the team's points
|
||||
teamScore :: ProgState -> Maybe Int
|
||||
teamScore s = case s ^. progMode . gameTypeL of
|
||||
|
|
|
@ -38,6 +38,7 @@ spec :: Spec
|
|||
spec = describe "Mtlstats.Types" $ do
|
||||
playerSpec
|
||||
goalieSpec
|
||||
gameStatsSpec
|
||||
databaseSpec
|
||||
pPointsSpec
|
||||
gameTypeLSpec
|
||||
|
@ -53,6 +54,10 @@ playerSpec = describe "Player" $ jsonSpec player playerJSON
|
|||
goalieSpec :: Spec
|
||||
goalieSpec = describe "Goalie" $ jsonSpec goalie goalieJSON
|
||||
|
||||
gameStatsSpec :: Spec
|
||||
gameStatsSpec = describe "GameStats" $
|
||||
jsonSpec (gameStats 1) (gameStatsJSON 1)
|
||||
|
||||
databaseSpec :: Spec
|
||||
databaseSpec = describe "Database" $ jsonSpec db dbJSON
|
||||
|
||||
|
@ -291,6 +296,20 @@ goalieStatsJSON n = Object $ HM.fromList
|
|||
, ( "ties", toJSON $ n + 6 )
|
||||
]
|
||||
|
||||
gameStats :: Int -> GameStats
|
||||
gameStats n = GameStats
|
||||
{ _gmsWins = n
|
||||
, _gmsLosses = n + 1
|
||||
, _gmsOvertime = n + 2
|
||||
}
|
||||
|
||||
gameStatsJSON :: Int -> Value
|
||||
gameStatsJSON n = Object $ HM.fromList
|
||||
[ ( "wins", toJSON n )
|
||||
, ( "losses", toJSON $ n + 1 )
|
||||
, ( "overtime", toJSON $ n + 2 )
|
||||
]
|
||||
|
||||
db :: Database
|
||||
db = newDatabase
|
||||
& dbPlayers .~ [player]
|
||||
|
|
Loading…
Reference in New Issue
Block a user