From 38cb6b48653f950092e6cd6cd2332eec3f77e667 Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Sun, 4 Oct 2026 03:38:43 +0200 Subject: persistence api --- src/Settlr/Storage.hs | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) (limited to 'src/Settlr/Storage.hs') 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 -- cgit v1.3.1