fix(handler): set issue_prefix when auto-creating workspace on first login

ensureUserWorkspace in auth.go omitted the IssuePrefix field when
creating a default workspace during first login. This caused the
workspace's issue_prefix to be empty, producing identifiers like "-16"
instead of "JIA-16".

- Pass generateIssuePrefix(wsName) when creating the default workspace
- Add fallback in getIssuePrefix to regenerate from workspace name if
  the stored prefix is empty
- Add migration 024 to backfill empty prefixes on existing workspaces
This commit is contained in:
Jiayuan 2026-03-30 13:26:42 +08:00
parent e1e4079da1
commit f5519e4f64
4 changed files with 18 additions and 2 deletions

View file

@ -133,10 +133,12 @@ func (h *Handler) ensureUserWorkspace(ctx context.Context, user db.User) error {
return nil
}
wsName := defaultWorkspaceName(user)
workspace, err := qtx.CreateWorkspace(ctx, db.CreateWorkspaceParams{
Name: defaultWorkspaceName(user),
Name: wsName,
Slug: defaultWorkspaceSlug(user),
Description: pgtype.Text{},
IssuePrefix: generateIssuePrefix(wsName),
})
if err != nil {
if isUniqueViolation(err) {

View file

@ -250,12 +250,17 @@ func splitIdentifier(id string) *identifierParts {
}
// getIssuePrefix fetches the issue_prefix for a workspace.
// Falls back to generating a prefix from the workspace name if the stored
// prefix is empty (e.g. workspaces created before the prefix was introduced).
func (h *Handler) getIssuePrefix(ctx context.Context, workspaceID pgtype.UUID) string {
ws, err := h.Queries.GetWorkspace(ctx, workspaceID)
if err != nil {
return ""
}
return ws.IssuePrefix
if ws.IssuePrefix != "" {
return ws.IssuePrefix
}
return generateIssuePrefix(ws.Name)
}
func (h *Handler) loadAgentForUser(w http.ResponseWriter, r *http.Request, agentID string) (db.Agent, bool) {

View file

@ -0,0 +1 @@
-- No-op: we cannot reliably determine which workspaces previously had empty prefixes.

View file

@ -0,0 +1,8 @@
-- Backfill workspaces that have an empty issue_prefix (e.g. auto-created
-- during first login before the prefix was wired up in ensureUserWorkspace).
UPDATE workspace SET issue_prefix = UPPER(
LEFT(REGEXP_REPLACE(name, '[^a-zA-Z]', '', 'g'), 3)
) WHERE issue_prefix = '';
-- Fallback for workspaces whose name has no alphabetic characters.
UPDATE workspace SET issue_prefix = 'WS' WHERE issue_prefix = '';