summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/test/store-script/shopping-cart.scm
blob: 60981411c77ac83a3d8dcba11f3d94bdb7282557 (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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
; Shopping cart implementation

(define cartId "1234")

; Get the shopping cart from the cache
; Return an empty cart if not found
(define (getcart id cache)
  (define cart (cache "get" id))
  (if (nul cart)
    (list)
    cart)
)

; Post a new item to the cart, create a new cart if necessary
(define (post item cache)
  (define id (uuid))
  (define newItem (list (car item) id (caddr item)))
  (define cart (cons newItem (getcart cartId cache)))
  (cache "put" cartId cart)
  id
)

; Return the content of the cart
(define (getall cache)
  (cons "Your Cart" (cons cartId (getcart cartId cache)))
)

; Find an item in the cart
(define (find id cart)
  (if (nul cart)
    (cons "Item" (list "0" (list)))
    (if (= id (cadr (car cart)))
      (car cart)
      (find id (cdr cart))))
)

; Get an item from the cart
(define (get id cache)
  (find id (getcart cartId cache))
)

; Delete the whole cart
(define (deleteall cache)
  (cache "delete" cartId)
)

; Delete an item from the  cart
(define (delete id cache)
  true
)

; Return the price of an item
(define (price item)
  (cadr (assoc 'price (caddr item)))
)

; Sum the prices of a list of items
(define (sum items)
  (if (nul items)
    0
    (+ (price (car items)) (sum (cdr items))))
)

; Return the total price of the items in the cart
(define (gettotal cache)
  (define cart (getcart cartId cache))
  (sum cart)
)

; TODO remove these JSON-RPC specific functions
(define (system.listMethods cache) (list "Service.getTotal"))
(define Service.getTotal gettotal)