refactor(backend): isolate workspace aggregation

This commit is contained in:
2026-07-21 14:58:25 +08:00
parent 14a140985c
commit a53f047efe
8 changed files with 818 additions and 734 deletions

View File

@@ -98,7 +98,7 @@ func TestCreateProjectPersistsWorkspaceMetadata(t *testing.T) {
require.Equal(t, "#165DFF", project.Background)
require.Equal(t, "RSS 采集和线索沉淀", project.Description)
workspace, err := service.Workspace(1, project.ID)
workspace, err := service.Workspace(1, project.Identity)
require.NoError(t, err)
require.Equal(t, "EXP", workspace.Project.Identifier)
require.Equal(t, "compass", workspace.Project.Icon)
@@ -160,14 +160,14 @@ func TestWorkspaceMatchesFrontendContract(t *testing.T) {
require.NoError(t, database.Create(&models.SenlinAgentCronPlan{ProjectID: project.ID, CreatedBy: 1, Title: "Weekly inbox review reminder", Schedule: "0 9 * * 1", NextRunAt: &nextRun, Enabled: true, LastResult: "Not run yet"}).Error)
require.NoError(t, database.Create(&models.SenlinAgentCronPlan{ProjectID: other.ID, CreatedBy: 1, Title: "Other cron", Schedule: "0 9 * * 2", Enabled: true}).Error)
workspace, err := service.Workspace(1, project.ID)
workspace, err := service.Workspace(1, project.Identity)
require.NoError(t, err)
require.Equal(t, project.ID, workspace.Project.ID)
require.Equal(t, project.Identity, workspace.Project.ID)
require.Equal(t, "Project A1", workspace.Project.Name)
require.Equal(t, "A1", workspace.Project.Initials)
require.Equal(t, int64(1), workspace.Project.UnreadCount)
require.Equal(t, []string{"all", "UI", "knowledge"}, workspace.Tags)
require.Equal(t, []string{"UI", "knowledge"}, workspaceTagNames(workspace.Tags))
require.Len(t, workspace.Channels, 7)
require.Equal(t, "overview", workspace.Channels[0].Type)
require.Equal(t, "inbox", workspace.Channels[1].Type)
@@ -198,7 +198,7 @@ func TestWorkspaceRejectsProjectOwnedByAnotherUser(t *testing.T) {
project, err := service.CreateProject(2, "Beta", "")
require.NoError(t, err)
_, err = service.Workspace(1, project.ID)
_, err = service.Workspace(1, project.Identity)
require.Error(t, err)
}
@@ -226,12 +226,12 @@ func TestCreateTaskAddsTaskToOwnedProject(t *testing.T) {
require.Equal(t, "open", task.Status)
require.NotNil(t, task.DueAt)
require.NotNil(t, task.TagID)
workspace, err := service.Workspace(1, project.ID)
workspace, err := service.Workspace(1, project.Identity)
require.NoError(t, err)
require.Len(t, workspace.Tasks, 1)
require.Equal(t, "Follow up with client", workspace.Tasks[0].Title)
require.Equal(t, "客户反馈", workspace.Tasks[0].Tag)
require.Equal(t, []string{"all", "客户反馈"}, workspace.Tags)
require.Equal(t, []string{"客户反馈"}, workspaceTagNames(workspace.Tags))
}
func TestCreateTaskRejectsProjectOwnedByAnotherUser(t *testing.T) {
@@ -264,10 +264,10 @@ func TestUpdateTaskPersistsTagAndCompletion(t *testing.T) {
require.NoError(t, err)
require.Equal(t, "Draft proposal v2", updated.Title)
require.Equal(t, "done", updated.Status)
workspace, err := service.Workspace(1, project.ID)
workspace, err := service.Workspace(1, project.Identity)
require.NoError(t, err)
require.Equal(t, "重要", workspace.Tasks[0].Tag)
require.Equal(t, []string{"all", "客户", "重要"}, workspace.Tags)
require.Equal(t, []string{"客户", "重要"}, workspaceTagNames(workspace.Tags))
}
func TestCreateProjectTagAddsTagToOwnedProject(t *testing.T) {
@@ -281,9 +281,9 @@ func TestCreateProjectTagAddsTagToOwnedProject(t *testing.T) {
require.NoError(t, err)
require.Equal(t, project.ID, tag.ProjectID)
require.Equal(t, "Design", tag.Name)
workspace, err := service.Workspace(1, project.ID)
workspace, err := service.Workspace(1, project.Identity)
require.NoError(t, err)
require.Equal(t, []string{"all", "Design"}, workspace.Tags)
require.Equal(t, []string{"Design"}, workspaceTagNames(workspace.Tags))
}
func TestCreateProjectTagRejectsProjectOwnedByAnotherUser(t *testing.T) {
@@ -341,7 +341,7 @@ func TestCreateCronPlanAddsPlanToOwnedProject(t *testing.T) {
require.Equal(t, "0 9 * * *", plan.Schedule)
require.True(t, plan.Enabled)
require.NotNil(t, plan.NextRunAt)
workspace, err := service.Workspace(1, project.ID)
workspace, err := service.Workspace(1, project.Identity)
require.NoError(t, err)
require.Len(t, workspace.CronPlans, 1)
require.Equal(t, "Daily inbox sweep", workspace.CronPlans[0].Title)
@@ -355,3 +355,11 @@ func newTestDB(t *testing.T) *gorm.DB {
models.DBService = database
return database
}
func workspaceTagNames(tags []WorkspaceTagDTO) []string {
names := make([]string, 0, len(tags))
for _, tag := range tags {
names = append(names, tag.Name)
}
return names
}