add MediaMusic
This commit is contained in:
@@ -32,3 +32,27 @@ class MediaActorModel(BaseModel):
|
|||||||
version: int
|
version: int
|
||||||
name: Optional[str]
|
name: Optional[str]
|
||||||
url: Optional[str]
|
url: Optional[str]
|
||||||
|
|
||||||
|
def actor_to_model(model: MediaActorResponse, media_actor: MediaActor) -> MediaActor:
|
||||||
|
"""
|
||||||
|
Set data of response to model
|
||||||
|
"""
|
||||||
|
media_actor.file_name = model.file_name
|
||||||
|
if model.url is not None:
|
||||||
|
media_actor.url = model.url
|
||||||
|
else:
|
||||||
|
media_actor.url = ""
|
||||||
|
media_actor.last_modified_date = datetime.now()
|
||||||
|
return media_actor
|
||||||
|
|
||||||
|
|
||||||
|
def actor_to_response(media_actor: MediaActor) -> MediaActorResponse:
|
||||||
|
response: MediaActorResponse = MediaActorResponse(
|
||||||
|
id=media_actor.id,
|
||||||
|
created_date=media_actor.created_date,
|
||||||
|
last_modified_date=media_actor.last_modified_date,
|
||||||
|
version=media_actor.version,
|
||||||
|
name=str(media_actor.name),
|
||||||
|
url=str(media_actor.url),
|
||||||
|
)
|
||||||
|
return response
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ type ExportData struct {
|
|||||||
MediaArticle []models.MediaArticleDTO `json:"media_article"`
|
MediaArticle []models.MediaArticleDTO `json:"media_article"`
|
||||||
MediaVideo []models.MediaVideoDTO `json:"media_video"`
|
MediaVideo []models.MediaVideoDTO `json:"media_video"`
|
||||||
MediaLoFi models.MediaLoFiDTOList `json:"media_lofi"`
|
MediaLoFi models.MediaLoFiDTOList `json:"media_lofi"`
|
||||||
|
MediaMusic models.MediaMusicDTOList `json:"media_music"`
|
||||||
MediaFile []models.MediaFileDTO `json:"media_file"`
|
MediaFile []models.MediaFileDTO `json:"media_file"`
|
||||||
MediaActor []models.MediaActorDTO `json:"media_actor"`
|
MediaActor []models.MediaActorDTO `json:"media_actor"`
|
||||||
MediaActorFile []models.MediaActorFileDTO `json:"media_actor_file"`
|
MediaActorFile []models.MediaActorFileDTO `json:"media_actor_file"`
|
||||||
@@ -101,6 +102,7 @@ var (
|
|||||||
Mediaactorfiles []models.MediaActorFileDTO
|
Mediaactorfiles []models.MediaActorFileDTO
|
||||||
Mediafiles []models.MediaFileDTO
|
Mediafiles []models.MediaFileDTO
|
||||||
Medialofis models.MediaLoFiDTOList
|
Medialofis models.MediaLoFiDTOList
|
||||||
|
MediaMusics models.MediaMusicDTOList
|
||||||
Profiles []models.ProfileDTO
|
Profiles []models.ProfileDTO
|
||||||
Permissions []models.PermissionDTO
|
Permissions []models.PermissionDTO
|
||||||
Assignments []models.AssignmentDTO
|
Assignments []models.AssignmentDTO
|
||||||
@@ -172,6 +174,7 @@ func GetData(server config.Server, apiVersion string) (data *ExportData, err err
|
|||||||
MediaActorFile: Mediaactorfiles,
|
MediaActorFile: Mediaactorfiles,
|
||||||
MediaFile: Mediafiles,
|
MediaFile: Mediafiles,
|
||||||
MediaLoFi: Medialofis,
|
MediaLoFi: Medialofis,
|
||||||
|
MediaMusic: MediaMusics,
|
||||||
Profile: Profiles,
|
Profile: Profiles,
|
||||||
Permission: Permissions,
|
Permission: Permissions,
|
||||||
Assignment: Assignments,
|
Assignment: Assignments,
|
||||||
@@ -184,6 +187,7 @@ func GetData(server config.Server, apiVersion string) (data *ExportData, err err
|
|||||||
}
|
}
|
||||||
|
|
||||||
func DeleteData(target config.Server, path, id string) {
|
func DeleteData(target config.Server, path, id string) {
|
||||||
|
slog.Info("DeleteData")
|
||||||
url := fmt.Sprintf("%s/%s/%s/%s", target.Url, config.Config.ApiVersion, path, id)
|
url := fmt.Sprintf("%s/%s/%s/%s", target.Url, config.Config.ApiVersion, path, id)
|
||||||
client := resty.New()
|
client := resty.New()
|
||||||
client.SetLoggerWarnLevel(true)
|
client.SetLoggerWarnLevel(true)
|
||||||
@@ -295,6 +299,7 @@ func init() {
|
|||||||
"media/files": &Mediafiles,
|
"media/files": &Mediafiles,
|
||||||
"media/actorfiles": &Mediaactorfiles,
|
"media/actorfiles": &Mediaactorfiles,
|
||||||
"media/lofis": &Medialofis,
|
"media/lofis": &Medialofis,
|
||||||
|
"media/musics": &MediaMusics,
|
||||||
"user/profiles": &Profiles,
|
"user/profiles": &Profiles,
|
||||||
"user/permissions": &Permissions,
|
"user/permissions": &Permissions,
|
||||||
"user/assignments": &Assignments,
|
"user/assignments": &Assignments,
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ type MediaHandler struct {
|
|||||||
MediaActorHandler *MediaActorHandler
|
MediaActorHandler *MediaActorHandler
|
||||||
MediaFileHandler *MediaFileHandler
|
MediaFileHandler *MediaFileHandler
|
||||||
MediaLoFiHandler *MediaLoFiHandler
|
MediaLoFiHandler *MediaLoFiHandler
|
||||||
|
MediaMusicHandler *MediaMusicHandler
|
||||||
MediaVideoHandler *MediaVideoHandler
|
MediaVideoHandler *MediaVideoHandler
|
||||||
MediaActorFileHandler *MediaActorFileHandler
|
MediaActorFileHandler *MediaActorFileHandler
|
||||||
}
|
}
|
||||||
@@ -17,6 +18,7 @@ func NewMediaHandler(db *gorm.DB) *MediaHandler {
|
|||||||
MediaActorHandler: NewMediaActorHandler(db),
|
MediaActorHandler: NewMediaActorHandler(db),
|
||||||
MediaFileHandler: NewMediaFileHandler(db),
|
MediaFileHandler: NewMediaFileHandler(db),
|
||||||
MediaLoFiHandler: NewMediaLoFiHandler(db),
|
MediaLoFiHandler: NewMediaLoFiHandler(db),
|
||||||
|
MediaMusicHandler: NewMediaMusicHandler(db),
|
||||||
MediaVideoHandler: NewMediaVideoHandler(db),
|
MediaVideoHandler: NewMediaVideoHandler(db),
|
||||||
MediaActorFileHandler: NewMediaActorFileHandler(db),
|
MediaActorFileHandler: NewMediaActorFileHandler(db),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,183 @@
|
|||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"kontor-api-gin/internal/globals"
|
||||||
|
"kontor-api-gin/internal/models"
|
||||||
|
"kontor-api-gin/internal/repository"
|
||||||
|
"kontor-api-gin/internal/service"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-contrib/sessions"
|
||||||
|
"github.com/gin-contrib/slog"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MediaMusicHandler struct {
|
||||||
|
Service *service.MediaMusicService
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMediaMusicHandler(db *gorm.DB) *MediaMusicHandler {
|
||||||
|
mediaMusicHandler := &MediaMusicHandler{
|
||||||
|
Service: service.NewMediaMusicService(repository.NewMediaMusicRepository(db)),
|
||||||
|
}
|
||||||
|
return mediaMusicHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handler *MediaMusicHandler) List(c *gin.Context) {
|
||||||
|
musics, err := handler.Service.List(c.Request.Context())
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
dtos := models.ConvertMediaMusicsToDtos(musics)
|
||||||
|
c.JSON(http.StatusOK, dtos)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handler *MediaMusicHandler) Get(c *gin.Context) {
|
||||||
|
id := c.Param("id")
|
||||||
|
music, err := handler.Service.Get(c.Request.Context(), id)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusNotFound, gin.H{"error": "MediaMusic not found"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, music)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handler *MediaMusicHandler) Add(c *gin.Context) {
|
||||||
|
var input models.MediaLofiAdd
|
||||||
|
|
||||||
|
if err := c.ShouldBindJSON(&input); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
music, err := handler.Service.Add(c.Request.Context(), input.Url)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusNotFound, gin.H{"error": "MediaMusic not added"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, music)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handler *MediaMusicHandler) Update(c *gin.Context) {
|
||||||
|
var input models.MediaMusicDTO
|
||||||
|
|
||||||
|
if err := c.ShouldBindJSON(&input); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
music, err := handler.Service.Update(c.Request.Context(), input)
|
||||||
|
if err != nil {
|
||||||
|
logger := slog.Get(c)
|
||||||
|
logger.Info("MediaMusicHandler#Update", "error", err.Error())
|
||||||
|
c.JSON(http.StatusNotFound, gin.H{"error": "MediaMusic not updated"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, music)
|
||||||
|
}
|
||||||
|
func (handler *MediaMusicHandler) Delete(c *gin.Context) {
|
||||||
|
id := c.Param("id")
|
||||||
|
err := handler.Service.Delete(c.Request.Context(), id)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusNotFound, gin.H{"error": "MediaMusic not found"})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, gin.H{"ok": "true"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handler *MediaMusicHandler) ListPage(c *gin.Context) {
|
||||||
|
session := sessions.Default(c)
|
||||||
|
user := session.Get(globals.UserKey)
|
||||||
|
logger := slog.Get(c)
|
||||||
|
var (
|
||||||
|
review bool
|
||||||
|
download bool
|
||||||
|
)
|
||||||
|
paramReview, existsReview := c.GetQuery("review")
|
||||||
|
if existsReview {
|
||||||
|
if paramReview == "on" {
|
||||||
|
review = true
|
||||||
|
} else {
|
||||||
|
review = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
paramDownload, existsDownload := c.GetQuery("should_download")
|
||||||
|
if existsDownload {
|
||||||
|
if paramDownload == "on" {
|
||||||
|
download = true
|
||||||
|
} else {
|
||||||
|
download = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
musics, err := handler.Service.List(c.Request.Context())
|
||||||
|
if err != nil {
|
||||||
|
logger.Info("MediaMusicHandler#ListPage", "error", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logger.Info("MediaMusicHandler#ListPage", "MediaMusic count", len(musics))
|
||||||
|
data := globals.GetDefaultValues(user, "MediaMusic...")
|
||||||
|
data["media_links"] = musics
|
||||||
|
data["MediaLinksUrl"] = "/web/media-musics"
|
||||||
|
data["isReview"] = review
|
||||||
|
data["isDownload"] = download
|
||||||
|
c.HTML(http.StatusOK, "media_links", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handler *MediaMusicHandler) EditPage(c *gin.Context) {
|
||||||
|
session := sessions.Default(c)
|
||||||
|
user := session.Get(globals.UserKey)
|
||||||
|
id := c.Param("id")
|
||||||
|
logger := slog.Get(c)
|
||||||
|
music, err := handler.Service.Get(c.Request.Context(), id)
|
||||||
|
if err != nil {
|
||||||
|
logger.Info("MediaMusicHandler#EditPage", "error", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logger.Info("MediaMusicHandler#EditPage", "music", music)
|
||||||
|
data := globals.GetDefaultValues(user, "MediaMusic...")
|
||||||
|
data["lofi"] = music
|
||||||
|
c.HTML(http.StatusOK, "lofi_detail", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handler *MediaMusicHandler) UpdatePage(c *gin.Context) {
|
||||||
|
session := sessions.Default(c)
|
||||||
|
user := session.Get(globals.UserKey)
|
||||||
|
id := c.Param("id")
|
||||||
|
logger := slog.Get(c)
|
||||||
|
music, err := handler.Service.Get(c.Request.Context(), id)
|
||||||
|
if err != nil {
|
||||||
|
logger.Info("MediaMusicHandler#UpdatePage", "error", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var form models.MediaMusicForm
|
||||||
|
if err := c.ShouldBind(&form); err != nil {
|
||||||
|
logger.Info("MediaMusicHandler#UpdatePage", "error", err.Error())
|
||||||
|
data := globals.GetDefaultValues(user, "MediaMusic...")
|
||||||
|
data["Form"] = form
|
||||||
|
data["Errors"] = err.Error()
|
||||||
|
c.HTML(http.StatusBadRequest, "lofi_detail", data)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logger.Info("MediaMusicHandler#UpdatePage", "music", music)
|
||||||
|
//handler.Service.Update(c.Request.Context(), form.ConvertFormToMediaLofiDTO())
|
||||||
|
c.Redirect(http.StatusFound, "web/media-musics")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handler *MediaMusicHandler) 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("MediaMusicHandler#DeletePage", "error", err.Error())
|
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logger.Info("MediaMusicHandler#DeletePage", "music", id)
|
||||||
|
c.Redirect(http.StatusFound, "web/media-musics")
|
||||||
|
}
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"kontor-api-gin/internal/config"
|
||||||
|
"kontor-api-gin/internal/helpers"
|
||||||
|
"log/slog"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MediaMusic struct {
|
||||||
|
ID string `gorm:"type:string;primary_key;" json:"id"`
|
||||||
|
CreatedAt time.Time `gorm:"column:created_date" json:"created_date"`
|
||||||
|
UpdatedAt time.Time `gorm:"column:last_modified_date" json:"last_modified_date"`
|
||||||
|
DeletedAt *time.Time `gorm:"column:deleted_date" json:"deleted_date"`
|
||||||
|
Version int `gorm:"default:0" json:"version"`
|
||||||
|
WebLink string `gorm:"column:url" json:"url"`
|
||||||
|
Review bool `gorm:"column:review" json:"review"`
|
||||||
|
ShouldDownload bool `gorm:"column:should_download" json:"should_download"`
|
||||||
|
Title string `gorm:"size:300;column:title" json:"title"`
|
||||||
|
FileName string `gorm:"column:file_name" json:"file_name"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (media_music *MediaMusic) Update(update MediaMusicDTO) {
|
||||||
|
media_music.CreatedAt = update.CreatedAt.Time
|
||||||
|
media_music.UpdatedAt = time.Now()
|
||||||
|
media_music.Version = media_music.Version + 1
|
||||||
|
media_music.WebLink = update.WebLink
|
||||||
|
media_music.Review = update.Review
|
||||||
|
media_music.ShouldDownload = update.ShouldDownload
|
||||||
|
media_music.Title = update.Title
|
||||||
|
media_music.FileName = update.FileName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (media_music *MediaMusic) TableName() string {
|
||||||
|
return "media_music"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (media_music *MediaMusic) ConvertMediaMusicToDTO() MediaMusicDTO {
|
||||||
|
dto := MediaMusicDTO{
|
||||||
|
ID: media_music.ID,
|
||||||
|
CreatedAt: helpers.KontorTime{Time: media_music.CreatedAt},
|
||||||
|
UpdatedAt: helpers.KontorTime{Time: media_music.UpdatedAt},
|
||||||
|
DeletedAt: media_music.DeletedAt,
|
||||||
|
Version: media_music.Version,
|
||||||
|
WebLink: media_music.WebLink,
|
||||||
|
Review: media_music.Review,
|
||||||
|
ShouldDownload: media_music.ShouldDownload,
|
||||||
|
Title: media_music.Title,
|
||||||
|
FileName: media_music.FileName,
|
||||||
|
}
|
||||||
|
return dto
|
||||||
|
}
|
||||||
|
|
||||||
|
type MediaMusicAdd struct {
|
||||||
|
Url string `json:"url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MediaMusicForm struct {
|
||||||
|
Title string `form:"title" binding:"required"`
|
||||||
|
Url string `form:"url" binding:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (form *MediaMusicForm) ConvertFormToMediaMusicDTO() MediaMusicDTO {
|
||||||
|
media_music := MediaMusicDTO{}
|
||||||
|
return media_music
|
||||||
|
}
|
||||||
|
|
||||||
|
type MediaMusicDTO struct {
|
||||||
|
ID string `json:"id" binding:"required"`
|
||||||
|
CreatedAt helpers.KontorTime `json:"created_date"`
|
||||||
|
UpdatedAt helpers.KontorTime `json:"last_modified_date"`
|
||||||
|
DeletedAt *time.Time `json:"deleted_date,omitempty"`
|
||||||
|
Version int `json:"version"`
|
||||||
|
FileName string `json:"file_name"`
|
||||||
|
Review bool `json:"review"`
|
||||||
|
ShouldDownload bool `json:"should_download"`
|
||||||
|
Title string `json:"title"`
|
||||||
|
WebLink string `json:"url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (source MediaMusicDTO) Equals(target MediaMusicDTO) bool {
|
||||||
|
if config.Verbose > 1 {
|
||||||
|
slog.Info("MediaMusicDTO#Equals", "id", source.ID)
|
||||||
|
}
|
||||||
|
equals := true
|
||||||
|
if source.Title != target.Title {
|
||||||
|
if config.Verbose > 1 {
|
||||||
|
slog.Info("MediaMusicDTO#Equals: Title changed")
|
||||||
|
}
|
||||||
|
equals = false
|
||||||
|
}
|
||||||
|
if source.WebLink != target.WebLink {
|
||||||
|
if config.Verbose > 1 {
|
||||||
|
slog.Info("MediaMusicDTO#Equals: WebLink changed")
|
||||||
|
}
|
||||||
|
equals = false
|
||||||
|
}
|
||||||
|
if source.Version != target.Version {
|
||||||
|
if config.Verbose > 1 {
|
||||||
|
slog.Info("MediaMusicDTO#Equals: Version changed")
|
||||||
|
}
|
||||||
|
equals = false
|
||||||
|
}
|
||||||
|
if source.FileName != target.FileName {
|
||||||
|
if config.Verbose > 1 {
|
||||||
|
slog.Info("MediaMusicDTO#Equals: FileName changed")
|
||||||
|
}
|
||||||
|
equals = false
|
||||||
|
}
|
||||||
|
if source.Review != target.Review {
|
||||||
|
if config.Verbose > 1 {
|
||||||
|
slog.Info("MediaMusicDTO#Equals: Review changed")
|
||||||
|
}
|
||||||
|
equals = false
|
||||||
|
}
|
||||||
|
if source.ShouldDownload != target.ShouldDownload {
|
||||||
|
if config.Verbose > 1 {
|
||||||
|
slog.Info("MediaMusicDTO#Equals: ShouldDownload changed")
|
||||||
|
}
|
||||||
|
equals = false
|
||||||
|
}
|
||||||
|
return equals
|
||||||
|
}
|
||||||
|
|
||||||
|
type MediaMusicDTOList []MediaMusicDTO
|
||||||
|
|
||||||
|
func (source MediaMusicDTOList) GetMediaMusic(music_id string) *MediaMusicDTO {
|
||||||
|
for _, music := range source {
|
||||||
|
if music.ID == music_id {
|
||||||
|
return &music
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (source *MediaMusicDTOList) CompareIds(target *MediaMusicDTOList) (missing, obsolete, changed []string) {
|
||||||
|
sources := make(map[string]MediaMusicDTO, len(*source))
|
||||||
|
targets := make(map[string]MediaMusicDTO, len(*target))
|
||||||
|
for _, source := range *source {
|
||||||
|
sources[source.ID] = source
|
||||||
|
}
|
||||||
|
for _, target := range *target {
|
||||||
|
targets[target.ID] = target
|
||||||
|
}
|
||||||
|
// iterate source IDs
|
||||||
|
for id := range sources {
|
||||||
|
if _, ok := targets[id]; ok {
|
||||||
|
if config.Verbose > 1 {
|
||||||
|
slog.Info(fmt.Sprintf("ID %s found in both lists", id))
|
||||||
|
}
|
||||||
|
if !sources[id].Equals(targets[id]) {
|
||||||
|
changed = append(changed, id)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
missing = append(missing, id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for id := range targets {
|
||||||
|
if _, ok := sources[id]; ok {
|
||||||
|
slog.Debug(fmt.Sprintf("ID %s found in both lists", id))
|
||||||
|
} else {
|
||||||
|
obsolete = append(obsolete, id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
slog.Info("CompareIds", "missing", len(missing), "obsolete", len(obsolete), "changed", len(changed))
|
||||||
|
slog.Debug("CompareIds", "missing", missing, "obsolete", obsolete)
|
||||||
|
return missing, obsolete, changed
|
||||||
|
}
|
||||||
|
|
||||||
|
func ConvertMediaMusicsToDtos(media_musics []MediaMusic) MediaMusicDTOList {
|
||||||
|
dtos := make(MediaMusicDTOList, len(media_musics))
|
||||||
|
for i, media_music := range media_musics {
|
||||||
|
dtos[i] = media_music.ConvertMediaMusicToDTO()
|
||||||
|
}
|
||||||
|
return dtos
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
package repository
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"kontor-api-gin/internal/helpers"
|
||||||
|
"kontor-api-gin/internal/models"
|
||||||
|
"log/slog"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MediaMusicRepository struct {
|
||||||
|
db *gorm.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMediaMusicRepository(db *gorm.DB) *MediaMusicRepository {
|
||||||
|
repo := &MediaMusicRepository{db: db}
|
||||||
|
return repo
|
||||||
|
}
|
||||||
|
|
||||||
|
func (repository *MediaMusicRepository) FindAll(context context.Context) ([]models.MediaMusic, error) {
|
||||||
|
var musics []models.MediaMusic
|
||||||
|
|
||||||
|
result := repository.db.Find(&musics)
|
||||||
|
slog.Info("MediaMusicRepository#FindAll", "count", result.RowsAffected)
|
||||||
|
|
||||||
|
return musics, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (repository *MediaMusicRepository) GetById(context context.Context, id string) (*models.MediaMusic, error) {
|
||||||
|
var music = models.MediaMusic{ID: id}
|
||||||
|
slog.Info("MediaMusicRepository#GetById", "id", id)
|
||||||
|
result := repository.db.First(&music)
|
||||||
|
if result.Error != nil {
|
||||||
|
slog.Info("MediaMusicRepository#GetById", "error", result.Error.Error())
|
||||||
|
}
|
||||||
|
return &music, result.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (repository *MediaMusicRepository) Add(context context.Context, url string) (*models.MediaMusic, error) {
|
||||||
|
slog.Info("MediaMusicRepository#Add", "url", url)
|
||||||
|
webLink := helpers.StripUrl(url, "v")
|
||||||
|
var music models.MediaMusic
|
||||||
|
search_result := repository.db.Where("url = ?", webLink).First(&music)
|
||||||
|
if search_result.RowsAffected > 0 {
|
||||||
|
slog.Info("search for existing url", "result", search_result, "music", music)
|
||||||
|
return &music, nil
|
||||||
|
}
|
||||||
|
if errors.Is(search_result.Error, gorm.ErrRecordNotFound) {
|
||||||
|
slog.Info("MediaMusicRepository#Add URL not found", "url", webLink)
|
||||||
|
music = models.MediaMusic{
|
||||||
|
ID: uuid.NewString(),
|
||||||
|
CreatedAt: time.Now(),
|
||||||
|
UpdatedAt: time.Now(),
|
||||||
|
DeletedAt: nil,
|
||||||
|
Version: 0,
|
||||||
|
WebLink: webLink,
|
||||||
|
ShouldDownload: false,
|
||||||
|
Review: true,
|
||||||
|
Title: "",
|
||||||
|
FileName: "",
|
||||||
|
}
|
||||||
|
add_result := repository.db.Create(&music)
|
||||||
|
if add_result.Error != nil {
|
||||||
|
slog.Info("add new MediaMusic", "error", add_result.Error)
|
||||||
|
return nil, add_result.Error
|
||||||
|
}
|
||||||
|
slog.Info("add new MediaMusic", "music", music)
|
||||||
|
return &music, nil
|
||||||
|
}
|
||||||
|
if search_result.Error != nil {
|
||||||
|
return nil, search_result.Error
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("MediaMusicRepository#Add unknown error")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (repository *MediaMusicRepository) Update(context context.Context, update models.MediaMusicDTO) (*models.MediaMusic, error) {
|
||||||
|
slog.Info("MediaMusicRepository#Update", "music", update)
|
||||||
|
var music = models.MediaMusic{ID: update.ID}
|
||||||
|
slog.Info("MediaMusicRepository#Update", "id", update.ID)
|
||||||
|
result := repository.db.First(&music)
|
||||||
|
if result.Error != nil {
|
||||||
|
slog.Info("MediaMusicRepository#Update", "error", result.Error.Error())
|
||||||
|
return nil, result.Error
|
||||||
|
}
|
||||||
|
music.Update(update)
|
||||||
|
repository.db.Save(&music)
|
||||||
|
return &music, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (repository *MediaMusicRepository) Delete(context context.Context, id string) error {
|
||||||
|
var actor = models.MediaMusic{ID: id}
|
||||||
|
slog.Info("MediaMusicRepository#Delete", "id", id)
|
||||||
|
result := repository.db.Delete(&actor)
|
||||||
|
if result.Error != nil {
|
||||||
|
slog.Info("MediaMusicRepository#Delete", "error", result.Error.Error())
|
||||||
|
}
|
||||||
|
return result.Error
|
||||||
|
}
|
||||||
@@ -71,6 +71,10 @@ func New(admin *handlers.AdminHandler, bookshelf *handlers.BookshelfHandler, com
|
|||||||
m.POST("/media-lofis/:id/edit", media.MediaLoFiHandler.UpdatePage)
|
m.POST("/media-lofis/:id/edit", media.MediaLoFiHandler.UpdatePage)
|
||||||
m.GET("/media-lofis/:id/change-review", media.MediaLoFiHandler.ChangeReviewPage)
|
m.GET("/media-lofis/:id/change-review", media.MediaLoFiHandler.ChangeReviewPage)
|
||||||
m.GET("/media-lofis/:id/delete", media.MediaLoFiHandler.DeletePage)
|
m.GET("/media-lofis/:id/delete", media.MediaLoFiHandler.DeletePage)
|
||||||
|
m.GET("/media-musics", media.MediaMusicHandler.ListPage)
|
||||||
|
m.GET("/media-musics/:id", media.MediaMusicHandler.EditPage)
|
||||||
|
m.POST("/media-musics/:id", media.MediaMusicHandler.UpdatePage)
|
||||||
|
m.GET("/media-musics/:id/delete", media.MediaMusicHandler.DeletePage)
|
||||||
|
|
||||||
api := router.Group("/api")
|
api := router.Group("/api")
|
||||||
api.POST("/login", admin.AuthHandler.Login)
|
api.POST("/login", admin.AuthHandler.Login)
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"kontor-api-gin/internal/models"
|
||||||
|
"kontor-api-gin/internal/repository"
|
||||||
|
"log/slog"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MediaMusicService struct {
|
||||||
|
repository *repository.MediaMusicRepository
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMediaMusicService(repo *repository.MediaMusicRepository) *MediaMusicService {
|
||||||
|
service := &MediaMusicService{repository: repo}
|
||||||
|
return service
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *MediaMusicService) List(context context.Context) ([]models.MediaMusic, error) {
|
||||||
|
slog.Info("MediaMusicService#List")
|
||||||
|
return service.repository.FindAll(context)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *MediaMusicService) Get(context context.Context, id string) (*models.MediaMusic, error) {
|
||||||
|
slog.Info("MediaMusicService#Get")
|
||||||
|
return service.repository.GetById(context, id)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *MediaMusicService) Add(context context.Context, url string) (*models.MediaMusic, error) {
|
||||||
|
slog.Info("MediaMusicService#Add")
|
||||||
|
return service.repository.Add(context, url)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *MediaMusicService) Update(context context.Context, music models.MediaMusicDTO) (*models.MediaMusic, error) {
|
||||||
|
slog.Info("MediaMusicService#Update")
|
||||||
|
return service.repository.Update(context, music)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (service *MediaMusicService) Delete(context context.Context, id string) error {
|
||||||
|
slog.Info("MediaMusicService#Delete")
|
||||||
|
return service.repository.Delete(context, id)
|
||||||
|
}
|
||||||
+134677
File diff suppressed because it is too large
Load Diff
@@ -24,6 +24,7 @@
|
|||||||
<a class="dropdown-item" href="/web/media-files">Media Files</a>
|
<a class="dropdown-item" href="/web/media-files">Media Files</a>
|
||||||
<a class="dropdown-item" href="/web/actors">Media Actors</a>
|
<a class="dropdown-item" href="/web/actors">Media Actors</a>
|
||||||
<a class="dropdown-item" href="/web/media-lofis">Media Lofi</a>
|
<a class="dropdown-item" href="/web/media-lofis">Media Lofi</a>
|
||||||
|
<a class="dropdown-item" href="/web/media-musics">Media Music</a>
|
||||||
<a class="dropdown-item" href="/web/media-videos">Media Videos</a>
|
<a class="dropdown-item" href="/web/media-videos">Media Videos</a>
|
||||||
<a class="dropdown-item" href="/web/articles">Artikel</a>
|
<a class="dropdown-item" href="/web/articles">Artikel</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
{{ define "media_links" }}
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="de">
|
||||||
|
{{ template "head" . }}
|
||||||
|
|
||||||
|
<body>
|
||||||
|
{{ template "navbar" . }}
|
||||||
|
<main>
|
||||||
|
<div class="row">
|
||||||
|
<form class="form-inline" action="{{ .MediaLinksUrl }}">
|
||||||
|
<input type="text" placeholder="Search" name="query">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" name="review" {{ if .Review }}checked{{ end }}>Review
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" name="download" {{ if .ShouldDownload }}checked{{ end }}>Download
|
||||||
|
</label>
|
||||||
|
<button type="submit">Search</button>
|
||||||
|
<div class="pill-nav"><a href="{{ .MediaLinksUrl }}/add">Add MediaFile</a></div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="maincolumn">
|
||||||
|
<table class="table table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Title</th>
|
||||||
|
<th scope="col">Weblink</th>
|
||||||
|
<th scope="col">Review</th>
|
||||||
|
<th scope="col">Download</th>
|
||||||
|
<th colspan="2">Actions</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{ range .media_links }}
|
||||||
|
<tr>
|
||||||
|
<th scope="row"><a href="{{ .MediaLinksUrl }}/{{.ID}}">{{.Title}}</a></th>
|
||||||
|
{{ if .WebLink }}
|
||||||
|
<td><a href="{{.WebLink}}">{{.WebLink}}</a></td>
|
||||||
|
{{ else }}
|
||||||
|
<td>no link</td>
|
||||||
|
{{ end }}
|
||||||
|
<td>
|
||||||
|
{{ if .Review }}
|
||||||
|
<img src="/public/icons/tick.png" alt="true" width="24" height="24">
|
||||||
|
{{ else }}
|
||||||
|
<img src="/public/icons/cross.png" alt="true" width="24" height="24">
|
||||||
|
{{ end }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ if .ShouldDownload }}
|
||||||
|
<img src="/public/icons/tick.png" alt="true" width="24" height="24">
|
||||||
|
{{ else }}
|
||||||
|
<img src="/public/icons/cross.png" alt="true" width="24" height="24">
|
||||||
|
{{ end }}
|
||||||
|
</td>
|
||||||
|
<td><a href="{{ .MediaLinksUrl }}/{{.ID}}" class="btn btn-outline-primary btn-sm active" role="button"
|
||||||
|
aria-pressed="true">Edit</a></td>
|
||||||
|
<td><a href="{ .MediaLinksUrl }/{{.ID}}/delete" class="btn btn-outline-danger btn-sm active"
|
||||||
|
role="button" aria-pressed="true">Delete</a></td>
|
||||||
|
</tr>
|
||||||
|
{{ end }}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{{ template "footer" . }}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
{{ end }}
|
||||||
@@ -5,113 +5,113 @@ import 'Frontend/generated/jar-resources/ReactRouterOutletElement.tsx';
|
|||||||
|
|
||||||
const loadOnDemand = (key) => {
|
const loadOnDemand = (key) => {
|
||||||
const pending = [];
|
const pending = [];
|
||||||
if (key === '9f40817b690e11a5b23a3159bb774f15430c23768f26dc0d15efccc3d65223ac') {
|
|
||||||
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
|
||||||
}
|
|
||||||
if (key === '2140ca6af7e9a5ff94d8a66b6e5a23e6d184ef7901ca73d33b3c30f74f94708a') {
|
|
||||||
pending.push(import('./chunks/chunk-eab035454a058f437d12e5ccf64ef647181029b965d466c829f5a569b2865dd3.js'));
|
|
||||||
}
|
|
||||||
if (key === 'c5f987a4896c791d13aeb6a03a4783ff03df304750a7db930a18d399dba31509') {
|
if (key === 'c5f987a4896c791d13aeb6a03a4783ff03df304750a7db930a18d399dba31509') {
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
}
|
}
|
||||||
if (key === 'b4afd0c0906e26b51836d41720e1b8d91a7cacf0fd42e089f1e0fbc2ee27a5bb') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === 'a886fd99e05dd2c5ce3e4b643dc8d6d29189dee784fa78678d8ab4fcb89216c0') {
|
|
||||||
pending.push(import('./chunks/chunk-4643e5b30878e982c301927c78b86af508e91d91560341ef83fa0e6bf79dedee.js'));
|
|
||||||
}
|
|
||||||
if (key === 'c0816c2bfaa97d6f3e7eea83c5478186457bdc79cfe3f284c42e192d68607157') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === '803ed44611ffeb1bcb1f604f267f09af48ef8a5bc8d765e481b67ed59f9b880a') {
|
|
||||||
pending.push(import('./chunks/chunk-5f54f3be0c0d908c0477e60450f72fbb60bfa31e84e7d18b39841a003d995f86.js'));
|
|
||||||
}
|
|
||||||
if (key === '96ecac798fbbe91ef146ac4a25f5c31827427ca0f106ba66e63fc1fd6c27b83d') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === '28b5e9145505152a4dbd9600977b8177d3a161906581ca5a1a923affc812a761') {
|
|
||||||
pending.push(import('./chunks/chunk-5e457c2d02d56b468106fc6b3ad37f1215d95af443e88a25314d583049fa7ada.js'));
|
|
||||||
}
|
|
||||||
if (key === '2062a3f35e8fdb051e9362a8a8895d80ef719832e9394babcbaab3aac56d4f0e') {
|
|
||||||
pending.push(import('./chunks/chunk-0980a344d761e100f78a8df513a682bdcc702314eb249c64b972cbe64fc2a813.js'));
|
|
||||||
}
|
|
||||||
if (key === '39b4a07b2b07a780f8ac9d2f7cc855e3b78ec60465d9d808690466c1f0bea792') {
|
|
||||||
pending.push(import('./chunks/chunk-9067a52cbc57d972c6155501cef5bd27a816f0c7adf6390a603c7b4e9bbddce3.js'));
|
|
||||||
}
|
|
||||||
if (key === '4e356c0939a28ab8766b0375ca6cb478b6163eb9ad80745a9e2f2fc80997b6a2') {
|
|
||||||
pending.push(import('./chunks/chunk-82d1654bda3835e43a2a0c9a2e52925f12dc4a2fcd20b5f40603dbbe6eb1ff23.js'));
|
|
||||||
}
|
|
||||||
if (key === '53ff1588255d7e5486eb67452c8d9c43baea0eecd9bd509fd7f0c55b3cccaa0d') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === '83045a9760ea76fd534ed71ed553dc7cf2595a5d697e3c7bc55470d219770d05') {
|
if (key === '83045a9760ea76fd534ed71ed553dc7cf2595a5d697e3c7bc55470d219770d05') {
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
}
|
}
|
||||||
if (key === 'ac7af13a0805d3ce8a287e9d860521c82aaf55d2c448ce3f62a85d44216a8189') {
|
if (key === '2140ca6af7e9a5ff94d8a66b6e5a23e6d184ef7901ca73d33b3c30f74f94708a') {
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
pending.push(import('./chunks/chunk-eab035454a058f437d12e5ccf64ef647181029b965d466c829f5a569b2865dd3.js'));
|
||||||
}
|
}
|
||||||
if (key === '5d710852587ce9ebabfac9ed950f6b11bc3a87d96860d4efdfb61dab7ae54091') {
|
if (key === '803ed44611ffeb1bcb1f604f267f09af48ef8a5bc8d765e481b67ed59f9b880a') {
|
||||||
|
pending.push(import('./chunks/chunk-5f54f3be0c0d908c0477e60450f72fbb60bfa31e84e7d18b39841a003d995f86.js'));
|
||||||
|
}
|
||||||
|
if (key === 'b4afd0c0906e26b51836d41720e1b8d91a7cacf0fd42e089f1e0fbc2ee27a5bb') {
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
}
|
}
|
||||||
if (key === '2b0ca0e51ded6027d3f9e464513210d5503ab2a9bc532de5cfc81d78a58f422f') {
|
|
||||||
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
|
||||||
}
|
|
||||||
if (key === '68a5f871903ca703f0fac8dd0072e1bfc082ffa14aa445026be6e1eb6cfe1bd0') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === 'bfac19b5aab9cd5a47ff4a66f2a839ebbb4889867824be809c5dc3a3d47f94b8') {
|
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
|
||||||
}
|
|
||||||
if (key === '3e87cbb0d40d50da9c3b69d0dada85fe9b7f2f4bae2b79c8f0408a798b120549') {
|
|
||||||
pending.push(import('./chunks/chunk-5e457c2d02d56b468106fc6b3ad37f1215d95af443e88a25314d583049fa7ada.js'));
|
|
||||||
}
|
|
||||||
if (key === 'dca37e6961f625182e78a722a61c0eb9b8a2357b5e787fe616fe5993c2db5133') {
|
|
||||||
pending.push(import('./chunks/chunk-dbbf8c73fe9c2c76fb9306f96bfa7ff293eff804705670e651ac024bea9551bd.js'));
|
|
||||||
}
|
|
||||||
if (key === '4e76ad4411fbf58731cdad95d28e6fe0057fb4a97ffd54f193e52b111462552d') {
|
|
||||||
pending.push(import('./chunks/chunk-ba68801837253f4860e3f4374e9ae9e48ccba4ca6110cac47de37e40d7b6199e.js'));
|
|
||||||
}
|
|
||||||
if (key === '92a567041312ea4c7faa4dd5bcc74f73cd3b16dd721624d0bc68d1704138abe5') {
|
|
||||||
pending.push(import('./chunks/chunk-4f16ee624545500a5dde991be4f07a661d86951bbc2c07a010daabbd423b1909.js'));
|
|
||||||
}
|
|
||||||
if (key === 'becc589ccd4f7ac5e6f13c45eecc05f61d67ce57f585f1655800354ff4b55f3c') {
|
|
||||||
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
|
||||||
}
|
|
||||||
if (key === '1ac8bd8d734d2603947b1db0616ea4dae4ce691a5264f5c9aeafcaa897e0a872') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === '391ac9fb4bd95bc899c5911c48a6f3b549b118923653444f5ab50acddfb6f291') {
|
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
|
||||||
}
|
|
||||||
if (key === 'a4eeeab53770801e478b15e6b179e5689afd43fc753f347e0c51ce934bd28a6c') {
|
|
||||||
pending.push(import('./chunks/chunk-0980a344d761e100f78a8df513a682bdcc702314eb249c64b972cbe64fc2a813.js'));
|
|
||||||
}
|
|
||||||
if (key === 'ffd87f879398d3b6942e852eda9b64e28a124c8a61938c867efb360a5cf1d32e') {
|
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
|
||||||
}
|
|
||||||
if (key === '81bbe2e11b6af26d0d292e2e18bde37546d5b9ec24f4f4f78df2bc9f9c21f431') {
|
if (key === '81bbe2e11b6af26d0d292e2e18bde37546d5b9ec24f4f4f78df2bc9f9c21f431') {
|
||||||
pending.push(import('./chunks/chunk-ba68801837253f4860e3f4374e9ae9e48ccba4ca6110cac47de37e40d7b6199e.js'));
|
pending.push(import('./chunks/chunk-ba68801837253f4860e3f4374e9ae9e48ccba4ca6110cac47de37e40d7b6199e.js'));
|
||||||
}
|
}
|
||||||
if (key === '8904207b9d538b9eedfaaefd8e82d3415de8513bda9d6bb76f4012f0f336d200') {
|
if (key === '8904207b9d538b9eedfaaefd8e82d3415de8513bda9d6bb76f4012f0f336d200') {
|
||||||
pending.push(import('./chunks/chunk-34d02800587f0d3950a0cf1f566793c706accc702ca93d2f51ab25f74d29bd84.js'));
|
pending.push(import('./chunks/chunk-34d02800587f0d3950a0cf1f566793c706accc702ca93d2f51ab25f74d29bd84.js'));
|
||||||
}
|
}
|
||||||
if (key === '3665d7598c9ed4112997a0493fb890edf38d23d3bd9fcb0eb09bf3e045f5228b') {
|
if (key === 'c0816c2bfaa97d6f3e7eea83c5478186457bdc79cfe3f284c42e192d68607157') {
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
}
|
}
|
||||||
if (key === '58cc18f5518623050c6a99d327dd540140b9b0dca851a76a70e688291f661e11') {
|
if (key === 'a886fd99e05dd2c5ce3e4b643dc8d6d29189dee784fa78678d8ab4fcb89216c0') {
|
||||||
pending.push(import('./chunks/chunk-94486ac490d7aebdfb2696122da529dc74cba54f50b75f3f737368bd86850d36.js'));
|
pending.push(import('./chunks/chunk-4643e5b30878e982c301927c78b86af508e91d91560341ef83fa0e6bf79dedee.js'));
|
||||||
}
|
}
|
||||||
if (key === '89c2914ed5d19860240c0c1d3dba174616dc452c4ba8ae039f016cf9592e9432') {
|
if (key === '89c2914ed5d19860240c0c1d3dba174616dc452c4ba8ae039f016cf9592e9432') {
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
}
|
}
|
||||||
|
if (key === '2062a3f35e8fdb051e9362a8a8895d80ef719832e9394babcbaab3aac56d4f0e') {
|
||||||
|
pending.push(import('./chunks/chunk-0980a344d761e100f78a8df513a682bdcc702314eb249c64b972cbe64fc2a813.js'));
|
||||||
|
}
|
||||||
|
if (key === 'e9df10b3be58513bb6452e4dbdce31e0b1dc33868fbba54ee72e82089cf39adf') {
|
||||||
|
pending.push(import('./chunks/chunk-34d02800587f0d3950a0cf1f566793c706accc702ca93d2f51ab25f74d29bd84.js'));
|
||||||
|
}
|
||||||
|
if (key === '92a567041312ea4c7faa4dd5bcc74f73cd3b16dd721624d0bc68d1704138abe5') {
|
||||||
|
pending.push(import('./chunks/chunk-4f16ee624545500a5dde991be4f07a661d86951bbc2c07a010daabbd423b1909.js'));
|
||||||
|
}
|
||||||
|
if (key === '58cc18f5518623050c6a99d327dd540140b9b0dca851a76a70e688291f661e11') {
|
||||||
|
pending.push(import('./chunks/chunk-94486ac490d7aebdfb2696122da529dc74cba54f50b75f3f737368bd86850d36.js'));
|
||||||
|
}
|
||||||
|
if (key === '5d710852587ce9ebabfac9ed950f6b11bc3a87d96860d4efdfb61dab7ae54091') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
if (key === 'e5db1fd1f39047ab2857e9ef118681c3f831f39efbbb2a6f000e9475b77444e5') {
|
if (key === 'e5db1fd1f39047ab2857e9ef118681c3f831f39efbbb2a6f000e9475b77444e5') {
|
||||||
pending.push(import('./chunks/chunk-94486ac490d7aebdfb2696122da529dc74cba54f50b75f3f737368bd86850d36.js'));
|
pending.push(import('./chunks/chunk-94486ac490d7aebdfb2696122da529dc74cba54f50b75f3f737368bd86850d36.js'));
|
||||||
}
|
}
|
||||||
|
if (key === '4e356c0939a28ab8766b0375ca6cb478b6163eb9ad80745a9e2f2fc80997b6a2') {
|
||||||
|
pending.push(import('./chunks/chunk-82d1654bda3835e43a2a0c9a2e52925f12dc4a2fcd20b5f40603dbbe6eb1ff23.js'));
|
||||||
|
}
|
||||||
|
if (key === 'a4eeeab53770801e478b15e6b179e5689afd43fc753f347e0c51ce934bd28a6c') {
|
||||||
|
pending.push(import('./chunks/chunk-0980a344d761e100f78a8df513a682bdcc702314eb249c64b972cbe64fc2a813.js'));
|
||||||
|
}
|
||||||
|
if (key === '1ac8bd8d734d2603947b1db0616ea4dae4ce691a5264f5c9aeafcaa897e0a872') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
|
if (key === '9f40817b690e11a5b23a3159bb774f15430c23768f26dc0d15efccc3d65223ac') {
|
||||||
|
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
||||||
|
}
|
||||||
|
if (key === 'dca37e6961f625182e78a722a61c0eb9b8a2357b5e787fe616fe5993c2db5133') {
|
||||||
|
pending.push(import('./chunks/chunk-dbbf8c73fe9c2c76fb9306f96bfa7ff293eff804705670e651ac024bea9551bd.js'));
|
||||||
|
}
|
||||||
|
if (key === '96ecac798fbbe91ef146ac4a25f5c31827427ca0f106ba66e63fc1fd6c27b83d') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
|
if (key === '4e76ad4411fbf58731cdad95d28e6fe0057fb4a97ffd54f193e52b111462552d') {
|
||||||
|
pending.push(import('./chunks/chunk-ba68801837253f4860e3f4374e9ae9e48ccba4ca6110cac47de37e40d7b6199e.js'));
|
||||||
|
}
|
||||||
|
if (key === '53ff1588255d7e5486eb67452c8d9c43baea0eecd9bd509fd7f0c55b3cccaa0d') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
|
if (key === 'ac7af13a0805d3ce8a287e9d860521c82aaf55d2c448ce3f62a85d44216a8189') {
|
||||||
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === '3e87cbb0d40d50da9c3b69d0dada85fe9b7f2f4bae2b79c8f0408a798b120549') {
|
||||||
|
pending.push(import('./chunks/chunk-5e457c2d02d56b468106fc6b3ad37f1215d95af443e88a25314d583049fa7ada.js'));
|
||||||
|
}
|
||||||
|
if (key === '68a5f871903ca703f0fac8dd0072e1bfc082ffa14aa445026be6e1eb6cfe1bd0') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
|
if (key === '28b5e9145505152a4dbd9600977b8177d3a161906581ca5a1a923affc812a761') {
|
||||||
|
pending.push(import('./chunks/chunk-5e457c2d02d56b468106fc6b3ad37f1215d95af443e88a25314d583049fa7ada.js'));
|
||||||
|
}
|
||||||
|
if (key === 'ffd87f879398d3b6942e852eda9b64e28a124c8a61938c867efb360a5cf1d32e') {
|
||||||
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === 'becc589ccd4f7ac5e6f13c45eecc05f61d67ce57f585f1655800354ff4b55f3c') {
|
||||||
|
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
||||||
|
}
|
||||||
if (key === '0ca48a0e12f1dbf4945f761a93a7df202b2908327a63c52f2f060559c2bcc7f0') {
|
if (key === '0ca48a0e12f1dbf4945f761a93a7df202b2908327a63c52f2f060559c2bcc7f0') {
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
}
|
}
|
||||||
if (key === 'e9df10b3be58513bb6452e4dbdce31e0b1dc33868fbba54ee72e82089cf39adf') {
|
if (key === '3665d7598c9ed4112997a0493fb890edf38d23d3bd9fcb0eb09bf3e045f5228b') {
|
||||||
pending.push(import('./chunks/chunk-34d02800587f0d3950a0cf1f566793c706accc702ca93d2f51ab25f74d29bd84.js'));
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === 'bfac19b5aab9cd5a47ff4a66f2a839ebbb4889867824be809c5dc3a3d47f94b8') {
|
||||||
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === '2b0ca0e51ded6027d3f9e464513210d5503ab2a9bc532de5cfc81d78a58f422f') {
|
||||||
|
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
||||||
|
}
|
||||||
|
if (key === '391ac9fb4bd95bc899c5911c48a6f3b549b118923653444f5ab50acddfb6f291') {
|
||||||
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === '39b4a07b2b07a780f8ac9d2f7cc855e3b78ec60465d9d808690466c1f0bea792') {
|
||||||
|
pending.push(import('./chunks/chunk-9067a52cbc57d972c6155501cef5bd27a816f0c7adf6390a603c7b4e9bbddce3.js'));
|
||||||
}
|
}
|
||||||
return Promise.all(pending);
|
return Promise.all(pending);
|
||||||
}
|
}
|
||||||
|
|||||||
+81
-81
@@ -7,113 +7,113 @@ import 'Frontend/generated/jar-resources/ReactRouterOutletElement.tsx';
|
|||||||
|
|
||||||
const loadOnDemand = (key) => {
|
const loadOnDemand = (key) => {
|
||||||
const pending = [];
|
const pending = [];
|
||||||
if (key === '9f40817b690e11a5b23a3159bb774f15430c23768f26dc0d15efccc3d65223ac') {
|
|
||||||
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
|
||||||
}
|
|
||||||
if (key === '2140ca6af7e9a5ff94d8a66b6e5a23e6d184ef7901ca73d33b3c30f74f94708a') {
|
|
||||||
pending.push(import('./chunks/chunk-eab035454a058f437d12e5ccf64ef647181029b965d466c829f5a569b2865dd3.js'));
|
|
||||||
}
|
|
||||||
if (key === 'c5f987a4896c791d13aeb6a03a4783ff03df304750a7db930a18d399dba31509') {
|
if (key === 'c5f987a4896c791d13aeb6a03a4783ff03df304750a7db930a18d399dba31509') {
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
}
|
}
|
||||||
if (key === 'b4afd0c0906e26b51836d41720e1b8d91a7cacf0fd42e089f1e0fbc2ee27a5bb') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === 'a886fd99e05dd2c5ce3e4b643dc8d6d29189dee784fa78678d8ab4fcb89216c0') {
|
|
||||||
pending.push(import('./chunks/chunk-4643e5b30878e982c301927c78b86af508e91d91560341ef83fa0e6bf79dedee.js'));
|
|
||||||
}
|
|
||||||
if (key === 'c0816c2bfaa97d6f3e7eea83c5478186457bdc79cfe3f284c42e192d68607157') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === '803ed44611ffeb1bcb1f604f267f09af48ef8a5bc8d765e481b67ed59f9b880a') {
|
|
||||||
pending.push(import('./chunks/chunk-5f54f3be0c0d908c0477e60450f72fbb60bfa31e84e7d18b39841a003d995f86.js'));
|
|
||||||
}
|
|
||||||
if (key === '96ecac798fbbe91ef146ac4a25f5c31827427ca0f106ba66e63fc1fd6c27b83d') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === '28b5e9145505152a4dbd9600977b8177d3a161906581ca5a1a923affc812a761') {
|
|
||||||
pending.push(import('./chunks/chunk-5e457c2d02d56b468106fc6b3ad37f1215d95af443e88a25314d583049fa7ada.js'));
|
|
||||||
}
|
|
||||||
if (key === '2062a3f35e8fdb051e9362a8a8895d80ef719832e9394babcbaab3aac56d4f0e') {
|
|
||||||
pending.push(import('./chunks/chunk-0980a344d761e100f78a8df513a682bdcc702314eb249c64b972cbe64fc2a813.js'));
|
|
||||||
}
|
|
||||||
if (key === '39b4a07b2b07a780f8ac9d2f7cc855e3b78ec60465d9d808690466c1f0bea792') {
|
|
||||||
pending.push(import('./chunks/chunk-9067a52cbc57d972c6155501cef5bd27a816f0c7adf6390a603c7b4e9bbddce3.js'));
|
|
||||||
}
|
|
||||||
if (key === '4e356c0939a28ab8766b0375ca6cb478b6163eb9ad80745a9e2f2fc80997b6a2') {
|
|
||||||
pending.push(import('./chunks/chunk-82d1654bda3835e43a2a0c9a2e52925f12dc4a2fcd20b5f40603dbbe6eb1ff23.js'));
|
|
||||||
}
|
|
||||||
if (key === '53ff1588255d7e5486eb67452c8d9c43baea0eecd9bd509fd7f0c55b3cccaa0d') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === '83045a9760ea76fd534ed71ed553dc7cf2595a5d697e3c7bc55470d219770d05') {
|
if (key === '83045a9760ea76fd534ed71ed553dc7cf2595a5d697e3c7bc55470d219770d05') {
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
}
|
}
|
||||||
if (key === 'ac7af13a0805d3ce8a287e9d860521c82aaf55d2c448ce3f62a85d44216a8189') {
|
if (key === '2140ca6af7e9a5ff94d8a66b6e5a23e6d184ef7901ca73d33b3c30f74f94708a') {
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
pending.push(import('./chunks/chunk-eab035454a058f437d12e5ccf64ef647181029b965d466c829f5a569b2865dd3.js'));
|
||||||
}
|
}
|
||||||
if (key === '5d710852587ce9ebabfac9ed950f6b11bc3a87d96860d4efdfb61dab7ae54091') {
|
if (key === '803ed44611ffeb1bcb1f604f267f09af48ef8a5bc8d765e481b67ed59f9b880a') {
|
||||||
|
pending.push(import('./chunks/chunk-5f54f3be0c0d908c0477e60450f72fbb60bfa31e84e7d18b39841a003d995f86.js'));
|
||||||
|
}
|
||||||
|
if (key === 'b4afd0c0906e26b51836d41720e1b8d91a7cacf0fd42e089f1e0fbc2ee27a5bb') {
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
}
|
}
|
||||||
if (key === '2b0ca0e51ded6027d3f9e464513210d5503ab2a9bc532de5cfc81d78a58f422f') {
|
|
||||||
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
|
||||||
}
|
|
||||||
if (key === '68a5f871903ca703f0fac8dd0072e1bfc082ffa14aa445026be6e1eb6cfe1bd0') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === 'bfac19b5aab9cd5a47ff4a66f2a839ebbb4889867824be809c5dc3a3d47f94b8') {
|
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
|
||||||
}
|
|
||||||
if (key === '3e87cbb0d40d50da9c3b69d0dada85fe9b7f2f4bae2b79c8f0408a798b120549') {
|
|
||||||
pending.push(import('./chunks/chunk-5e457c2d02d56b468106fc6b3ad37f1215d95af443e88a25314d583049fa7ada.js'));
|
|
||||||
}
|
|
||||||
if (key === 'dca37e6961f625182e78a722a61c0eb9b8a2357b5e787fe616fe5993c2db5133') {
|
|
||||||
pending.push(import('./chunks/chunk-dbbf8c73fe9c2c76fb9306f96bfa7ff293eff804705670e651ac024bea9551bd.js'));
|
|
||||||
}
|
|
||||||
if (key === '4e76ad4411fbf58731cdad95d28e6fe0057fb4a97ffd54f193e52b111462552d') {
|
|
||||||
pending.push(import('./chunks/chunk-ba68801837253f4860e3f4374e9ae9e48ccba4ca6110cac47de37e40d7b6199e.js'));
|
|
||||||
}
|
|
||||||
if (key === '92a567041312ea4c7faa4dd5bcc74f73cd3b16dd721624d0bc68d1704138abe5') {
|
|
||||||
pending.push(import('./chunks/chunk-4f16ee624545500a5dde991be4f07a661d86951bbc2c07a010daabbd423b1909.js'));
|
|
||||||
}
|
|
||||||
if (key === 'becc589ccd4f7ac5e6f13c45eecc05f61d67ce57f585f1655800354ff4b55f3c') {
|
|
||||||
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
|
||||||
}
|
|
||||||
if (key === '1ac8bd8d734d2603947b1db0616ea4dae4ce691a5264f5c9aeafcaa897e0a872') {
|
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
|
||||||
}
|
|
||||||
if (key === '391ac9fb4bd95bc899c5911c48a6f3b549b118923653444f5ab50acddfb6f291') {
|
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
|
||||||
}
|
|
||||||
if (key === 'a4eeeab53770801e478b15e6b179e5689afd43fc753f347e0c51ce934bd28a6c') {
|
|
||||||
pending.push(import('./chunks/chunk-0980a344d761e100f78a8df513a682bdcc702314eb249c64b972cbe64fc2a813.js'));
|
|
||||||
}
|
|
||||||
if (key === 'ffd87f879398d3b6942e852eda9b64e28a124c8a61938c867efb360a5cf1d32e') {
|
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
|
||||||
}
|
|
||||||
if (key === '81bbe2e11b6af26d0d292e2e18bde37546d5b9ec24f4f4f78df2bc9f9c21f431') {
|
if (key === '81bbe2e11b6af26d0d292e2e18bde37546d5b9ec24f4f4f78df2bc9f9c21f431') {
|
||||||
pending.push(import('./chunks/chunk-ba68801837253f4860e3f4374e9ae9e48ccba4ca6110cac47de37e40d7b6199e.js'));
|
pending.push(import('./chunks/chunk-ba68801837253f4860e3f4374e9ae9e48ccba4ca6110cac47de37e40d7b6199e.js'));
|
||||||
}
|
}
|
||||||
if (key === '8904207b9d538b9eedfaaefd8e82d3415de8513bda9d6bb76f4012f0f336d200') {
|
if (key === '8904207b9d538b9eedfaaefd8e82d3415de8513bda9d6bb76f4012f0f336d200') {
|
||||||
pending.push(import('./chunks/chunk-34d02800587f0d3950a0cf1f566793c706accc702ca93d2f51ab25f74d29bd84.js'));
|
pending.push(import('./chunks/chunk-34d02800587f0d3950a0cf1f566793c706accc702ca93d2f51ab25f74d29bd84.js'));
|
||||||
}
|
}
|
||||||
if (key === '3665d7598c9ed4112997a0493fb890edf38d23d3bd9fcb0eb09bf3e045f5228b') {
|
if (key === 'c0816c2bfaa97d6f3e7eea83c5478186457bdc79cfe3f284c42e192d68607157') {
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
}
|
}
|
||||||
if (key === '58cc18f5518623050c6a99d327dd540140b9b0dca851a76a70e688291f661e11') {
|
if (key === 'a886fd99e05dd2c5ce3e4b643dc8d6d29189dee784fa78678d8ab4fcb89216c0') {
|
||||||
pending.push(import('./chunks/chunk-94486ac490d7aebdfb2696122da529dc74cba54f50b75f3f737368bd86850d36.js'));
|
pending.push(import('./chunks/chunk-4643e5b30878e982c301927c78b86af508e91d91560341ef83fa0e6bf79dedee.js'));
|
||||||
}
|
}
|
||||||
if (key === '89c2914ed5d19860240c0c1d3dba174616dc452c4ba8ae039f016cf9592e9432') {
|
if (key === '89c2914ed5d19860240c0c1d3dba174616dc452c4ba8ae039f016cf9592e9432') {
|
||||||
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
}
|
}
|
||||||
|
if (key === '2062a3f35e8fdb051e9362a8a8895d80ef719832e9394babcbaab3aac56d4f0e') {
|
||||||
|
pending.push(import('./chunks/chunk-0980a344d761e100f78a8df513a682bdcc702314eb249c64b972cbe64fc2a813.js'));
|
||||||
|
}
|
||||||
|
if (key === 'e9df10b3be58513bb6452e4dbdce31e0b1dc33868fbba54ee72e82089cf39adf') {
|
||||||
|
pending.push(import('./chunks/chunk-34d02800587f0d3950a0cf1f566793c706accc702ca93d2f51ab25f74d29bd84.js'));
|
||||||
|
}
|
||||||
|
if (key === '92a567041312ea4c7faa4dd5bcc74f73cd3b16dd721624d0bc68d1704138abe5') {
|
||||||
|
pending.push(import('./chunks/chunk-4f16ee624545500a5dde991be4f07a661d86951bbc2c07a010daabbd423b1909.js'));
|
||||||
|
}
|
||||||
|
if (key === '58cc18f5518623050c6a99d327dd540140b9b0dca851a76a70e688291f661e11') {
|
||||||
|
pending.push(import('./chunks/chunk-94486ac490d7aebdfb2696122da529dc74cba54f50b75f3f737368bd86850d36.js'));
|
||||||
|
}
|
||||||
|
if (key === '5d710852587ce9ebabfac9ed950f6b11bc3a87d96860d4efdfb61dab7ae54091') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
if (key === 'e5db1fd1f39047ab2857e9ef118681c3f831f39efbbb2a6f000e9475b77444e5') {
|
if (key === 'e5db1fd1f39047ab2857e9ef118681c3f831f39efbbb2a6f000e9475b77444e5') {
|
||||||
pending.push(import('./chunks/chunk-94486ac490d7aebdfb2696122da529dc74cba54f50b75f3f737368bd86850d36.js'));
|
pending.push(import('./chunks/chunk-94486ac490d7aebdfb2696122da529dc74cba54f50b75f3f737368bd86850d36.js'));
|
||||||
}
|
}
|
||||||
|
if (key === '4e356c0939a28ab8766b0375ca6cb478b6163eb9ad80745a9e2f2fc80997b6a2') {
|
||||||
|
pending.push(import('./chunks/chunk-82d1654bda3835e43a2a0c9a2e52925f12dc4a2fcd20b5f40603dbbe6eb1ff23.js'));
|
||||||
|
}
|
||||||
|
if (key === 'a4eeeab53770801e478b15e6b179e5689afd43fc753f347e0c51ce934bd28a6c') {
|
||||||
|
pending.push(import('./chunks/chunk-0980a344d761e100f78a8df513a682bdcc702314eb249c64b972cbe64fc2a813.js'));
|
||||||
|
}
|
||||||
|
if (key === '1ac8bd8d734d2603947b1db0616ea4dae4ce691a5264f5c9aeafcaa897e0a872') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
|
if (key === '9f40817b690e11a5b23a3159bb774f15430c23768f26dc0d15efccc3d65223ac') {
|
||||||
|
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
||||||
|
}
|
||||||
|
if (key === 'dca37e6961f625182e78a722a61c0eb9b8a2357b5e787fe616fe5993c2db5133') {
|
||||||
|
pending.push(import('./chunks/chunk-dbbf8c73fe9c2c76fb9306f96bfa7ff293eff804705670e651ac024bea9551bd.js'));
|
||||||
|
}
|
||||||
|
if (key === '96ecac798fbbe91ef146ac4a25f5c31827427ca0f106ba66e63fc1fd6c27b83d') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
|
if (key === '4e76ad4411fbf58731cdad95d28e6fe0057fb4a97ffd54f193e52b111462552d') {
|
||||||
|
pending.push(import('./chunks/chunk-ba68801837253f4860e3f4374e9ae9e48ccba4ca6110cac47de37e40d7b6199e.js'));
|
||||||
|
}
|
||||||
|
if (key === '53ff1588255d7e5486eb67452c8d9c43baea0eecd9bd509fd7f0c55b3cccaa0d') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
|
if (key === 'ac7af13a0805d3ce8a287e9d860521c82aaf55d2c448ce3f62a85d44216a8189') {
|
||||||
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === '3e87cbb0d40d50da9c3b69d0dada85fe9b7f2f4bae2b79c8f0408a798b120549') {
|
||||||
|
pending.push(import('./chunks/chunk-5e457c2d02d56b468106fc6b3ad37f1215d95af443e88a25314d583049fa7ada.js'));
|
||||||
|
}
|
||||||
|
if (key === '68a5f871903ca703f0fac8dd0072e1bfc082ffa14aa445026be6e1eb6cfe1bd0') {
|
||||||
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
|
}
|
||||||
|
if (key === '28b5e9145505152a4dbd9600977b8177d3a161906581ca5a1a923affc812a761') {
|
||||||
|
pending.push(import('./chunks/chunk-5e457c2d02d56b468106fc6b3ad37f1215d95af443e88a25314d583049fa7ada.js'));
|
||||||
|
}
|
||||||
|
if (key === 'ffd87f879398d3b6942e852eda9b64e28a124c8a61938c867efb360a5cf1d32e') {
|
||||||
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === 'becc589ccd4f7ac5e6f13c45eecc05f61d67ce57f585f1655800354ff4b55f3c') {
|
||||||
|
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
||||||
|
}
|
||||||
if (key === '0ca48a0e12f1dbf4945f761a93a7df202b2908327a63c52f2f060559c2bcc7f0') {
|
if (key === '0ca48a0e12f1dbf4945f761a93a7df202b2908327a63c52f2f060559c2bcc7f0') {
|
||||||
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
pending.push(import('./chunks/chunk-79565f1f0670029d94da9f00948c9fc73575b3c6dc12ea07cca72303e68fbd57.js'));
|
||||||
}
|
}
|
||||||
if (key === 'e9df10b3be58513bb6452e4dbdce31e0b1dc33868fbba54ee72e82089cf39adf') {
|
if (key === '3665d7598c9ed4112997a0493fb890edf38d23d3bd9fcb0eb09bf3e045f5228b') {
|
||||||
pending.push(import('./chunks/chunk-34d02800587f0d3950a0cf1f566793c706accc702ca93d2f51ab25f74d29bd84.js'));
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === 'bfac19b5aab9cd5a47ff4a66f2a839ebbb4889867824be809c5dc3a3d47f94b8') {
|
||||||
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === '2b0ca0e51ded6027d3f9e464513210d5503ab2a9bc532de5cfc81d78a58f422f') {
|
||||||
|
pending.push(import('./chunks/chunk-c2a7e008275ccefd2b71f714af29d0186f49edb012ac8081cb81d0a896594da6.js'));
|
||||||
|
}
|
||||||
|
if (key === '391ac9fb4bd95bc899c5911c48a6f3b549b118923653444f5ab50acddfb6f291') {
|
||||||
|
pending.push(import('./chunks/chunk-7eb0e92a81bb7e9cb5e0c25a28ae3459e5223c6322ff3569292a66f45a9990ae.js'));
|
||||||
|
}
|
||||||
|
if (key === '39b4a07b2b07a780f8ac9d2f7cc855e3b78ec60465d9d808690466c1f0bea792') {
|
||||||
|
pending.push(import('./chunks/chunk-9067a52cbc57d972c6155501cef5bd27a816f0c7adf6390a603c7b4e9bbddce3.js'));
|
||||||
}
|
}
|
||||||
return Promise.all(pending);
|
return Promise.all(pending);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package de.thpeetz.kontor.data.media;
|
||||||
|
|
||||||
|
import de.thpeetz.kontor.data.common.AbstractEntity;
|
||||||
|
import jakarta.annotation.Nullable;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
import jakarta.persistence.UniqueConstraint;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@Entity
|
||||||
|
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "url" }) })
|
||||||
|
public class MediaMusic extends AbstractEntity {
|
||||||
|
|
||||||
|
private String url;
|
||||||
|
|
||||||
|
private boolean review;
|
||||||
|
|
||||||
|
private boolean shouldDownload;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private String fileName;
|
||||||
|
}
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
package de.thpeetz.kontor.repository.media;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
|
||||||
|
import de.thpeetz.kontor.data.media.MediaMusic;
|
||||||
|
|
||||||
|
public interface MediaMusicRepository extends JpaRepository<MediaMusic, String> {
|
||||||
|
@Query("select m from MediaMusic m " +
|
||||||
|
"where lower(m.url) like lower(concat('%', :searchTerm, '%')) or lower(m.title) like lower(concat('%', :searchTerm, '%'))")
|
||||||
|
List<MediaMusic> search(@Param("searchTerm") String searchTerm);
|
||||||
|
|
||||||
|
List<MediaMusic> findByShouldDownload(Boolean shouldDownload);
|
||||||
|
|
||||||
|
List<MediaMusic> findByReview(Boolean review);
|
||||||
|
|
||||||
|
List<MediaMusic> findByReviewAndShouldDownload(Boolean review, Boolean shouldDownload);
|
||||||
|
|
||||||
|
MediaMusic findByUrl(String url);
|
||||||
|
|
||||||
|
@Query("select m from MediaMusic m " +
|
||||||
|
"where lower(m.url) like lower(concat('%', :searchTerm, '%')) or lower(m.title) like lower(concat('%', :searchTerm, '%')) "
|
||||||
|
+
|
||||||
|
"AND m.review=:review AND m.shouldDownload=:download")
|
||||||
|
List<MediaMusic> search(
|
||||||
|
@Param("searchTerm") String searchTerm,
|
||||||
|
@Param("review") boolean searchReview,
|
||||||
|
@Param("download") boolean searchDownload);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user