implement command update-title
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s

This commit is contained in:
Thomas Peetz
2026-10-12 17:37:06 +02:00
parent f5e9cbc423
commit 4c603a8eff
8 changed files with 145 additions and 31 deletions
+34 -28
View File
@@ -115,18 +115,20 @@ var Registry map[string]any
func GetToken(client *resty.Client, server config.Server) (token string) {
var login LoginResponse
_, err := client.R().
SetBody(Login{
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())
body := Login{
Email: server.Username,
Password: server.Password,
}
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 {
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) {
var login LoginResponse
client := resty.New()
client.SetLoggerWarnLevel(true)
PostJSON(client, server, "api/login", &login)
token := GetToken(client, server)
for path, value := range Registry {
GetJSON(client, login.Token, server, path, value)
GetJSON(client, token, server, path, value)
}
export := ExportData{
Sport: Sports,
@@ -205,11 +205,19 @@ func GetJSON(client *resty.Client, token string, server config.Server, path stri
if config.Verbose > 2 {
slog.Info("GetJSON", "url", url)
}
_, err := client.R().
SetAuthToken(token).
SetHeader("Accept", "application/json").
SetResult(v).
Get(url)
var err error
if token == "" {
_, err = client.R().
SetHeader("Accept", "application/json").
SetResult(v).
Get(url)
} else {
_, err = client.R().
SetAuthToken(token).
SetHeader("Accept", "application/json").
SetResult(v).
Get(url)
}
if err != nil {
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) {
url := fmt.Sprintf("%s/%s", server.Url, path)
func PostJSON(client *resty.Client, server config.Server, token string, apiVersion string, path string, body any, v any) {
url := fmt.Sprintf("%s/%s/%s", server.Url, apiVersion, path)
if config.Verbose > 2 {
slog.Info("PostJSON", "url", url)
}
_, err := client.R().
SetBody(Login{
Email: server.Username,
Password: server.Password,
}).
response, err := client.R().
SetAuthToken(token).
SetBody(body).
SetHeader("Accept", "application/json").
SetResult(v).
Post(url)
@@ -235,7 +241,7 @@ func PostJSON(client *resty.Client, server config.Server, path string, v any) {
slog.Info("PostJSON", "error", err.Error())
}
if config.Verbose > 2 {
slog.Info(url, "token", v)
slog.Info("PostJSON", "response", response)
}
}
+14 -1
View File
@@ -1,8 +1,11 @@
package cmd
import (
"fmt"
"kontor-api-gin/internal/api"
"kontor-api-gin/internal/config"
"kontor-api-gin/internal/helpers"
"kontor-api-gin/internal/models"
"log/slog"
"github.com/spf13/cobra"
@@ -23,7 +26,17 @@ var updateTitleCmd = &cobra.Command{
api.GetJSON(client, token, localServer, "media/lofis", &api.Medialofis)
for _, lofi := range api.Medialofis {
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"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/slog"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
@@ -58,6 +59,22 @@ func (handler *MediaLoFiHandler) Add(c *gin.Context) {
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) {
id := c.Param("id")
err := handler.Service.Delete(c.Request.Context(), id)
+47
View File
@@ -1,7 +1,11 @@
package helpers
import (
"encoding/json"
"fmt"
"io/ioutil"
"log/slog"
"net/http"
"net/url"
)
@@ -20,3 +24,46 @@ func StripUrl(webLink string, keepParam string) string {
u.RawQuery = values.Encode()
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
}
+11
View File
@@ -20,6 +20,17 @@ type MediaLoFi struct {
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 {
return "media_lofi"
}
@@ -78,6 +78,20 @@ func (repository *MediaLoFiRepository) Add(context context.Context, url string)
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 {
var actor = models.MediaLoFi{ID: id}
slog.Info("MediaLoFiRepository#Delete", "id", id)
+3 -2
View File
@@ -101,14 +101,15 @@ func New(admin *handlers.AdminHandler, bookshelf *handlers.BookshelfHandler, com
secured.GET("comics/storyarcs", comics.StoryArcHandler.List)
secured.GET("comics/comicworks", comics.ComicworkHandler.List)
secured.GET("comics/issueworks", comics.IssueworkHandler.List)
mediaGroup := secured.Group("/media")
mediaGroup := secured.Group("media")
mediaGroup.GET("/files", media.MediaFileHandler.List)
mediaGroup.POST("/files", media.MediaFileHandler.Add)
mediaGroup.GET("/videos", media.MediaVideoHandler.List)
mediaGroup.GET("/lofis", media.MediaLoFiHandler.List)
mediaGroup.POST("/lofis", media.MediaLoFiHandler.Add)
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.POST("/actors", media.MediaActorHandler.Add)
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)
}
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 {
slog.Info("MediaLoFiService#Delete")
return service.repository.Delete(context, id)