Implement get goals (#25)
Closes #13 Reviewed-on: #25
This commit was merged in pull request #25.
This commit is contained in:
@@ -15,10 +15,18 @@ import (
|
||||
var migrations embed.FS
|
||||
var db *Db
|
||||
|
||||
// ServerConfig holds configuration for the server.
|
||||
type ServerConfig struct {
|
||||
// The datasource to the SQLite database.
|
||||
// Use ":memory:" for an in-memory database.
|
||||
Datasource string
|
||||
Port string
|
||||
Started chan bool
|
||||
|
||||
// The port to listen on.
|
||||
// Use an empty string to listen on a random port.
|
||||
Port string
|
||||
|
||||
// The channel that gets signaled when the server has started.
|
||||
Started chan bool
|
||||
}
|
||||
|
||||
func getUsers(c *gin.Context) {
|
||||
@@ -54,6 +62,41 @@ func getUser(c *gin.Context) {
|
||||
c.IndentedJSON(http.StatusOK, user)
|
||||
}
|
||||
|
||||
func getUserGoals(c *gin.Context) {
|
||||
userIdStr := c.Param("userId")
|
||||
userId, err := strconv.Atoi(userIdStr)
|
||||
if err != nil {
|
||||
log.Printf("Invalid user ID: %v", err)
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid user ID"})
|
||||
return
|
||||
}
|
||||
|
||||
exists, err := db.UserExists(userId)
|
||||
if err != nil {
|
||||
log.Printf("Error checking user existence: %v", err)
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal Server Error"})
|
||||
return
|
||||
}
|
||||
if !exists {
|
||||
log.Printf("Error checking user existence: %v", err)
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
|
||||
return
|
||||
}
|
||||
|
||||
goals, err := db.GetUserGoals(userId)
|
||||
if err != nil {
|
||||
log.Printf("Error getting user goals: %v", err)
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal Server Error"})
|
||||
return
|
||||
}
|
||||
c.IndentedJSON(http.StatusOK, goals)
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
Initialises the database, and then starts the server.
|
||||
If the context gets cancelled, the server is shutdown and the database is closed.
|
||||
*/
|
||||
func start(ctx context.Context, config *ServerConfig) {
|
||||
db = NewDb(config.Datasource)
|
||||
defer db.db.MustClose()
|
||||
@@ -61,6 +104,7 @@ func start(ctx context.Context, config *ServerConfig) {
|
||||
router := gin.Default()
|
||||
router.GET("/api/users", getUsers)
|
||||
router.GET("/api/user/:userId", getUser)
|
||||
router.GET("/api/user/:userId/goals", getUserGoals)
|
||||
|
||||
srv := &http.Server{
|
||||
Addr: ":" + config.Port,
|
||||
@@ -73,7 +117,9 @@ func start(ctx context.Context, config *ServerConfig) {
|
||||
}()
|
||||
|
||||
log.Printf("Running server on port %s\n", config.Port)
|
||||
config.Started <- true
|
||||
if config.Started != nil {
|
||||
config.Started <- true
|
||||
}
|
||||
<-ctx.Done()
|
||||
log.Println("Shutting down")
|
||||
if err := srv.Shutdown(context.Background()); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user