This commit is contained in:
@@ -115,18 +115,20 @@ var Registry map[string]any
|
|||||||
|
|
||||||
func GetToken(client *resty.Client, server config.Server) (token string) {
|
func GetToken(client *resty.Client, server config.Server) (token string) {
|
||||||
var login LoginResponse
|
var login LoginResponse
|
||||||
|
body := Login{
|
||||||
_, err := client.R().
|
Email: server.Username,
|
||||||
SetBody(Login{
|
Password: server.Password,
|
||||||
Email: server.Username,
|
|
||||||
Password: server.Password,
|
|
||||||
}).
|
|
||||||
SetHeader("Accept", "application/json").
|
|
||||||
SetResult(&login).
|
|
||||||
Post(fmt.Sprintf("%s/api/login", server.Url))
|
|
||||||
if err != nil {
|
|
||||||
slog.Info("Health", "error", err.Error())
|
|
||||||
}
|
}
|
||||||
|
PostJSON(client, server, "", "api", "login", body, &login)
|
||||||
|
|
||||||
|
// _, err := client.R().
|
||||||
|
// SetBody(body).
|
||||||
|
// SetHeader("Accept", "application/json").
|
||||||
|
// SetResult(&login).
|
||||||
|
// Post(fmt.Sprintf("%s/api/login", server.Url))
|
||||||
|
// if err != nil {
|
||||||
|
// slog.Info("Health", "error", err.Error())
|
||||||
|
// }
|
||||||
if config.Verbose > 2 {
|
if config.Verbose > 2 {
|
||||||
slog.Info("login", "token", login.Token)
|
slog.Info("login", "token", login.Token)
|
||||||
}
|
}
|
||||||
@@ -134,14 +136,12 @@ func GetToken(client *resty.Client, server config.Server) (token string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetData(server config.Server, apiVersion string) (data *ExportData, err error) {
|
func GetData(server config.Server, apiVersion string) (data *ExportData, err error) {
|
||||||
var login LoginResponse
|
|
||||||
|
|
||||||
client := resty.New()
|
client := resty.New()
|
||||||
client.SetLoggerWarnLevel(true)
|
client.SetLoggerWarnLevel(true)
|
||||||
PostJSON(client, server, "api/login", &login)
|
token := GetToken(client, server)
|
||||||
|
|
||||||
for path, value := range Registry {
|
for path, value := range Registry {
|
||||||
GetJSON(client, login.Token, server, path, value)
|
GetJSON(client, token, server, path, value)
|
||||||
}
|
}
|
||||||
export := ExportData{
|
export := ExportData{
|
||||||
Sport: Sports,
|
Sport: Sports,
|
||||||
@@ -205,11 +205,19 @@ func GetJSON(client *resty.Client, token string, server config.Server, path stri
|
|||||||
if config.Verbose > 2 {
|
if config.Verbose > 2 {
|
||||||
slog.Info("GetJSON", "url", url)
|
slog.Info("GetJSON", "url", url)
|
||||||
}
|
}
|
||||||
_, err := client.R().
|
var err error
|
||||||
SetAuthToken(token).
|
if token == "" {
|
||||||
SetHeader("Accept", "application/json").
|
_, err = client.R().
|
||||||
SetResult(v).
|
SetHeader("Accept", "application/json").
|
||||||
Get(url)
|
SetResult(v).
|
||||||
|
Get(url)
|
||||||
|
} else {
|
||||||
|
_, err = client.R().
|
||||||
|
SetAuthToken(token).
|
||||||
|
SetHeader("Accept", "application/json").
|
||||||
|
SetResult(v).
|
||||||
|
Get(url)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Info(url, "error", err.Error())
|
slog.Info(url, "error", err.Error())
|
||||||
}
|
}
|
||||||
@@ -218,16 +226,14 @@ func GetJSON(client *resty.Client, token string, server config.Server, path stri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func PostJSON(client *resty.Client, server config.Server, path string, v any) {
|
func PostJSON(client *resty.Client, server config.Server, token string, apiVersion string, path string, body any, v any) {
|
||||||
url := fmt.Sprintf("%s/%s", server.Url, path)
|
url := fmt.Sprintf("%s/%s/%s", server.Url, apiVersion, path)
|
||||||
if config.Verbose > 2 {
|
if config.Verbose > 2 {
|
||||||
slog.Info("PostJSON", "url", url)
|
slog.Info("PostJSON", "url", url)
|
||||||
}
|
}
|
||||||
_, err := client.R().
|
response, err := client.R().
|
||||||
SetBody(Login{
|
SetAuthToken(token).
|
||||||
Email: server.Username,
|
SetBody(body).
|
||||||
Password: server.Password,
|
|
||||||
}).
|
|
||||||
SetHeader("Accept", "application/json").
|
SetHeader("Accept", "application/json").
|
||||||
SetResult(v).
|
SetResult(v).
|
||||||
Post(url)
|
Post(url)
|
||||||
@@ -235,7 +241,7 @@ func PostJSON(client *resty.Client, server config.Server, path string, v any) {
|
|||||||
slog.Info("PostJSON", "error", err.Error())
|
slog.Info("PostJSON", "error", err.Error())
|
||||||
}
|
}
|
||||||
if config.Verbose > 2 {
|
if config.Verbose > 2 {
|
||||||
slog.Info(url, "token", v)
|
slog.Info("PostJSON", "response", response)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"kontor-api-gin/internal/api"
|
"kontor-api-gin/internal/api"
|
||||||
"kontor-api-gin/internal/config"
|
"kontor-api-gin/internal/config"
|
||||||
|
"kontor-api-gin/internal/helpers"
|
||||||
|
"kontor-api-gin/internal/models"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
@@ -23,7 +26,17 @@ var updateTitleCmd = &cobra.Command{
|
|||||||
api.GetJSON(client, token, localServer, "media/lofis", &api.Medialofis)
|
api.GetJSON(client, token, localServer, "media/lofis", &api.Medialofis)
|
||||||
for _, lofi := range api.Medialofis {
|
for _, lofi := range api.Medialofis {
|
||||||
if lofi.Review {
|
if lofi.Review {
|
||||||
slog.Info("get title for Url", "url", lofi.WebLink)
|
title, err := helpers.GetVideoTitle(lofi.WebLink)
|
||||||
|
var updated models.MediaLoFiDTO
|
||||||
|
if err != nil {
|
||||||
|
slog.Info("get title for Url", "url", lofi.WebLink, "error", err.Error())
|
||||||
|
} else {
|
||||||
|
slog.Info("get title for Url", "url", lofi.WebLink, "title", title)
|
||||||
|
lofi.Title = title
|
||||||
|
lofi.Review = false
|
||||||
|
api.PostJSON(client, localServer, token, config.Config.ApiVersion, fmt.Sprintf("media/lofis/%s", lofi.ID), lofi, &updated)
|
||||||
|
slog.Info("MediaLoi updated", "MediaLoFi", updated)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-contrib/sessions"
|
"github.com/gin-contrib/sessions"
|
||||||
|
"github.com/gin-contrib/slog"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
@@ -58,6 +59,22 @@ func (handler *MediaLoFiHandler) Add(c *gin.Context) {
|
|||||||
c.JSON(http.StatusOK, lofi)
|
c.JSON(http.StatusOK, lofi)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (handler *MediaLoFiHandler) Update(c *gin.Context) {
|
||||||
|
var input models.MediaLoFiDTO
|
||||||
|
|
||||||
|
if err := c.ShouldBindJSON(&input); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
lofi, err := handler.Service.Update(c.Request.Context(), input)
|
||||||
|
if err != nil {
|
||||||
|
logger := slog.Get(c)
|
||||||
|
logger.Info("MediaLoFiHandler#Update", "error", err.Error())
|
||||||
|
c.JSON(http.StatusNotFound, gin.H{"error": "lofi not updated"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, lofi)
|
||||||
|
}
|
||||||
func (handler *MediaLoFiHandler) Delete(c *gin.Context) {
|
func (handler *MediaLoFiHandler) Delete(c *gin.Context) {
|
||||||
id := c.Param("id")
|
id := c.Param("id")
|
||||||
err := handler.Service.Delete(c.Request.Context(), id)
|
err := handler.Service.Delete(c.Request.Context(), id)
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
package helpers
|
package helpers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -20,3 +24,46 @@ func StripUrl(webLink string, keepParam string) string {
|
|||||||
u.RawQuery = values.Encode()
|
u.RawQuery = values.Encode()
|
||||||
return u.String()
|
return u.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetParam(webLink string, param string) string {
|
||||||
|
u, err := url.Parse(webLink)
|
||||||
|
if err != nil {
|
||||||
|
slog.Info("StripUrl", "error", err)
|
||||||
|
return webLink
|
||||||
|
}
|
||||||
|
values := u.Query()
|
||||||
|
for key := range values {
|
||||||
|
if key == param {
|
||||||
|
return values.Get(key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
type OEmbedResponse struct {
|
||||||
|
Title string `json:"title"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetVideoTitle(videoUrl string) (string, error) {
|
||||||
|
videoID := GetParam(videoUrl, "v")
|
||||||
|
// Construct the oEmbed URL
|
||||||
|
url := fmt.Sprintf("https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=%s&format=json", videoID)
|
||||||
|
|
||||||
|
resp, err := http.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
var data OEmbedResponse
|
||||||
|
if err := json.Unmarshal(body, &data); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.Title, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -20,6 +20,17 @@ type MediaLoFi struct {
|
|||||||
FileName string `gorm:"column:file_name" json:"file_name"`
|
FileName string `gorm:"column:file_name" json:"file_name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (media_lofi *MediaLoFi) Update(update MediaLoFiDTO) {
|
||||||
|
media_lofi.CreatedAt = update.CreatedAt.Time
|
||||||
|
media_lofi.UpdatedAt = time.Now()
|
||||||
|
media_lofi.Version = media_lofi.Version + 1
|
||||||
|
media_lofi.WebLink = update.WebLink
|
||||||
|
media_lofi.Review = update.Review
|
||||||
|
media_lofi.ShouldDownload = update.ShouldDownload
|
||||||
|
media_lofi.Title = update.Title
|
||||||
|
media_lofi.FileName = update.FileName
|
||||||
|
}
|
||||||
|
|
||||||
func (media_lofi *MediaLoFi) TableName() string {
|
func (media_lofi *MediaLoFi) TableName() string {
|
||||||
return "media_lofi"
|
return "media_lofi"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,6 +78,20 @@ func (repository *MediaLoFiRepository) Add(context context.Context, url string)
|
|||||||
return nil, fmt.Errorf("MediaLoFiRepository#Add unknown error")
|
return nil, fmt.Errorf("MediaLoFiRepository#Add unknown error")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (repository *MediaLoFiRepository) Update(context context.Context, update models.MediaLoFiDTO) (*models.MediaLoFi, error) {
|
||||||
|
slog.Info("MediaLoFiRepository#Update", "lofi", update)
|
||||||
|
var lofi = models.MediaLoFi{ID: update.ID}
|
||||||
|
slog.Info("MediaLoFiRepository#Update", "id", update.ID)
|
||||||
|
result := repository.db.First(&lofi)
|
||||||
|
if result.Error != nil {
|
||||||
|
slog.Info("MediaLoFiRepository#Update", "error", result.Error.Error())
|
||||||
|
return nil, result.Error
|
||||||
|
}
|
||||||
|
lofi.Update(update)
|
||||||
|
repository.db.Save(&lofi)
|
||||||
|
return &lofi, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (repository *MediaLoFiRepository) Delete(context context.Context, id string) error {
|
func (repository *MediaLoFiRepository) Delete(context context.Context, id string) error {
|
||||||
var actor = models.MediaLoFi{ID: id}
|
var actor = models.MediaLoFi{ID: id}
|
||||||
slog.Info("MediaLoFiRepository#Delete", "id", id)
|
slog.Info("MediaLoFiRepository#Delete", "id", id)
|
||||||
|
|||||||
@@ -101,14 +101,15 @@ func New(admin *handlers.AdminHandler, bookshelf *handlers.BookshelfHandler, com
|
|||||||
secured.GET("comics/storyarcs", comics.StoryArcHandler.List)
|
secured.GET("comics/storyarcs", comics.StoryArcHandler.List)
|
||||||
secured.GET("comics/comicworks", comics.ComicworkHandler.List)
|
secured.GET("comics/comicworks", comics.ComicworkHandler.List)
|
||||||
secured.GET("comics/issueworks", comics.IssueworkHandler.List)
|
secured.GET("comics/issueworks", comics.IssueworkHandler.List)
|
||||||
mediaGroup := secured.Group("/media")
|
mediaGroup := secured.Group("media")
|
||||||
mediaGroup.GET("/files", media.MediaFileHandler.List)
|
mediaGroup.GET("/files", media.MediaFileHandler.List)
|
||||||
mediaGroup.POST("/files", media.MediaFileHandler.Add)
|
mediaGroup.POST("/files", media.MediaFileHandler.Add)
|
||||||
mediaGroup.GET("/videos", media.MediaVideoHandler.List)
|
mediaGroup.GET("/videos", media.MediaVideoHandler.List)
|
||||||
mediaGroup.GET("/lofis", media.MediaLoFiHandler.List)
|
mediaGroup.GET("/lofis", media.MediaLoFiHandler.List)
|
||||||
mediaGroup.POST("/lofis", media.MediaLoFiHandler.Add)
|
mediaGroup.POST("/lofis", media.MediaLoFiHandler.Add)
|
||||||
mediaGroup.GET("/lofis/:id", media.MediaLoFiHandler.Get)
|
mediaGroup.GET("/lofis/:id", media.MediaLoFiHandler.Get)
|
||||||
mediaGroup.DELETE("/lofis", media.MediaLoFiHandler.Delete)
|
mediaGroup.POST("/lofis/:id", media.MediaLoFiHandler.Update)
|
||||||
|
mediaGroup.DELETE("/lofis/:id", media.MediaLoFiHandler.Delete)
|
||||||
mediaGroup.GET("/actors", media.MediaActorHandler.List)
|
mediaGroup.GET("/actors", media.MediaActorHandler.List)
|
||||||
mediaGroup.POST("/actors", media.MediaActorHandler.Add)
|
mediaGroup.POST("/actors", media.MediaActorHandler.Add)
|
||||||
mediaGroup.GET("/actors/:id", media.MediaActorHandler.Get)
|
mediaGroup.GET("/actors/:id", media.MediaActorHandler.Get)
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ func (service *MediaLoFiService) Add(context context.Context, url string) (*mode
|
|||||||
return service.repository.Add(context, url)
|
return service.repository.Add(context, url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (service *MediaLoFiService) Update(context context.Context, lofi models.MediaLoFiDTO) (*models.MediaLoFi, error) {
|
||||||
|
slog.Info("MediaLoFiService#Update")
|
||||||
|
return service.repository.Update(context, lofi)
|
||||||
|
}
|
||||||
|
|
||||||
func (service *MediaLoFiService) Delete(context context.Context, id string) error {
|
func (service *MediaLoFiService) Delete(context context.Context, id string) error {
|
||||||
slog.Info("MediaLoFiService#Delete")
|
slog.Info("MediaLoFiService#Delete")
|
||||||
return service.repository.Delete(context, id)
|
return service.repository.Delete(context, id)
|
||||||
|
|||||||
Reference in New Issue
Block a user