aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorJoris2017-11-13 23:56:40 +0100
committerJoris2017-11-14 00:03:10 +0100
commit5a63f7be9375e3ab888e4232dd7ef72c2f1ffae1 (patch)
tree4884de1d03bc47ba8f06b2cf68365d9eed9e0d39 /server
parent213cf7ede058b781fc957de2cd9f6a5988c08004 (diff)
Setup stylish-haskell
Diffstat (limited to 'server')
-rw-r--r--server/Setup.hs2
-rw-r--r--server/server.cabal211
-rw-r--r--server/src/Conf.hs20
-rw-r--r--server/src/Controller/Category.hs23
-rw-r--r--server/src/Controller/Income.hs21
-rw-r--r--server/src/Controller/Index.hs36
-rw-r--r--server/src/Controller/Payment.hs22
-rw-r--r--server/src/Controller/SignIn.hs32
-rw-r--r--server/src/Cookie.hs22
-rw-r--r--server/src/Design/Color.hs4
-rw-r--r--server/src/Design/Constants.hs2
-rw-r--r--server/src/Design/Dialog.hs4
-rw-r--r--server/src/Design/Errors.hs4
-rw-r--r--server/src/Design/Form.hs6
-rw-r--r--server/src/Design/Global.hs20
-rw-r--r--server/src/Design/Helper.hs8
-rw-r--r--server/src/Design/Media.hs6
-rw-r--r--server/src/Design/Tooltip.hs4
-rw-r--r--server/src/Design/View/Header.hs8
-rw-r--r--server/src/Design/View/Payment.hs6
-rw-r--r--server/src/Design/View/Payment/Header.hs12
-rw-r--r--server/src/Design/View/Payment/Pages.hs8
-rw-r--r--server/src/Design/View/Payment/Table.hs2
-rw-r--r--server/src/Design/View/SignIn.hs8
-rw-r--r--server/src/Design/View/Stat.hs2
-rw-r--r--server/src/Design/View/Table.hs6
-rw-r--r--server/src/Design/Views.hs20
-rw-r--r--server/src/Job/Daemon.hs25
-rw-r--r--server/src/Job/Frequency.hs2
-rw-r--r--server/src/Job/Kind.hs13
-rw-r--r--server/src/Job/Model.hs18
-rw-r--r--server/src/Job/MonthlyPayment.hs10
-rw-r--r--server/src/Job/WeeklyReport.hs12
-rw-r--r--server/src/Json.hs10
-rw-r--r--server/src/LoginSession.hs15
-rw-r--r--server/src/Main.hs38
-rw-r--r--server/src/MimeMail.hs68
-rw-r--r--server/src/Model/Category.hs16
-rw-r--r--server/src/Model/Frequency.hs21
-rw-r--r--server/src/Model/Income.hs18
-rw-r--r--server/src/Model/Init.hs14
-rw-r--r--server/src/Model/Mail.hs8
-rw-r--r--server/src/Model/Payer.hs31
-rw-r--r--server/src/Model/Payment.hs34
-rw-r--r--server/src/Model/PaymentCategory.hs18
-rw-r--r--server/src/Model/Query.hs4
-rw-r--r--server/src/Model/SignIn.hs24
-rw-r--r--server/src/Model/UUID.hs6
-rw-r--r--server/src/Model/User.hs16
-rw-r--r--server/src/Resource.hs10
-rw-r--r--server/src/Secure.hs24
-rw-r--r--server/src/SendMail.hs18
-rw-r--r--server/src/Utils/Time.hs8
-rw-r--r--server/src/Validation.hs2
-rw-r--r--server/src/View/Mail/SignIn.hs12
-rw-r--r--server/src/View/Mail/WeeklyReport.hs41
-rw-r--r--server/src/View/Page.hs28
57 files changed, 554 insertions, 529 deletions
diff --git a/server/Setup.hs b/server/Setup.hs
index 9a994af..4467109 100644
--- a/server/Setup.hs
+++ b/server/Setup.hs
@@ -1,2 +1,2 @@
-import Distribution.Simple
+import Distribution.Simple
main = defaultMain
diff --git a/server/server.cabal b/server/server.cabal
index 41b2fd6..d30060b 100644
--- a/server/server.cabal
+++ b/server/server.cabal
@@ -1,103 +1,110 @@
-name: server
-version: 0.0.1
-license: GPL-3
-license-file: LICENSE
-author: Joris Guyonvarch
-maintainer: joris@guyonvarch.me
-category: Web
-build-type: Simple
-cabal-version: >=1.10
+Name: server
+Version: 0.0.1
+License: GPL-3
+License-file: LICENSE
+Author: Joris Guyonvarch
+Maintainer: joris@guyonvarch.me
+Category: Web
+Build-type: Simple
+Cabal-version: >=1.10
-executable server
- main-is: Main.hs
- ghc-options: -Wall -Werror
- build-depends: aeson
- , base >=4.9 && <4.11
- , base64-bytestring
- , blaze-builder
- , blaze-html
- , bytestring
- , clay
- , clientsession
- , common
- , config-manager
- , containers
- , cookie
- , email-validate
- , filepath
- , http-conduit
- , http-types
- , lens
- , monad-logger
- , mtl
- , parsec
- , process
- , random
- , resourcet
- , scotty
- , sqlite-simple
- , text
- , time
- , transformers
- , unordered-containers
- , uuid
- , wai
- , wai-extra
- , wai-middleware-static
- hs-source-dirs: src
- default-language: Haskell2010
- other-modules: Conf
- , Controller.Category
- , Controller.Income
- , Controller.Index
- , Controller.Payment
- , Controller.SignIn
- , Cookie
- , Design.Color
- , Design.Constants
- , Design.Dialog
- , Design.Errors
- , Design.Form
- , Design.Global
- , Design.Helper
- , Design.Media
- , Design.Tooltip
- , Design.View.Header
- , Design.View.Payment
- , Design.View.Payment.Header
- , Design.View.Payment.Pages
- , Design.View.Payment.Table
- , Design.View.SignIn
- , Design.View.Stat
- , Design.View.Table
- , Design.Views
- , Job.Daemon
- , Job.Frequency
- , Job.Kind
- , Job.Model
- , Job.MonthlyPayment
- , Job.WeeklyReport
- , Json
- , LoginSession
- , Main
- , MimeMail
- , Model.Category
- , Model.Frequency
- , Model.Income
- , Model.Init
- , Model.Mail
- , Model.Payer
- , Model.Payment
- , Model.PaymentCategory
- , Model.Query
- , Model.SignIn
- , Model.UUID
- , Model.User
- , Resource
- , Secure
- , SendMail
- , Utils.Time
- , Validation
- , View.Mail.SignIn
- , View.Mail.WeeklyReport
- , View.Page
+Executable server
+ Main-is: Main.hs
+ Ghc-options: -Wall -Werror
+ Hs-source-dirs: src
+ Default-language: Haskell2010
+ Extensions:
+ ExistentialQuantification
+ MultiParamTypeClasses
+
+ Build-depends:
+ aeson
+ , base >=4.9 && <4.11
+ , base64-bytestring
+ , blaze-builder
+ , blaze-html
+ , bytestring
+ , clay
+ , clientsession
+ , common
+ , config-manager
+ , containers
+ , cookie
+ , email-validate
+ , filepath
+ , http-conduit
+ , http-types
+ , lens
+ , monad-logger
+ , mtl
+ , parsec
+ , process
+ , random
+ , resourcet
+ , scotty
+ , sqlite-simple
+ , text
+ , time
+ , transformers
+ , unordered-containers
+ , uuid
+ , wai
+ , wai-extra
+ , wai-middleware-static
+
+ other-modules:
+ Conf
+ Controller.Category
+ Controller.Income
+ Controller.Index
+ Controller.Payment
+ Controller.SignIn
+ Cookie
+ Design.Color
+ Design.Constants
+ Design.Dialog
+ Design.Errors
+ Design.Form
+ Design.Global
+ Design.Helper
+ Design.Media
+ Design.Tooltip
+ Design.View.Header
+ Design.View.Payment
+ Design.View.Payment.Header
+ Design.View.Payment.Pages
+ Design.View.Payment.Table
+ Design.View.SignIn
+ Design.View.Stat
+ Design.View.Table
+ Design.Views
+ Job.Daemon
+ Job.Frequency
+ Job.Kind
+ Job.Model
+ Job.MonthlyPayment
+ Job.WeeklyReport
+ Json
+ LoginSession
+ Main
+ MimeMail
+ Model.Category
+ Model.Frequency
+ Model.Income
+ Model.Init
+ Model.Mail
+ Model.Payer
+ Model.Payment
+ Model.PaymentCategory
+ Model.Query
+ Model.SignIn
+ Model.UUID
+ Model.User
+ Resource
+ Secure
+ SendMail
+ Utils.Time
+ Validation
+ View.Mail.SignIn
+ View.Mail.WeeklyReport
+ View.Page
diff --git a/server/src/Conf.hs b/server/src/Conf.hs
index 26c5c28..299f071 100644
--- a/server/src/Conf.hs
+++ b/server/src/Conf.hs
@@ -5,20 +5,20 @@ module Conf
, Conf(..)
) where
-import Data.Text (Text)
-import qualified Data.Text as T
import qualified Data.ConfigManager as Conf
-import Data.Time.Clock (NominalDiffTime)
+import Data.Text (Text)
+import qualified Data.Text as T
+import Data.Time.Clock (NominalDiffTime)
-import Common.Model (Currency(..))
+import Common.Model (Currency (..))
data Conf = Conf
- { hostname :: Text
- , port :: Int
+ { hostname :: Text
+ , port :: Int
, signInExpiration :: NominalDiffTime
- , currency :: Currency
- , noReplyMail :: Text
- , https :: Bool
+ , currency :: Currency
+ , noReplyMail :: Text
+ , https :: Bool
} deriving Show
get :: FilePath -> IO Conf
@@ -36,4 +36,4 @@ get path = do
)
case conf of
Left msg -> error (T.unpack msg)
- Right c -> return c
+ Right c -> return c
diff --git a/server/src/Controller/Category.hs b/server/src/Controller/Category.hs
index d6ed2f2..a646496 100644
--- a/server/src/Controller/Category.hs
+++ b/server/src/Controller/Category.hs
@@ -6,19 +6,20 @@ module Controller.Category
, delete
) where
-import Control.Monad.IO.Class (liftIO)
-import Network.HTTP.Types.Status (ok200, badRequest400)
-import qualified Data.Text.Lazy as TL
-import Web.Scotty hiding (delete)
+import Control.Monad.IO.Class (liftIO)
+import qualified Data.Text.Lazy as TL
+import Network.HTTP.Types.Status (badRequest400, ok200)
+import Web.Scotty hiding (delete)
-import qualified Common.Message as Message
-import qualified Common.Message.Key as Key
-import Common.Model (CategoryId, CreateCategory(..), EditCategory(..))
+import qualified Common.Message as Message
+import qualified Common.Message.Key as Key
+import Common.Model (CategoryId, CreateCategory (..),
+ EditCategory (..))
-import Json (jsonId)
-import qualified Model.Category as Category
-import qualified Model.PaymentCategory as PaymentCategory
-import qualified Model.Query as Query
+import Json (jsonId)
+import qualified Model.Category as Category
+import qualified Model.PaymentCategory as PaymentCategory
+import qualified Model.Query as Query
import qualified Secure
create :: CreateCategory -> ActionM ()
diff --git a/server/src/Controller/Income.hs b/server/src/Controller/Income.hs
index 148b713..c42f6a7 100644
--- a/server/src/Controller/Income.hs
+++ b/server/src/Controller/Income.hs
@@ -6,18 +6,19 @@ module Controller.Income
, deleteOwn
) where
-import Control.Monad.IO.Class (liftIO)
-import Network.HTTP.Types.Status (ok200, badRequest400)
-import qualified Data.Text.Lazy as TL
-import Web.Scotty
+import Control.Monad.IO.Class (liftIO)
+import qualified Data.Text.Lazy as TL
+import Network.HTTP.Types.Status (badRequest400, ok200)
+import Web.Scotty
-import qualified Common.Message as Message
-import qualified Common.Message.Key as Key
-import Common.Model (CreateIncome(..), EditIncome(..), IncomeId, User(..))
+import qualified Common.Message as Message
+import qualified Common.Message.Key as Key
+import Common.Model (CreateIncome (..), EditIncome (..),
+ IncomeId, User (..))
-import Json (jsonId)
-import qualified Model.Income as Income
-import qualified Model.Query as Query
+import Json (jsonId)
+import qualified Model.Income as Income
+import qualified Model.Query as Query
import qualified Secure
create :: CreateIncome -> ActionM ()
diff --git a/server/src/Controller/Index.hs b/server/src/Controller/Index.hs
index 8473c5c..bf4859d 100644
--- a/server/src/Controller/Index.hs
+++ b/server/src/Controller/Index.hs
@@ -3,26 +3,26 @@ module Controller.Index
, signOut
) where
-import Control.Monad.IO.Class (liftIO)
-import Data.Text (Text)
-import Data.Time.Clock (getCurrentTime, diffUTCTime)
-import Network.HTTP.Types.Status (ok200)
-import Prelude hiding (error)
-import Web.Scotty hiding (get)
+import Control.Monad.IO.Class (liftIO)
+import Data.Text (Text)
+import Data.Time.Clock (diffUTCTime, getCurrentTime)
+import Network.HTTP.Types.Status (ok200)
+import Prelude hiding (error)
+import Web.Scotty hiding (get)
-import qualified Common.Message as Message
-import Common.Message.Key (Key)
-import qualified Common.Message.Key as Key
-import Common.Model (InitResult(..), User(..))
+import qualified Common.Message as Message
+import Common.Message.Key (Key)
+import qualified Common.Message.Key as Key
+import Common.Model (InitResult (..), User (..))
-import Conf (Conf(..))
-import Model.Init (getInit)
+import Conf (Conf (..))
import qualified LoginSession
-import qualified Model.Query as Query
-import qualified Model.SignIn as SignIn
-import qualified Model.User as User
-import Secure (getUserFromToken)
-import View.Page (page)
+import Model.Init (getInit)
+import qualified Model.Query as Query
+import qualified Model.SignIn as SignIn
+import qualified Model.User as User
+import Secure (getUserFromToken)
+import View.Page (page)
get :: Conf -> Maybe Text -> ActionM ()
get conf mbToken = do
@@ -70,7 +70,7 @@ validateSignIn conf textToken = do
SignIn.signInTokenToUsed . SignIn.id $ signIn
User.get . SignIn.email $ signIn
return $ case mbUser of
- Nothing -> Left Key.Secure_Unauthorized
+ Nothing -> Left Key.Secure_Unauthorized
Just user -> Right user
getLoggedUser :: ActionM (Maybe User)
diff --git a/server/src/Controller/Payment.hs b/server/src/Controller/Payment.hs
index dc10311..e4104eb 100644
--- a/server/src/Controller/Payment.hs
+++ b/server/src/Controller/Payment.hs
@@ -7,16 +7,18 @@ module Controller.Payment
, deleteOwn
) where
-import Control.Monad.IO.Class (liftIO)
-import Network.HTTP.Types.Status (ok200, badRequest400)
-import Web.Scotty
-
-import Common.Model (PaymentId, User(..), CreatePayment(..), EditPayment(..))
-
-import Json (jsonId)
-import qualified Model.Payment as Payment
-import qualified Model.PaymentCategory as PaymentCategory
-import qualified Model.Query as Query
+import Control.Monad.IO.Class (liftIO)
+import Network.HTTP.Types.Status (badRequest400, ok200)
+import Web.Scotty
+
+import Common.Model (CreatePayment (..),
+ EditPayment (..), PaymentId,
+ User (..))
+
+import Json (jsonId)
+import qualified Model.Payment as Payment
+import qualified Model.PaymentCategory as PaymentCategory
+import qualified Model.Query as Query
import qualified Secure
list :: ActionM ()
diff --git a/server/src/Controller/SignIn.hs b/server/src/Controller/SignIn.hs
index 0086fa5..5552781 100644
--- a/server/src/Controller/SignIn.hs
+++ b/server/src/Controller/SignIn.hs
@@ -4,25 +4,25 @@ module Controller.SignIn
( signIn
) where
-import Control.Monad.IO.Class (liftIO)
-import Network.HTTP.Types.Status (ok200, badRequest400)
-import qualified Data.Text as T
-import qualified Data.Text.Encoding as TE
-import qualified Data.Text.Lazy as TL
-import Web.Scotty
+import Control.Monad.IO.Class (liftIO)
+import qualified Data.Text as T
+import qualified Data.Text.Encoding as TE
+import qualified Data.Text.Lazy as TL
+import Network.HTTP.Types.Status (badRequest400, ok200)
+import Web.Scotty
-import qualified Common.Message as Message
-import qualified Common.Message.Key as Key
-import Common.Model (SignIn(..))
+import qualified Common.Message as Message
+import qualified Common.Message.Key as Key
+import Common.Model (SignIn (..))
-import Conf (Conf)
+import Conf (Conf)
import qualified Conf
-import qualified Model.Query as Query
-import qualified Model.SignIn as SignIn
-import qualified Model.User as User
+import qualified Model.Query as Query
+import qualified Model.SignIn as SignIn
+import qualified Model.User as User
import qualified SendMail
-import qualified Text.Email.Validate as Email
-import qualified View.Mail.SignIn as SignIn
+import qualified Text.Email.Validate as Email
+import qualified View.Mail.SignIn as SignIn
signIn :: Conf -> SignIn -> ActionM ()
signIn conf (SignIn email) =
@@ -41,7 +41,7 @@ signIn conf (SignIn email) =
maybeSentMail <- liftIO . SendMail.sendMail $ SignIn.mail conf user url [email]
case maybeSentMail of
Right _ -> textKey ok200 Key.SignIn_EmailSent
- Left _ -> textKey badRequest400 Key.SignIn_EmailSendFail
+ Left _ -> textKey badRequest400 Key.SignIn_EmailSendFail
Nothing -> textKey badRequest400 Key.Secure_Unauthorized
else textKey badRequest400 Key.SignIn_EmailInvalid
where textKey st key = status st >> (text . TL.fromStrict $ Message.get key)
diff --git a/server/src/Cookie.hs b/server/src/Cookie.hs
index 96d45da..511dd42 100644
--- a/server/src/Cookie.hs
+++ b/server/src/Cookie.hs
@@ -9,25 +9,25 @@ module Cookie
, deleteCookie
) where
-import Control.Monad ( liftM )
+import Control.Monad (liftM)
-import qualified Data.Text as TS
-import qualified Data.Text.Encoding as TS
-import qualified Data.Text.Lazy.Encoding as TL
+import qualified Data.Text as TS
+import qualified Data.Text.Encoding as TS
+import qualified Data.Text.Lazy.Encoding as TL
-import Conf (Conf)
+import Conf (Conf)
import qualified Conf
-import qualified Data.Map as Map
+import qualified Data.Map as Map
-import qualified Data.ByteString.Lazy as BSL
+import qualified Data.ByteString.Lazy as BSL
-import Data.Time.Clock.POSIX ( posixSecondsToUTCTime )
+import Data.Time.Clock.POSIX (posixSecondsToUTCTime)
-import Blaze.ByteString.Builder ( toLazyByteString )
+import Blaze.ByteString.Builder (toLazyByteString)
-import Web.Scotty.Trans
-import Web.Cookie
+import Web.Cookie
+import Web.Scotty.Trans
makeSimpleCookie :: Conf -> TS.Text -> TS.Text -> SetCookie
makeSimpleCookie conf name value =
diff --git a/server/src/Design/Color.hs b/server/src/Design/Color.hs
index 9a5797f..e7f5aec 100644
--- a/server/src/Design/Color.hs
+++ b/server/src/Design/Color.hs
@@ -1,8 +1,8 @@
module Design.Color where
-import Clay
+import Clay
import qualified Clay.Color as C
-import Data.Text (Text)
+import Data.Text (Text)
-- http://chir.ag/projects/name-that-color/#969696
diff --git a/server/src/Design/Constants.hs b/server/src/Design/Constants.hs
index 4e2b8cc..a3123d9 100644
--- a/server/src/Design/Constants.hs
+++ b/server/src/Design/Constants.hs
@@ -1,6 +1,6 @@
module Design.Constants where
-import Clay
+import Clay
iconFontSize :: Size LengthUnit
iconFontSize = px 32
diff --git a/server/src/Design/Dialog.hs b/server/src/Design/Dialog.hs
index 4678633..6759606 100644
--- a/server/src/Design/Dialog.hs
+++ b/server/src/Design/Dialog.hs
@@ -4,9 +4,9 @@ module Design.Dialog
( design
) where
-import Data.Monoid ((<>))
+import Data.Monoid ((<>))
-import Clay
+import Clay
design :: Css
design = do
diff --git a/server/src/Design/Errors.hs b/server/src/Design/Errors.hs
index 57aaeee..2c6c16b 100644
--- a/server/src/Design/Errors.hs
+++ b/server/src/Design/Errors.hs
@@ -4,9 +4,9 @@ module Design.Errors
( design
) where
-import Clay
+import Clay
-import Design.Color as Color
+import Design.Color as Color
design :: Css
design = do
diff --git a/server/src/Design/Form.hs b/server/src/Design/Form.hs
index ebb8ac8..a4a1de0 100644
--- a/server/src/Design/Form.hs
+++ b/server/src/Design/Form.hs
@@ -4,11 +4,11 @@ module Design.Form
( design
) where
-import Data.Monoid ((<>))
+import Data.Monoid ((<>))
-import Clay
+import Clay
-import Design.Color as Color
+import Design.Color as Color
design :: Css
design = do
diff --git a/server/src/Design/Global.hs b/server/src/Design/Global.hs
index 47ea4a9..1fe6a80 100644
--- a/server/src/Design/Global.hs
+++ b/server/src/Design/Global.hs
@@ -4,20 +4,20 @@ module Design.Global
( globalDesign
) where
-import Clay
+import Clay
-import Data.Text.Lazy (Text)
+import Data.Text.Lazy (Text)
-import qualified Design.Views as Views
-import qualified Design.Form as Form
-import qualified Design.Errors as Errors
-import qualified Design.Dialog as Dialog
-import qualified Design.Tooltip as Tooltip
+import qualified Design.Dialog as Dialog
+import qualified Design.Errors as Errors
+import qualified Design.Form as Form
+import qualified Design.Tooltip as Tooltip
+import qualified Design.Views as Views
-import qualified Design.Color as Color
-import qualified Design.Helper as Helper
+import qualified Design.Color as Color
import qualified Design.Constants as Constants
-import qualified Design.Media as Media
+import qualified Design.Helper as Helper
+import qualified Design.Media as Media
globalDesign :: Text
globalDesign = renderWith compact [] global
diff --git a/server/src/Design/Helper.hs b/server/src/Design/Helper.hs
index 41528ed..0913511 100644
--- a/server/src/Design/Helper.hs
+++ b/server/src/Design/Helper.hs
@@ -9,12 +9,12 @@ module Design.Helper
, verticalCentering
) where
-import Prelude hiding (span)
+import Prelude hiding (span)
-import Clay hiding (button, input)
+import Clay hiding (button, input)
-import Design.Constants
-import Design.Color as Color
+import Design.Color as Color
+import Design.Constants
clearFix :: Css
clearFix =
diff --git a/server/src/Design/Media.hs b/server/src/Design/Media.hs
index 77220ee..19a3b8c 100644
--- a/server/src/Design/Media.hs
+++ b/server/src/Design/Media.hs
@@ -6,10 +6,10 @@ module Design.Media
, desktop
) where
-import Clay hiding (query)
+import Clay hiding (query)
import qualified Clay
-import Clay.Stylesheet (Feature)
-import qualified Clay.Media as Media
+import qualified Clay.Media as Media
+import Clay.Stylesheet (Feature)
mobile :: Css -> Css
mobile = query [Media.maxWidth mobileTabletLimit]
diff --git a/server/src/Design/Tooltip.hs b/server/src/Design/Tooltip.hs
index 1da8764..57aec33 100644
--- a/server/src/Design/Tooltip.hs
+++ b/server/src/Design/Tooltip.hs
@@ -4,9 +4,9 @@ module Design.Tooltip
( design
) where
-import Clay
+import Clay
-import Design.Color as Color
+import Design.Color as Color
design :: Css
design = do
diff --git a/server/src/Design/View/Header.hs b/server/src/Design/View/Header.hs
index 20627e6..d05f748 100644
--- a/server/src/Design/View/Header.hs
+++ b/server/src/Design/View/Header.hs
@@ -4,13 +4,13 @@ module Design.View.Header
( design
) where
-import Data.Monoid ((<>))
+import Data.Monoid ((<>))
-import Clay
+import Clay
-import Design.Color as Color
+import Design.Color as Color
import qualified Design.Helper as Helper
-import qualified Design.Media as Media
+import qualified Design.Media as Media
design :: Css
design = do
diff --git a/server/src/Design/View/Payment.hs b/server/src/Design/View/Payment.hs
index d3c7650..62f7061 100644
--- a/server/src/Design/View/Payment.hs
+++ b/server/src/Design/View/Payment.hs
@@ -4,11 +4,11 @@ module Design.View.Payment
( design
) where
-import Clay
+import Clay
import qualified Design.View.Payment.Header as Header
-import qualified Design.View.Payment.Table as Table
-import qualified Design.View.Payment.Pages as Pages
+import qualified Design.View.Payment.Pages as Pages
+import qualified Design.View.Payment.Table as Table
design :: Css
design = do
diff --git a/server/src/Design/View/Payment/Header.hs b/server/src/Design/View/Payment/Header.hs
index f02da8a..d87e95b 100644
--- a/server/src/Design/View/Payment/Header.hs
+++ b/server/src/Design/View/Payment/Header.hs
@@ -4,16 +4,16 @@ module Design.View.Payment.Header
( design
) where
-import Data.Monoid ((<>))
+import Data.Monoid ((<>))
-import Clay
+import Clay
-import Design.Constants
+import Design.Constants
-import qualified Design.Helper as Helper
-import qualified Design.Color as Color
+import qualified Design.Color as Color
import qualified Design.Constants as Constants
-import qualified Design.Media as Media
+import qualified Design.Helper as Helper
+import qualified Design.Media as Media
design :: Css
design = do
diff --git a/server/src/Design/View/Payment/Pages.hs b/server/src/Design/View/Payment/Pages.hs
index 5fc13f0..f6660a1 100644
--- a/server/src/Design/View/Payment/Pages.hs
+++ b/server/src/Design/View/Payment/Pages.hs
@@ -4,12 +4,12 @@ module Design.View.Payment.Pages
( design
) where
-import Clay
+import Clay
-import qualified Design.Color as Color
-import qualified Design.Helper as Helper
+import qualified Design.Color as Color
import qualified Design.Constants as Constants
-import qualified Design.Media as Media
+import qualified Design.Helper as Helper
+import qualified Design.Media as Media
design :: Css
design = do
diff --git a/server/src/Design/View/Payment/Table.hs b/server/src/Design/View/Payment/Table.hs
index f8326e4..243d7f4 100644
--- a/server/src/Design/View/Payment/Table.hs
+++ b/server/src/Design/View/Payment/Table.hs
@@ -4,7 +4,7 @@ module Design.View.Payment.Table
( design
) where
-import Clay
+import Clay
import qualified Design.Color as Color
import qualified Design.Media as Media
diff --git a/server/src/Design/View/SignIn.hs b/server/src/Design/View/SignIn.hs
index 214e663..2b1252f 100644
--- a/server/src/Design/View/SignIn.hs
+++ b/server/src/Design/View/SignIn.hs
@@ -4,12 +4,12 @@ module Design.View.SignIn
( design
) where
-import Clay
-import Data.Monoid ((<>))
+import Clay
+import Data.Monoid ((<>))
-import qualified Design.Color as Color
-import qualified Design.Helper as Helper
+import qualified Design.Color as Color
import qualified Design.Constants as Constants
+import qualified Design.Helper as Helper
design :: Css
design = do
diff --git a/server/src/Design/View/Stat.hs b/server/src/Design/View/Stat.hs
index 0a5b258..b10dd7b 100644
--- a/server/src/Design/View/Stat.hs
+++ b/server/src/Design/View/Stat.hs
@@ -4,7 +4,7 @@ module Design.View.Stat
( design
) where
-import Clay
+import Clay
design :: Css
design = do
diff --git a/server/src/Design/View/Table.hs b/server/src/Design/View/Table.hs
index 95abf90..fd55656 100644
--- a/server/src/Design/View/Table.hs
+++ b/server/src/Design/View/Table.hs
@@ -4,11 +4,11 @@ module Design.View.Table
( design
) where
-import Data.Monoid ((<>))
+import Data.Monoid ((<>))
-import Clay
+import Clay
-import Design.Color as Color
+import Design.Color as Color
import qualified Design.Media as Media
design :: Css
diff --git a/server/src/Design/Views.hs b/server/src/Design/Views.hs
index bc6ac83..1157b68 100644
--- a/server/src/Design/Views.hs
+++ b/server/src/Design/Views.hs
@@ -4,18 +4,18 @@ module Design.Views
( design
) where
-import Clay
+import Clay
-import qualified Design.View.Header as Header
+import qualified Design.View.Header as Header
import qualified Design.View.Payment as Payment
-import qualified Design.View.SignIn as SignIn
-import qualified Design.View.Stat as Stat
-import qualified Design.View.Table as Table
-
-import qualified Design.Helper as Helper
-import qualified Design.Constants as Constants
-import qualified Design.Color as Color
-import qualified Design.Media as Media
+import qualified Design.View.SignIn as SignIn
+import qualified Design.View.Stat as Stat
+import qualified Design.View.Table as Table
+
+import qualified Design.Color as Color
+import qualified Design.Constants as Constants
+import qualified Design.Helper as Helper
+import qualified Design.Media as Media
design :: Css
design = do
diff --git a/server/src/Job/Daemon.hs b/server/src/Job/Daemon.hs
index 0bc6f6e..26977d1 100644
--- a/server/src/Job/Daemon.hs
+++ b/server/src/Job/Daemon.hs
@@ -2,18 +2,19 @@ module Job.Daemon
( runDaemons
) where
-import Control.Concurrent (threadDelay, forkIO, ThreadId)
-import Control.Monad (forever)
-import Data.Time.Clock (UTCTime)
+import Control.Concurrent (ThreadId, forkIO, threadDelay)
+import Control.Monad (forever)
+import Data.Time.Clock (UTCTime)
-import Conf (Conf)
-import Job.Frequency (Frequency(..), microSeconds)
-import Job.Kind (Kind(..))
-import Job.Model (getLastExecution, actualizeLastCheck, actualizeLastExecution)
-import Job.MonthlyPayment (monthlyPayment)
-import Job.WeeklyReport (weeklyReport)
-import qualified Model.Query as Query
-import Utils.Time (belongToCurrentMonth, belongToCurrentWeek)
+import Conf (Conf)
+import Job.Frequency (Frequency (..), microSeconds)
+import Job.Kind (Kind (..))
+import Job.Model (actualizeLastCheck, actualizeLastExecution,
+ getLastExecution)
+import Job.MonthlyPayment (monthlyPayment)
+import Job.WeeklyReport (weeklyReport)
+import qualified Model.Query as Query
+import Utils.Time (belongToCurrentMonth, belongToCurrentWeek)
runDaemons :: Conf -> IO ()
runDaemons conf = do
@@ -29,7 +30,7 @@ runDaemon kind frequency isLastExecutionTooOld runJob =
getLastExecution kind
hasToRun <- case mbLastExecution of
Just lastExecution -> isLastExecutionTooOld lastExecution
- Nothing -> return True
+ Nothing -> return True
if hasToRun
then runJob mbLastExecution >>= (Query.run . actualizeLastExecution kind)
else return ()
diff --git a/server/src/Job/Frequency.hs b/server/src/Job/Frequency.hs
index 263f6e6..c5bef42 100644
--- a/server/src/Job/Frequency.hs
+++ b/server/src/Job/Frequency.hs
@@ -10,4 +10,4 @@ data Frequency =
microSeconds :: Frequency -> Int
microSeconds EveryHour = 1000000 * 60 * 60
-microSeconds EveryDay = (microSeconds EveryHour) * 24
+microSeconds EveryDay = (microSeconds EveryHour) * 24
diff --git a/server/src/Job/Kind.hs b/server/src/Job/Kind.hs
index af5d4f8..17997f7 100644
--- a/server/src/Job/Kind.hs
+++ b/server/src/Job/Kind.hs
@@ -2,11 +2,12 @@ module Job.Kind
( Kind(..)
) where
-import Database.SQLite.Simple (SQLData(SQLText))
-import Database.SQLite.Simple.FromField (fieldData, FromField(fromField))
-import Database.SQLite.Simple.Ok (Ok(Ok, Errors))
-import Database.SQLite.Simple.ToField (ToField(toField))
-import qualified Data.Text as T
+import qualified Data.Text as T
+import Database.SQLite.Simple (SQLData (SQLText))
+import Database.SQLite.Simple.FromField (FromField (fromField),
+ fieldData)
+import Database.SQLite.Simple.Ok (Ok (Errors, Ok))
+import Database.SQLite.Simple.ToField (ToField (toField))
data Kind =
MonthlyPayment
@@ -16,7 +17,7 @@ data Kind =
instance FromField Kind where
fromField field = case fieldData field of
SQLText text -> Ok (read (T.unpack text) :: Kind)
- _ -> Errors [error "SQLText field required for job kind"]
+ _ -> Errors [error "SQLText field required for job kind"]
instance ToField Kind where
toField kind = SQLText . T.pack . show $ kind
diff --git a/server/src/Job/Model.hs b/server/src/Job/Model.hs
index e1a3c77..b90dca0 100644
--- a/server/src/Job/Model.hs
+++ b/server/src/Job/Model.hs
@@ -7,20 +7,20 @@ module Job.Model
, actualizeLastCheck
) where
-import Data.Maybe (isJust)
-import Data.Time.Clock (UTCTime, getCurrentTime)
-import Database.SQLite.Simple (Only(Only))
+import Data.Maybe (isJust)
+import Data.Time.Clock (UTCTime, getCurrentTime)
+import Database.SQLite.Simple (Only (Only))
import qualified Database.SQLite.Simple as SQLite
-import Prelude hiding (id)
+import Prelude hiding (id)
-import Job.Kind
-import Model.Query (Query(Query))
+import Job.Kind
+import Model.Query (Query (Query))
data Job = Job
- { id :: String
- , kind :: Kind
+ { id :: String
+ , kind :: Kind
, lastExecution :: Maybe UTCTime
- , lastCheck :: Maybe UTCTime
+ , lastCheck :: Maybe UTCTime
} deriving (Show)
getLastExecution :: Kind -> Query (Maybe UTCTime)
diff --git a/server/src/Job/MonthlyPayment.hs b/server/src/Job/MonthlyPayment.hs
index ba24cca..8cb1c27 100644
--- a/server/src/Job/MonthlyPayment.hs
+++ b/server/src/Job/MonthlyPayment.hs
@@ -2,13 +2,13 @@ module Job.MonthlyPayment
( monthlyPayment
) where
-import Data.Time.Clock (UTCTime, getCurrentTime)
+import Data.Time.Clock (UTCTime, getCurrentTime)
-import Common.Model (Frequency(..), Payment(..))
+import Common.Model (Frequency (..), Payment (..))
-import qualified Model.Payment as Payment
-import Utils.Time (timeToDay)
-import qualified Model.Query as Query
+import qualified Model.Payment as Payment
+import qualified Model.Query as Query
+import Utils.Time (timeToDay)
monthlyPayment :: Maybe UTCTime -> IO UTCTime
monthlyPayment _ = do
diff --git a/server/src/Job/WeeklyReport.hs b/server/src/Job/WeeklyReport.hs
index 5737c75..74180df 100644
--- a/server/src/Job/WeeklyReport.hs
+++ b/server/src/Job/WeeklyReport.hs
@@ -2,13 +2,13 @@ module Job.WeeklyReport
( weeklyReport
) where
-import Data.Time.Clock (UTCTime, getCurrentTime)
+import Data.Time.Clock (UTCTime, getCurrentTime)
-import Conf (Conf)
-import qualified Model.Income as Income
-import qualified Model.Payment as Payment
-import qualified Model.Query as Query
-import qualified Model.User as User
+import Conf (Conf)
+import qualified Model.Income as Income
+import qualified Model.Payment as Payment
+import qualified Model.Query as Query
+import qualified Model.User as User
import qualified SendMail
import qualified View.Mail.WeeklyReport as WeeklyReport
diff --git a/server/src/Json.hs b/server/src/Json.hs
index cc6327a..eb5c572 100644
--- a/server/src/Json.hs
+++ b/server/src/Json.hs
@@ -1,16 +1,16 @@
+{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE FlexibleContexts #-}
module Json
( jsonObject
, jsonId
) where
-import Data.Int (Int64)
-import Data.Text (Text)
-import qualified Data.Aeson.Types as Json
+import qualified Data.Aeson.Types as Json
import qualified Data.HashMap.Strict as M
-import Web.Scotty
+import Data.Int (Int64)
+import Data.Text (Text)
+import Web.Scotty
jsonObject :: [(Text, Json.Value)] -> ActionM ()
jsonObject = json . Json.Object . M.fromList
diff --git a/server/src/LoginSession.hs b/server/src/LoginSession.hs
index 6f6d620..beca697 100644
--- a/server/src/LoginSession.hs
+++ b/server/src/LoginSession.hs
@@ -6,16 +6,17 @@ module LoginSession
, delete
) where
-import Web.Scotty (ActionM)
-import Cookie (setSimpleCookie, getCookie, deleteCookie)
-import qualified Web.ClientSession as CS
+import Cookie (deleteCookie, getCookie,
+ setSimpleCookie)
+import qualified Web.ClientSession as CS
+import Web.Scotty (ActionM)
-import Control.Monad.IO.Class (liftIO)
+import Control.Monad.IO.Class (liftIO)
-import Data.Text (Text)
-import qualified Data.Text.Encoding as TE
+import Data.Text (Text)
+import qualified Data.Text.Encoding as TE
-import Conf (Conf)
+import Conf (Conf)
sessionName :: Text
sessionName = "SESSION"
diff --git a/server/src/Main.hs b/server/src/Main.hs
index 96c13ee..5ac68db 100644
--- a/server/src/Main.hs
+++ b/server/src/Main.hs
@@ -1,27 +1,27 @@
{-# LANGUAGE OverloadedStrings #-}
-import Control.Applicative (liftA3)
-import Control.Monad.IO.Class (liftIO)
+import Control.Applicative (liftA3)
+import Control.Monad.IO.Class (liftIO)
-import qualified Data.Text.Lazy as LT
-import Network.Wai.Middleware.Gzip (GzipFiles(GzipCompress))
-import qualified Network.Wai.Middleware.Gzip as W
-import Network.Wai.Middleware.Static
-import Web.Scotty
+import qualified Data.Text.Lazy as LT
+import Network.Wai.Middleware.Gzip (GzipFiles (GzipCompress))
+import qualified Network.Wai.Middleware.Gzip as W
+import Network.Wai.Middleware.Static
+import Web.Scotty
import qualified Conf
-import qualified Controller.Category as Category
-import qualified Controller.Income as Income
-import qualified Controller.Index as Index
-import qualified Controller.Payment as Payment
-import qualified Controller.SignIn as SignIn
-import Job.Daemon (runDaemons)
-import Model.Payer (getOrderedExceedingPayers)
-import qualified Data.Time as Time
-import qualified Model.User as UserM
-import qualified Model.Income as IncomeM
-import qualified Model.Payment as PaymentM
-import qualified Model.Query as Query
+import qualified Controller.Category as Category
+import qualified Controller.Income as Income
+import qualified Controller.Index as Index
+import qualified Controller.Payment as Payment
+import qualified Controller.SignIn as SignIn
+import qualified Data.Time as Time
+import Job.Daemon (runDaemons)
+import qualified Model.Income as IncomeM
+import Model.Payer (getOrderedExceedingPayers)
+import qualified Model.Payment as PaymentM
+import qualified Model.Query as Query
+import qualified Model.User as UserM
main :: IO ()
main = do
diff --git a/server/src/MimeMail.hs b/server/src/MimeMail.hs
index 0faaf98..7fe98ed 100644
--- a/server/src/MimeMail.hs
+++ b/server/src/MimeMail.hs
@@ -38,31 +38,33 @@ module MimeMail
, quotedPrintable
) where
-import qualified Data.ByteString.Lazy as L
-import Blaze.ByteString.Builder.Char.Utf8
-import Blaze.ByteString.Builder
-import Control.Concurrent (forkIO, putMVar, takeMVar, newEmptyMVar)
-import Data.Monoid
-import System.Random
-import Control.Arrow
-import System.Process
-import System.IO
-import System.Exit
-import System.FilePath (takeFileName)
-import qualified Data.ByteString.Base64 as Base64
-import Control.Monad ((<=<), foldM, void)
-import Control.Exception (throwIO, ErrorCall (ErrorCall))
-import Data.List (intersperse)
-import qualified Data.Text.Lazy as LT
-import qualified Data.Text.Lazy.Encoding as LT
-import Data.ByteString.Char8 ()
-import Data.Bits ((.&.), shiftR)
-import Data.Char (isAscii, isControl)
-import Data.Word (Word8)
-import qualified Data.ByteString as S
-import Data.Text (Text)
-import qualified Data.Text as T
-import qualified Data.Text.Encoding as TE
+import Blaze.ByteString.Builder
+import Blaze.ByteString.Builder.Char.Utf8
+import Control.Arrow
+import Control.Concurrent (forkIO, newEmptyMVar,
+ putMVar, takeMVar)
+import Control.Exception (ErrorCall (ErrorCall),
+ throwIO)
+import Control.Monad (foldM, void, (<=<))
+import Data.Bits (shiftR, (.&.))
+import qualified Data.ByteString as S
+import qualified Data.ByteString.Base64 as Base64
+import Data.ByteString.Char8 ()
+import qualified Data.ByteString.Lazy as L
+import Data.Char (isAscii, isControl)
+import Data.List (intersperse)
+import Data.Monoid
+import Data.Text (Text)
+import qualified Data.Text as T
+import qualified Data.Text.Encoding as TE
+import qualified Data.Text.Lazy as LT
+import qualified Data.Text.Lazy.Encoding as LT
+import Data.Word (Word8)
+import System.Exit
+import System.FilePath (takeFileName)
+import System.IO
+import System.Process
+import System.Random
-- | Generates a random sequence of alphanumerics of the given length.
randomString :: RandomGen d => Int -> d -> (String, d)
@@ -88,10 +90,10 @@ instance Random Boundary where
-- | An entire mail message.
data Mail = Mail
- { mailFrom :: Address
- , mailTo :: [Address]
- , mailCc :: [Address]
- , mailBcc :: [Address]
+ { mailFrom :: Address
+ , mailTo :: [Address]
+ , mailCc :: [Address]
+ , mailBcc :: [Address]
-- | Other headers, excluding from, to, cc and bcc.
, mailHeaders :: Headers
-- | A list of different sets of alternatives. As a concrete example:
@@ -100,7 +102,7 @@ data Mail = Mail
--
-- Make sure when specifying alternatives to place the most preferred
-- version last.
- , mailParts :: [Alternatives]
+ , mailParts :: [Alternatives]
}
deriving Show
@@ -132,13 +134,13 @@ type Alternatives = [Part]
-- | A single part of a multipart message.
data Part = Part
- { partType :: Text -- ^ content type
+ { partType :: Text -- ^ content type
, partEncoding :: Encoding
-- | The filename for this part, if it is to be sent with an attachemnt
-- disposition.
, partFilename :: Maybe Text
- , partHeaders :: Headers
- , partContent :: L.ByteString
+ , partHeaders :: Headers
+ , partContent :: L.ByteString
}
deriving (Eq, Show)
diff --git a/server/src/Model/Category.hs b/server/src/Model/Category.hs
index 6b7a488..b972ebd 100644
--- a/server/src/Model/Category.hs
+++ b/server/src/Model/Category.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Model.Category
@@ -8,16 +8,16 @@ module Model.Category
, delete
) where
-import Data.Maybe (isJust, listToMaybe)
-import Data.Text (Text)
-import Data.Time.Clock (getCurrentTime)
-import Database.SQLite.Simple (Only(Only), FromRow(fromRow))
+import Data.Maybe (isJust, listToMaybe)
+import Data.Text (Text)
+import Data.Time.Clock (getCurrentTime)
+import Database.SQLite.Simple (FromRow (fromRow), Only (Only))
import qualified Database.SQLite.Simple as SQLite
-import Prelude hiding (id)
+import Prelude hiding (id)
-import Common.Model (Category(..), CategoryId)
+import Common.Model (Category (..), CategoryId)
-import Model.Query (Query(Query))
+import Model.Query (Query (Query))
instance FromRow Category where
fromRow = Category <$>
diff --git a/server/src/Model/Frequency.hs b/server/src/Model/Frequency.hs
index b334a40..41a325d 100644
--- a/server/src/Model/Frequency.hs
+++ b/server/src/Model/Frequency.hs
@@ -1,22 +1,23 @@
-{-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Model.Frequency () where
-import Database.SQLite.Simple (SQLData(SQLText))
-import Database.SQLite.Simple.FromField (fieldData, FromField(fromField))
-import Database.SQLite.Simple.Ok (Ok(Ok, Errors))
-import Database.SQLite.Simple.ToField (ToField(toField))
-import qualified Data.Text as T
+import qualified Data.Text as T
+import Database.SQLite.Simple (SQLData (SQLText))
+import Database.SQLite.Simple.FromField (FromField (fromField),
+ fieldData)
+import Database.SQLite.Simple.Ok (Ok (Errors, Ok))
+import Database.SQLite.Simple.ToField (ToField (toField))
-import Common.Model (Frequency)
+import Common.Model (Frequency)
instance FromField Frequency where
fromField field = case fieldData field of
SQLText text -> Ok (read (T.unpack text) :: Frequency)
- _ -> Errors [error "SQLText field required for frequency"]
+ _ -> Errors [error "SQLText field required for frequency"]
instance ToField Frequency where
toField frequency = SQLText . T.pack . show $ frequency
diff --git a/server/src/Model/Income.hs b/server/src/Model/Income.hs
index bbe7657..a69112a 100644
--- a/server/src/Model/Income.hs
+++ b/server/src/Model/Income.hs
@@ -9,17 +9,19 @@ module Model.Income
, modifiedDuring
) where
-import Data.Maybe (listToMaybe)
-import Data.Time.Calendar (Day)
-import Data.Time.Clock (UTCTime, getCurrentTime)
-import Database.SQLite.Simple (Only(Only), FromRow(fromRow))
-import Prelude hiding (id)
+import Data.Maybe (listToMaybe)
+import Data.Time.Calendar (Day)
+import Data.Time.Clock (UTCTime, getCurrentTime)
+import Database.SQLite.Simple (FromRow (fromRow), Only (Only))
import qualified Database.SQLite.Simple as SQLite
+import Prelude hiding (id)
-import Common.Model (Income(..), IncomeId, User(..), UserId)
+import Common.Model (Income (..), IncomeId, User (..),
+ UserId)
-import Model.Query (Query(Query))
-import Resource (Resource, resourceCreatedAt, resourceEditedAt, resourceDeletedAt)
+import Model.Query (Query (Query))
+import Resource (Resource, resourceCreatedAt,
+ resourceDeletedAt, resourceEditedAt)
instance Resource Income where
resourceCreatedAt = _income_createdAt
diff --git a/server/src/Model/Init.hs b/server/src/Model/Init.hs
index 8c6a961..c030c58 100644
--- a/server/src/Model/Init.hs
+++ b/server/src/Model/Init.hs
@@ -4,16 +4,16 @@ module Model.Init
( getInit
) where
-import Common.Model (Init(Init), User(..))
+import Common.Model (Init (Init), User (..))
-import Conf (Conf)
+import Conf (Conf)
import qualified Conf
-import Model.Query (Query)
-import qualified Model.Category as Category
-import qualified Model.Income as Income
-import qualified Model.Payment as Payment
+import qualified Model.Category as Category
+import qualified Model.Income as Income
+import qualified Model.Payment as Payment
import qualified Model.PaymentCategory as PaymentCategory
-import qualified Model.User as User
+import Model.Query (Query)
+import qualified Model.User as User
getInit :: User -> Conf -> Query Init
getInit user conf =
diff --git a/server/src/Model/Mail.hs b/server/src/Model/Mail.hs
index 9a4db73..a19f9ae 100644
--- a/server/src/Model/Mail.hs
+++ b/server/src/Model/Mail.hs
@@ -2,11 +2,11 @@ module Model.Mail
( Mail(..)
) where
-import Data.Text (Text)
+import Data.Text (Text)
data Mail = Mail
- { from :: Text
- , to :: [Text]
- , subject :: Text
+ { from :: Text
+ , to :: [Text]
+ , subject :: Text
, plainBody :: Text
} deriving (Eq, Show)
diff --git a/server/src/Model/Payer.hs b/server/src/Model/Payer.hs
index de4abd1..db3f37c 100644
--- a/server/src/Model/Payer.hs
+++ b/server/src/Model/Payer.hs
@@ -2,14 +2,15 @@ module Model.Payer
( getOrderedExceedingPayers
) where
-import Data.Map (Map)
-import Data.Time (UTCTime(..), NominalDiffTime)
-import qualified Data.List as List
-import qualified Data.Map as Map
-import qualified Data.Maybe as Maybe
-import qualified Data.Time as Time
+import qualified Data.List as List
+import Data.Map (Map)
+import qualified Data.Map as Map
+import qualified Data.Maybe as Maybe
+import Data.Time (NominalDiffTime, UTCTime (..))
+import qualified Data.Time as Time
-import Common.Model (User(..), UserId, Income(..), IncomeId, Payment(..))
+import Common.Model (Income (..), IncomeId, Payment (..), User (..),
+ UserId)
type Users = Map UserId User
@@ -20,20 +21,20 @@ type Incomes = Map IncomeId Income
type Payments = [Payment]
data Payer = Payer
- { preIncomePaymentSum :: Int
+ { preIncomePaymentSum :: Int
, postIncomePaymentSum :: Int
- , _incomes :: [Income]
+ , _incomes :: [Income]
}
data PostPaymentPayer = PostPaymentPayer
{ _preIncomePaymentSum :: Int
- , _cumulativeIncome :: Int
- , ratio :: Float
+ , _cumulativeIncome :: Int
+ , ratio :: Float
}
data ExceedingPayer = ExceedingPayer
{ _userId :: UserId
- , amount :: Int
+ , amount :: Int
} deriving (Show)
getOrderedExceedingPayers :: UTCTime -> [User] -> [Income] -> Payments -> [ExceedingPayer]
@@ -72,7 +73,7 @@ useIncomesFrom users incomes payments =
mbIncomeTime = incomeDefinedForAll (Map.keys users) incomes
in case (firstPaymentTime, mbIncomeTime) of
(Just t1, Just t2) -> Just (max t1 t2)
- _ -> Nothing
+ _ -> Nothing
paymentTime :: Payment -> UTCTime
paymentTime = flip UTCTime (Time.secondsToDiffTime 0) . _payment_date
@@ -95,7 +96,7 @@ getPayers currentTime users incomes payments =
(\p ->
case incomesDefined of
Nothing -> False
- Just t -> paymentTime p >= t
+ Just t -> paymentTime p >= t
)
userId
payments
@@ -197,7 +198,7 @@ nominalDay :: NominalDiffTime
nominalDay = 86400
safeHead :: [a] -> Maybe a
-safeHead [] = Nothing
+safeHead [] = Nothing
safeHead (x : _) = Just x
safeMinimum :: (Ord a) => [a] -> Maybe a
diff --git a/server/src/Model/Payment.hs b/server/src/Model/Payment.hs
index 14efe77..c1b109f 100644
--- a/server/src/Model/Payment.hs
+++ b/server/src/Model/Payment.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Model.Payment
@@ -13,22 +13,26 @@ module Model.Payment
, modifiedDuring
) where
-import Data.Maybe (listToMaybe)
-import Data.Text (Text)
-import qualified Data.Text as T
-import Data.Time (UTCTime)
-import Data.Time.Calendar (Day)
-import Data.Time.Clock (getCurrentTime)
-import Database.SQLite.Simple (Only(Only), FromRow(fromRow), ToRow)
-import Database.SQLite.Simple.ToField (ToField(toField))
-import Prelude hiding (id)
-import qualified Database.SQLite.Simple as SQLite
+import Data.Maybe (listToMaybe)
+import Data.Text (Text)
+import qualified Data.Text as T
+import Data.Time (UTCTime)
+import Data.Time.Calendar (Day)
+import Data.Time.Clock (getCurrentTime)
+import Database.SQLite.Simple (FromRow (fromRow), Only (Only),
+ ToRow)
+import qualified Database.SQLite.Simple as SQLite
+import Database.SQLite.Simple.ToField (ToField (toField))
+import Prelude hiding (id)
-import Common.Model (Frequency(..), Payment(..), PaymentId, UserId)
+import Common.Model (Frequency (..), Payment (..),
+ PaymentId, UserId)
-import Model.Frequency ()
-import Model.Query (Query(Query))
-import Resource (Resource, resourceCreatedAt, resourceEditedAt, resourceDeletedAt)
+import Model.Frequency ()
+import Model.Query (Query (Query))
+import Resource (Resource, resourceCreatedAt,
+ resourceDeletedAt,
+ resourceEditedAt)
instance Resource Payment where
resourceCreatedAt = _payment_createdAt
diff --git a/server/src/Model/PaymentCategory.hs b/server/src/Model/PaymentCategory.hs
index 6e1d304..6d02136 100644
--- a/server/src/Model/PaymentCategory.hs
+++ b/server/src/Model/PaymentCategory.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Model.PaymentCategory
@@ -7,17 +7,17 @@ module Model.PaymentCategory
, save
) where
-import Data.Maybe (isJust, listToMaybe)
-import Data.Text (Text)
-import Data.Time.Clock (getCurrentTime)
-import Database.SQLite.Simple (Only(Only), FromRow(fromRow))
-import qualified Data.Text as T
+import Data.Maybe (isJust, listToMaybe)
+import Data.Text (Text)
+import qualified Data.Text as T
+import Data.Time.Clock (getCurrentTime)
+import Database.SQLite.Simple (FromRow (fromRow), Only (Only))
import qualified Database.SQLite.Simple as SQLite
-import Common.Model (CategoryId, PaymentCategory(..))
-import qualified Common.Util.Text as T
+import Common.Model (CategoryId, PaymentCategory (..))
+import qualified Common.Util.Text as T
-import Model.Query (Query(Query))
+import Model.Query (Query (Query))
instance FromRow PaymentCategory where
fromRow = PaymentCategory <$>
diff --git a/server/src/Model/Query.hs b/server/src/Model/Query.hs
index d15fb5f..22ae95b 100644
--- a/server/src/Model/Query.hs
+++ b/server/src/Model/Query.hs
@@ -3,8 +3,8 @@ module Model.Query
, run
) where
-import Data.Functor (Functor)
-import Database.SQLite.Simple (Connection)
+import Data.Functor (Functor)
+import Database.SQLite.Simple (Connection)
import qualified Database.SQLite.Simple as SQLite
data Query a = Query (Connection -> IO a)
diff --git a/server/src/Model/SignIn.hs b/server/src/Model/SignIn.hs
index c5182f0..6f38fe7 100644
--- a/server/src/Model/SignIn.hs
+++ b/server/src/Model/SignIn.hs
@@ -8,25 +8,25 @@ module Model.SignIn
, isLastTokenValid
) where
-import Data.Int (Int64)
-import Data.Maybe (listToMaybe)
-import Data.Text (Text)
-import Data.Time.Clock (getCurrentTime)
-import Data.Time.Clock (UTCTime)
-import Database.SQLite.Simple (Only(Only), FromRow(fromRow))
+import Data.Int (Int64)
+import Data.Maybe (listToMaybe)
+import Data.Text (Text)
+import Data.Time.Clock (getCurrentTime)
+import Data.Time.Clock (UTCTime)
+import Database.SQLite.Simple (FromRow (fromRow), Only (Only))
import qualified Database.SQLite.Simple as SQLite
-import Model.Query (Query(Query))
-import Model.UUID (generateUUID)
+import Model.Query (Query (Query))
+import Model.UUID (generateUUID)
type SignInId = Int64
data SignIn = SignIn
- { id :: SignInId
- , token :: Text
+ { id :: SignInId
+ , token :: Text
, creation :: UTCTime
- , email :: Text
- , isUsed :: Bool
+ , email :: Text
+ , isUsed :: Bool
} deriving Show
instance FromRow SignIn where
diff --git a/server/src/Model/UUID.hs b/server/src/Model/UUID.hs
index 6cb7ce0..0959a8e 100644
--- a/server/src/Model/UUID.hs
+++ b/server/src/Model/UUID.hs
@@ -2,9 +2,9 @@ module Model.UUID
( generateUUID
) where
-import Data.UUID (toString)
-import Data.UUID.V4 (nextRandom)
-import Data.Text (Text, pack)
+import Data.Text (Text, pack)
+import Data.UUID (toString)
+import Data.UUID.V4 (nextRandom)
generateUUID :: IO Text
generateUUID = pack . toString <$> nextRandom
diff --git a/server/src/Model/User.hs b/server/src/Model/User.hs
index e14fcef..f17f545 100644
--- a/server/src/Model/User.hs
+++ b/server/src/Model/User.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Model.User
@@ -8,16 +8,16 @@ module Model.User
, delete
) where
-import Data.Maybe (listToMaybe)
-import Data.Text (Text)
-import Data.Time.Clock (getCurrentTime)
-import Database.SQLite.Simple (Only(Only), FromRow(fromRow))
-import Prelude hiding (id)
+import Data.Maybe (listToMaybe)
+import Data.Text (Text)
+import Data.Time.Clock (getCurrentTime)
+import Database.SQLite.Simple (FromRow (fromRow), Only (Only))
import qualified Database.SQLite.Simple as SQLite
+import Prelude hiding (id)
-import Common.Model (UserId, User(..))
+import Common.Model (User (..), UserId)
-import Model.Query (Query(Query))
+import Model.Query (Query (Query))
instance FromRow User where
fromRow = User <$> SQLite.field <*> SQLite.field <*> SQLite.field <*> SQLite.field
diff --git a/server/src/Resource.hs b/server/src/Resource.hs
index f52bbfa..a12a0f2 100644
--- a/server/src/Resource.hs
+++ b/server/src/Resource.hs
@@ -9,10 +9,10 @@ module Resource
, statusDuring
) where
-import Data.Maybe (fromMaybe)
-import Data.Map (Map)
-import qualified Data.Map as M
-import Data.Time.Clock (UTCTime)
+import Data.Map (Map)
+import qualified Data.Map as M
+import Data.Maybe (fromMaybe)
+import Data.Time.Clock (UTCTime)
class Resource a where
resourceCreatedAt :: a -> UTCTime
@@ -34,7 +34,7 @@ groupByStatus start end resources =
(\m resource ->
case statusDuring start end resource of
Just status -> M.insertWith (++) status [resource] m
- Nothing -> m
+ Nothing -> m
)
M.empty
resources
diff --git a/server/src/Secure.hs b/server/src/Secure.hs
index f427304..88bdcda 100644
--- a/server/src/Secure.hs
+++ b/server/src/Secure.hs
@@ -5,21 +5,21 @@ module Secure
, getUserFromToken
) where
-import Control.Monad.IO.Class (liftIO)
-import Data.Text (Text)
-import Data.Text.Lazy (fromStrict)
-import Network.HTTP.Types.Status (forbidden403)
-import Web.Scotty
+import Control.Monad.IO.Class (liftIO)
+import Data.Text (Text)
+import Data.Text.Lazy (fromStrict)
+import Network.HTTP.Types.Status (forbidden403)
+import Web.Scotty
-import qualified Common.Message as Message
-import qualified Common.Message.Key as Key
-import Common.Model (User)
+import qualified Common.Message as Message
+import qualified Common.Message.Key as Key
+import Common.Model (User)
-import Model.Query (Query)
import qualified LoginSession
-import qualified Model.Query as Query
-import qualified Model.SignIn as SignIn
-import qualified Model.User as User
+import Model.Query (Query)
+import qualified Model.Query as Query
+import qualified Model.SignIn as SignIn
+import qualified Model.User as User
loggedAction :: (User -> ActionM ()) -> ActionM ()
loggedAction action = do
diff --git a/server/src/SendMail.hs b/server/src/SendMail.hs
index f7ba3fd..959f21d 100644
--- a/server/src/SendMail.hs
+++ b/server/src/SendMail.hs
@@ -4,17 +4,17 @@ module SendMail
( sendMail
) where
-import Control.Arrow (left)
-import Control.Exception (SomeException, try)
-import Data.Either (isLeft)
+import Control.Arrow (left)
+import Control.Exception (SomeException, try)
+import Data.Either (isLeft)
-import Data.Text (Text)
-import Data.Text.Lazy.Builder (toLazyText, fromText)
-import qualified Data.Text as T
-import qualified Data.Text.Lazy as LT
-import qualified MimeMail as M
+import Data.Text (Text)
+import qualified Data.Text as T
+import qualified Data.Text.Lazy as LT
+import Data.Text.Lazy.Builder (fromText, toLazyText)
+import qualified MimeMail as M
-import Model.Mail (Mail(Mail))
+import Model.Mail (Mail (Mail))
sendMail :: Mail -> IO (Either Text ())
sendMail mail = do
diff --git a/server/src/Utils/Time.hs b/server/src/Utils/Time.hs
index 97457c7..e1a94d3 100644
--- a/server/src/Utils/Time.hs
+++ b/server/src/Utils/Time.hs
@@ -4,10 +4,10 @@ module Utils.Time
, timeToDay
) where
-import Data.Time.Clock (UTCTime, getCurrentTime)
-import Data.Time.LocalTime
-import Data.Time.Calendar
-import Data.Time.Calendar.WeekDate (toWeekDate)
+import Data.Time.Calendar
+import Data.Time.Calendar.WeekDate (toWeekDate)
+import Data.Time.Clock (UTCTime, getCurrentTime)
+import Data.Time.LocalTime
belongToCurrentMonth :: UTCTime -> IO Bool
belongToCurrentMonth time = do
diff --git a/server/src/Validation.hs b/server/src/Validation.hs
index 1f332c9..fd739cd 100644
--- a/server/src/Validation.hs
+++ b/server/src/Validation.hs
@@ -3,7 +3,7 @@ module Validation
, number
) where
-import Data.Text (Text)
+import Data.Text (Text)
import qualified Data.Text as T
nonEmpty :: Text -> Maybe Text
diff --git a/server/src/View/Mail/SignIn.hs b/server/src/View/Mail/SignIn.hs
index 1daca1e..d542fd8 100644
--- a/server/src/View/Mail/SignIn.hs
+++ b/server/src/View/Mail/SignIn.hs
@@ -4,15 +4,15 @@ module View.Mail.SignIn
( mail
) where
-import Data.Text (Text)
+import Data.Text (Text)
-import qualified Common.Message as Message
+import qualified Common.Message as Message
import qualified Common.Message.Key as Key
-import Common.Model (User(..))
+import Common.Model (User (..))
-import Conf (Conf)
-import qualified Conf as Conf
-import qualified Model.Mail as M
+import Conf (Conf)
+import qualified Conf as Conf
+import qualified Model.Mail as M
mail :: Conf -> User -> Text -> [Text] -> M.Mail
mail conf user url to =
diff --git a/server/src/View/Mail/WeeklyReport.hs b/server/src/View/Mail/WeeklyReport.hs
index b5f2b67..c0e89d5 100644
--- a/server/src/View/Mail/WeeklyReport.hs
+++ b/server/src/View/Mail/WeeklyReport.hs
@@ -4,28 +4,29 @@ module View.Mail.WeeklyReport
( mail
) where
-import Data.List (sortOn)
-import Data.Map (Map)
-import Data.Maybe (catMaybes, fromMaybe)
-import Data.Monoid ((<>))
-import Data.Text (Text)
-import Data.Time.Clock (UTCTime)
-import qualified Data.Map as M
-import qualified Data.Text as T
+import Data.List (sortOn)
+import Data.Map (Map)
+import qualified Data.Map as M
+import Data.Maybe (catMaybes, fromMaybe)
+import Data.Monoid ((<>))
+import Data.Text (Text)
+import qualified Data.Text as T
+import Data.Time.Clock (UTCTime)
-import qualified Common.Message as Message
+import qualified Common.Message as Message
import qualified Common.Message.Key as Key
-import Common.Model (Payment(..), User(..), UserId, Income(..))
-import qualified Common.Model as CM
+import Common.Model (Income (..), Payment (..), User (..),
+ UserId)
+import qualified Common.Model as CM
import qualified Common.View.Format as Format
-import Model.Mail (Mail(Mail))
-import Model.Payment ()
-import qualified Model.Income ()
-import qualified Model.Mail as M
-import Resource (Status(..), groupByStatus, statuses)
-import Conf (Conf)
-import qualified Conf as Conf
+import Conf (Conf)
+import qualified Conf as Conf
+import qualified Model.Income ()
+import Model.Mail (Mail (Mail))
+import qualified Model.Mail as M
+import Model.Payment ()
+import Resource (Status (..), groupByStatus, statuses)
mail :: Conf -> [User] -> [Payment] -> [Income] -> UTCTime -> UTCTime -> Mail
mail conf users payments incomes start end =
@@ -65,7 +66,7 @@ payedFor :: Status -> Conf -> [User] -> Payment -> Text
payedFor status conf users payment =
case status of
Deleted -> Message.get (Key.WeeklyReport_PayedForNot name amount for at)
- _ -> Message.get (Key.WeeklyReport_PayedFor name amount for at)
+ _ -> Message.get (Key.WeeklyReport_PayedFor name amount for at)
where name = formatUserName (_payment_user payment) users
amount = Format.price (Conf.currency conf) . _payment_cost $ payment
for = _payment_name payment
@@ -85,7 +86,7 @@ isPayedFrom :: Status -> Conf -> [User] -> Income -> Text
isPayedFrom status conf users income =
case status of
Deleted -> Message.get (Key.WeeklyReport_PayedFromNot name amount for)
- _ -> Message.get (Key.WeeklyReport_PayedFrom name amount for)
+ _ -> Message.get (Key.WeeklyReport_PayedFrom name amount for)
where name = formatUserName (_income_userId income) users
amount = Format.price (Conf.currency conf) . _income_amount $ income
for = Format.longDay $ _income_date income
diff --git a/server/src/View/Page.hs b/server/src/View/Page.hs
index 6bf9527..ff7bdc7 100644
--- a/server/src/View/Page.hs
+++ b/server/src/View/Page.hs
@@ -4,23 +4,23 @@ module View.Page
( page
) where
-import Data.Text.Internal.Lazy (Text)
-import Data.Text.Lazy.Encoding (decodeUtf8)
-import Data.Aeson (encode)
-import qualified Data.Aeson.Types as Json
+import Data.Aeson (encode)
+import qualified Data.Aeson.Types as Json
+import Data.Text.Internal.Lazy (Text)
+import Data.Text.Lazy.Encoding (decodeUtf8)
-import Text.Blaze.Html
-import Text.Blaze.Html5
-import qualified Text.Blaze.Html5 as H
-import Text.Blaze.Html5.Attributes
-import qualified Text.Blaze.Html5.Attributes as A
-import Text.Blaze.Html.Renderer.Text (renderHtml)
+import Text.Blaze.Html
+import Text.Blaze.Html.Renderer.Text (renderHtml)
+import Text.Blaze.Html5
+import qualified Text.Blaze.Html5 as H
+import Text.Blaze.Html5.Attributes
+import qualified Text.Blaze.Html5.Attributes as A
-import qualified Common.Message as Message
-import qualified Common.Message.Key as Key
-import Common.Model (InitResult)
+import qualified Common.Message as Message
+import qualified Common.Message.Key as Key
+import Common.Model (InitResult)
-import Design.Global (globalDesign)
+import Design.Global (globalDesign)
page :: InitResult -> Text
page initResult =