@@ -51,8 +51,7 @@ var _ management.DocumentManager = (*Manager)(nil)
51
51
// NewManager creates a new Manager to create and update did:web DID documents.
52
52
func NewManager (rootDID did.DID , tenantPath string , keyStore crypto.KeyStore , db * gorm.DB ) * Manager {
53
53
return & Manager {
54
- db : db ,
55
- //store: &sqlStore{db: db},
54
+ db : db ,
56
55
rootDID : rootDID ,
57
56
tenantPath : tenantPath ,
58
57
keyStore : keyStore ,
@@ -80,9 +79,6 @@ func (m Manager) Deactivate(ctx context.Context, subjectDID did.DID) error {
80
79
}
81
80
return err
82
81
}
83
- if sqlDocument == nil {
84
- return nil
85
- }
86
82
err = didStore .Delete (subjectDID )
87
83
if err != nil {
88
84
return err
@@ -129,46 +125,47 @@ func (m Manager) Create(ctx context.Context, opts management.CreationOptions) (*
129
125
if err != nil {
130
126
return nil , nil , fmt .Errorf ("parse new DID: %w" , err )
131
127
}
132
- tx := m .db .Begin ()
133
- defer tx .Rollback ()
128
+ var document did.Document
129
+ var verificationMethodKey crypto.Key
130
+ err = m .db .Transaction (func (tx * gorm.DB ) error {
131
+ var verificationMethod * did.VerificationMethod
132
+ documentStore := sql .NewDIDDocumentManager (tx )
134
133
135
- documentStore := sql .NewDIDDocumentManager (tx )
134
+ _ , err = documentStore .Latest (* newDID )
135
+ if err == nil {
136
+ return management .ErrDIDAlreadyExists
137
+ }
138
+ if ! errors .Is (err , gorm .ErrRecordNotFound ) {
139
+ return err
140
+ }
136
141
137
- _ , err = documentStore .Latest (* newDID )
138
- if err == nil {
139
- return nil , nil , management .ErrDIDAlreadyExists
140
- }
141
- if ! errors .Is (err , gorm .ErrRecordNotFound ) {
142
- return nil , nil , err
143
- }
142
+ verificationMethodKey , verificationMethod , err = m .createVerificationMethod (ctx , * newDID )
143
+ if err != nil {
144
+ return err
145
+ }
146
+ vmAsJson , err := json .Marshal (verificationMethod )
147
+ if err != nil {
148
+ return err
149
+ }
144
150
145
- verificationMethodKey , verificationMethod , err := m .createVerificationMethod (ctx , * newDID )
146
- if err != nil {
147
- return nil , nil , err
148
- }
149
- vmAsJson , err := json .Marshal (verificationMethod )
150
- if err != nil {
151
- return nil , nil , err
152
- }
151
+ sqlDid := sql.DID {
152
+ ID : newDID .String (),
153
+ Subject : newDID .String (), // todo pass through options
154
+ }
155
+ var doc * sql.DIDDocument
156
+ if doc , err = documentStore .CreateOrUpdate (sqlDid , []sql.SqlVerificationMethod {{
157
+ ID : verificationMethod .ID .String (),
158
+ DIDDocumentID : sqlDid .ID ,
159
+ Data : vmAsJson ,
160
+ }}, nil ); err != nil {
161
+ return fmt .Errorf ("store new DID document: %w" , err )
162
+ }
153
163
154
- sqlDid := sql.DID {
155
- ID : newDID .String (),
156
- Subject : newDID .String (),
157
- }
158
- var doc * sql.DIDDocument
159
- if doc , err = documentStore .CreateOrUpdate (sqlDid , []sql.SqlVerificationMethod {{
160
- ID : verificationMethod .ID .String (),
161
- DIDDocumentID : sqlDid .ID ,
162
- Data : vmAsJson ,
163
- }}, nil ); err != nil {
164
- return nil , nil , fmt .Errorf ("store new DID document: %w" , err )
165
- }
164
+ document , err = buildDocument (* newDID , * doc )
165
+ return err
166
+ })
166
167
167
- document , err := buildDocument (* newDID , * doc )
168
- if err != nil {
169
- return nil , nil , err
170
- }
171
- return & document , verificationMethodKey , tx .Commit ().Error
168
+ return & document , verificationMethodKey , err
172
169
}
173
170
174
171
func (m Manager ) createVerificationMethod (ctx context.Context , ownerDID did.DID ) (crypto.Key , * did.VerificationMethod , error ) {
@@ -230,15 +227,14 @@ func (m Manager) ListOwned(_ context.Context) ([]did.DID, error) {
230
227
}
231
228
232
229
func (m Manager ) CreateService (_ context.Context , subjectDID did.DID , service did.Service ) (* did.Service , error ) {
233
- tx := m .db .Begin ()
234
- defer tx .Rollback ()
235
-
236
- added , err := m .createService (tx , subjectDID , service )
237
- if err != nil {
238
- return nil , err
239
- }
230
+ var err error
231
+ var added * did.Service
232
+ err = m .db .Transaction (func (tx * gorm.DB ) error {
233
+ added , err = m .createService (tx , subjectDID , service )
234
+ return err
235
+ })
240
236
241
- return added , tx . Commit (). Error
237
+ return added , err
242
238
}
243
239
244
240
func (m Manager ) createService (tx * gorm.DB , subjectDID did.DID , service did.Service ) (* did.Service , error ) {
@@ -277,35 +273,27 @@ func (m Manager) UpdateService(_ context.Context, subjectDID did.DID, serviceID
277
273
// ID not set in new version of the service, use the provided serviceID
278
274
service .ID = serviceID
279
275
}
280
-
281
- tx := m .db .Begin ()
282
- defer tx .Rollback ()
283
-
284
- // first delete
285
- err := m .deleteService (tx , subjectDID , serviceID )
286
- if err != nil {
287
- return nil , err
288
- }
289
- // then add
290
- added , err := m .createService (tx , subjectDID , service )
291
- if err != nil {
292
- return nil , err
293
- }
276
+ var added * did.Service
277
+ var err error
278
+ err = m .db .Transaction (func (tx * gorm.DB ) error {
279
+ // first delete
280
+ err := m .deleteService (tx , subjectDID , serviceID )
281
+ if err != nil {
282
+ return err
283
+ }
284
+ // then add
285
+ added , err = m .createService (tx , subjectDID , service )
286
+ return err
287
+ })
294
288
295
289
//commit and return
296
- return added , tx . Commit (). Error
290
+ return added , err
297
291
}
298
292
299
293
func (m Manager ) DeleteService (_ context.Context , subjectDID did.DID , serviceID ssi.URI ) error {
300
- tx := m .db .Begin ()
301
- defer tx .Rollback ()
302
-
303
- err := m .deleteService (tx , subjectDID , serviceID )
304
- if err != nil {
305
- return err
306
- }
307
-
308
- return tx .Commit ().Error
294
+ return m .db .Transaction (func (tx * gorm.DB ) error {
295
+ return m .deleteService (tx , subjectDID , serviceID )
296
+ })
309
297
}
310
298
311
299
func (m Manager ) deleteService (tx * gorm.DB , subjectDID did.DID , serviceID ssi.URI ) error {
0 commit comments