diff --git a/kontor-echo/cibuild b/kontor-echo/cibuild index ceb812e..700078c 100755 --- a/kontor-echo/cibuild +++ b/kontor-echo/cibuild @@ -9,5 +9,13 @@ cd "$(dirname "$0")/.." source version echo " => Baue Image localhost/kontor-echo:$kontorVersion" -buildah build -t kontor-echo:$kontorVersion kontor-echo +buildah build \ + -t kontor-echo:$kontorVersion \ + --build-arg VERSION=0.4.0-SNAPSHOT \ + --build-arg COMMIT=$(git rev-parse HEAD) \ + --build-arg DATE=$(date +%Y-%m-%dT%H:%M:%S) \ + kontor-echo + +cd kontor-echo +go build -ldflags "-X kontor-api-echo/internal/globals.Version=0.4.0-SNAPSHOT -X kontor-api-echo/internal/globals.Commit=`git rev-parse HEAD` -X kontor-api-echo/internal/globals.Date=`date +%Y-%m-%dT%H:%M:%S`" -o ~/.local/bin/kontor-echo cmd/kontor-echo/main.go diff --git a/kontor-echo/cibuild.local b/kontor-echo/cibuild.local new file mode 100755 index 0000000..aca16ad --- /dev/null +++ b/kontor-echo/cibuild.local @@ -0,0 +1,14 @@ +#!/bin/bash + +# script/cibuild.local: + +set -e + +cd "$(dirname "$0")/.." + +source version + +cd kontor-echo + +go build -ldflags "-X kontor-api-echo/internal/globals.Version=0.4.0-SNAPSHOT -X kontor-api-echo/internal/globals.Commit=`git rev-parse HEAD` -X kontor-api-echo/internal/globals.Date=`date +%Y-%m-%dT%H:%M:%S`" -o ~/.local/bin/kontor-echo cmd/kontor-echo/main.go + diff --git a/kontor-echo/internal/handlers/media_actor_file.go b/kontor-echo/internal/handlers/media_actor_file.go index ca2bbe8..23c3bc2 100644 --- a/kontor-echo/internal/handlers/media_actor_file.go +++ b/kontor-echo/internal/handlers/media_actor_file.go @@ -75,7 +75,7 @@ func (handler *MediaActorFileHandler) ListPage(c *echo.Context) { c.JSON(http.StatusInternalServerError, map[string]string{"error": err.Error()}) return } - c.Render(http.StatusOK, "mediaactorfiles", map[string]string{ + c.Render(http.StatusOK, "mediaactorfiles", map[string]any{ "title": "Kontor MediaActorFiles", "version": "0.4.0", "message": "MediaActorFiles...", diff --git a/kontor-echo/internal/handlers/media_lofi.go b/kontor-echo/internal/handlers/media_lofi.go index d90b0f7..9916eb8 100644 --- a/kontor-echo/internal/handlers/media_lofi.go +++ b/kontor-echo/internal/handlers/media_lofi.go @@ -222,7 +222,7 @@ func (handler *MediaLoFiHandler) DeletePage(c *echo.Context) { return } logger.Info("MediaLoFiHandler#DeletePage", "lofi", id) - c.Render(http.StatusOK, "lofi_delete", map[string]string{ + c.Render(http.StatusOK, "lofi_delete", map[string]any{ "title": "Kontor MediaFiles", "version": "0.4.0", "message": "MediaFiles...", diff --git a/kontor-echo/internal/repository/media_video.go b/kontor-echo/internal/repository/media_video.go index c45457b..74041fa 100644 --- a/kontor-echo/internal/repository/media_video.go +++ b/kontor-echo/internal/repository/media_video.go @@ -2,15 +2,11 @@ package repository import ( "context" - "database/sql" - "errors" - "fmt" - "kontor-api-echo/internal/helpers" "kontor-api-echo/internal/models" "log/slog" "time" - "github.com/google/uuid" + "github.com/labstack/echo/v5" "github.com/uptrace/bun" ) @@ -24,18 +20,21 @@ func (repository *MediaVideoRepository) Import(dtos models.MediaVideoDTOList) { slog.Info("importing", "index", index, "video", dto) model := dto.ConvertDTOToModel() existing_item := models.MediaVideo{ID: dto.ID} - result_existing := repository.db.First(&existing_item) - if result_existing.Error != nil { + err := repository.db.NewSelect().Model(&existing_item).Where("id = ?", dto.ID).Scan(context.Background()) + if err != nil { slog.Info("check existing id: not found - inserting") - result := repository.db.Create(&model) - if result.Error != nil { - slog.Info("error during import", "error", result.Error.Error()) + _, err := repository.db.NewInsert().Model(&model).Exec(context.Background()) + if err != nil { + slog.Info("error during import", "error", err.Error()) } } else { slog.Info("check existing id: found - updating") - result := repository.db.Save(&model) - if result.Error != nil { - slog.Info("error during updating", "error", result.Error.Error()) + _, err := repository.db.NewUpdate().Model(&model). + Set("updated_at = ? ", time.Now). + Where("id = ?", model.ID). + Exec(context.Background()) + if err != nil { + slog.Info("error during updating", "error", err.Error()) } } } @@ -49,79 +48,86 @@ func NewMediaVideoRepository(db *bun.DB) *MediaVideoRepository { func (repository *MediaVideoRepository) FindAll(context context.Context) ([]models.MediaVideo, error) { var videos []models.MediaVideo - result := repository.db.Find(&videos) - slog.Info("MediaVideoRepository#FindAll", "count", result.RowsAffected) + err := repository.db.NewSelect().Model(&videos).Scan(context) + if err != nil { + slog.Info(err.Error()) + return nil, echo.ErrInternalServerError + } + slog.Info("MediaVideoRepository#FindAll", "count", len(videos)) return videos, nil } func (repository *MediaVideoRepository) GetById(context context.Context, id string) (*models.MediaVideo, error) { - var video = models.MediaVideo{ID: id} + var video models.MediaVideo slog.Info("MediaVideoRepository#GetById", "id", id) - result := repository.db.First(&video) - if result.Error != nil { - slog.Info("MediaVideoRepository#GetById", "error", result.Error.Error()) + err := repository.db.NewSelect().Model(&video).Where("id = ?", id).Scan(context) + if err != nil { + return nil, err } - return &video, result.Error + return &video, nil } -func (repository *MediaVideoRepository) Add(context context.Context, url string) (*models.MediaVideo, error) { - slog.Info("MediaVideoRepository#Add", "url", url) - webLink := helpers.StripUrl(url, "v") - var video models.MediaVideo - search_result := repository.db.Where("url = ?", webLink).First(&video) - if search_result.RowsAffected > 0 { - slog.Info("search for existing url", "result", search_result, "video", video) - return &video, nil - } - if errors.Is(search_result.Error, sql.ErrNoRows) { - slog.Info("MediaVideoRepository#Add URL not found", "url", webLink) - video = models.MediaVideo{ - 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(&video) - if add_result.Error != nil { - slog.Info("add new MediaVideo", "error", add_result.Error) - return nil, add_result.Error - } - slog.Info("add new MediaVideo", "music", video) - return &video, nil - } - if search_result.Error != nil { - return nil, search_result.Error - } - return nil, fmt.Errorf("MediaVideoRepository#Add unknown error") -} +// func (repository *MediaVideoRepository) Add(context context.Context, url string) (*models.MediaVideo, error) { +// slog.Info("MediaVideoRepository#Add", "url", url) +// webLink := helpers.StripUrl(url, "v") +// var video models.MediaVideo +// search_result := repository.db.Where("url = ?", webLink).First(&video) +// if search_result.RowsAffected > 0 { +// slog.Info("search for existing url", "result", search_result, "video", video) +// return &video, nil +// } +// if errors.Is(search_result.Error, sql.ErrNoRows) { +// slog.Info("MediaVideoRepository#Add URL not found", "url", webLink) +// video = models.MediaVideo{ +// 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(&video) +// if add_result.Error != nil { +// slog.Info("add new MediaVideo", "error", add_result.Error) +// return nil, add_result.Error +// } +// slog.Info("add new MediaVideo", "music", video) +// return &video, nil +// } +// if search_result.Error != nil { +// return nil, search_result.Error +// } +// return nil, fmt.Errorf("MediaVideoRepository#Add unknown error") +// } func (repository *MediaVideoRepository) Update(context context.Context, update models.MediaVideoDTO) (*models.MediaVideo, error) { - slog.Info("MediaVideoRepository#Update", "music", update) - var video = models.MediaVideo{ID: update.ID} + slog.Info("MediaVideoRepository#Update", "video", update) + var video models.MediaVideo slog.Info("MediaVideoRepository#Update", "id", update.ID) - result := repository.db.First(&video) - if result.Error != nil { - slog.Info("MediaVideoRepository#Update", "error", result.Error.Error()) - return nil, result.Error + err := repository.db.NewSelect().Model(&video).Where("id = ?", update.ID).Scan(context) + if err != nil { + return nil, err + } + _, err = repository.db.NewUpdate().Model(&video). + Set("updated_at = ? ", time.Now). + Where("id = ?", update.ID). + Exec(context) + if err != nil { + slog.Info("error during updating", "error", err.Error()) } - video.Update(update) - repository.db.Save(&video) return &video, nil } func (repository *MediaVideoRepository) Delete(context context.Context, id string) error { - var actor = models.MediaVideo{ID: id} slog.Info("MediaVideoRepository#Delete", "id", id) - result := repository.db.Delete(&actor) - if result.Error != nil { - slog.Info("MediaVideoRepository#Delete", "error", result.Error.Error()) + _, err := repository.db.NewDelete().Model((*models.MediaVideo)(nil)).Where("id = ?", id).Exec(context) + if err != nil { + slog.Info("MediaVideoRepository#Delete", "error", err.Error()) } - return result.Error + return err } diff --git a/kontor-echo/internal/repository/permission.go b/kontor-echo/internal/repository/permission.go index 8fee77a..918f4ff 100644 --- a/kontor-echo/internal/repository/permission.go +++ b/kontor-echo/internal/repository/permission.go @@ -4,7 +4,9 @@ import ( "context" "kontor-api-echo/internal/models" "log/slog" + "time" + "github.com/labstack/echo/v5" "github.com/uptrace/bun" ) @@ -18,33 +20,38 @@ func NewPermissionRepository(db *bun.DB) *PermissionRepository { } func (repository *PermissionRepository) FindAll(context context.Context) ([]models.Permission, error) { - var permissions []models.Permission - - result := repository.db.Find(&permissions) - slog.Info("ComicRepository#List", "count", result.RowsAffected) + err := repository.db.NewSelect().Model(&permissions).Scan(context) + if err != nil { + slog.Info(err.Error()) + return nil, echo.ErrInternalServerError + } + slog.Info("PermissionRepository#FindAll", "count", len(permissions)) return permissions, nil } -func (repository *PermissionRepository) Import(permissions models.PermissionDTOList) { +func (repository *PermissionRepository) Import(dtos models.PermissionDTOList) { slog.Info("PermissionRepository#Import") - for index, permission := range permissions { - slog.Info("importing", "index", index, "profile", permission) - model := permission.ConvertDTOToModel() - existing_item := models.Permission{ID: permission.ID} - result_existing := repository.db.First(&existing_item) - if result_existing.Error != nil { + for index, dto := range dtos { + slog.Info("importing", "index", index, "permission", dto) + model := dto.ConvertDTOToModel() + existing_item := models.Permission{ID: dto.ID} + err := repository.db.NewSelect().Model(&existing_item).Where("id = ?", dto.ID).Scan(context.Background()) + if err != nil { slog.Info("check existing id: not found - inserting") - result := repository.db.Create(&model) - if result.Error != nil { - slog.Info("error during import", "error", result.Error.Error()) + _, err := repository.db.NewInsert().Model(&model).Exec(context.Background()) + if err != nil { + slog.Info("error during import", "error", err.Error()) } } else { slog.Info("check existing id: found - updating") - result := repository.db.Save(&model) - if result.Error != nil { - slog.Info("error during updating", "error", result.Error.Error()) + _, err := repository.db.NewUpdate().Model(&model). + Set("updated_at = ? ", time.Now). + Where("id = ?", model.ID). + Exec(context.Background()) + if err != nil { + slog.Info("error during updating", "error", err.Error()) } } } diff --git a/kontor-echo/internal/repository/profile.go b/kontor-echo/internal/repository/profile.go index 708bae5..d3d498a 100644 --- a/kontor-echo/internal/repository/profile.go +++ b/kontor-echo/internal/repository/profile.go @@ -2,59 +2,67 @@ package repository import ( "context" - "kontor-api-gin/internal/models" + "kontor-api-echo/internal/models" "log/slog" + "time" - "gorm.io/gorm" + "github.com/labstack/echo/v5" + "github.com/uptrace/bun" ) type ProfileRepository struct { - db *gorm.DB + db *bun.DB } -func NewProfileRepository(db *gorm.DB) *ProfileRepository { +func NewProfileRepository(db *bun.DB) *ProfileRepository { repository := &ProfileRepository{db: db} return repository } func (repository *ProfileRepository) FindAll(context context.Context) ([]models.Profile, error) { var profiles []models.Profile - - result := repository.db.Find(&profiles) - slog.Info("ProfileRepository#FindAll", "count", result.RowsAffected) + err := repository.db.NewSelect().Model(&profiles).Scan(context) + if err != nil { + slog.Info(err.Error()) + return nil, echo.ErrInternalServerError + } + slog.Info("MediaArticleRepository#FindAll", "count", len(profiles)) return profiles, nil } -func (repository *ProfileRepository) FindProfileByEmail(email string) (*models.Profile, error) { +func (repository *ProfileRepository) FindProfileByEmail(context context.Context, email string) (*models.Profile, error) { var profile models.Profile + slog.Info("MediaArticleRepository#GetById", "email", email) - err := repository.db.Model(models.Profile{}).Where("email = ?", email).Take(&profile).Error - + err := repository.db.NewSelect().Model(&profile).Where("email = ?", email).Scan(context) if err != nil { return nil, err } return &profile, nil } -func (repository *ProfileRepository) Import(profiles models.ProfileDTOList) { +func (repository *ProfileRepository) Import(dtos models.ProfileDTOList) { slog.Info("ProfileRepository#Import") - for index, profile := range profiles { - slog.Info("importing", "index", index, "profile", profile) - model := profile.ConvertDTOToModel() - existing_profile := models.Profile{ID: profile.ID} - result_existing := repository.db.First(&existing_profile) - if result_existing.Error != nil { + for index, dto := range dtos { + slog.Info("importing", "index", index, "profile", dto) + model := dto.ConvertDTOToModel() + existing_item := models.Profile{ID: dto.ID} + err := repository.db.NewSelect().Model(&existing_item).Where("id = ?", dto.ID).Scan(context.Background()) + if err != nil { slog.Info("check existing id: not found - inserting") - result := repository.db.Create(&model) - if result.Error != nil { - slog.Info("error during import", "error", result.Error.Error()) + _, err := repository.db.NewInsert().Model(&model).Exec(context.Background()) + if err != nil { + slog.Info("error during import", "error", err.Error()) } } else { slog.Info("check existing id: found - updating") - result := repository.db.Save(&model) - if result.Error != nil { - slog.Info("error during updating", "error", result.Error.Error()) + _, err := repository.db.NewUpdate().Model(&model). + Set("updated_at = ? ", time.Now). + Where("id = ?", model.ID). + Exec(context.Background()) + if err != nil { + slog.Info("error during updating", "error", err.Error()) } } } diff --git a/kontor-echo/internal/service/assignment.go b/kontor-echo/internal/service/assignment.go index c122b63..dc7dc92 100644 --- a/kontor-echo/internal/service/assignment.go +++ b/kontor-echo/internal/service/assignment.go @@ -2,8 +2,8 @@ package service import ( "context" - "kontor-api-gin/internal/models" - "kontor-api-gin/internal/repository" + "kontor-api-echo/internal/models" + "kontor-api-echo/internal/repository" "log/slog" ) diff --git a/kontor-echo/internal/service/media_actor.go b/kontor-echo/internal/service/media_actor.go index b13d690..69c7527 100644 --- a/kontor-echo/internal/service/media_actor.go +++ b/kontor-echo/internal/service/media_actor.go @@ -2,8 +2,8 @@ package service import ( "context" - "kontor-api-gin/internal/models" - "kontor-api-gin/internal/repository" + "kontor-api-echo/internal/models" + "kontor-api-echo/internal/repository" "log/slog" ) diff --git a/kontor-echo/internal/service/media_actor_file.go b/kontor-echo/internal/service/media_actor_file.go index 1373fb2..131d1a6 100644 --- a/kontor-echo/internal/service/media_actor_file.go +++ b/kontor-echo/internal/service/media_actor_file.go @@ -2,8 +2,8 @@ package service import ( "context" - "kontor-api-gin/internal/models" - "kontor-api-gin/internal/repository" + "kontor-api-echo/internal/models" + "kontor-api-echo/internal/repository" "log/slog" ) diff --git a/kontor-echo/internal/service/media_file.go b/kontor-echo/internal/service/media_file.go index af05bc8..96625a0 100644 --- a/kontor-echo/internal/service/media_file.go +++ b/kontor-echo/internal/service/media_file.go @@ -2,8 +2,8 @@ package service import ( "context" - "kontor-api-gin/internal/models" - "kontor-api-gin/internal/repository" + "kontor-api-echo/internal/models" + "kontor-api-echo/internal/repository" "log/slog" ) diff --git a/kontor-echo/internal/service/media_lofi.go b/kontor-echo/internal/service/media_lofi.go index b4bafb4..8f6f255 100644 --- a/kontor-echo/internal/service/media_lofi.go +++ b/kontor-echo/internal/service/media_lofi.go @@ -2,8 +2,8 @@ package service import ( "context" - "kontor-api-gin/internal/models" - "kontor-api-gin/internal/repository" + "kontor-api-echo/internal/models" + "kontor-api-echo/internal/repository" "log/slog" ) diff --git a/kontor-echo/internal/service/media_music.go b/kontor-echo/internal/service/media_music.go index 483aeba..e170bf2 100644 --- a/kontor-echo/internal/service/media_music.go +++ b/kontor-echo/internal/service/media_music.go @@ -2,8 +2,8 @@ package service import ( "context" - "kontor-api-gin/internal/models" - "kontor-api-gin/internal/repository" + "kontor-api-echo/internal/models" + "kontor-api-echo/internal/repository" "log/slog" ) diff --git a/kontor-echo/internal/service/media_video.go b/kontor-echo/internal/service/media_video.go index 3ec28e0..c27510c 100644 --- a/kontor-echo/internal/service/media_video.go +++ b/kontor-echo/internal/service/media_video.go @@ -2,8 +2,8 @@ package service import ( "context" - "kontor-api-gin/internal/models" - "kontor-api-gin/internal/repository" + "kontor-api-echo/internal/models" + "kontor-api-echo/internal/repository" "log/slog" ) diff --git a/kontor-echo/internal/service/permission.go b/kontor-echo/internal/service/permission.go index 9b98102..c0737b9 100644 --- a/kontor-echo/internal/service/permission.go +++ b/kontor-echo/internal/service/permission.go @@ -2,8 +2,8 @@ package service import ( "context" - "kontor-api-gin/internal/models" - "kontor-api-gin/internal/repository" + "kontor-api-echo/internal/models" + "kontor-api-echo/internal/repository" "log/slog" ) diff --git a/kontor-echo/internal/service/profile.go b/kontor-echo/internal/service/profile.go index 95a484c..fbc16b7 100644 --- a/kontor-echo/internal/service/profile.go +++ b/kontor-echo/internal/service/profile.go @@ -2,8 +2,8 @@ package service import ( "context" - "kontor-api-gin/internal/models" - "kontor-api-gin/internal/repository" + "kontor-api-echo/internal/models" + "kontor-api-echo/internal/repository" "log/slog" )