feat: auto-generate display_name from extension_type + repo name #650

Closed
opened 2026-06-19 07:31:33 +00:00 by jmiller · 0 comments
Owner

Problem

The display_name field in repo metadata is manually set and often out of sync. It should be derived programmatically from extension_type + repo name — no stored field needed.

Solution

Remove display_name entirely

  1. Drop DB column: ALTER TABLE repo_manifest DROP COLUMN display_name (migration)
  2. Remove from struct: Delete DisplayName from RepoMetadata
  3. Remove from API request/response: Drop display_name from apiMetadata struct
  4. Remove from manifest sync: Don't read/write display_name
  5. Remove from settings UI: Drop from metadata.go form handling

Add DerivedDisplayName() method

On RepoMetadata, add a method that computes the display name at runtime:

func (m *RepoMetadata) DerivedDisplayName() string {
    if m.ExtensionType == \"\" || m.Name == \"\" {
        return m.Name
    }
    // \"package\" → \"Package\", \"component\" → \"Component\"
    label := strings.ToUpper(m.ExtensionType[:1]) + m.ExtensionType[1:]
    return label + \" - \" + m.Name
}

Use in update server feed

In resolveExtensionMetadata(), replace:

m.DisplayName = manifest.DisplayName  // stored field

With:

m.DisplayName = manifest.DerivedDisplayName()  // computed

Convention

extension_type Derived display_name
package Package - MokoSuiteBackup
component Component - MokoSuiteBackup
module Module - MokoJoomHero
template Template - MokoOnyx
plugin Plugin - MokoJoomTOS
library Library - MokoCore

API response

The API should still RETURN display_name in the response (computed, not stored) for backward compatibility. It just won't accept it as input.

Scope

  • models/repo/repo_manifest.go — remove field, add method, migration
  • routers/api/v1/repo/manifest.go — compute in response, ignore in request
  • routers/web/repo/setting/metadata.go — remove from form
  • services/repository/manifest_sync.go — remove from sync
  • services/updateserver/joomla.go — use DerivedDisplayName()
  • MCP server — display_name becomes read-only in response"
## Problem The `display_name` field in repo metadata is manually set and often out of sync. It should be **derived programmatically** from `extension_type` + repo name — no stored field needed. ## Solution ### Remove `display_name` entirely 1. **Drop DB column**: `ALTER TABLE repo_manifest DROP COLUMN display_name` (migration) 2. **Remove from struct**: Delete `DisplayName` from `RepoMetadata` 3. **Remove from API request/response**: Drop `display_name` from `apiMetadata` struct 4. **Remove from manifest sync**: Don't read/write `display_name` 5. **Remove from settings UI**: Drop from `metadata.go` form handling ### Add `DerivedDisplayName()` method On `RepoMetadata`, add a method that computes the display name at runtime: ```go func (m *RepoMetadata) DerivedDisplayName() string { if m.ExtensionType == \"\" || m.Name == \"\" { return m.Name } // \"package\" → \"Package\", \"component\" → \"Component\" label := strings.ToUpper(m.ExtensionType[:1]) + m.ExtensionType[1:] return label + \" - \" + m.Name } ``` ### Use in update server feed In `resolveExtensionMetadata()`, replace: ```go m.DisplayName = manifest.DisplayName // stored field ``` With: ```go m.DisplayName = manifest.DerivedDisplayName() // computed ``` ### Convention | extension_type | Derived display_name | |---|---| | package | `Package - MokoSuiteBackup` | | component | `Component - MokoSuiteBackup` | | module | `Module - MokoJoomHero` | | template | `Template - MokoOnyx` | | plugin | `Plugin - MokoJoomTOS` | | library | `Library - MokoCore` | ### API response The API should still RETURN `display_name` in the response (computed, not stored) for backward compatibility. It just won't accept it as input. ## Scope - `models/repo/repo_manifest.go` — remove field, add method, migration - `routers/api/v1/repo/manifest.go` — compute in response, ignore in request - `routers/web/repo/setting/metadata.go` — remove from form - `services/repository/manifest_sync.go` — remove from sync - `services/updateserver/joomla.go` — use `DerivedDisplayName()` - MCP server — `display_name` becomes read-only in response"
Sign in to join this conversation.