From 3ac1fcab8828088645bc841d5e4927ffd7ea9455 Mon Sep 17 00:00:00 2001 From: "A.kawasaki" Date: Thu, 1 Aug 2024 22:01:40 +0900 Subject: [PATCH] fix(server): save project updated_at when features updated (#1076) Co-authored-by: Piyush Chauhan <42397980+pyshx@users.noreply.github.com> --- server/e2e/gql_nlslayer_test.go | 97 ++++++++++++++++++- .../internal/usecase/interactor/nlslayer.go | 69 +++++++++++++ .../usecase/interactor/nlslayer_test.go | 17 +++- server/internal/usecase/interactor/project.go | 30 ++++++ server/internal/usecase/interactor/scene.go | 39 ++++++++ .../usecase/interactor/storytelling.go | 70 +++++++++++++ server/internal/usecase/interactor/style.go | 24 +++++ 7 files changed, 341 insertions(+), 5 deletions(-) diff --git a/server/e2e/gql_nlslayer_test.go b/server/e2e/gql_nlslayer_test.go index 08d51801fb..2d6a684604 100644 --- a/server/e2e/gql_nlslayer_test.go +++ b/server/e2e/gql_nlslayer_test.go @@ -194,6 +194,63 @@ func duplicateNLSLayer(e *httpexpect.Expect, layerId string) (GraphQLRequest, *h return requestBody, res } +func fetchProjectForNewLayers(e *httpexpect.Expect, pID string) (GraphQLRequest, *httpexpect.Value) { + fetchProjectRequestBody := GraphQLRequest{ + OperationName: "GetProject", + Query: `query GetProject($projectId: ID!) { + node(id: $projectId, type: PROJECT) { + id + ... on Project { + ...ProjectFragment + scene { + id + __typename + } + __typename + } + __typename + } + } + + fragment ProjectFragment on Project { + id + name + description + imageUrl + isArchived + isBasicAuthActive + basicAuthUsername + basicAuthPassword + publicTitle + publicDescription + publicImage + alias + enableGa + trackingId + publishmentStatus + updatedAt + createdAt + coreSupport + starred + __typename + }`, + Variables: map[string]any{ + "projectId": pID, + }, + } + + res := e.POST("/api/graphql"). + WithHeader("Origin", "https://example.com"). + WithHeader("X-Reearth-Debug-User", uID.String()). + WithHeader("Content-Type", "application/json"). + WithJSON(fetchProjectRequestBody). + Expect(). + Status(http.StatusOK). + JSON() + + return fetchProjectRequestBody, res +} + func fetchSceneForNewLayers(e *httpexpect.Expect, sID string) (GraphQLRequest, *httpexpect.Value) { fetchSceneRequestBody := GraphQLRequest{ OperationName: "GetScene", @@ -308,9 +365,15 @@ func TestNLSLayerCRUD(t *testing.T) { }, true, baseSeeder) pId := createProject(e, "test") + + _, notUpdatedProject := fetchProjectForNewLayers(e, pId) + notUpdatedProjectUpdatedAt := notUpdatedProject.Object(). + Value("data").Object(). + Value("node").Object(). + Value("updatedAt").Raw().(string) + _, _, sId := createScene(e, pId) - // fetch scene _, res := fetchSceneForNewLayers(e, sId) res.Object(). @@ -417,6 +480,12 @@ func TestNLSLayerCRUD(t *testing.T) { Value("node").Object(). Value("newLayers").Array(). Length().Equal(0) + + _, updatedProject := fetchProjectForNewLayers(e, pId) + updatedProject.Object(). + Value("data").Object(). + Value("node").Object(). + Value("updatedAt").NotEqual(notUpdatedProjectUpdatedAt) } func createInfobox(e *httpexpect.Expect, layerId string) (GraphQLRequest, *httpexpect.Value, string) { @@ -662,6 +731,13 @@ func TestInfoboxBlocksCRUD(t *testing.T) { }, true, baseSeeder) pId := createProject(e, "test") + + _, notUpdatedProject := fetchProjectForNewLayers(e, pId) + notUpdatedProjectUpdatedAt := notUpdatedProject.Object(). + Value("data").Object(). + Value("node").Object(). + Value("updatedAt").Raw().(string) + _, _, sId := createScene(e, pId) // fetch scene @@ -715,6 +791,12 @@ func TestInfoboxBlocksCRUD(t *testing.T) { _, res = fetchSceneForNewLayers(e, sId) res.Object(). Path("$.data.node.newLayers[0].infobox.blocks").Equal([]any{}) + + _, updatedProject := fetchProjectForNewLayers(e, pId) + updatedProject.Object(). + Value("data").Object(). + Value("node").Object(). + Value("updatedAt").NotEqual(notUpdatedProjectUpdatedAt) } func addCustomProperties( @@ -763,6 +845,13 @@ func TestCustomProperties(t *testing.T) { }, true, baseSeeder) pId := createProject(e, "test") + + _, notUpdatedProject := fetchProjectForNewLayers(e, pId) + notUpdatedProjectUpdatedAt := notUpdatedProject.Object(). + Value("data").Object(). + Value("node").Object(). + Value("updatedAt").Raw().(string) + _, _, sId := createScene(e, pId) _, res := fetchSceneForNewLayers(e, sId) @@ -828,4 +917,10 @@ func TestCustomProperties(t *testing.T) { Value("sketch").Object(). Value("customPropertySchema").Object(). Value("extrudedHeight").Equal(10) + + _, updatedProject := fetchProjectForNewLayers(e, pId) + updatedProject.Object(). + Value("data").Object(). + Value("node").Object(). + Value("updatedAt").NotEqual(notUpdatedProjectUpdatedAt) } diff --git a/server/internal/usecase/interactor/nlslayer.go b/server/internal/usecase/interactor/nlslayer.go index 021c6c1938..4871436f72 100644 --- a/server/internal/usecase/interactor/nlslayer.go +++ b/server/internal/usecase/interactor/nlslayer.go @@ -22,6 +22,8 @@ type NLSLayer struct { commonSceneLock nlslayerRepo repo.NLSLayer sceneLockRepo repo.SceneLock + projectRepo repo.Project + sceneRepo repo.Scene propertyRepo repo.Property pluginRepo repo.Plugin transaction usecasex.Transaction @@ -32,6 +34,8 @@ func NewNLSLayer(r *repo.Container) interfaces.NLSLayer { commonSceneLock: commonSceneLock{sceneLockRepo: r.SceneLock}, nlslayerRepo: r.NLSLayer, sceneLockRepo: r.SceneLock, + projectRepo: r.Project, + sceneRepo: r.Scene, propertyRepo: r.Property, pluginRepo: r.Plugin, transaction: r.Transaction, @@ -102,6 +106,11 @@ func (i *NLSLayer) AddLayerSimple(ctx context.Context, inp interfaces.AddNLSLaye return nil, err } + err = updateProjectUpdatedAtByScene(ctx, layerSimple.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return layerSimple, nil } @@ -181,6 +190,11 @@ func (i *NLSLayer) Remove(ctx context.Context, lid id.NLSLayerID, operator *usec return lid, nil, err } + err = updateProjectUpdatedAtByScene(ctx, l.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return lid, nil, err + } + tx.Commit() return lid, parentLayer, nil } @@ -223,6 +237,11 @@ func (i *NLSLayer) Update(ctx context.Context, inp interfaces.UpdateNLSLayerInpu return nil, err } + err = updateProjectUpdatedAtByScene(ctx, layer.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return layer, nil } @@ -275,6 +294,11 @@ func (i *NLSLayer) CreateNLSInfobox(ctx context.Context, lid id.NLSLayerID, oper return nil, err } + err = updateProjectUpdatedAtByScene(ctx, l.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return l, nil } @@ -323,6 +347,11 @@ func (i *NLSLayer) RemoveNLSInfobox(ctx context.Context, layerID id.NLSLayerID, return nil, err } + err = updateProjectUpdatedAtByScene(ctx, layer.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return layer, nil } @@ -421,6 +450,11 @@ func (i *NLSLayer) AddNLSInfoboxBlock(ctx context.Context, inp interfaces.AddNLS return nil, nil, err } + err = updateProjectUpdatedAtByScene(ctx, l.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return block, l, err } @@ -463,6 +497,11 @@ func (i *NLSLayer) MoveNLSInfoboxBlock(ctx context.Context, inp interfaces.MoveN return inp.InfoboxBlockID, nil, -1, err } + err = updateProjectUpdatedAtByScene(ctx, layer.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return inp.InfoboxBlockID, nil, -1, err + } + tx.Commit() return inp.InfoboxBlockID, layer, inp.Index, err } @@ -505,6 +544,11 @@ func (i *NLSLayer) RemoveNLSInfoboxBlock(ctx context.Context, inp interfaces.Rem return inp.InfoboxBlockID, nil, err } + err = updateProjectUpdatedAtByScene(ctx, layer.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return inp.InfoboxBlockID, nil, err + } + tx.Commit() return inp.InfoboxBlockID, layer, err } @@ -537,6 +581,11 @@ func (i *NLSLayer) Duplicate(ctx context.Context, lid id.NLSLayerID, operator *u return nil, err } + err = updateProjectUpdatedAtByScene(ctx, layer.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return duplicatedLayer, nil } @@ -580,6 +629,11 @@ func (i *NLSLayer) AddCustomProperties(ctx context.Context, inp interfaces.AddCu return nil, err } + err = updateProjectUpdatedAtByScene(ctx, layer.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return layer, nil } @@ -641,6 +695,11 @@ func (i *NLSLayer) AddGeoJSONFeature(ctx context.Context, inp interfaces.AddNLSL return nlslayer.Feature{}, err } + err = updateProjectUpdatedAtByScene(ctx, layer.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nlslayer.Feature{}, err + } + tx.Commit() return *feature, nil } @@ -693,6 +752,11 @@ func (i *NLSLayer) UpdateGeoJSONFeature(ctx context.Context, inp interfaces.Upda return nlslayer.Feature{}, err } + err = updateProjectUpdatedAtByScene(ctx, layer.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nlslayer.Feature{}, err + } + tx.Commit() return updatedFeature, nil } @@ -729,6 +793,11 @@ func (i *NLSLayer) DeleteGeoJSONFeature(ctx context.Context, inp interfaces.Dele return id.FeatureID{}, err } + err = updateProjectUpdatedAtByScene(ctx, layer.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return id.FeatureID{}, err + } + tx.Commit() return inp.FeatureID, nil } diff --git a/server/internal/usecase/interactor/nlslayer_test.go b/server/internal/usecase/interactor/nlslayer_test.go index d914a74742..d61538861f 100644 --- a/server/internal/usecase/interactor/nlslayer_test.go +++ b/server/internal/usecase/interactor/nlslayer_test.go @@ -9,6 +9,7 @@ import ( "github.com/reearth/reearth/server/internal/usecase/interfaces" "github.com/reearth/reearth/server/pkg/id" "github.com/reearth/reearth/server/pkg/nlslayer" + "github.com/reearth/reearth/server/pkg/project" "github.com/reearth/reearth/server/pkg/scene" "github.com/reearth/reearthx/account/accountdomain" "github.com/stretchr/testify/assert" @@ -18,7 +19,9 @@ func TestAddCustomProperties(t *testing.T) { ctx := context.Background() db := memory.New() - scene, _ := scene.New().NewID().Workspace(accountdomain.NewWorkspaceID()).Project(id.NewProjectID()).RootLayer(id.NewLayerID()).Build() + prj, _ := project.New().NewID().Build() + _ = db.Project.Save(ctx, prj) + scene, _ := scene.New().NewID().Workspace(accountdomain.NewWorkspaceID()).Project(prj.ID()).RootLayer(id.NewLayerID()).Build() _ = db.Scene.Save(ctx, scene) il := NewNLSLayer(db) @@ -50,7 +53,9 @@ func TestAddGeoJSONFeature(t *testing.T) { ctx := context.Background() db := memory.New() - scene, _ := scene.New().NewID().Workspace(accountdomain.NewWorkspaceID()).Project(id.NewProjectID()).RootLayer(id.NewLayerID()).Build() + prj, _ := project.New().NewID().Build() + _ = db.Project.Save(ctx, prj) + scene, _ := scene.New().NewID().Workspace(accountdomain.NewWorkspaceID()).Project(prj.ID()).RootLayer(id.NewLayerID()).Build() _ = db.Scene.Save(ctx, scene) il := NewNLSLayer(db) @@ -103,7 +108,9 @@ func TestUpdateGeoJSONFeature(t *testing.T) { ctx := context.Background() db := memory.New() - scene, _ := scene.New().NewID().Workspace(accountdomain.NewWorkspaceID()).Project(id.NewProjectID()).RootLayer(id.NewLayerID()).Build() + prj, _ := project.New().NewID().Build() + _ = db.Project.Save(ctx, prj) + scene, _ := scene.New().NewID().Workspace(accountdomain.NewWorkspaceID()).Project(prj.ID()).RootLayer(id.NewLayerID()).Build() _ = db.Scene.Save(ctx, scene) il := NewNLSLayer(db) @@ -178,7 +185,9 @@ func TestDeleteGeoJSONFeature(t *testing.T) { ctx := context.Background() db := memory.New() - scene, _ := scene.New().NewID().Workspace(accountdomain.NewWorkspaceID()).Project(id.NewProjectID()).RootLayer(id.NewLayerID()).Build() + prj, _ := project.New().NewID().Build() + _ = db.Project.Save(ctx, prj) + scene, _ := scene.New().NewID().Workspace(accountdomain.NewWorkspaceID()).Project(prj.ID()).RootLayer(id.NewLayerID()).Build() _ = db.Scene.Save(ctx, scene) il := NewNLSLayer(db) diff --git a/server/internal/usecase/interactor/project.go b/server/internal/usecase/interactor/project.go index 5f24b44a2d..03befee355 100644 --- a/server/internal/usecase/interactor/project.go +++ b/server/internal/usecase/interactor/project.go @@ -479,3 +479,33 @@ func (i *Project) Delete(ctx context.Context, projectID id.ProjectID, operator * tx.Commit() return nil } + +func updateProjectUpdatedAt(ctx context.Context, prj *project.Project, r repo.Project) error { + currentTime := time.Now().UTC() + prj.SetUpdatedAt(currentTime) + + if err := r.Save(ctx, prj); err != nil { + return err + } + return nil +} + +func updateProjectUpdatedAtByID(ctx context.Context, projectID id.ProjectID, r repo.Project) error { + prj, err := r.FindByID(ctx, projectID) + if err != nil { + return err + } + return updateProjectUpdatedAt(ctx, prj, r) +} + +func updateProjectUpdatedAtByScene(ctx context.Context, sceneID id.SceneID, r repo.Project, s repo.Scene) error { + scene, err := s.FindByID(ctx, sceneID) + if err != nil { + return err + } + err = updateProjectUpdatedAtByID(ctx, scene.Project(), r) + if err != nil { + return err + } + return nil +} diff --git a/server/internal/usecase/interactor/scene.go b/server/internal/usecase/interactor/scene.go index 7e7a721ac6..9730d305b6 100644 --- a/server/internal/usecase/interactor/scene.go +++ b/server/internal/usecase/interactor/scene.go @@ -162,6 +162,10 @@ func (i *Scene) Create(ctx context.Context, pid id.ProjectID, operator *usecase. return nil, err } + if err := updateProjectUpdatedAt(ctx, prj, i.projectRepo); err != nil { + return nil, err + } + operator.AddNewScene(ws, sceneID) tx.Commit() return res, err @@ -261,6 +265,11 @@ func (i *Scene) AddWidget(ctx context.Context, sid id.SceneID, pid id.PluginID, return nil, nil, err } + err = updateProjectUpdatedAtByID(ctx, s.Project(), i.projectRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return s, widget, nil } @@ -345,6 +354,11 @@ func (i *Scene) UpdateWidget(ctx context.Context, param interfaces.UpdateWidgetP return nil, nil, err2 } + err = updateProjectUpdatedAtByID(ctx, scene.Project(), i.projectRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return scene, widget, nil } @@ -397,6 +411,11 @@ func (i *Scene) UpdateWidgetAlignSystem(ctx context.Context, param interfaces.Up return nil, err } + err = updateProjectUpdatedAtByID(ctx, s.Project(), i.projectRepo) + if err != nil { + return nil, err + } + tx.Commit() return s, nil } @@ -442,6 +461,11 @@ func (i *Scene) RemoveWidget(ctx context.Context, id id.SceneID, wid id.WidgetID return nil, err2 } + err = updateProjectUpdatedAtByID(ctx, scene.Project(), i.projectRepo) + if err != nil { + return nil, err + } + tx.Commit() return scene, nil } @@ -488,6 +512,11 @@ func (i *Scene) AddCluster(ctx context.Context, sceneID id.SceneID, name string, return nil, nil, err } + err = updateProjectUpdatedAtByID(ctx, s.Project(), i.projectRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return s, cluster, nil } @@ -528,6 +557,11 @@ func (i *Scene) UpdateCluster(ctx context.Context, param interfaces.UpdateCluste return nil, nil, err } + err = updateProjectUpdatedAtByID(ctx, s.Project(), i.projectRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return s, cluster, nil } @@ -559,6 +593,11 @@ func (i *Scene) RemoveCluster(ctx context.Context, sceneID id.SceneID, clusterID return nil, err } + err = updateProjectUpdatedAtByID(ctx, s.Project(), i.projectRepo) + if err != nil { + return nil, err + } + tx.Commit() return s, nil } diff --git a/server/internal/usecase/interactor/storytelling.go b/server/internal/usecase/interactor/storytelling.go index 90b55d96ee..b3a3b09809 100644 --- a/server/internal/usecase/interactor/storytelling.go +++ b/server/internal/usecase/interactor/storytelling.go @@ -115,6 +115,11 @@ func (i *Storytelling) Create(ctx context.Context, inp interfaces.CreateStoryInp return nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return story, nil } @@ -197,6 +202,11 @@ func (i *Storytelling) Update(ctx context.Context, inp interfaces.UpdateStoryInp } } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return story, nil } @@ -228,6 +238,11 @@ func (i *Storytelling) Remove(ctx context.Context, inp interfaces.RemoveStoryInp return nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + return &inp.StoryID, nil } @@ -383,6 +398,11 @@ func (i *Storytelling) Publish(ctx context.Context, inp interfaces.PublishStoryI return nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return story, nil } @@ -454,6 +474,11 @@ func (i *Storytelling) CreatePage(ctx context.Context, inp interfaces.CreatePage return nil, nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return story, page, nil } @@ -507,6 +532,11 @@ func (i *Storytelling) UpdatePage(ctx context.Context, inp interfaces.UpdatePage return nil, nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return story, page, nil } @@ -544,6 +574,11 @@ func (i *Storytelling) RemovePage(ctx context.Context, inp interfaces.RemovePage return nil, nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return story, page.Id().Ref(), nil } @@ -581,6 +616,11 @@ func (i *Storytelling) MovePage(ctx context.Context, inp interfaces.MovePagePara return nil, nil, 0, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, 0, err + } + tx.Commit() return story, page, inp.Index, nil } @@ -619,6 +659,11 @@ func (i *Storytelling) DuplicatePage(ctx context.Context, inp interfaces.Duplica return nil, nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return story, dupPage, nil } @@ -664,6 +709,11 @@ func (i *Storytelling) AddPageLayer(ctx context.Context, inp interfaces.PageLaye return nil, nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return story, page, nil } @@ -709,6 +759,11 @@ func (i *Storytelling) RemovePageLayer(ctx context.Context, inp interfaces.PageL return nil, nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, err + } + tx.Commit() return story, page, nil } @@ -779,6 +834,11 @@ func (i *Storytelling) CreateBlock(ctx context.Context, inp interfaces.CreateBlo return nil, nil, nil, -1, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, nil, -1, err + } + tx.Commit() return story, page, block, 1, err } @@ -824,6 +884,11 @@ func (i *Storytelling) RemoveBlock(ctx context.Context, inp interfaces.RemoveBlo return nil, nil, nil, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, nil, err + } + tx.Commit() return story, page, &inp.BlockID, nil } @@ -864,6 +929,11 @@ func (i *Storytelling) MoveBlock(ctx context.Context, inp interfaces.MoveBlockPa return nil, nil, nil, inp.Index, err } + err = updateProjectUpdatedAtByScene(ctx, story.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, nil, nil, inp.Index, err + } + tx.Commit() return story, page, &inp.BlockID, inp.Index, nil } diff --git a/server/internal/usecase/interactor/style.go b/server/internal/usecase/interactor/style.go index 7483e7607c..37b515cade 100644 --- a/server/internal/usecase/interactor/style.go +++ b/server/internal/usecase/interactor/style.go @@ -16,6 +16,8 @@ type Style struct { common commonSceneLock styleRepo repo.Style + projectRepo repo.Project + sceneRepo repo.Scene sceneLockRepo repo.SceneLock transaction usecasex.Transaction } @@ -24,6 +26,8 @@ func NewStyle(r *repo.Container) interfaces.Style { return &Style{ commonSceneLock: commonSceneLock{sceneLockRepo: r.SceneLock}, styleRepo: r.Style, + projectRepo: r.Project, + sceneRepo: r.Scene, sceneLockRepo: r.SceneLock, transaction: r.Transaction, } @@ -67,6 +71,11 @@ func (i *Style) AddStyle(ctx context.Context, param interfaces.AddStyleInput, op return nil, err } + err = updateProjectUpdatedAtByScene(ctx, style.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return style, nil } @@ -104,6 +113,11 @@ func (i *Style) UpdateStyle(ctx context.Context, param interfaces.UpdateStyleInp return nil, err } + err = updateProjectUpdatedAtByScene(ctx, style.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return style, nil } @@ -139,6 +153,11 @@ func (i *Style) RemoveStyle(ctx context.Context, styleID id.StyleID, operator *u return } + err = updateProjectUpdatedAtByScene(ctx, s.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return styleID, err + } + tx.Commit() return styleID, nil } @@ -171,6 +190,11 @@ func (i *Style) DuplicateStyle(ctx context.Context, styleID id.StyleID, operator return nil, err } + err = updateProjectUpdatedAtByScene(ctx, style.Scene(), i.projectRepo, i.sceneRepo) + if err != nil { + return nil, err + } + tx.Commit() return duplicatedStyle, nil }