feat: add update event route

main
Pau Costa Ferrer 2024-07-07 14:25:47 +02:00
parent b3a3fc4c25
commit eb862be55d
4 changed files with 77 additions and 1 deletions

View File

@ -18,3 +18,16 @@ GET http://localhost:8080/events/1
### Get a non existing event ### Get a non existing event
GET http://localhost:8080/events/10000 GET http://localhost:8080/events/10000
### ###
### Update an existing event
PUT http://localhost:8080/events/1
content-type: application/json
{
"name": "My test event",
"description": "this is a event I created for testing",
"location": "test QUACK location",
"dateTime": "2025-01-01T13:40:00.000Z",
"UserId": 0
}

View File

@ -1,6 +1,7 @@
package models package models
import ( import (
"database/sql"
"fmt" "fmt"
"time" "time"
"udemy_httpserver/db" "udemy_httpserver/db"
@ -39,6 +40,29 @@ func (e *Event) Save() error {
return err return err
} }
func (e *Event) Update() error {
query := `
UPDATE events SET
name = $1, description = $2, location = $3, dateTime = $4, user_id = $5
WHERE id = $6
`
statement, err := db.Conn.Prepare(query)
if err != nil {
fmt.Println("Something went wrong trying to prepare statement", err)
return err
}
defer func(statement *sql.Stmt) {
err := statement.Close()
if err != nil {
fmt.Println("Something went wrong trying to close statement", err)
return
}
}(statement)
_, err = statement.Exec(e.Name, e.Description, e.Location, e.DateTime, e.UserID, e.ID)
return err
}
func GetAllEvents() ([]Event, error) { func GetAllEvents() ([]Event, error) {
// TODO: implement paging // TODO: implement paging
selectQuery := `SELECT * FROM events` selectQuery := `SELECT * FROM events`

View File

@ -51,3 +51,41 @@ func getSingleEvent(c *gin.Context) {
} }
c.JSON(http.StatusOK, *candidateEvent) c.JSON(http.StatusOK, *candidateEvent)
} }
func updateEvent(c *gin.Context) {
// First we try to parse the json body into a struct
var event models.Event
err := c.ShouldBindJSON(&event)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// We try to find the event by id
eventID, err := strconv.ParseInt(c.Param("id"), 10, 64)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
// If we get a db error, we return a 500 error
candidateEvent, err := models.FindEventById(int(eventID))
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
// If the event is not found, we return a 404
if candidateEvent == nil {
c.JSON(http.StatusNotFound, gin.H{"error": "event not found"})
return
}
// If the event is found, we update it
event.ID = candidateEvent.ID
if event.UserID == 0 {
event.UserID = candidateEvent.UserID
}
err = event.Update()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, event)
}

View File

@ -6,4 +6,5 @@ func RegisterRoutes(router *gin.Engine) {
router.POST("/events", postEvent) router.POST("/events", postEvent)
router.GET("/events", getEvents) router.GET("/events", getEvents)
router.GET("/events/:id", getSingleEvent) router.GET("/events/:id", getSingleEvent)
router.PUT("/events/:id", updateEvent)
} }