From 99182e5cdac0b361992969197b17cf2c545bc92a Mon Sep 17 00:00:00 2001 From: DeveloperDurp Date: Sat, 24 Jun 2023 13:03:58 -0400 Subject: [PATCH] add delete --- controller/dadjoke.go | 43 +++++++++++++++++++++++++++--------- docs/docs.go | 51 ++++++++++++++++++++++++++++++++++++++++--- docs/swagger.json | 51 ++++++++++++++++++++++++++++++++++++++++--- docs/swagger.yaml | 36 +++++++++++++++++++++++++++--- main.go | 1 + service/dadjoke.go | 40 +++++++++++++++++++++++++++++++++ 6 files changed, 203 insertions(+), 19 deletions(-) diff --git a/controller/dadjoke.go b/controller/dadjoke.go index 921b1cb..68567b4 100644 --- a/controller/dadjoke.go +++ b/controller/dadjoke.go @@ -11,13 +11,13 @@ import ( // GetDadJoke godoc // -// @Summary Generate dadjoke +// @Summary Generate dadjokelocaloca // @Description get a dad joke // @Tags DadJoke // @Accept json // @Produce application/json // @Success 200 {object} model.Message "response" -// @failure 400 {object} model.Message "error" +// @failure 500 {object} model.Message "error" // @Router /jokes/dadjoke [get] func (c *Controller) GetDadJoke(ctx *gin.Context) { joke, err := service.GetRandomDadJoke(c.Db.DB) @@ -36,23 +36,46 @@ func (c *Controller) GetDadJoke(ctx *gin.Context) { // @Tags DadJoke // @Accept json // @Produce application/json +// @Param joke query string true "Dad Joke you wish to enter into database" // @Success 200 {object} model.Message "response" -// @failure 400 {object} model.Message "error" +// @failure 500 {object} model.Message "error" // @Router /jokes/dadjoke [post] func (c *Controller) PostDadJoke(ctx *gin.Context) { var req model.DadJoke if err := ctx.ShouldBindJSON(&req); err != nil { - ctx.JSON(http.StatusInternalServerError, gin.H{"message": err}) - return - } - entry := model.DadJoke{ - JOKE: req.JOKE, + req.JOKE = ctx.Query("joke") } - err := c.Db.DB.Create(&entry).Error + err := service.PostDadJoke(c.Db.DB, req) if err != nil { - ctx.JSON(http.StatusInternalServerError, gin.H{"message": err}) + ctx.JSON(http.StatusInternalServerError, gin.H{"message": err.Error()}) + return + } + ctx.JSON(http.StatusOK, gin.H{"message": "OK"}) +} + +// DeleteDadJoke godoc +// +// @Summary Generate dadjoke +// @Description create a dad joke +// @Tags DadJoke +// @Accept json +// @Produce application/json +// @Param joke query string true "Dad joke you wish to delete from the database" +// @Success 200 {object} model.Message "response" +// @failure 500 {object} model.Message "error" +// @Router /jokes/dadjoke [delete] +func (c *Controller) DeleteDadJoke(ctx *gin.Context) { + var req model.DadJoke + + if err := ctx.ShouldBindJSON(&req); err != nil { + req.JOKE = ctx.Query("joke") + } + + err := service.DeleteDadJoke(c.Db.DB, req) + if err != nil { + ctx.JSON(http.StatusInternalServerError, gin.H{"message": err.Error()}) return } ctx.JSON(http.StatusOK, gin.H{"message": "OK"}) diff --git a/docs/docs.go b/docs/docs.go index 7f4ff13..c789d0c 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -66,7 +66,7 @@ const docTemplate = `{ "tags": [ "DadJoke" ], - "summary": "Generate dadjoke", + "summary": "Generate dadjokelocaloca", "responses": { "200": { "description": "response", @@ -74,7 +74,7 @@ const docTemplate = `{ "$ref": "#/definitions/model.Message" } }, - "400": { + "500": { "description": "error", "schema": { "$ref": "#/definitions/model.Message" @@ -94,6 +94,15 @@ const docTemplate = `{ "DadJoke" ], "summary": "Generate dadjoke", + "parameters": [ + { + "type": "string", + "description": "Dad Joke you wish to enter into database", + "name": "joke", + "in": "query", + "required": true + } + ], "responses": { "200": { "description": "response", @@ -101,7 +110,43 @@ const docTemplate = `{ "$ref": "#/definitions/model.Message" } }, - "400": { + "500": { + "description": "error", + "schema": { + "$ref": "#/definitions/model.Message" + } + } + } + }, + "delete": { + "description": "create a dad joke", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "DadJoke" + ], + "summary": "Generate dadjoke", + "parameters": [ + { + "type": "string", + "description": "Dad joke you wish to delete from the database", + "name": "joke", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "response", + "schema": { + "$ref": "#/definitions/model.Message" + } + }, + "500": { "description": "error", "schema": { "$ref": "#/definitions/model.Message" diff --git a/docs/swagger.json b/docs/swagger.json index c888322..b452f95 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -57,7 +57,7 @@ "tags": [ "DadJoke" ], - "summary": "Generate dadjoke", + "summary": "Generate dadjokelocaloca", "responses": { "200": { "description": "response", @@ -65,7 +65,7 @@ "$ref": "#/definitions/model.Message" } }, - "400": { + "500": { "description": "error", "schema": { "$ref": "#/definitions/model.Message" @@ -85,6 +85,15 @@ "DadJoke" ], "summary": "Generate dadjoke", + "parameters": [ + { + "type": "string", + "description": "Dad Joke you wish to enter into database", + "name": "joke", + "in": "query", + "required": true + } + ], "responses": { "200": { "description": "response", @@ -92,7 +101,43 @@ "$ref": "#/definitions/model.Message" } }, - "400": { + "500": { + "description": "error", + "schema": { + "$ref": "#/definitions/model.Message" + } + } + } + }, + "delete": { + "description": "create a dad joke", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "DadJoke" + ], + "summary": "Generate dadjoke", + "parameters": [ + { + "type": "string", + "description": "Dad joke you wish to delete from the database", + "name": "joke", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "response", + "schema": { + "$ref": "#/definitions/model.Message" + } + }, + "500": { "description": "error", "schema": { "$ref": "#/definitions/model.Message" diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 14df575..8c16cc1 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -79,6 +79,30 @@ paths: tags: - health /jokes/dadjoke: + delete: + consumes: + - application/json + description: create a dad joke + parameters: + - description: Dad joke you wish to delete from the database + in: query + name: joke + required: true + type: string + produces: + - application/json + responses: + "200": + description: response + schema: + $ref: '#/definitions/model.Message' + "500": + description: error + schema: + $ref: '#/definitions/model.Message' + summary: Generate dadjoke + tags: + - DadJoke get: consumes: - application/json @@ -90,17 +114,23 @@ paths: description: response schema: $ref: '#/definitions/model.Message' - "400": + "500": description: error schema: $ref: '#/definitions/model.Message' - summary: Generate dadjoke + summary: Generate dadjokelocaloca tags: - DadJoke post: consumes: - application/json description: create a dad joke + parameters: + - description: Dad Joke you wish to enter into database + in: query + name: joke + required: true + type: string produces: - application/json responses: @@ -108,7 +138,7 @@ paths: description: response schema: $ref: '#/definitions/model.Message' - "400": + "500": description: error schema: $ref: '#/definitions/model.Message' diff --git a/main.go b/main.go index 37461f9..92054f6 100644 --- a/main.go +++ b/main.go @@ -43,6 +43,7 @@ func main() { jokes.Use(c.AuthMiddleware([]string{"rw-jokes"}, c.Cfg.Groupsenv)) jokes.POST("dadjoke", c.PostDadJoke) + jokes.DELETE("dadjoke", c.DeleteDadJoke) } openai := v1.Group("/openai") { diff --git a/service/dadjoke.go b/service/dadjoke.go index 85ad658..1da79d1 100644 --- a/service/dadjoke.go +++ b/service/dadjoke.go @@ -1,6 +1,7 @@ package service import ( + "errors" "math/rand" "gorm.io/gorm" @@ -21,6 +22,45 @@ func GetRandomDadJoke(db *gorm.DB) (string, error) { return randomElement.JOKE, err } +func PostDadJoke(db *gorm.DB, joke model.DadJoke) error { + jokes, err := getDadJokes(db) + if err != nil { + return err + } + + found := false + for _, i := range jokes { + if i.JOKE == joke.JOKE { + found = true + break + } + } + + if found { + return errors.New("Joke is already in database") + } else { + err = db.Create(&joke).Error + if err != nil { + return err + } + return nil + } +} + +func DeleteDadJoke(db *gorm.DB, joke model.DadJoke) error { + check := &model.DadJoke{} + db.Where("joke = ?", joke.JOKE).First(check) + if check.JOKE == "" { + return errors.New("Joke does not exist") + } + + err := db.Where("joke = ?", joke.JOKE).Delete(joke).Error + if err != nil { + return err + } + return nil +} + func getDadJokes(db *gorm.DB) ([]model.DadJoke, error) { req := []model.DadJoke{}