From 353a5f9f7557b2ff5527c7e9ee97ade698f1b8e8 Mon Sep 17 00:00:00 2001 From: ryan Date: Wed, 2 Sep 2026 18:41:37 +0800 Subject: [PATCH] fix(user): assign snowflake IDs on registration The HTTP register path left ID at 0, so SQLite/GORM filled a serial primary key. CreateUser now generates a snowflake ID when none is set, matching admin create and OAuth signup. --- backend/plugins/domain/user/plugin_test.go | 2 ++ backend/plugins/domain/user/repository.go | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/plugins/domain/user/plugin_test.go b/backend/plugins/domain/user/plugin_test.go index a5a03783..e4020e2a 100644 --- a/backend/plugins/domain/user/plugin_test.go +++ b/backend/plugins/domain/user/plugin_test.go @@ -166,6 +166,8 @@ func TestUserLoginHTTPHandler(t *testing.T) { IsActive: true, } require.NoError(t, user.CreateUser(context.Background(), plainUser)) + require.NotZero(t, plainUser.ID) + require.Greater(t, plainUser.ID, uint64(10000), "user id must be snowflake, not sqlite autoincrement") reqBodyPlain := `{"username":"plain_admin","password":"12345678"}` reqPlain, _ := http.NewRequest(http.MethodPost, "/api/v1/user/login", bytes.NewBufferString(reqBodyPlain)) diff --git a/backend/plugins/domain/user/repository.go b/backend/plugins/domain/user/repository.go index 94445a9c..5792c2ca 100644 --- a/backend/plugins/domain/user/repository.go +++ b/backend/plugins/domain/user/repository.go @@ -6,6 +6,7 @@ package user import ( "Wavelet/core" "Wavelet/core/contracts" + "Wavelet/pkg/idgen" "Wavelet/pkg/util" "context" "errors" @@ -82,8 +83,11 @@ func GetUserByEmail(ctx context.Context, email string) (*User, error) { return &u, nil } -// CreateUser 创建用户 +// CreateUser 创建用户。ID 为空时用雪花算法分配,避免 SQLite/GORM 把 0 当成自增主键。 func CreateUser(ctx context.Context, u *User) error { + if u != nil && u.ID == 0 { + u.ID = idgen.NextUint64ID() + } return getDB(ctx).Create(u).Error }