feat: add update event route
parent
b3a3fc4c25
commit
eb862be55d
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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`
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue