Data management isn't just about creating records; it also involves updating
and deleting
them as needed.
In this chapter, we’ll cover how to update
existing records and delete
unnecessary ones on your Decentralized Web Node (DWN). You'll learn the appropriate methods and commands to execute these actions safely and effectively, along with best practices for maintaining data consistency and integrity.
By the end of this chapter, you'll be able to manage your DWN's data lifecycle seamlessly.
Updating a Record
In previous examples, we’ve covered how to create
records on a DWN and query
them to read
one by one. Now, to update a record, you can use the update
function.
Here’s how to update a record:
// index.js
// ...
// Read a single record
const { record: singleRecord } = await web5.dwn.records.read({
message: {
filter: {
recordId: "bafyreiflqo2weyflwxn3lzkihopjtaeshbf4drmuf4yhmx6q3zeofv5bh4",
},
},
});
// Update the record
const { status } = await singleRecord.update({
data: {
file: mockTxt, // Example text file
image: mockImage, // Example image file
text: "Updated mixed data", // New data content
},
});
console.log(await singleRecord.data.json()); // Print updated record data
Deleting a Record
To delete a record from your DWN, use the delete
function:
// index.js
// ...
// Delete the record
const { status: deleteStatus } = await singleRecord.delete();
And that's it! You’ve successfully performed all the CRUD (Create, Read, Update, Delete) operations on your DWN.
Complete CRUD Example Code
Here’s a complete example showing how to connect to a DWN, create a mixed data record, query it, update, and delete it:
import { Web5 } from "@web5/api";
const { web5, did } = await Web5.connect({
didCreateOptions: {
dwnEndpoints: ["https://dwn.gcda.xyz"], // Community DWN instance on Google Cloud
},
registration: {
onSuccess: () => {
console.log("\n\nConnected successfully");
},
onFailure: (error) => {
console.error("Connection failed:", error);
},
},
});
console.log("\nConnected did:", did);
// Image file
const imageFile = new File(["test image content"], "web5.png", {
type: "image/png",
});
const mockImage = {
currentTarget: {
files: [imageFile], // Simulate a file input
},
};
// txt file
const txtFile = new File(["dummy content"], "web5.txt", {
type: "text/plain",
});
const mockTxt = {
currentTarget: {
files: [txtFile], // Mimic the file input's files array
},
};
// Create Mixed record
const createMixedRecord = async (file, image, text) => {
const { status, record } = await web5.dwn.records.create({
data: {
image,
file,
text,
},
message: {
schema: "https://test.org/schema/mixed-data",
dataFormat: "application/json",
},
});
return record;
};
createMixedRecord(mockImage, mockTxt, "Mixed data");
// Query records
const response = await web5.dwn.records.query({
form: did,
message: {
filter: {
schema: "https://test.org/schema/mixed-data",
dataFormat: "application/json",
},
},
});
response.records.forEach(async (record) => {
const result = await record.data.json();
const allRecords = { recordId: record.id, data: result };
console.log(allRecords);
});
// read record
const { record: singleRecord } = await web5.dwn.records.read({
message: {
filter: {
recordId: "bafyreig4vibz5lg4otmftd56qzqisgga7cqw5yeob336z7nn2x3hyv55ha",
},
},
});
console.log(await singleRecord.data.json());
// update a record
const { status } = await singleRecord.update({
data: {
file: mockTxt,
image: mockImage,
text: "Updated mixed data",
},
});
console.log(await singleRecord.data.json());
// delete Record
const { status: deleteStatus } = await singleRecord.delete();
Protocols: The Data Exchange Contracts
Finally, remember that Protocols define the data schema and serve as the contract by which two Decentralized Web Nodes (DWNs) agree to communicate and share data.
Stay tuned for our upcoming post on protocols and how to synchronize data between two DWNs!
Top comments (0)