Newer
Older
//
// tank
//
// Import and Playlist Daemon for autoradio project
//
//
// Copyright (C) 2017-2019 Christian Pointner <equinox@helsinki.at>
//
// This file is part of tank.
//
// tank is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// tank is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with tank. If not, see <http://www.gnu.org/licenses/>.
//
package v1
import (
"gitlab.servus.at/autoradio/tank/auth"
"gitlab.servus.at/autoradio/tank/importer"
"gitlab.servus.at/autoradio/tank/store"
infoLog *log.Logger
errLog *log.Logger
dbgLog *log.Logger
}
func NewAPI(st *store.Store, im *importer.Importer, infoLog, errLog, dbgLog *log.Logger) (api *API) {
if infoLog == nil {
infoLog = log.New(ioutil.Discard, "", 0)
}
if errLog == nil {
errLog = log.New(ioutil.Discard, "", 0)
}
if dbgLog == nil {
dbgLog = log.New(ioutil.Discard, "", 0)
}
api = &API{}
api.store = st
api.importer = im
api.infoLog = infoLog
api.errLog = errLog
api.dbgLog = dbgLog
return
}
func InstallHTTPHandler(r *gin.RouterGroup, st *store.Store, im *importer.Importer, infoLog, errLog, dbgLog *log.Logger) {
api := NewAPI(st, im, infoLog, errLog, dbgLog)
{
shows.GET("", api.ListShows)
shows.POST(":show-id", api.CreateShow)
shows.GET(":show-id/imports", api.ListImportsOfShow)
// Show/Files
files := shows.Group(":show-id/files")
{
files.GET("", api.ListFilesOfShow)
files.POST("", api.CreateFileForShow)
files.GET(":file-id", api.ReadFileOfShow)
files.PATCH(":file-id", api.PatchFileOfShow)
files.DELETE(":file-id", api.DeleteFileOfShow)
files.GET(":file-id/usage", api.ReadUsageOfFile)
files.GET(":file-id/import", api.ReadImportOfFile)
files.DELETE(":file-id/import", api.CancelImportOfFile)
// TODO: distignuish between flow.js and simple upload using the content type?!?
files.PUT(":file-id/upload", api.UploadFileSimple)
files.POST(":file-id/upload", api.UploadFileFlowJS)
files.GET(":file-id/upload", api.TestFileFlowJS)
}
// Show/Playlists
playlists := shows.Group(":show-id/playlists")
{
playlists.GET("", api.ListPlaylistsOfShow)
playlists.POST("", api.CreatePlaylistForShow)
playlists.GET(":playlist-id", api.ReadPlaylistOfShow)
playlists.PUT(":playlist-id", api.UpdatePlaylistOfShow)
playlists.DELETE(":playlist-id", api.DeletePlaylistOfShow)
}
}