summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/samples/store-nosql/shopping-cart.scm
blob: 61b169426f58001b9b323835197d18ece5492e57 (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
74
75
76
77
78
79
80
81
82
;  Licensed to the Apache Software Foundation (ASF) under one
;  or more contributor license agreements.  See the NOTICE file
;  distributed with this work for additional information
;  regarding copyright ownership.  The ASF licenses this file
;  to you under the Apache License, Version 2.0 (the
;  "License"); you may not use this file except in compliance
;  with the License.  You may obtain a copy of the License at
;  
;    http://www.apache.org/licenses/LICENSE-2.0
;    
;  Unless required by applicable law or agreed to in writing,
;  software distributed under the License is distributed on an
;  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
;  KIND, either express or implied.  See the License for the
;  specific language governing permissions and limitations
;  under the License.

; 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" (list id)))
  (if (nul cart)
    (list)
    cart)
)

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

; 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 items from the cart
(define (get id cache)
  (if (nul id)
    (cons "Your Cart" (cons cartId (getcart cartId cache)))
    (find (car id) (getcart cartId cache))
  )
)

; Delete items from the  cart
(define (delete id cache)
  (if (nul id)
    (cache "delete" (list cartId))
    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 (total cache)
  (define cart (getcart cartId cache))
  (sum cart)
)