[haskell] Implemented ship
This commit is contained in:
parent
b3d57cb6ad
commit
78c5467c4a
10 changed files with 169 additions and 8 deletions
|
@ -10,6 +10,7 @@ import SpaceTraders.APIClient.Agent
|
||||||
import SpaceTraders.Database
|
import SpaceTraders.Database
|
||||||
import SpaceTraders.Database.Agents
|
import SpaceTraders.Database.Agents
|
||||||
import SpaceTraders.Database.Contracts
|
import SpaceTraders.Database.Contracts
|
||||||
|
import SpaceTraders.Database.Ships
|
||||||
import SpaceTraders.Database.Tokens
|
import SpaceTraders.Database.Tokens
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
|
@ -27,6 +28,7 @@ main = do
|
||||||
Right r' -> do
|
Right r' -> do
|
||||||
setAgent conn $ agent r'
|
setAgent conn $ agent r'
|
||||||
addContract conn $ contract r'
|
addContract conn $ contract r'
|
||||||
|
addShip conn $ ship r'
|
||||||
let t = token r'
|
let t = token r'
|
||||||
setToken conn $ t
|
setToken conn $ t
|
||||||
return t
|
return t
|
||||||
|
|
|
@ -15,6 +15,7 @@ import Network.HTTP.Simple
|
||||||
|
|
||||||
import SpaceTraders.APIClient.Client
|
import SpaceTraders.APIClient.Client
|
||||||
import SpaceTraders.Model.Agent
|
import SpaceTraders.Model.Agent
|
||||||
|
import SpaceTraders.Model.Ship(Ship)
|
||||||
import SpaceTraders.Model.Contract
|
import SpaceTraders.Model.Contract
|
||||||
|
|
||||||
myAgent :: T.Text -> IO (Either APIError Agent)
|
myAgent :: T.Text -> IO (Either APIError Agent)
|
||||||
|
@ -26,6 +27,7 @@ data RegisterRequest = RegisterRequest { faction :: T.Text
|
||||||
} deriving (ToJSON, Generic, Show)
|
} deriving (ToJSON, Generic, Show)
|
||||||
data RegisterMessage = RegisterMessage { agent :: Agent
|
data RegisterMessage = RegisterMessage { agent :: Agent
|
||||||
, contract :: Contract
|
, contract :: Contract
|
||||||
|
, ship :: Ship
|
||||||
, token :: T.Text
|
, token :: T.Text
|
||||||
} deriving (FromJSON, Generic, Show)
|
} deriving (FromJSON, Generic, Show)
|
||||||
|
|
||||||
|
|
|
@ -14,23 +14,24 @@ migrations :: [S.Query]
|
||||||
migrations = [
|
migrations = [
|
||||||
[r|CREATE TABLE schema_version (
|
[r|CREATE TABLE schema_version (
|
||||||
version INTEGER NOT NULL
|
version INTEGER NOT NULL
|
||||||
);
|
);|],
|
||||||
|],
|
|
||||||
[r|CREATE TABLE tokens (
|
[r|CREATE TABLE tokens (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
data TEXT NOT NULL
|
data TEXT NOT NULL
|
||||||
);
|
);|],
|
||||||
|],
|
|
||||||
[r|CREATE TABLE agents (
|
[r|CREATE TABLE agents (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
data TEXT NOT NULL
|
data TEXT NOT NULL
|
||||||
);
|
);|],
|
||||||
|],
|
|
||||||
[r|CREATE TABLE contracts (
|
[r|CREATE TABLE contracts (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
data TEXT NOT NULL
|
data TEXT NOT NULL
|
||||||
);
|
);|],
|
||||||
|]]
|
[r|CREATE TABLE ships (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
data TEXT NOT NULL
|
||||||
|
);|],
|
||||||
|
[r|CREATE UNIQUE INDEX ships_data_symbol ON ships (json_extract(data, '$.symbol'));|]]
|
||||||
|
|
||||||
close :: S.Connection -> IO ()
|
close :: S.Connection -> IO ()
|
||||||
close conn = S.close conn
|
close conn = S.close conn
|
||||||
|
|
13
haskell/src/SpaceTraders/Database/Ships.hs
Normal file
13
haskell/src/SpaceTraders/Database/Ships.hs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
module SpaceTraders.Database.Ships
|
||||||
|
( addShip
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.Aeson
|
||||||
|
import qualified Database.SQLite.Simple as S
|
||||||
|
|
||||||
|
import SpaceTraders.Model.Ship
|
||||||
|
|
||||||
|
addShip :: S.Connection -> Ship -> IO ()
|
||||||
|
addShip conn ship = S.execute conn "INSERT INTO ships(data) VALUES (json(?));" (S.Only (encode ship))
|
17
haskell/src/SpaceTraders/Model/Cargo.hs
Normal file
17
haskell/src/SpaceTraders/Model/Cargo.hs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{-# LANGUAGE DeriveAnyClass #-}
|
||||||
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
module SpaceTraders.Model.Cargo
|
||||||
|
( Cargo(..)
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.Aeson
|
||||||
|
import GHC.Generics
|
||||||
|
|
||||||
|
import SpaceTraders.Model.Inventory(Inventory)
|
||||||
|
|
||||||
|
data Cargo = Cargo { capacity :: Int
|
||||||
|
, inventory :: [Inventory]
|
||||||
|
, units :: Int
|
||||||
|
} deriving (FromJSON, Generic, Show, ToJSON)
|
21
haskell/src/SpaceTraders/Model/Fuel.hs
Normal file
21
haskell/src/SpaceTraders/Model/Fuel.hs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{-# LANGUAGE DeriveAnyClass #-}
|
||||||
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
module SpaceTraders.Model.Fuel
|
||||||
|
( Consumed(..)
|
||||||
|
, Fuel(..)
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.Aeson
|
||||||
|
import Data.Time
|
||||||
|
import GHC.Generics
|
||||||
|
|
||||||
|
data Consumed = Consumed { amount :: Int
|
||||||
|
, timestamp :: UTCTime
|
||||||
|
} deriving (FromJSON, Generic, Show, ToJSON)
|
||||||
|
|
||||||
|
data Fuel = Fuel { capacity :: Int
|
||||||
|
, consumed :: Consumed
|
||||||
|
, current :: Int
|
||||||
|
} deriving (FromJSON, Generic, Show, ToJSON)
|
17
haskell/src/SpaceTraders/Model/Inventory.hs
Normal file
17
haskell/src/SpaceTraders/Model/Inventory.hs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{-# LANGUAGE DeriveAnyClass #-}
|
||||||
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
module SpaceTraders.Model.Inventory
|
||||||
|
( Inventory(..)
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.Aeson
|
||||||
|
import GHC.Generics
|
||||||
|
import qualified Data.Text as T
|
||||||
|
|
||||||
|
data Inventory = Inventory { description :: T.Text
|
||||||
|
, name :: T.Text
|
||||||
|
, symbol :: T.Text
|
||||||
|
, units :: Int
|
||||||
|
} deriving (FromJSON, Generic, Show, ToJSON)
|
20
haskell/src/SpaceTraders/Model/Nav.hs
Normal file
20
haskell/src/SpaceTraders/Model/Nav.hs
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{-# LANGUAGE DeriveAnyClass #-}
|
||||||
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
module SpaceTraders.Model.Nav
|
||||||
|
( Nav(..)
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.Aeson
|
||||||
|
import GHC.Generics
|
||||||
|
import qualified Data.Text as T
|
||||||
|
|
||||||
|
import SpaceTraders.Model.Route
|
||||||
|
|
||||||
|
data Nav = Nav { flightMode :: T.Text
|
||||||
|
, route :: Route
|
||||||
|
, status :: T.Text
|
||||||
|
, systemSymbol :: T.Text
|
||||||
|
, waypointSymbol :: T.Text
|
||||||
|
} deriving (FromJSON, Generic, Show, ToJSON)
|
40
haskell/src/SpaceTraders/Model/Route.hs
Normal file
40
haskell/src/SpaceTraders/Model/Route.hs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{-# LANGUAGE DeriveAnyClass #-}
|
||||||
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
module SpaceTraders.Model.Route
|
||||||
|
( Route(..)
|
||||||
|
, RouteEndpoint(..)
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Control.Monad
|
||||||
|
import Data.Aeson
|
||||||
|
import Data.Time
|
||||||
|
import GHC.Generics
|
||||||
|
import qualified Data.Text as T
|
||||||
|
|
||||||
|
data Route = Route { arrival :: UTCTime
|
||||||
|
, departure :: RouteEndpoint
|
||||||
|
, departureTime :: UTCTime
|
||||||
|
, destination :: RouteEndpoint
|
||||||
|
} deriving (FromJSON, Generic, Show, ToJSON)
|
||||||
|
|
||||||
|
data RouteEndpoint = RouteEndpoint { routeEndpointType :: T.Text
|
||||||
|
, symbol :: T.Text
|
||||||
|
, systemSymbol :: T.Text
|
||||||
|
, x :: Int
|
||||||
|
, y :: Int
|
||||||
|
} deriving (Generic, Show)
|
||||||
|
instance FromJSON RouteEndpoint where
|
||||||
|
parseJSON (Object o) = RouteEndpoint <$> o .: "type"
|
||||||
|
<*> o .: "symbol"
|
||||||
|
<*> o .: "systemSymbol"
|
||||||
|
<*> o .: "x"
|
||||||
|
<*> o .: "y"
|
||||||
|
parseJSON _ = mzero
|
||||||
|
instance ToJSON RouteEndpoint where
|
||||||
|
toEncoding (RouteEndpoint t s ss xx yy) = pairs ( "type" .= t
|
||||||
|
<> "symbol" .= s
|
||||||
|
<> "systemSymbol" .= ss
|
||||||
|
<> "x" .= xx
|
||||||
|
<> "y" .= yy )
|
28
haskell/src/SpaceTraders/Model/Ship.hs
Normal file
28
haskell/src/SpaceTraders/Model/Ship.hs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{-# LANGUAGE DeriveAnyClass #-}
|
||||||
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
module SpaceTraders.Model.Ship
|
||||||
|
( Ship(..)
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.Aeson
|
||||||
|
import GHC.Generics
|
||||||
|
import qualified Data.Text as T
|
||||||
|
|
||||||
|
import SpaceTraders.Model.Cargo
|
||||||
|
import SpaceTraders.Model.Fuel
|
||||||
|
import SpaceTraders.Model.Nav
|
||||||
|
|
||||||
|
data Ship = Ship { cargo :: Cargo
|
||||||
|
--, crew :: Crew
|
||||||
|
--, engine :: Engine
|
||||||
|
--, frame :: Frame
|
||||||
|
, fuel :: Fuel
|
||||||
|
--, modules :: [Module]
|
||||||
|
--, mounts :: [Mount]
|
||||||
|
, nav :: Nav
|
||||||
|
--, reactor :: Reactor
|
||||||
|
--, registration :: Registration
|
||||||
|
, symbol :: T.Text
|
||||||
|
} deriving (FromJSON, Generic, Show, ToJSON)
|
Loading…
Add table
Reference in a new issue