aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/Server.elm
blob: b4afe20dc77729cc5f6e92d4d66fbe912dd74559 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
module Server
  ( init
  , signIn
  , addPayment
  , deletePayment
  , setIncome
  , signOut
  ) where

import Signal
import Task as Task exposing (Task)
import Http
import Json.Decode as Json exposing ((:=))
import Date
import Time exposing (Time)

import Utils.Http exposing (..)

import Model.Payment exposing (..)
import Model.Income exposing (incomesDecoder, incomeIdDecoder, IncomeId)
import Model.User exposing (Users, usersDecoder, UserId, userIdDecoder)
import Model.Init exposing (Init)

init : Task Http.Error Init
init =
  Task.map Init (Http.get usersDecoder "/api/users")
    `Task.andMap` (Http.get ("id" := userIdDecoder) "/api/whoAmI")
    `Task.andMap` (Http.get paymentsDecoder "/api/payments")
    `Task.andMap` (Http.get paymentsDecoder "/api/monthlyPayments")
    `Task.andMap` (Http.get incomesDecoder "/api/incomes")

signIn : String -> Task Http.Error ()
signIn email =
  post ("/api/signIn?email=" ++ email)
    |> Task.map (always ())

addPayment : String -> String -> PaymentFrequency -> Task Http.Error PaymentId
addPayment name cost frequency =
  post ("/api/payment/add?name=" ++ name ++ "&cost=" ++ cost ++ "&frequency=" ++ (toString frequency))
    |> flip Task.andThen (decodeHttpValue <| "id" := paymentIdDecoder)

deletePayment : Payment -> PaymentFrequency -> Task Http.Error ()
deletePayment payment frequency =
  post ("/api/payment/delete?id=" ++ (toString payment.id))
    |> Task.map (always ())

setIncome : Time -> Int -> Task Http.Error IncomeId
setIncome currentTime amount =
  post ("/api/income?amount=" ++ (toString amount))
    |> flip Task.andThen (decodeHttpValue <| "id" := incomeIdDecoder)

signOut : Task Http.Error ()
signOut =
  post "/api/signOut"
    |> Task.map (always ())