updating rest-api

This commit is contained in:
2026-07-17 11:56:13 -05:00
parent 39433a0044
commit c4d7f52d37
15 changed files with 276 additions and 9 deletions

View File

@@ -42,8 +42,8 @@ func createEvent(context *gin.Context) {
return
}
event.ID = 1
event.UserID = 1
userId := context.GetInt64("userId")
event.UserID = userId
err = event.Save()
@@ -61,13 +61,19 @@ func updateEvent(context *gin.Context) {
return
}
_, err = models.GetEventByID(eventId)
userId := context.GetInt64("userId")
event, err := models.GetEventByID(eventId)
if err != nil {
context.JSON(http.StatusInternalServerError, gin.H{"message": "Could not fetch the event."})
return
}
if event.UserID != userId {
context.JSON(http.StatusUnauthorized, gin.H{"message": "Not authorized to update event"})
return
}
var updatedEvent models.Event
err = context.ShouldBindJSON(&updatedEvent)
@@ -92,6 +98,7 @@ func deleteEvent(context *gin.Context) {
return
}
userId := context.GetInt64("userId")
event, err := models.GetEventByID(eventId)
if err != nil {
@@ -99,6 +106,11 @@ func deleteEvent(context *gin.Context) {
return
}
if event.UserID != userId {
context.JSON(http.StatusUnauthorized, gin.H{"message": "Not authorized to delete event"})
return
}
err = event.Delete()
if err != nil {

View File

@@ -0,0 +1,51 @@
package routes
import (
"net/http"
"strconv"
"example.com/rest-api/models"
"github.com/gin-gonic/gin"
)
func registerForEvent(context *gin.Context) {
userId := context.GetInt64("userId")
eventId, err := strconv.ParseInt(context.Param("id"), 10, 64)
if err != nil {
context.JSON(http.StatusBadRequest, gin.H{"message": "Could not parse event id."})
return
}
event, err := models.GetEventByID(eventId)
if err != nil {
context.JSON(http.StatusInternalServerError, gin.H{"message": "Could not fetch event."})
return
}
err = event.Register(userId)
if err != nil {
context.JSON(http.StatusInternalServerError, gin.H{"message": "Could not register user for event"})
return
}
context.JSON(http.StatusCreated, gin.H{"message": "Registered!"})
}
func cancelRegistration(context *gin.Context) {
userId := context.GetInt64("userId")
eventId, err := strconv.ParseInt(context.Param("id"), 10, 64)
var event models.Event
event.ID = eventId
err = event.CancelRegistration(userId)
if err != nil {
context.JSON(http.StatusInternalServerError, gin.H{"message": "Could not cancel registration"})
return
}
context.JSON(http.StatusOK, gin.H{"message": "Cancelled!"})
}

View File

@@ -1,12 +1,22 @@
package routes
import "github.com/gin-gonic/gin"
import (
"example.com/rest-api/middlewares"
"github.com/gin-gonic/gin"
)
func RegisterRoutes(server *gin.Engine) {
server.GET("/events", getEvents)
server.GET("/events/:id", getEvent)
server.POST("/events", createEvent)
server.PUT("/events/:id", updateEvent)
server.DELETE("/events/:id", deleteEvent)
authenticated := server.Group("/")
authenticated.Use(middlewares.Authenticate)
authenticated.POST("/events", createEvent)
authenticated.PUT("/events/:id", updateEvent)
authenticated.DELETE("/events/:id", deleteEvent)
authenticated.POST("/events/:id/register", registerForEvent)
authenticated.DELETE("/events/:id/register", cancelRegistration)
server.POST("/signup", signup)
server.POST("/login", login)
}

View File

@@ -4,6 +4,7 @@ import (
"net/http"
"example.com/rest-api/models"
"example.com/rest-api/utils"
"github.com/gin-gonic/gin"
)
@@ -26,3 +27,29 @@ func signup(context *gin.Context) {
context.JSON(http.StatusCreated, gin.H{"message": "User created successfully"})
}
func login(context *gin.Context) {
var user models.User
err := context.ShouldBindJSON(&user)
if err != nil {
context.JSON(http.StatusBadRequest, gin.H{"message": "Could not parse request data."})
return
}
err = user.ValidateCredentials()
if err != nil {
context.JSON(http.StatusUnauthorized, gin.H{"message": "Could not authenticate user."})
}
token, err := utils.GenerateToken(user.Email, user.ID)
if err != nil {
context.JSON(http.StatusInternalServerError, gin.H{"message": "Could not authenticate user."})
return
}
context.JSON(http.StatusOK, gin.H{"message": "Login successful!", "token": token})
}