@@ -8,125 +8,92 @@ import (
88 endorserVal "github.com/emacsway/grade/grade/internal/domain/endorser/values"
99 member "github.com/emacsway/grade/grade/internal/domain/member/values"
1010 "github.com/emacsway/grade/grade/internal/domain/seedwork/exporters"
11+ s "github.com/emacsway/grade/grade/internal/domain/seedwork/specification"
1112 tenant "github.com/emacsway/grade/grade/internal/domain/tenant/values"
12- s "github.com/emacsway/grade/grade/internal/infrastructure/seedwork/specification"
13+ is "github.com/emacsway/grade/grade/internal/infrastructure/seedwork/specification"
1314)
1415
1516type EndorserCanCompleteEndorsementSpecification struct {
1617 endorser.EndorserCanCompleteEndorsementSpecification
1718}
1819
1920func (e * EndorserCanCompleteEndorsementSpecification ) Compile () (sql string , params []driver.Valuer , err error ) {
20- v := s .NewPostgresqlVisitor (GlobalScopeContext {})
21- err = e .Expression ().Accept (v )
21+ exp := e .Expression ()
22+ tv := is .NewTransformVisitor (GlobalScopeContext {})
23+ err = exp .Accept (tv )
2224 if err != nil {
23- return "" , []driver.Valuer {}, err
24- }
25- return v .Result ()
26- }
27-
28- type EndorserIdContext struct {
29- }
30-
31- func (c EndorserIdContext ) NameByPath (path ... string ) (string , error ) {
32- if len (path ) == 0 {
33- return "" , s .NewMissingFieldsError ("tenantId" , "memberId" )
25+ return "" , nil , err
3426 }
35- switch path [0 ] {
36- case "tenantId" :
37- return "tenant_id" , nil
38- case "memberId" :
39- return "member_id" , nil
40- default :
41- return "" , fmt .Errorf ("can't get field \" %s\" " , path [0 ])
27+ exp , err = tv .Result ()
28+ if err != nil {
29+ return "" , nil , err
4230 }
43- }
44-
45- func (c EndorserIdContext ) Extract (val any ) (driver.Valuer , error ) {
46- switch valTyped := val .(type ) {
47- case member.InternalMemberId :
48- var ex exporters.UintExporter
49- valTyped .Export (& ex )
50- return nil , nil
51- case tenant.TenantId :
52- var ex exporters.UintExporter
53- valTyped .Export (& ex )
54- return nil , nil
55- case member.MemberId :
56- var ex MemberIdExporter
57- valTyped .Export (& ex )
58- return nil , s .NewMissingValuesError (ex .Values ()... )
59- default :
60- return nil , fmt .Errorf ("can't export \" %#v\" " , val )
31+ v := is .NewPostgresqlVisitor ()
32+ err = exp .Accept (v )
33+ if err != nil {
34+ return "" , []driver.Valuer {}, err
6135 }
36+ return v .Result ()
6237}
6338
6439type EndorserContext struct {
65- id EndorserIdContext
6640}
6741
68- func (c EndorserContext ) NameByPath (path ... string ) (string , error ) {
69- prefix := "endorser"
70- var name string
71- var err error
42+ func (c EndorserContext ) AttrNode (parent s.EmptiableObject , path []string ) (s.Visitable , error ) {
7243 switch path [0 ] {
7344 case "availableEndorsementCount" :
74- name = "available_endorsement_count"
45+ return s . Field ( parent , "available_endorsement_count" ), nil
7546 case "pendingEndorsementCount" :
76- name = "pending_endorsement_count"
47+ return s . Field ( parent , "pending_endorsement_count" ), nil
7748 case "id" :
78- name , err = c . id . NameByPath ( path [ 1 :] ... )
79- if err != nil {
80- return "" , err
81- }
49+ return is . CompositeExpression (
50+ s . Field ( parent , "tenant_id" ),
51+ s . Field ( parent , "member_id" ),
52+ ), nil
8253 default :
83- return "" , fmt .Errorf ("can't get field \" %s\" " , path [0 ])
84- }
85- return prefix + "." + name , nil
86- }
87-
88- func (c EndorserContext ) Extract (val any ) (driver.Valuer , error ) {
89- switch valTyped := val .(type ) {
90- case endorserVal.EndorsementCount :
91- var ex exporters.UintExporter
92- valTyped .Export (& ex )
93- return ex , nil
94- default :
95- return nil , fmt .Errorf ("can't export \" %#v\" " , val )
54+ return nil , fmt .Errorf ("can't get field \" %s\" " , path [0 ])
9655 }
9756}
9857
9958type GlobalScopeContext struct {
10059 endorser EndorserContext
10160}
10261
103- func (c GlobalScopeContext ) NameByPath (path ... string ) (string , error ) {
62+ func (c GlobalScopeContext ) AttrNode (path [] string ) (s. Visitable , error ) {
10463 switch path [0 ] {
10564 case "endorser" :
106- return c .endorser .NameByPath ( path [1 :]... )
65+ return c .endorser .AttrNode ( s . Object ( s . GlobalScope (), "endorser" ), path [1 :])
10766 default :
108- return "" , fmt .Errorf ("can't get object \" %s\" " , path [0 ])
67+ return nil , fmt .Errorf ("can't get object \" %s\" " , path [0 ])
10968 }
11069}
11170
112- func (c GlobalScopeContext ) Extract (val any ) (driver. Valuer , error ) {
71+ func (c GlobalScopeContext ) ValueNode (val any ) (s. Visitable , error ) {
11372 switch valTyped := val .(type ) {
11473 case endorserVal.EndorsementCount :
11574 var ex exporters.UintExporter
11675 valTyped .Export (& ex )
117- return ex , nil
76+ return s . Value ( ex ) , nil
11877 case member.InternalMemberId :
11978 var ex exporters.UintExporter
12079 valTyped .Export (& ex )
121- return nil , nil
80+ return s . Value ( ex ) , nil
12281 case tenant.TenantId :
12382 var ex exporters.UintExporter
12483 valTyped .Export (& ex )
125- return nil , nil
84+ return s . Value ( ex ) , nil
12685 case member.MemberId :
12786 var ex MemberIdExporter
12887 valTyped .Export (& ex )
129- return nil , s .NewMissingValuesError (ex .Values ()... )
88+ nodes := []s.Visitable {}
89+ for _ , v := range ex .Values () {
90+ node , err := c .ValueNode (v )
91+ if err != nil {
92+ return nil , err
93+ }
94+ nodes = append (nodes , node )
95+ }
96+ return is .CompositeExpression (nodes ... ), nil
13097 default :
13198 return nil , fmt .Errorf ("can't export \" %#v\" " , val )
13299 }
0 commit comments