@@ -66,23 +66,31 @@ public PutObjectResponse put(PutObjectRequest request) {
6666
6767 String storeId = request .getStoreId ();
6868
69- List <VssDbRecord > vssRecords = new ArrayList <>(request .getTransactionItemsList ().stream ()
69+ List <VssDbRecord > vssPutRecords = new ArrayList <>(request .getTransactionItemsList ().stream ()
70+ .map (kv -> buildVssRecord (storeId , kv )).toList ());
71+
72+ List <VssDbRecord > vssDeleteRecords = new ArrayList <>(request .getDeleteItemsList ().stream ()
7073 .map (kv -> buildVssRecord (storeId , kv )).toList ());
7174
7275 if (request .hasGlobalVersion ()) {
7376 VssDbRecord globalVersionRecord = buildVssRecord (storeId ,
7477 KeyValue .newBuilder ()
7578 .setKey (GLOBAL_VERSION_KEY )
7679 .setVersion (request .getGlobalVersion ())
80+ .setValue (ByteString .EMPTY )
7781 .build ());
7882
79- vssRecords .add (globalVersionRecord );
83+ vssPutRecords .add (globalVersionRecord );
8084 }
8185
8286 context .transaction ((ctx ) -> {
8387 DSLContext dsl = ctx .dsl ();
84- List <Query > batchQueries = vssRecords .stream ()
85- .map (vssRecord -> buildPutObjectQuery (dsl , vssRecord )).toList ();
88+ List <Query > batchQueries = new ArrayList <>();
89+
90+ batchQueries .addAll (vssPutRecords .stream ()
91+ .map (vssRecord -> buildPutObjectQuery (dsl , vssRecord )).toList ());
92+ batchQueries .addAll (vssDeleteRecords .stream ()
93+ .map (vssRecord -> buildDeleteObjectQuery (dsl , vssRecord )).toList ());
8694
8795 int [] batchResult = dsl .batch (batchQueries ).execute ();
8896
@@ -97,6 +105,12 @@ public PutObjectResponse put(PutObjectRequest request) {
97105 return PutObjectResponse .newBuilder ().build ();
98106 }
99107
108+ private Query buildDeleteObjectQuery (DSLContext dsl , VssDbRecord vssRecord ) {
109+ return dsl .deleteFrom (VSS_DB ).where (VSS_DB .STORE_ID .eq (vssRecord .getStoreId ())
110+ .and (VSS_DB .KEY .eq (vssRecord .getKey ()))
111+ .and (VSS_DB .VERSION .eq (vssRecord .getVersion ())));
112+ }
113+
100114 private Query buildPutObjectQuery (DSLContext dsl , VssDbRecord vssRecord ) {
101115 return vssRecord .getVersion () == 0 ? buildInsertRecordQuery (dsl , vssRecord )
102116 : buildUpdateRecordQuery (dsl , vssRecord );
0 commit comments