summaryrefslogtreecommitdiff
path: root/src/Settlr/Storage.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Settlr/Storage.hs')
-rw-r--r--src/Settlr/Storage.hs57
1 files changed, 56 insertions, 1 deletions
diff --git a/src/Settlr/Storage.hs b/src/Settlr/Storage.hs
index d646134..53c29b7 100644
--- a/src/Settlr/Storage.hs
+++ b/src/Settlr/Storage.hs
@@ -1,2 +1,57 @@
-module Settlr.Storage(
+module Settlr.Storage
+ ( Group(..)
+ , Member(..)
+ , Money(..)
+ , Currency(..)
+ , GroupMetadata(..)
+ , getMetadata
+ , createGroup
+ , deleteGroup
+ , Expense(..)
+ , getExpenses
+ , getSaldo
+ , addExpense
) where
+
+import Data.Text (Text)
+import Data.Map (Map)
+
+-- Identifier of a group.
+newtype Group = Group Text
+
+-- Identifier of a group member.
+newtype Member = Member Text
+
+-- An amount of money in a particular currency (usually, the smallest unit for the currency).
+newtype Money = Money Int
+
+data Currency = CurrencyEUR | CurrencyUSD
+
+data GroupMetadata = GroupMetadata
+ { grpName :: !Text
+ , grpMembers :: ![Member]
+ , grpCurrency :: !Currency
+ }
+
+getMetadata :: Group -> IO GroupMetadata
+getMetadata = undefined
+
+createGroup :: GroupMetadata -> IO Group
+createGroup = undefined
+
+deleteGroup :: Group -> IO ()
+deleteGroup = undefined
+
+data Expense = Expense
+ { expCreditor :: !Member
+ , expDebtors :: !(Map Member Money)
+ }
+
+getExpenses :: Group -> IO [Expense]
+getExpenses = undefined
+
+getSaldo :: Group -> Member -> IO Money
+getSaldo = undefined
+
+addExpense :: Group -> Expense -> IO ()
+addExpense = undefined