iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

Hi all, 來到第18天 昨天解決了金鑰儲存的問題,今天就來完成我們編輯區塊的功能吧 (終於可以往下走了)

清點一下編輯區塊的目標吧

  • 新的 endPoint : /api/edit
  • 參數需要有 對應的 block ID
  • 確保區塊資料更新完畢後,不會變動到原有的 Hash值

Controller

首先,來打通下我們的端點吧,code 如下

其中我們會在controller 層計算好變色龍雜湊簽章值,並將其塞進 DTO 物件中傳給 Service 層。

[HttpPatch("edit/{id}")]
public async Task<ApiResponse> EditBlock([FromBody] EditBlockRequest request, int id)
{
    var chameleonSignature = chameleonHashService.Sign(request.Data);
    await chainService.EditBlock(new EditBlockDto
    {
        Id = id,
        Data = request.Data,
        ChameleonSignature = chameleonSignature.Value
    });
    
    return ApiResponse.Success();
}

Service

這邊就比較簡單毫無邏輯,直接call repository進行更新就好。

public async Task EditBlock(EditBlockDto dto)
{
		await chainRepository.UpdateBlock(dto);
}

Repository

接著便可使用 DTO 物件裡的 Id 找到目前相對應的 Block,並將內容更新。

public async Task UpdateBlock(EditBlockDto dto)
{
    var blockToUpdate = await _blocks.FirstAsync(x=> x.Id == dto.Id);
    blockToUpdate.Data = dto.Data;
    blockToUpdate.ChameleonSignature = dto.ChameleonSignature;
    await blockchainDbContext.SaveChangesAsync();
}

E2E Test

最後我們來打一次API 並觀察變色龍雜湊值的變化:

Data Before Update

beforeupdate.png

Call API

call api.png

Data After Update

afterupdate.png

Conclusion

今天讓系統可成功編輯區塊鏈,但我們還缺少驗證這個步驟,明天來想想怎麼做

結語: 拿到夢寐以求 HHKB,我愛大家


上一篇
Day17 Solution For Key Storage
下一篇
Day 19 Verify Signature and Project Containerization
系列文
Side-Project:: 為自己打造個可編輯的區塊鏈30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言