Skip to content

Commit e1f2063

Browse files
authored
fix(server): bug fix coresupport filter (#108)
1 parent 9b748d8 commit e1f2063

5 files changed

Lines changed: 55 additions & 10 deletions

File tree

server/internal/adapter/gql/loader_scene.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package gql
22

33
import (
44
"context"
5+
"errors"
56

67
"github.com/reearth/reearth/server/internal/adapter/gql/gqldataloader"
78
"github.com/reearth/reearth/server/internal/adapter/gql/gqlmodel"
89
"github.com/reearth/reearth/server/internal/usecase/interfaces"
910
"github.com/reearth/reearth/server/pkg/id"
11+
"github.com/reearth/reearthx/rerror"
1012
"github.com/reearth/reearthx/util"
1113
)
1214

@@ -44,6 +46,9 @@ func (c *SceneLoader) FindByProject(ctx context.Context, projectID gqlmodel.ID)
4446

4547
res, err := c.usecase.FindByProject(ctx, pid, getOperator(ctx))
4648
if err != nil {
49+
if errors.Is(err, rerror.ErrNotFound) {
50+
return nil, nil
51+
}
4752
return nil, err
4853
}
4954

server/internal/infrastructure/memory/project.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,11 @@ func (r *Project) FindByWorkspace(ctx context.Context, id accountdomain.Workspac
4242
}
4343

4444
result := []*project.Project{}
45+
var totalCount int64
4546
for _, d := range r.data {
46-
if d.Workspace() == id {
47+
if d.Workspace() == id && !d.CoreSupport() {
4748
result = append(result, d)
49+
totalCount++
4850
}
4951
}
5052

@@ -57,11 +59,11 @@ func (r *Project) FindByWorkspace(ctx context.Context, id accountdomain.Workspac
5759
}
5860

5961
return result, usecasex.NewPageInfo(
60-
int64(len(r.data)),
62+
totalCount,
6163
startCursor,
6264
endCursor,
63-
true,
64-
true,
65+
false,
66+
false,
6567
), nil
6668
}
6769

server/internal/infrastructure/mongo/project.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,15 @@ func (r *Project) FindByWorkspace(ctx context.Context, id accountdomain.Workspac
154154
return nil, usecasex.EmptyPageInfo(), nil
155155
}
156156

157-
absoluteFilter := bson.M{"$or": []bson.M{
158-
{"workspace": id.String()},
159-
{"team": id.String()},
160-
}}
157+
absoluteFilter := bson.M{
158+
"$and": []bson.M{
159+
{"$or": []bson.M{
160+
{"workspace": id.String()},
161+
{"team": id.String()},
162+
}},
163+
{"coresupport": bson.M{"$ne": true}},
164+
},
165+
}
161166

162167
totalCount, err := r.client.Client().CountDocuments(ctx, absoluteFilter)
163168
if err != nil {

server/internal/usecase/interactor/project.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,36 @@ func NewProject(r *repo.Container, gr *gateway.Container) interfaces.Project {
6262
}
6363

6464
func (i *Project) Fetch(ctx context.Context, ids []id.ProjectID, _ *usecase.Operator) ([]*project.Project, error) {
65-
return i.projectRepo.FindByIDs(ctx, ids)
65+
projects, err := i.projectRepo.FindByIDs(ctx, ids)
66+
if err != nil {
67+
return nil, err
68+
}
69+
70+
for idx, p := range projects {
71+
if p != nil && p.CoreSupport() {
72+
projects[idx] = nil
73+
}
74+
}
75+
76+
return projects, nil
6677
}
6778

6879
func (i *Project) FindByWorkspace(ctx context.Context, id accountdomain.WorkspaceID, p *usecasex.Pagination, _ *usecase.Operator) ([]*project.Project, *usecasex.PageInfo, error) {
69-
return i.projectRepo.FindByWorkspace(ctx, id, p)
80+
projects, pageInfo, err := i.projectRepo.FindByWorkspace(ctx, id, p)
81+
if err != nil {
82+
return nil, nil, err
83+
}
84+
85+
// Re-check to avoid returning core projects even if repository did not filter.
86+
filtered := make([]*project.Project, 0, len(projects))
87+
for _, prj := range projects {
88+
if prj != nil && prj.CoreSupport() {
89+
continue
90+
}
91+
filtered = append(filtered, prj)
92+
}
93+
94+
return filtered, pageInfo, nil
7095
}
7196

7297
func (i *Project) Create(ctx context.Context, p interfaces.CreateProjectParam, operator *usecase.Operator) (_ *project.Project, err error) {

server/internal/usecase/interactor/scene.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ func (i *Scene) Fetch(ctx context.Context, ids []id.SceneID, operator *usecase.O
7474
}
7575

7676
func (i *Scene) FindByProject(ctx context.Context, id id.ProjectID, operator *usecase.Operator) (*scene.Scene, error) {
77+
prj, err := i.projectRepo.FindByID(ctx, id)
78+
if err != nil {
79+
return nil, err
80+
}
81+
if prj.CoreSupport() {
82+
return nil, rerror.ErrNotFound
83+
}
84+
7785
s, err := i.sceneRepo.FindByProject(ctx, id)
7886
if err != nil {
7987
return nil, err

0 commit comments

Comments
 (0)