Skip to content

Commit

Permalink
feat: implement refresh method for repos (#237)
Browse files Browse the repository at this point in the history
  • Loading branch information
marcbinz authored Nov 27, 2023
1 parent a91cb17 commit d57626b
Show file tree
Hide file tree
Showing 8 changed files with 137 additions and 0 deletions.
34 changes: 34 additions & 0 deletions core/codegen/base.builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,11 @@ func (b *build) buildBaseFile(node *field.NodeTable) error {
jen.Id("user").Op("*").Add(b.input.SourceQual(node.NameGo())),
).Error(),

jen.Id("Refresh").Call(
jen.Id("ctx").Qual("context", "Context"),
jen.Id("user").Op("*").Add(b.input.SourceQual(node.NameGo())),
).Error(),

jen.Id("Relate").Call().Op("*").Qual(b.subPkg(def.PkgRelate), node.NameGo()),
)

Expand Down Expand Up @@ -498,6 +503,35 @@ func (b *build) buildBaseFile(node *field.NodeTable) error {
),
)

f.Line()
f.Func().
Params(jen.Id("r").Op("*").Id(node.NameGoLower())).
Id("Refresh").
Params(
jen.Id("ctx").Qual("context", "Context"),
jen.Id(node.NameGoLower()).Op("*").Add(b.input.SourceQual(node.NameGo())),
).
Error().
Block(
jen.If(jen.Id(node.NameGoLower()).Op("==").Nil()).
Block(
jen.Return(jen.Qual("errors", "New").Call(jen.Lit("the passed node must not be nil"))),
),

jen.If(jen.Id(node.NameGoLower()).Dot("ID").Call().Op("==").Lit("")).
Block(
jen.Return(jen.Qual("errors", "New").Call(jen.Lit("cannot refresh "+node.NameGo()+" without existing record ID"))),
),

jen.Return(
jen.Id("r").Dot("refresh").Call(
jen.Id("ctx"),
jen.Id(node.NameGoLower()).Dot("ID").Call(),
jen.Id(node.NameGoLower()),
),
),
)

f.Line()
f.Func().
Params(jen.Id("r").Op("*").Id(node.NameGoLower())).
Expand Down
16 changes: 16 additions & 0 deletions core/embed/som/som.node.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package som

import (
"context"
"errors"
"fmt"
)

Expand Down Expand Up @@ -86,3 +87,18 @@ func (r *repo[N, C]) delete(ctx context.Context, id string, node *N) error {
}
return nil
}

func (r *repo[N, C]) refresh(ctx context.Context, id string, node *N) error {
read, exists, err := r.read(ctx, id)
if err != nil {
return fmt.Errorf("failed to read node: %w", err)
}

if !exists {
return errors.New("given node does not exist")
}

*node = *read

return nil
}
11 changes: 11 additions & 0 deletions tests/basic/gen/som/node.all_field_types.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions tests/basic/gen/som/node.fields_like_db_response.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions tests/basic/gen/som/node.group.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions tests/basic/gen/som/node.url_example.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions tests/basic/gen/som/som.node.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions tests/basic/som_base_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -463,3 +463,28 @@ func TestAsync(t *testing.T) {
assert.NilError(t, <-resCh.Err())
assert.Equal(t, 2, <-resCh.Val())
}

func TestRefresh(t *testing.T) {
ctx := context.Background()

client, cleanup := prepareDatabase(ctx, t)
defer cleanup()

allFieldTypes := &model.AllFieldTypes{
String: "some value",
}

err := client.AllFieldTypesRepo().Create(ctx, allFieldTypes)
if err != nil {
t.Fatal(err)
}

allFieldTypes.String = "some other value"

err = client.AllFieldTypesRepo().Refresh(ctx, allFieldTypes)
if err != nil {
t.Fatal(err)
}

assert.Equal(t, "some value", allFieldTypes.String)
}

0 comments on commit d57626b

Please sign in to comment.