diff --git a/routers/api/v1/licensing/download.go b/routers/api/v1/licensing/download.go index 32adc6f852..349da31b93 100644 --- a/routers/api/v1/licensing/download.go +++ b/routers/api/v1/licensing/download.go @@ -113,7 +113,8 @@ func ServeDownload(ctx *context.APIContext) { } // Find ZIP attachment - attachments, err := repo_model.GetAttachmentsByReleaseID(ctx, targetRelease.ID) + var attachments []*repo_model.Attachment + err = db.GetEngine(ctx).Where("release_id = ?", targetRelease.ID).Find(&attachments) if err != nil { ctx.APIError(http.StatusInternalServerError, "failed to get attachments") return diff --git a/routers/api/v1/licensing/manage.go b/routers/api/v1/licensing/manage.go index f27d378d6b..6e716028b0 100644 --- a/routers/api/v1/licensing/manage.go +++ b/routers/api/v1/licensing/manage.go @@ -4,12 +4,14 @@ package licensing import ( + "encoding/json" "net/http" "strconv" "time" + "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db" licensing_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licensing" - "code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/json" + mojo_json "code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/json" "code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/log" "code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/timeutil" "code.mokoconsulting.tech/MokoConsulting/MokoGitea/services/context" @@ -28,7 +30,7 @@ type createLicenseRequest struct { // CreateLicense handles POST /api/v1/licensing/licenses func CreateLicense(ctx *context.APIContext) { var req createLicenseRequest - if err := ctx.BindJSON(&req); err != nil { + if err := json.NewDecoder(ctx.Req.Body).Decode(&req); err != nil { ctx.APIError(http.StatusBadRequest, "invalid request body") return } @@ -83,7 +85,7 @@ func ListLicenses(ctx *context.APIContext) { // For now, get all licenses (pagination via offset) // TODO: add proper pagination to the model layer var licenses []*licensing_model.License - err := ctx.Orm().Limit(limit, (page-1)*limit).Find(&licenses) + err := db.GetEngine(ctx).Limit(limit, (page-1)*limit).Find(&licenses) if err != nil { ctx.APIError(http.StatusInternalServerError, "failed to list licenses") return @@ -106,7 +108,7 @@ func GetLicense(ctx *context.APIContext) { license, err := licensing_model.GetLicenseByID(ctx, id) if err != nil || license == nil { - ctx.NotFound() + ctx.APIErrorNotFound() return } @@ -160,12 +162,12 @@ func UpdateLicense(ctx *context.APIContext) { license, err := licensing_model.GetLicenseByID(ctx, id) if err != nil || license == nil { - ctx.NotFound() + ctx.APIErrorNotFound() return } var req updateLicenseRequest - if err := ctx.BindJSON(&req); err != nil { + if err := json.NewDecoder(ctx.Req.Body).Decode(&req); err != nil { ctx.APIError(http.StatusBadRequest, "invalid request body") return } @@ -205,7 +207,7 @@ func UpdateLicense(ctx *context.APIContext) { } if len(cols) > 0 { cols = append(cols, "updated_at") - ctx.Orm().ID(id).Cols(cols...).Update(license) + db.GetEngine(ctx).ID(id).Cols(cols...).Update(license) } ctx.JSON(http.StatusOK, licenseToJSON(ctx, license)) @@ -254,7 +256,7 @@ func MyLicenseDomains(ctx *context.APIContext) { license, err := licensing_model.GetLicenseByID(ctx, id) if err != nil || license == nil || license.UserID != ctx.Doer.ID { - ctx.NotFound() + ctx.APIErrorNotFound() return } @@ -285,7 +287,7 @@ func MyDeactivateDomain(ctx *context.APIContext) { license, err := licensing_model.GetLicenseByID(ctx, id) if err != nil || license == nil || license.UserID != ctx.Doer.ID { - ctx.NotFound() + ctx.APIErrorNotFound() return } @@ -326,12 +328,12 @@ type createTierRequest struct { // CreateTier handles POST /api/v1/licensing/tiers func CreateTier(ctx *context.APIContext) { var req createTierRequest - if err := ctx.BindJSON(&req); err != nil { + if err := json.NewDecoder(ctx.Req.Body).Decode(&req); err != nil { ctx.APIError(http.StatusBadRequest, "invalid request body") return } - reposJSON, _ := json.Marshal(req.Repos) + reposJSON, _ := mojo_json.Marshal(req.Repos) tier := &licensing_model.ProductTier{ TierKey: req.TierKey, TierName: req.TierName, @@ -340,7 +342,7 @@ func CreateTier(ctx *context.APIContext) { SortOrder: req.SortOrder, } - _, err := ctx.Orm().Insert(tier) + _, err := db.GetEngine(ctx).Insert(tier) if err != nil { ctx.APIError(http.StatusInternalServerError, "failed to create tier") return @@ -365,14 +367,14 @@ func UpdateTier(ctx *context.APIContext) { } tier := new(licensing_model.ProductTier) - has, err := ctx.Orm().ID(id).Get(tier) + has, err := db.GetEngine(ctx).ID(id).Get(tier) if err != nil || !has { - ctx.NotFound() + ctx.APIErrorNotFound() return } var req updateTierRequest - if err := ctx.BindJSON(&req); err != nil { + if err := json.NewDecoder(ctx.Req.Body).Decode(&req); err != nil { ctx.APIError(http.StatusBadRequest, "invalid request body") return } @@ -383,7 +385,7 @@ func UpdateTier(ctx *context.APIContext) { cols = append(cols, "tier_name") } if req.Repos != nil { - reposJSON, _ := json.Marshal(req.Repos) + reposJSON, _ := mojo_json.Marshal(req.Repos) tier.Repos = string(reposJSON) cols = append(cols, "repos") } @@ -397,7 +399,7 @@ func UpdateTier(ctx *context.APIContext) { } if len(cols) > 0 { - ctx.Orm().ID(id).Cols(cols...).Update(tier) + db.GetEngine(ctx).ID(id).Cols(cols...).Update(tier) } ctx.JSON(http.StatusOK, tierToJSON(tier)) @@ -413,19 +415,19 @@ func DeleteTier(ctx *context.APIContext) { // Check if any licenses use this tier tier := new(licensing_model.ProductTier) - has, _ := ctx.Orm().ID(id).Get(tier) + has, _ := db.GetEngine(ctx).ID(id).Get(tier) if !has { - ctx.NotFound() + ctx.APIErrorNotFound() return } - count, _ := ctx.Orm().Where("tier = ?", tier.TierKey).Count(new(licensing_model.License)) + count, _ := db.GetEngine(ctx).Where("tier = ?", tier.TierKey).Count(new(licensing_model.License)) if count > 0 { ctx.APIError(http.StatusConflict, "cannot delete tier with active licenses") return } - ctx.Orm().ID(id).Delete(new(licensing_model.ProductTier)) + db.GetEngine(ctx).ID(id).Delete(new(licensing_model.ProductTier)) ctx.Status(http.StatusNoContent) } diff --git a/routers/web/admin/license_tiers.go b/routers/web/admin/license_tiers.go index 03c8e46ea2..f8b6890680 100644 --- a/routers/web/admin/license_tiers.go +++ b/routers/web/admin/license_tiers.go @@ -7,6 +7,7 @@ import ( "net/http" "strconv" + "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db" licensing_model "code.mokoconsulting.tech/MokoConsulting/MokoGitea/models/licensing" "code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/json" "code.mokoconsulting.tech/MokoConsulting/MokoGitea/modules/templates" @@ -34,7 +35,7 @@ func LicenseTiers(ctx *context.Context) { views := make([]tierView, 0, len(tiers)) for _, t := range tiers { - count, _ := ctx.Orm().Where("tier = ?", t.TierKey).Count(new(licensing_model.License)) + count, _ := db.GetEngine(ctx).Where("tier = ?", t.TierKey).Count(new(licensing_model.License)) views = append(views, tierView{ ProductTier: t, Repos: t.RepoList(), @@ -69,7 +70,7 @@ func LicenseTierCreate(ctx *context.Context) { SortOrder: sortOrder, } - if _, err := ctx.Orm().Insert(tier); err != nil { + if _, err := db.GetEngine(ctx).Insert(tier); err != nil { ctx.Flash.Error("Failed to create tier: " + err.Error()) } else { ctx.Flash.Success("Tier '" + tierName + "' created") @@ -82,7 +83,7 @@ func LicenseTierUpdate(ctx *context.Context) { id, _ := strconv.ParseInt(ctx.PathParam("id"), 10, 64) tier := new(licensing_model.ProductTier) - has, _ := ctx.Orm().ID(id).Get(tier) + has, _ := db.GetEngine(ctx).ID(id).Get(tier) if !has { ctx.NotFound(nil) return @@ -95,7 +96,7 @@ func LicenseTierUpdate(ctx *context.Context) { tier.MaxDomains, _ = strconv.Atoi(ctx.FormString("max_domains")) tier.SortOrder, _ = strconv.Atoi(ctx.FormString("sort_order")) - if _, err := ctx.Orm().ID(id).Cols("tier_name", "repos", "max_domains", "sort_order").Update(tier); err != nil { + if _, err := db.GetEngine(ctx).ID(id).Cols("tier_name", "repos", "max_domains", "sort_order").Update(tier); err != nil { ctx.Flash.Error("Failed to update tier: " + err.Error()) } else { ctx.Flash.Success("Tier '" + tier.TierName + "' updated") @@ -108,20 +109,20 @@ func LicenseTierDelete(ctx *context.Context) { id, _ := strconv.ParseInt(ctx.FormString("id"), 10, 64) tier := new(licensing_model.ProductTier) - has, _ := ctx.Orm().ID(id).Get(tier) + has, _ := db.GetEngine(ctx).ID(id).Get(tier) if !has { ctx.NotFound(nil) return } - count, _ := ctx.Orm().Where("tier = ?", tier.TierKey).Count(new(licensing_model.License)) + count, _ := db.GetEngine(ctx).Where("tier = ?", tier.TierKey).Count(new(licensing_model.License)) if count > 0 { ctx.Flash.Error("Cannot delete tier with active licenses. Reassign licenses first.") ctx.Redirect("/admin/license-tiers") return } - ctx.Orm().ID(id).Delete(new(licensing_model.ProductTier)) + db.GetEngine(ctx).ID(id).Delete(new(licensing_model.ProductTier)) ctx.Flash.Success("Tier '" + tier.TierName + "' deleted") ctx.Redirect("/admin/license-tiers") }