diff --git a/kontor-gin/internal/api/data.go b/kontor-gin/internal/api/data.go
index 11fdc48..c0cd1dd 100644
--- a/kontor-gin/internal/api/data.go
+++ b/kontor-gin/internal/api/data.go
@@ -1,12 +1,10 @@
package api
import (
- "encoding/json"
"fmt"
"kontor-api-gin/internal/config"
"kontor-api-gin/internal/models"
"log/slog"
- "os"
"resty.dev/v3"
)
@@ -220,21 +218,6 @@ func UpdateData(target config.Server, path string, v any) {
PostJSON(client, target, token, config.Config.ApiVersion, path, v, &result)
}
-func WriteJson(data *ExportData, fileName string) error {
- jsonData, err := json.MarshalIndent(data, "", " ")
- if err != nil {
- slog.Info("JSON MarshalIndent failed", "Error:", err)
- return err
- }
- // Write bytes to file
- err = os.WriteFile(fileName, jsonData, 0644)
- if err != nil {
- slog.Info("Error writing file:", "Error", err)
- return err
- }
- return nil
-}
-
func GetJSON(client *resty.Client, token string, server config.Server, path string, v any) {
url := fmt.Sprintf("%s/%s/%s", server.Url, config.Config.ApiVersion, path)
if config.Verbose > 2 {
diff --git a/kontor-gin/internal/api/file.go b/kontor-gin/internal/api/file.go
new file mode 100644
index 0000000..1f0a758
--- /dev/null
+++ b/kontor-gin/internal/api/file.go
@@ -0,0 +1,22 @@
+package api
+
+import (
+ "encoding/json"
+ "log/slog"
+ "os"
+)
+
+func WriteJson(data *ExportData, fileName string) error {
+ jsonData, err := json.MarshalIndent(data, "", " ")
+ if err != nil {
+ slog.Info("JSON MarshalIndent failed", "Error:", err)
+ return err
+ }
+ // Write bytes to file
+ err = os.WriteFile(fileName, jsonData, 0644)
+ if err != nil {
+ slog.Info("Error writing file:", "Error", err)
+ return err
+ }
+ return nil
+}
diff --git a/kontor-gin/internal/cmd/export.go b/kontor-gin/internal/cmd/export.go
index 21b0685..1e9d7ce 100644
--- a/kontor-gin/internal/cmd/export.go
+++ b/kontor-gin/internal/cmd/export.go
@@ -7,12 +7,9 @@ import (
"log/slog"
"github.com/spf13/cobra"
- "github.com/spf13/viper"
"resty.dev/v3"
)
-var filename string
-
var exportCmd = &cobra.Command{
Use: "export",
Short: "Export Kontor Database",
@@ -28,7 +25,7 @@ var exportCmd = &cobra.Command{
localServer := config.Config.Server[config.ServerName]
export, _ := api.GetData(localServer, config.Config.ApiVersion)
- err := api.WriteJson(export, filename)
+ err := api.WriteJson(export, config.FileName)
if err != nil {
slog.Info("WriteJon failed", "Error:", err)
}
@@ -38,9 +35,4 @@ var exportCmd = &cobra.Command{
func init() {
rootCmd.AddCommand(exportCmd)
-
- exportCmd.PersistentFlags().StringVarP(&filename, "file", "f", "/home/tpeetz/.sync/media/data-gin.json", "Filename to store data")
- viper.BindPFlag("file", exportCmd.PersistentFlags().Lookup("file"))
- exportCmd.PersistentFlags().StringVarP(&config.Config.ApiVersion, "api", "a", "api/v1", "API Version")
- viper.BindPFlag("api", exportCmd.PersistentFlags().Lookup("api"))
}
diff --git a/kontor-gin/internal/cmd/root.go b/kontor-gin/internal/cmd/root.go
index 67e472b..b223706 100644
--- a/kontor-gin/internal/cmd/root.go
+++ b/kontor-gin/internal/cmd/root.go
@@ -35,10 +35,21 @@ func init() {
rootCmd.PersistentFlags().StringVarP(&config.CfgFile, "config", "c", "/home/tpeetz/.config/kli.yaml", "config file")
rootCmd.PersistentFlags().CountVarP(&config.Verbose, "verbose", "v", "increase verbosity (-v, -vv, -vvv)")
viper.BindPFlag("config", rootCmd.PersistentFlags().Lookup("config"))
+
exportCmd.Flags().StringVarP(&config.ServerName, "servername", "s", "local", "Define server to get Kontor items")
updateTitleCmd.Flags().StringVarP(&config.ServerName, "servername", "s", "local", "Define server to get Kontor items")
addLinksCmd.Flags().StringVarP(&config.ServerName, "servername", "s", "local", "Define server to get Kontor items")
+
addLinksCmd.Flags().Var(&config.Mediatype, "mediatype", "MediaType: allowed values are: media, videos, lofi")
+
+ exportCmd.PersistentFlags().StringVarP(&config.FileName, "file", "f", "/home/tpeetz/.sync/media/data-gin.json", "Filename to store data")
+ importCmd.PersistentFlags().StringVarP(&config.FileName, "file", "f", "/home/tpeetz/.sync/media/data-gin.json", "Filename to import data from")
+ viper.BindPFlag("file", exportCmd.PersistentFlags().Lookup("file"))
+
+ exportCmd.PersistentFlags().StringVarP(&config.Config.ApiVersion, "api", "a", "api/v1", "API Version")
+ viper.BindPFlag("api", exportCmd.PersistentFlags().Lookup("api"))
+
viper.BindPFlag("server", exportCmd.PersistentFlags().Lookup("server"))
+
cobra.OnInitialize(config.InitCliConfig)
}
diff --git a/kontor-gin/internal/config/config.go b/kontor-gin/internal/config/config.go
index 763197a..409d836 100644
--- a/kontor-gin/internal/config/config.go
+++ b/kontor-gin/internal/config/config.go
@@ -10,14 +10,25 @@ import (
"github.com/spf13/viper"
)
-type MediaType string
+var (
+ CfgFile string
+ Verbose int
+ Overwrite bool
+ ServerName string
+ Mediatype MediaType
+ Config CliConfig
+ DryRun bool
+ FileName string
+)
const (
mediaTypeMedia MediaType = "media"
mediaTypeVideo MediaType = "video"
- mediaTypeLofi MediaType = "lofi"
+ mediaTypeLofi MediaType = "lofi"
)
+type MediaType string
+
func (e *MediaType) String() string {
return string(*e)
}
@@ -37,23 +48,13 @@ func (e *MediaType) Type() string {
}
func myEnumCompletion(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
- return []string{
- "media\thelp text for media",
- "video\thelp text for video",
- "lofi\thelp text for lofi",
- }, cobra.ShellCompDirectiveDefault
+ return []string{
+ "media\thelp text for media",
+ "video\thelp text for video",
+ "lofi\thelp text for lofi",
+ }, cobra.ShellCompDirectiveDefault
}
-var (
- CfgFile string
- Verbose int
- Overwrite bool
- ServerName string
- Mediatype MediaType
- Config CliConfig
- DryRun bool
-)
-
type Server struct {
Url string `mapstructure:"url"`
Username string `mapstructure:"username"`
diff --git a/kontor-gin/internal/handlers/media_file.go b/kontor-gin/internal/handlers/media_file.go
index b1453cb..9964bbb 100644
--- a/kontor-gin/internal/handlers/media_file.go
+++ b/kontor-gin/internal/handlers/media_file.go
@@ -69,11 +69,65 @@ func (handler *MediaFileHandler) ListPage(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
- c.HTML(http.StatusOK, "mediafiles", gin.H{
- "title": "Kontor MediaFiles",
- "version": "0.4.0",
- "message": "MediaFiles...",
- "mediafiles": files,
- "user": user,
- })
+ data := globals.GetDefaultValues(user, "MediaFiles...")
+ data["title"] = "Kontor MediaFiles"
+ data["mediafiles"] = files
+ c.HTML(http.StatusOK, "mediafiles", data)
+}
+
+func (handler *MediaFileHandler) EditPage(c *gin.Context) {
+ session := sessions.Default(c)
+ user := session.Get(globals.UserKey)
+ id := c.Param("id")
+ logger := slog.Get(c)
+ media_file, err := handler.Service.Get(c.Request.Context(), id)
+ if err != nil {
+ logger.Info("MediaLoFiHandler#EditPage", "error", err.Error())
+ c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
+ return
+ }
+ logger.Info("MediaLoFiHandler#EditPage", "media_file", media_file)
+ data := globals.GetDefaultValues(user, "MediaFile Details...")
+ data["lofi"] = media_file
+ c.HTML(http.StatusOK, "lofi_detail", data)
+}
+
+func (handler *MediaFileHandler) UpdatePage(c *gin.Context) {
+ session := sessions.Default(c)
+ user := session.Get(globals.UserKey)
+ id := c.Param("id")
+ logger := slog.Get(c)
+ media_file, err := handler.Service.Get(c.Request.Context(), id)
+ if err != nil {
+ logger.Info("MediaFileHandler#UpdatePage", "error", err.Error())
+ c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
+ return
+ }
+ var form models.MediaFileForm
+ if err := c.ShouldBind(&form); err != nil {
+ logger.Info("MediaFileHandler#UpdatePage", "error", err.Error())
+ data := globals.GetDefaultValues(user, "MediaFile Details...")
+ data["Form"] = form
+ data["Errors"] = err.Error()
+ c.HTML(http.StatusBadRequest, "lofi_detail", data)
+ return
+ }
+ logger.Info("MediaFileHandler#UpdatePage", "media_file", media_file)
+ //handler.Service.Update(c.Request.Context(), form.ConvertFormToMediaFileDTO())
+ c.Redirect(http.StatusFound, "web/media-files")
+}
+
+func (handler *MediaFileHandler) DeletePage(c *gin.Context) {
+ //session := sessions.Default(c)
+ //user := session.Get(globals.UserKey)
+ id := c.Param("id")
+ logger := slog.Get(c)
+ err := handler.Service.Delete(c.Request.Context(), id)
+ if err != nil {
+ logger.Info("MediaFileHandler#DeletePage", "error", err.Error())
+ c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
+ return
+ }
+ logger.Info("MediaFileHandler#DeletePage", "lofi", id)
+ c.Redirect(http.StatusFound, "web/media-files")
}
diff --git a/kontor-gin/internal/handlers/mediavideo.go b/kontor-gin/internal/handlers/mediavideo.go
index c5eb338..21d0612 100644
--- a/kontor-gin/internal/handlers/mediavideo.go
+++ b/kontor-gin/internal/handlers/mediavideo.go
@@ -43,7 +43,7 @@ func (handler *MediaVideoHandler) ListPage(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
- logger.Info("MediaLoFiHandler#ListPage", "videos count", len(videos))
+ logger.Info("MediaVideoHandler#ListPage", "videos count", len(videos))
data := globals.GetDefaultValues(user, "MediaVideos...")
data["title"] = "Kontor MediaVideos"
data["mediavideos"] = videos
diff --git a/kontor-gin/internal/middleware/request_id.go b/kontor-gin/internal/middleware/request_id.go
index 0429547..3019bc8 100644
--- a/kontor-gin/internal/middleware/request_id.go
+++ b/kontor-gin/internal/middleware/request_id.go
@@ -16,7 +16,7 @@ func RequestID(skipPaths []string) gin.HandlerFunc {
id = uuid.NewString()
}
if len(skipPaths) > 0 && !slices.Contains(skipPaths, c.Request.URL.Path) {
- logger.Info("RequestID", "id", id)
+ logger.Info("RequestID", "id", id, "path", c.Request.URL.Path)
}
c.Set("request_id", id)
c.Writer.Header().Set("X-Request-ID", id)
diff --git a/kontor-gin/internal/models/media_file.go b/kontor-gin/internal/models/media_file.go
index 9baf6bc..fbfc850 100644
--- a/kontor-gin/internal/models/media_file.go
+++ b/kontor-gin/internal/models/media_file.go
@@ -30,6 +30,16 @@ type MediaFileAdd struct {
Url string `json:"url"`
}
+type MediaFileForm struct {
+ Title string `form:"title" binding:"required"`
+ Url string `form:"url" binding:"required"`
+}
+
+func (form *MediaFileForm) ConvertFormToMediaFileDTO() MediaFileDTO {
+ media_file := MediaFileDTO{}
+ return media_file
+}
+
type MediaFileDTO struct {
ID string `json:"id" binding:"required"`
CreatedAt helpers.KontorTime `json:"created_date"`
diff --git a/kontor-gin/internal/router/router.go b/kontor-gin/internal/router/router.go
index 1ecfe16..65babbe 100644
--- a/kontor-gin/internal/router/router.go
+++ b/kontor-gin/internal/router/router.go
@@ -63,6 +63,8 @@ func New(admin *handlers.AdminHandler, bookshelf *handlers.BookshelfHandler, com
m.POST("/actors/:id/edit", media.MediaActorHandler.UpdatePage)
m.GET("/articles", media.MediaFileHandler.ListPage)
m.GET("/media-files", media.MediaFileHandler.ListPage)
+ m.GET("/media-files/:id", media.MediaFileHandler.EditPage)
+ m.POST("/media-files/:id", media.MediaFileHandler.UpdatePage)
m.GET("/media-videos", media.MediaVideoHandler.ListPage)
m.GET("/media-lofis", media.MediaLoFiHandler.ListPage)
m.GET("/media-lofis/:id/edit", media.MediaLoFiHandler.EditPage)
diff --git a/kontor-gin/templates/pages/mediavideos.html b/kontor-gin/templates/pages/mediavideos.html
new file mode 100644
index 0000000..88ce5e8
--- /dev/null
+++ b/kontor-gin/templates/pages/mediavideos.html
@@ -0,0 +1,71 @@
+{{ define "mediavideos" }}
+
+
+ {{ template "head" . }}
+
+
+ {{ template "navbar" . }}
+
+
+
+
+ {{ template "footer" . }}
+
+
+{{ end }}