-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
71 lines (63 loc) · 2.03 KB
/
main.go
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
package main
import (
"lana/flagship-store/models"
"lana/flagship-store/persistence"
"lana/flagship-store/services"
)
func main() {
app := App{}
checkoutRepository := populate_checkouts()
productRepository := populate_products()
createCheckoutService := services.NewCreateCheckout(checkoutRepository, productRepository)
addProductToCheckoutService := services.NewAddProductToCheckout(checkoutRepository, productRepository)
retrieveCheckoutAmountService := services.NewRetrieveCheckoutAmount(checkoutRepository, productRepository, populate_products_with_promotion(), populate_products_with_discount())
deleteCheckoutService := services.NewDeleteCheckout(checkoutRepository)
app.Initialize(createCheckoutService, addProductToCheckoutService, deleteCheckoutService, retrieveCheckoutAmountService)
app.Run(":3080")
}
func populate_checkouts() persistence.CheckoutRepository {
checkouts := make(map[string]models.Checkout)
return persistence.NewCheckoutRepository(checkouts)
}
func populate_products() persistence.ProductRepository {
products := make(map[string]models.Product)
pen := models.Product{
Code: "PEN",
Name: "Lana Pen",
Price: 500,
}
tshirt := models.Product{
Code: "TSHIRT",
Name: "Lana T-Shirt",
Price: 2000,
}
mug := models.Product{
Code: "MUG",
Name: "Lana Coffee Mug",
Price: 750,
}
products[pen.Code] = pen
products[tshirt.Code] = tshirt
products[mug.Code] = mug
return persistence.NewProductsRepository(products)
}
func populate_products_with_promotion() persistence.ProductRepository {
products := make(map[string]models.Product)
pen := models.Product{
Code: "PEN",
Name: "Lana Pen",
Price: 500,
}
products[pen.Code] = pen
return persistence.NewProductWithPromotionRepository(products)
}
func populate_products_with_discount() persistence.ProductRepository {
products := make(map[string]models.Product)
tshirt := models.Product{
Code: "TSHIRT",
Name: "Lana T-Shirt",
Price: 2000,
}
products[tshirt.Code] = tshirt
return persistence.NewProductWithDiscountRepository(products)
}