1
0
Fork 0

[haskell] Implemented ship

This commit is contained in:
Julien Dessaux 2023-07-04 19:37:50 +02:00
parent b3d57cb6ad
commit 78c5467c4a
Signed by: adyxax
GPG key ID: F92E51B86E07177E
10 changed files with 169 additions and 8 deletions

View file

@ -10,6 +10,7 @@ import SpaceTraders.APIClient.Agent
import SpaceTraders.Database
import SpaceTraders.Database.Agents
import SpaceTraders.Database.Contracts
import SpaceTraders.Database.Ships
import SpaceTraders.Database.Tokens
main :: IO ()
@ -27,6 +28,7 @@ main = do
Right r' -> do
setAgent conn $ agent r'
addContract conn $ contract r'
addShip conn $ ship r'
let t = token r'
setToken conn $ t
return t

View file

@ -15,6 +15,7 @@ import Network.HTTP.Simple
import SpaceTraders.APIClient.Client
import SpaceTraders.Model.Agent
import SpaceTraders.Model.Ship(Ship)
import SpaceTraders.Model.Contract
myAgent :: T.Text -> IO (Either APIError Agent)
@ -26,6 +27,7 @@ data RegisterRequest = RegisterRequest { faction :: T.Text
} deriving (ToJSON, Generic, Show)
data RegisterMessage = RegisterMessage { agent :: Agent
, contract :: Contract
, ship :: Ship
, token :: T.Text
} deriving (FromJSON, Generic, Show)

View file

@ -14,23 +14,24 @@ migrations :: [S.Query]
migrations = [
[r|CREATE TABLE schema_version (
version INTEGER NOT NULL
);
|],
);|],
[r|CREATE TABLE tokens (
id INTEGER PRIMARY KEY,
data TEXT NOT NULL
);
|],
);|],
[r|CREATE TABLE agents (
id INTEGER PRIMARY KEY,
data TEXT NOT NULL
);
|],
);|],
[r|CREATE TABLE contracts (
id INTEGER PRIMARY KEY,
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 conn = S.close conn

View 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))

View 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)

View 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)

View 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)

View 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)

View 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 )

View 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)