-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathmain.go
105 lines (82 loc) · 3.64 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package main
import (
"go_e-commerce-api/allproducts"
"go_e-commerce-api/book"
"go_e-commerce-api/handler"
"go_e-commerce-api/hoodie"
"go_e-commerce-api/laptop"
"go_e-commerce-api/transaction"
"log"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
r := gin.Default()
// connect to database
// PLEASE CREATE go-ecommerce database first.
dsn := "root:@tcp(127.0.0.1:3306)/go-ecommerce?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("DB Connection Error")
}
// auto migrate (auto add table)
db.AutoMigrate(&allproducts.AllProduct{}, &book.Book{}, &hoodie.Hoodie{}, &laptop.Laptop{}, &transaction.Transaction{})
// API Versioning
v1 := r.Group("/v1")
// All Products
allProductRepository := allproducts.NewRepository(db)
allProductService := allproducts.NewService(allProductRepository)
allProductHandler := handler.NewAllProductHandler(allProductService)
v1.POST("/products", allProductHandler.PostBooksHandler)
v1.GET("/products", allProductHandler.GetBooksList)
v1.GET("/products/:id", allProductHandler.GetBookById)
v1.GET("/products/category/:category", allProductHandler.GetBookByCategory)
v1.GET("/products/user/:email_user", allProductHandler.GetBookByUser)
v1.PUT("/products/:id", allProductHandler.UpdateBook)
v1.DELETE("/products/:id", allProductHandler.DeleteBook)
// get by name product
v1.GET("/products/np/:name_product/:email_user/:price", allProductHandler.GetBookByProductName)
v1.DELETE("/products/np/:name_product/:email_user/:price", allProductHandler.DeleteByNameProduct)
v1.PUT("/products/np/:name_product/:email_user/:price", allProductHandler.UpdateByNameProduct)
// Transaction
transactionRepository := transaction.NewRepository(db)
transactionService := transaction.NewService(transactionRepository)
transactionHandler := handler.NewTransactionHandler(transactionService)
v1.POST("/transaction", transactionHandler.PostBooksHandler)
v1.GET("/transaction", transactionHandler.GetBooksList)
v1.GET("/transaction/:id", transactionHandler.GetBookById)
v1.PUT("/transaction/:id", transactionHandler.UpdateBook)
v1.DELETE("/transaction/:id", transactionHandler.DeleteBook)
//
v1.GET("/transaction/user/:email_buyer", transactionHandler.GetBookByUser)
// BOOK
bookRepository := book.NewRepository(db)
bookService := book.NewService(bookRepository)
bookHandler := handler.NewBookHandler(bookService)
v1.POST("/products/book", bookHandler.PostBooksHandler)
v1.GET("/products/book", bookHandler.GetBooksList)
v1.GET("/products/book/:id", bookHandler.GetBookById)
v1.PUT("/products/book/:id", bookHandler.UpdateBook)
v1.DELETE("/products/book/:id", bookHandler.DeleteBook)
// Laptop
laptopRepository := laptop.NewRepository(db)
laptopService := laptop.NewService(laptopRepository)
laptopHandler := handler.NewLaptopHandler(laptopService)
v1.POST("/products/laptop", laptopHandler.PostBooksHandler)
v1.GET("/products/laptop", laptopHandler.GetBooksList)
v1.GET("/products/laptop/:id", laptopHandler.GetBookById)
v1.PUT("/products/laptop/:id", laptopHandler.UpdateBook)
v1.DELETE("/products/laptop/:id", laptopHandler.DeleteBook)
// Hoodie
hoodieRepository := hoodie.NewRepository(db)
hoodieService := hoodie.NewService(hoodieRepository)
hoodieHandler := handler.NewHoodieHandler(hoodieService)
v1.POST("/products/hoodie", hoodieHandler.PostBooksHandler)
v1.GET("/products/hoodie", hoodieHandler.GetBooksList)
v1.GET("/products/hoodie/:id", hoodieHandler.GetBookById)
v1.PUT("/products/hoodie/:id", hoodieHandler.UpdateBook)
v1.DELETE("/products/hoodie/:id", hoodieHandler.DeleteBook)
//
r.Run(":3000")
}