feat: add update event route
parent
b3a3fc4c25
commit
eb862be55d
|
|
@ -17,4 +17,17 @@ content-type: application/json
|
|||
GET http://localhost:8080/events/1
|
||||
### Get a non existing event
|
||||
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
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"time"
|
||||
"udemy_httpserver/db"
|
||||
|
|
@ -39,6 +40,29 @@ func (e *Event) Save() error {
|
|||
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) {
|
||||
// TODO: implement paging
|
||||
selectQuery := `SELECT * FROM events`
|
||||
|
|
|
|||
|
|
@ -51,3 +51,41 @@ func getSingleEvent(c *gin.Context) {
|
|||
}
|
||||
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.GET("/events", getEvents)
|
||||
router.GET("/events/:id", getSingleEvent)
|
||||
router.PUT("/events/:id", updateEvent)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue