GoDown/test/main-songs.go

66 lines
1.4 KiB
Go
Raw Normal View History

2022-04-21 23:44:58 +02:00
package main
import (
"errors"
"net/http"
"github.com/gin-gonic/gin"
)
type media struct {
ID string `json: "id"`
Url string `json: "url"`
Title string `json: "title"`
Author string `json: "author"`
}
var songs = []media{
{ID: "1", Url: "https://www.youtube.com/watch?v=DmeUuoxyt_E", Title: "Rockstars", Author: "Nickelback"},
{ID: "2", Url: "https://www.youtube.com/watch?v=u9Dg-g7t2l4", Title: "The Sound Of Silence", Author: "Disturbed"},
{ID: "3", Url: "https://www.youtube.com/watch?v=uxUATkpMQ8A", Title: "Gives You Hell", Author: "The All-American Rejects"},
}
func getMedia(c *gin.Context) {
c.IndentedJSON(http.StatusOK, songs)
}
func songByid(c *gin.Context) {
id := c.Param("id")
song, err := getMediaByid(id)
if err != nil {
c.IndentedJSON(http.StatusNotFound, gin.H{"message": "Book not found."})
return
}
c.IndentedJSON(http.StatusOK, song)
}
func getMediaByid(id string) (*media, error) {
for i, song := range songs {
if song.ID == id {
return &songs[i], nil
}
}
return nil, errors.New("id not found")
}
func addMedia(c *gin.Context) {
var newSong media
if err := c.BindJSON(&newSong); err != nil {
return
}
songs = append(songs, newSong)
c.IndentedJSON(http.StatusCreated, newSong)
}
func main() {
router := gin.Default()
router.GET("/songs", getMedia)
router.GET("/songs/:id", songByid)
router.POST("/songs", addMedia)
router.Run("127.0.0.1:8000")
}