+59
upload/src/main.rs
+59
upload/src/main.rs
···
150
}
151
152
// batch delete/upload records
153
+
let mut writes = Vec::new();
154
+
let mut delete_records = remote_records
155
+
.into_iter()
156
+
.map(|x| {
157
+
let rkey = RecordKey(Rkey::new_owned(x)?);
158
+
Ok(ApplyWritesWritesItem::Delete(Box::new(
159
+
apply_writes::Delete::builder()
160
+
.collection(Nsid::raw("dev.atcities.route"))
161
+
.rkey(rkey)
162
+
.build(),
163
+
)))
164
+
})
165
+
.collect::<Result<Vec<ApplyWritesWritesItem<'_>>, AtStrError>>()
166
+
.into_diagnostic()?;
167
+
168
+
let mut create_records = new_sitemap
169
+
.into_iter()
170
+
.map(|(k, v)| {
171
+
let rkey = RecordKey(Rkey::new_owned(k).into_diagnostic()?);
172
+
let blob = match v.blob {
173
+
BlobRef::Local(_) => panic!("Illegal local blob"),
174
+
BlobRef::Remote(cid) => cid,
175
+
};
176
+
let data = atproto!({
177
+
"page": {
178
+
"$type": "dev.atcities.route#blob",
179
+
"blob": {
180
+
"$type": "blob",
181
+
"ref": blob.r#ref.as_str(),
182
+
"mimeType": blob.mime_type.0.as_str(),
183
+
"size": blob.size
184
+
}
185
+
}
186
+
});
187
+
Ok(ApplyWritesWritesItem::Create(Box::new(
188
+
apply_writes::Create::builder()
189
+
.collection(Nsid::raw("dev.atcities.route"))
190
+
.rkey(rkey)
191
+
.value(data)
192
+
.build(),
193
+
)))
194
+
})
195
+
.collect::<Result<Vec<ApplyWritesWritesItem<'_>>, miette::Error>>()?;
196
+
197
+
writes.append(&mut delete_records);
198
+
writes.append(&mut create_records);
199
+
200
+
let req = com_atproto::repo::apply_writes::ApplyWrites::new()
201
+
.repo(AtIdentifier::Did(auth.did.clone()))
202
+
.writes(writes)
203
+
.build();
204
+
205
+
let res = agent
206
+
.xrpc(agent.endpoint().await)
207
+
.send::<ApplyWrites>(&req)
208
+
.await?
209
+
.into_output()?;
210
+
211
+
println!("res: {res:#?}");
212
213
Ok(())
214
}