diff --git a/controllers/productController.go b/controllers/productController.go index dbe25df..8570b29 100644 --- a/controllers/productController.go +++ b/controllers/productController.go @@ -8,6 +8,7 @@ import ( "golang-test/message" "golang-test/validators" "log" + "strconv" //"golang-test/migrations" ) @@ -25,6 +26,12 @@ func CreateProduct(c *gin.Context, product database.Product) { return } + if err := db.First(&database.Manufacturer{}, product.ManufacturerID).Error; err != nil { + response.Error = gin.H{ + "error": "Manufacturer with id '" + strconv.Itoa(int(product.ManufacturerID)) + "' not found", + } + } + err = db.Create(&product).Error if err != nil { @@ -44,3 +51,84 @@ func CreateProduct(c *gin.Context, product database.Product) { message.SendResponse(c, response) } + +func DeleteProduct(c *gin.Context) { + db := database.Connector() + response := message.Response{Status: 200} + id := c.Param("id") + + var product database.Product + + if db.First(&product, id).Error != nil { + response.Error = gin.H{ + "error": "Product with id '" + id + "' not found", + } + response.Status = 404 + message.SendResponse(c, response) + return + } + + db.Delete(&product, id) + + response.Message = gin.H{ + "message": "Product deleted", + } + + message.SendResponse(c, response) +} + +//func GetProducts(c *gin.Context) { +// +// db := database.Connector() +// response := message.Response{Status: 200} +// var product []database.Product +// +// resp := []interface{}{} +// +// db.Find(&product) +// +// for _, productItem := range product { +// resp = append(resp, gin.H{ +// "id": productItem.ID, +// "name": productItem.Name, +// "price": productItem.Price, +// "manufacturer_ID": productItem.Manufacturer.ID, +// "manufacturer_Name": productItem.Manufacturer.Name, +// }) +// log.Println(productItem.Manufacturer.Name) +// } +// +// response.Message = gin.H{ +// "products": resp, +// } +// +// message.SendResponse(c, response) +//} + +func GetProductInfo(c *gin.Context) { + db := database.Connector() + response := message.Response{Status: 200} + id := c.Param("id") + + var product database.Product + + if err := db.First(&product, id).Error; err != nil { + response.Error = gin.H{ + "error": "Product with id '" + id + "' not found", + } + response.Status = 404 + message.SendResponse(c, response) + return + } + + response.Message = gin.H{ + "product": gin.H{ + "id": product.ID, + "name": product.Name, + "price": product.Price, + "manufacturer_ID": product.ManufacturerID, + "manufacturer_Name": product.Manufacturer.Name, + }, + } + +} diff --git a/golang-test/Manufacturer/Create Manufacturer.bru b/golang-test/Manufacturer/Create Manufacturer.bru index ce33faa..531eaa0 100644 --- a/golang-test/Manufacturer/Create Manufacturer.bru +++ b/golang-test/Manufacturer/Create Manufacturer.bru @@ -12,6 +12,6 @@ post { body:json { { - "name": "ЧЯЗ" + "name": "Тест 1" } } diff --git a/golang-test/Product/ProductCreate.bru b/golang-test/Product/Create Product.bru similarity index 91% rename from golang-test/Product/ProductCreate.bru rename to golang-test/Product/Create Product.bru index 57d650f..55f3883 100644 --- a/golang-test/Product/ProductCreate.bru +++ b/golang-test/Product/Create Product.bru @@ -1,5 +1,5 @@ meta { - name: ProductCreate + name: Create Product type: http seq: 1 } diff --git a/golang-test/Product/Delete Product.bru b/golang-test/Product/Delete Product.bru new file mode 100644 index 0000000..a741878 --- /dev/null +++ b/golang-test/Product/Delete Product.bru @@ -0,0 +1,11 @@ +meta { + name: Delete Product + type: http + seq: 2 +} + +delete { + url: {{host}}/product/{{productID}} + body: none + auth: none +} diff --git a/golang-test/Product/Get Product Info.bru b/golang-test/Product/Get Product Info.bru new file mode 100644 index 0000000..283d39e --- /dev/null +++ b/golang-test/Product/Get Product Info.bru @@ -0,0 +1,11 @@ +meta { + name: Get Product Info + type: http + seq: 4 +} + +get { + url: + body: none + auth: none +} diff --git a/golang-test/Product/Get Products.bru b/golang-test/Product/Get Products.bru new file mode 100644 index 0000000..b85a317 --- /dev/null +++ b/golang-test/Product/Get Products.bru @@ -0,0 +1,25 @@ +meta { + name: Get Products + type: http + seq: 3 +} + +post { + url: {{host}}/product + body: json + auth: none +} + +body:json { + { + "name": "Яблоко", + "price": 5, + "manufacturerID": 1 + } +} + +body:multipart-form { + name: Яблоко + price: 5 + manufacturer: 1 +} diff --git a/golang-test/environments/golang-test.bru b/golang-test/environments/golang-test.bru index 172b2bc..578588d 100644 --- a/golang-test/environments/golang-test.bru +++ b/golang-test/environments/golang-test.bru @@ -1,4 +1,5 @@ vars { host: http://localhost:8080 manufacturerID: 1 + productID: 2 } diff --git a/main.go b/main.go index bd7d30e..a59b5ee 100644 --- a/main.go +++ b/main.go @@ -12,8 +12,10 @@ import ( func main() { + // Создание сервера r := gin.Default() + //View для создание товара r.POST("/product", func(c *gin.Context) { var product database.Product if err := c.ShouldBind(&product); err != nil { @@ -23,6 +25,21 @@ func main() { controllers.CreateProduct(c, product) }) + //View для удаления товара + r.DELETE("/product/:id", func(c *gin.Context) { + controllers.DeleteProduct(c) + }) + + //View для просмотра всех продуктов + r.GET("/product", func(c *gin.Context) { + controllers.GetProducts(c) + }) + + r.GET("/product/:id", func(c *gin.Context) { + controllers.GetProductInfo(c) + }) + + //View для создания производителя r.POST("/manufacturer", func(c *gin.Context) { var manufacturer database.Manufacturer if err := c.ShouldBind(&manufacturer); err != nil { @@ -32,14 +49,17 @@ func main() { controllers.CreateManufacturer(c, manufacturer) }) + //View для удаления производителя r.DELETE("/manufacturer/:id", func(c *gin.Context) { controllers.DeleteManufacturer(c) }) + //View получения списка всех производителей r.GET("/manufacturer", func(c *gin.Context) { controllers.GetManufacturers(c) }) + //View для редактирования производителя r.PATCH("/manufacturer/:id", func(c *gin.Context) { var manufacturer types.ManufacturerPatchRequest