aboutsummaryrefslogtreecommitdiff
path: root/src/client/Model
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/Model')
-rw-r--r--src/client/Model/Frequency.elm36
-rw-r--r--src/client/Model/Payment.elm29
2 files changed, 38 insertions, 27 deletions
diff --git a/src/client/Model/Frequency.elm b/src/client/Model/Frequency.elm
new file mode 100644
index 0000000..40f9893
--- /dev/null
+++ b/src/client/Model/Frequency.elm
@@ -0,0 +1,36 @@
+module Model.Frequency exposing
+ ( Frequency(..)
+ , decoder
+ , validate
+ , fromString
+ )
+
+import Json.Decode as Decode exposing (Decoder)
+import Json.Decode.Extra as Decode
+
+import Form.Validate as Validate exposing (Validation)
+
+type Frequency = Punctual | Monthly
+
+decoder : Decoder Frequency
+decoder =
+ let frequencyResult input =
+ fromString input
+ |> Result.fromMaybe ("Could not deduce Punctual nor Monthly from " ++ input)
+ in Decode.string |> Decode.andThen (Decode.fromResult << frequencyResult)
+
+validate : Validation String Frequency
+validate =
+ Validate.customValidation Validate.string (\str ->
+ fromString str
+ |> Result.fromMaybe (Validate.customError "InvalidFrequency")
+ )
+
+fromString : String -> Maybe Frequency
+fromString str =
+ if str == toString Punctual then
+ Just Punctual
+ else if str == toString Monthly then
+ Just Monthly
+ else
+ Nothing
diff --git a/src/client/Model/Payment.elm b/src/client/Model/Payment.elm
index f61ded8..2412ab9 100644
--- a/src/client/Model/Payment.elm
+++ b/src/client/Model/Payment.elm
@@ -3,7 +3,6 @@ module Model.Payment exposing
, Payments
, Payment
, PaymentId
- , Frequency(..)
, paymentsDecoder
, paymentIdDecoder
, find
@@ -14,7 +13,6 @@ module Model.Payment exposing
, monthly
, groupAndSortByMonth
, search
- , validateFrequency
)
import Date exposing (..)
@@ -24,9 +22,9 @@ import Json.Decode.Extra as Decode
import List
import Form.Validate as Validate exposing (Validation)
+import Model.Frequency as Frequency exposing (Frequency(..))
import Model.Date exposing (dateDecoder)
import Model.User exposing (UserId, userIdDecoder)
-
import Utils.List as List
import Utils.Search as Search
@@ -46,8 +44,6 @@ type alias Payment =
type alias PaymentId = Int
-type Frequency = Punctual | Monthly
-
paymentsDecoder : Decoder Payments
paymentsDecoder = Decode.list paymentDecoder
@@ -59,20 +55,11 @@ paymentDecoder =
(Decode.field "cost" Decode.int)
(Decode.field "date" dateDecoder)
(Decode.field "userId" userIdDecoder)
- (Decode.field "frequency" frequencyDecoder)
+ (Decode.field "frequency" Frequency.decoder)
paymentIdDecoder : Decoder PaymentId
paymentIdDecoder = Decode.int
-frequencyDecoder : Decoder Frequency
-frequencyDecoder =
- let frequencyResult input =
- case input of
- "Punctual" -> Ok Punctual
- "Monthly" -> Ok Monthly
- _ -> Err ("Could not deduce Punctual nor Monthly from " ++ input)
- in Decode.string |> Decode.andThen (Decode.fromResult << frequencyResult)
-
find : PaymentId -> Payments -> Maybe Payment
find paymentId payments =
payments
@@ -129,15 +116,3 @@ searchSuccess search { name, cost } =
|| String.contains word (toString cost)
)
in List.all searchSuccessWord (String.words search)
-
-validateFrequency : Validation String Frequency
-validateFrequency =
- Validate.customValidation Validate.string (\str ->
- if str == toString Punctual
- then
- Ok Punctual
- else
- if str == toString Monthly
- then Ok Monthly
- else Err (Validate.customError "InvalidFrequency")
- )