Skip to content

Commit 8aebf21

Browse files
committed
Update dan Delete database
1 parent 602c31a commit 8aebf21

File tree

4 files changed

+106
-4
lines changed

4 files changed

+106
-4
lines changed

book/repository.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ type Repository interface {
66
FindAll() ([]Book, error)
77
FindByID(ID int) (Book, error)
88
Create(book Book) (Book, error)
9+
Update(book Book) (Book, error)
10+
Delete(book Book) (Book, error)
911
}
1012

1113
type repository struct {
@@ -35,3 +37,15 @@ func (r *repository) Create(book Book) (Book, error) {
3537
err := r.db.Create(&book).Error
3638
return book, err
3739
}
40+
41+
func (r *repository) Update(book Book) (Book, error) {
42+
43+
err := r.db.Save(&book).Error
44+
return book, err
45+
}
46+
47+
func (r *repository) Delete(book Book) (Book, error) {
48+
49+
err := r.db.Delete(&book).Error
50+
return book, err
51+
}

book/service.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ type Service interface {
44
FindAll() ([]Book, error)
55
FindByID(ID int) (Book, error)
66
Create(bookRequest BookRequest) (Book, error)
7+
Update(ID int, bookRequest BookRequest) (Book, error)
8+
Delete(ID int) (Book, error)
79
}
810

911
type service struct {
@@ -40,3 +42,29 @@ func (s *service) Create(bookRequest BookRequest) (Book, error) {
4042
newBook, err := s.repository.Create(book)
4143
return newBook, err
4244
}
45+
46+
func (s *service) Update(ID int, bookRequest BookRequest) (Book, error) {
47+
48+
book, _ := s.repository.FindByID(ID)
49+
50+
price, _ := bookRequest.Price.Int64()
51+
rating, _ := bookRequest.Rating.Int64()
52+
discount, _ := bookRequest.Discount.Int64()
53+
54+
book.Title = bookRequest.Title
55+
book.Price = int(price)
56+
book.Description = bookRequest.Description
57+
book.Rating = int(rating)
58+
book.Discount = int(discount)
59+
60+
newBook, err := s.repository.Update(book)
61+
return newBook, err
62+
}
63+
64+
func (s *service) Delete(ID int) (Book, error) {
65+
66+
book, _ := s.repository.FindByID(ID)
67+
68+
newBook, err := s.repository.Delete(book)
69+
return newBook, err
70+
}

handler/book.go

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (h *bookHandler) GetBook(c *gin.Context) {
5959
})
6060
}
6161

62-
func (h *bookHandler) PostBooksHandler(c *gin.Context) {
62+
func (h *bookHandler) CreateBook(c *gin.Context) {
6363
var bookRequest book.BookRequest
6464

6565
err := c.ShouldBindJSON(&bookRequest)
@@ -79,7 +79,46 @@ func (h *bookHandler) PostBooksHandler(c *gin.Context) {
7979

8080
}
8181

82-
book, err := h.bookService.Create(bookRequest)
82+
b, err := h.bookService.Create(bookRequest)
83+
if err != nil {
84+
c.JSON(http.StatusBadRequest, gin.H{
85+
"errors": err,
86+
})
87+
return
88+
}
89+
90+
bookResponse := convertToBookResponse(b)
91+
92+
c.JSON(http.StatusOK, gin.H{
93+
"data": bookResponse,
94+
})
95+
96+
}
97+
98+
func (h *bookHandler) UpdateBook(c *gin.Context) {
99+
var bookRequest book.BookRequest
100+
101+
err := c.ShouldBindJSON(&bookRequest)
102+
if err != nil {
103+
//log.Fatal(err) //serber mati
104+
105+
errorMessages := []string{}
106+
for _, e := range err.(validator.ValidationErrors) { //menampilkan erorr validation
107+
errorMessage := fmt.Sprintf("Error on field %s, condition: %s", e.Field(), e.ActualTag())
108+
errorMessages = append(errorMessages, errorMessage)
109+
110+
c.JSON(http.StatusBadRequest, gin.H{
111+
"errors": errorMessages,
112+
})
113+
return
114+
}
115+
116+
}
117+
118+
idString := c.Param("id")
119+
id, _ := strconv.Atoi(idString)
120+
121+
b, err := h.bookService.Update(id, bookRequest)
83122
if err != nil {
84123
c.JSON(http.StatusBadRequest, gin.H{
85124
"errors": err,
@@ -88,7 +127,26 @@ func (h *bookHandler) PostBooksHandler(c *gin.Context) {
88127
}
89128

90129
c.JSON(http.StatusOK, gin.H{
91-
"data": book,
130+
"data": convertToBookResponse(b),
131+
})
132+
}
133+
134+
func (h *bookHandler) DeleteBook(c *gin.Context) {
135+
idString := c.Param("id")
136+
id, _ := strconv.Atoi(idString)
137+
138+
b, err := h.bookService.Delete(id)
139+
140+
if err != nil {
141+
c.JSON(http.StatusBadRequest, gin.H{
142+
"errors": err,
143+
})
144+
}
145+
146+
bookResponse := convertToBookResponse(b)
147+
148+
c.JSON(http.StatusOK, gin.H{
149+
"data": bookResponse,
92150
})
93151
}
94152

main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@ func main() {
3333
v1 := router.Group("/v1")
3434
v1.GET("/books", bookHandler.GetBooks)
3535
v1.GET("/books/:id", bookHandler.GetBook) // :id akan dapat berubah
36+
v1.PUT("/books/:id", bookHandler.UpdateBook)
37+
v1.DELETE("/books/:id", bookHandler.DeleteBook)
3638

37-
v1.POST("/books", bookHandler.PostBooksHandler)
39+
v1.POST("/books", bookHandler.CreateBook)
3840
//alur post data
3941
//ke PostBooksHandler (/handler/book.go/PostBooksHandler)
4042

0 commit comments

Comments
 (0)