diff --git a/controllers/manufacturerController.go b/controllers/manufacturerController.go index cb0911a..cc0662b 100644 --- a/controllers/manufacturerController.go +++ b/controllers/manufacturerController.go @@ -6,6 +6,7 @@ import ( "golang-test/database" "golang-test/libs" "golang-test/message" + "golang-test/types" "golang-test/validators" "log" ) @@ -88,3 +89,40 @@ func GetManufacturers(c *gin.Context) { message.SendResponse(c, response) } + +func EditManufacture(c *gin.Context, editedManufacturer types.ManufacturerPatchRequest) { + db := database.Connector() + response := message.Response{Status: 200} + id := c.Param("id") + + validate := validators.Validate + err := validate.Struct(editedManufacturer) + + if err != nil { + response.Error = libs.GetValidationErrors(err.(validator.ValidationErrors)) + response.Status = 400 + message.SendResponse(c, response) + return + } + + var manufacturer database.Manufacturer + + if db.First(&manufacturer, id).Error != nil { + response.Error = gin.H{ + "error": "Manufacturer with id '" + id + "' not found", + } + response.Status = 404 + message.SendResponse(c, response) + return + } + + db.First(&manufacturer, id) + manufacturer.Name = editedManufacturer.Name + db.Save(&manufacturer) + + response.Message = gin.H{ + "message": "Manufacturer edited", + } + + message.SendResponse(c, response) +} diff --git a/golang-test/Manufacturer/EDIT Manufacture.bru b/golang-test/Manufacturer/EDIT Manufacture.bru new file mode 100644 index 0000000..0b12460 --- /dev/null +++ b/golang-test/Manufacturer/EDIT Manufacture.bru @@ -0,0 +1,17 @@ +meta { + name: EDIT Manufacture + type: http + seq: 4 +} + +patch { + url: {{host}}/manufacturer/{{manufacturerID}} + body: json + auth: none +} + +body:json { + { + "name": "Test3" + } +} diff --git a/golang-test/environments/golang-test.bru b/golang-test/environments/golang-test.bru index 6db2f17..172b2bc 100644 --- a/golang-test/environments/golang-test.bru +++ b/golang-test/environments/golang-test.bru @@ -1,4 +1,4 @@ vars { host: http://localhost:8080 - manufacturerID: 3 + manufacturerID: 1 } diff --git a/main.go b/main.go index 3add00e..da5da86 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "github.com/gin-gonic/gin" "golang-test/controllers" "golang-test/database" + "golang-test/types" "log" "net/http" ) @@ -44,6 +45,16 @@ func main() { controllers.GetManufacturers(c) }) + r.PATCH("/manufacturer/:id", func(c *gin.Context) { + var manufacturer types.ManufacturerPatchRequest + + if err := c.ShouldBind(&manufacturer); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + } + + controllers.EditManufacture(c, manufacturer) + }) + err := r.Run() if err != nil { return diff --git a/types/types.go b/types/types.go new file mode 100644 index 0000000..684ff34 --- /dev/null +++ b/types/types.go @@ -0,0 +1,5 @@ +package types + +type ManufacturerPatchRequest struct { + Name string `validate:"required"` +}