diff --git a/backend/handlers/handle_activity.go b/backend/handlers/handle_activity.go new file mode 100644 index 0000000..0877838 --- /dev/null +++ b/backend/handlers/handle_activity.go @@ -0,0 +1,40 @@ +package handlers + +import ( + "net/http" + + "adam-french.co.uk/backend/models" + "github.com/gin-gonic/gin" +) + +type CreateActivityInput struct { + Type string `json:"type" binding:"required"` + Name string `json:"name" binding:"required"` + Link *string `json:"link"` +} + +func (store *Store) GetActivity(ctx *gin.Context) { + var activitys []models.Activity + if err := store.DB.Order("Created_At DESC").Find(&activitys).Error; err != nil { + ctx.JSON(http.StatusInternalServerError, err.Error()) + return + } + ctx.JSON(http.StatusOK, activitys) +} + +func (store *Store) CreateActivity(ctx *gin.Context) { + var input CreateActivityInput + if err := ctx.ShouldBindBodyWithJSON(&input); err != nil { + ctx.JSON(http.StatusBadRequest, err.Error()) + return + } + + activity := models.Activity{Type: input.Type, Name: input.Name, Link: input.Link} + tx := store.DB.Create(&activity) + if tx.Error != nil { + ctx.JSON(http.StatusInternalServerError, tx.Error.Error()) + return + } + + ctx.JSON(http.StatusCreated, activity) +} diff --git a/backend/handlers/handle_favorites.go b/backend/handlers/handle_favorites.go new file mode 100644 index 0000000..b70dceb --- /dev/null +++ b/backend/handlers/handle_favorites.go @@ -0,0 +1,40 @@ +package handlers + +import ( + "net/http" + + "adam-french.co.uk/backend/models" + "github.com/gin-gonic/gin" +) + +type CreateFavoriteInput struct { + Type string `json:"type" binding:"required"` + Name string `json:"name" binding:"required"` + Link *string `json:"link"` +} + +func (store *Store) GetFavorites(ctx *gin.Context) { + var favorites []models.Favorite + if err := store.DB.Order("Created_At DESC").Find(&favorites).Error; err != nil { + ctx.JSON(http.StatusInternalServerError, err.Error()) + return + } + ctx.JSON(http.StatusOK, favorites) +} + +func (store *Store) CreateFavorite(ctx *gin.Context) { + var input CreateFavoriteInput + if err := ctx.ShouldBindBodyWithJSON(&input); err != nil { + ctx.JSON(http.StatusBadRequest, err.Error()) + return + } + + favorite := models.Favorite{Type: input.Type, Name: input.Name, Link: input.Link} + tx := store.DB.Create(&favorite) + if tx.Error != nil { + ctx.JSON(http.StatusInternalServerError, tx.Error.Error()) + return + } + + ctx.JSON(http.StatusCreated, favorite) +} diff --git a/backend/main.go b/backend/main.go index 78a0161..8e103aa 100644 --- a/backend/main.go +++ b/backend/main.go @@ -63,32 +63,47 @@ func main() { protected := r.Group("/", store.AuthMiddlewear) + // FAVORITES + r.GET("/favorites", store.GetFavorites) + protected.POST("/favorites", store.CreateFavorite) + + // ACTIVITIES + r.GET("/activity", store.GetActivity) + protected.POST("/activity", store.CreateActivity) + + // POSTS r.GET("/posts", store.GetPosts) protected.POST("/posts", store.CreatePost) r.GET("/posts/:id", store.GetPost) protected.PUT("/posts/:id", store.UpdatePost) protected.DELETE("/posts/:id", store.DeletePost) + // USERS r.GET("/user/:id", store.GetUser) protected.PUT("/user/:id", store.UpdateUser) protected.DELETE("/user/:id", store.DeleteUser) r.GET("/user", store.GetUsers) r.POST("/user", store.CreateUser) + // AUTH r.POST("/auth/login", store.Login) r.POST("/auth/refresh", store.RefreshToken) r.GET("/auth/check", store.CheckToken) r.POST("/auth/logout", store.Logout) + // SPOTIFY r.GET("/spotify/callback", store.CompleteSpotifyAuth) r.GET("/spotify/listening", store.ListeningTo) r.GET("/spotify/recent", store.RecentlyPlayed) // r.POST("/spotify", store.SendSong) + // MESSAGES r.GET("/ws", store.ConnectWebSocket) + // NOTES r.GET("/notes/*path", store.GetNoteFile) + // HELLO WORLD r.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{"message": "Hello World"}) }) diff --git a/backend/models/models.go b/backend/models/models.go index 8ff210d..4f43ead 100644 --- a/backend/models/models.go +++ b/backend/models/models.go @@ -35,3 +35,23 @@ type Message struct { CreatedAt time.Time `json:"createdAt"` DeletedAt gorm.DeletedAt `gorm:"index" json:"deletedAt"` } + +type Activity struct { + ID uint `gorm:"primarykey" json:"id"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + DeletedAt gorm.DeletedAt `gorm:"index" json:"deletedAt"` + Type string `json:"type"` + Name string `json:"name"` + Link *string `json:"link"` +} + +type Favorite struct { + ID uint `gorm:"primarykey" json:"id"` + CreatedAt time.Time `json:"createdAt"` + UpdatedAt time.Time `json:"updatedAt"` + DeletedAt gorm.DeletedAt `gorm:"index" json:"deletedAt"` + Type string `json:"type"` + Name string `json:"name"` + Link *string `json:"link"` +} diff --git a/backend/services/database.go b/backend/services/database.go index a753fa9..92b61dd 100644 --- a/backend/services/database.go +++ b/backend/services/database.go @@ -31,11 +31,12 @@ func connectToPostgreSQL(config *SQLConfig) (*gorm.DB, error) { } func migrateDatabase(db *gorm.DB) error { - err := db.AutoMigrate(&models.User{}) - if err != nil { - return err - } - err = db.AutoMigrate(&models.Post{}) + err := db.AutoMigrate( + &models.User{}, + &models.Post{}, + &models.Activity{}, + &models.Favorite{}, + ) if err != nil { return err }