花園
6 則筆記正在生長。清除篩選 ✕
標籤nestjs✕observationrootnote平台前端架構財經踩雷共筆程式碼走讀projectdddnuxt心路遊戲aiseo安全教學資料庫部署ios行銷agentdnsdockeremaillinuxmarkdownpythonssrtradewindows構想流程測試生技設計資料視覺化醫療需求分析成熟度種子扎根✕常青
- 信件系統的四塊積木:模板、設定、規則與一個不重試的 send 「寄信」聽起來是一個功能,拆開來其實是四個關注點,我把它們做成四塊獨立的積木: 四塊積木 - 版型(layout)——信的外殼。後台上傳 HTML,插槽只有主旨、內容、站名三個變數,上傳當下驗證。多封信共用同一個殼,改一次全站換裝。 - 信件定義(entry)——每封信的內容。feature 在程式碼裡註冊 key、變…
- Guard 的疊層順序:限流要站在認證前面 平台有兩個全域 guard:限流(throttler)與 JWT 認證。它們的註冊順序是一個安靜但重要的安全決策:限流在前。 順序反過來會怎樣?帶著偽造或過期 token 的請求先被認證擋下、根本走不到限流——攻擊者可以用無效 token 無限次敲你的認證邏輯(含一次 JWT 驗簽的 CPU),暴力嘗試零成本。限流站前…
- 全域回應信封與它吃掉的檔案下載 平台所有 API 的成功回應長一個樣:{ data: ... }。這靠一個全域 interceptor 把 controller 的回傳值統一包起來——前端拆信封的邏輯寫一次就好,錯誤格式({ message, errors? })也對稱收斂。 信封刻意極簡:不塞 success: true(HTTP 狀態碼已經說了)…
- 欄位級加密:只給會動真錢的祕密 資料庫裡有一類欄位外洩即災難:交易所的 API secret、後台填的 SMTP 密碼。整庫加密太重、也解決不了「DB dump 流出」的場景——我要的是欄位級對稱加密,而且只給真正高敏感的欄位用。 設計上的幾個定案 - AES-256-GCM——authenticated encryption,密文被竄改會在解密時直…
- 三個環境變數的哲學:memory 預設、redis 可換 平台的快取與分散式鎖各自抽象成 port,背後兩套實作:in-memory 與 redis,用環境變數切換。這個設計的核心信念是:fresh clone 必須零外部依賴就能跑起來。 預設 memory 的理由 新人(或三個月後的自己)clone 下來,npm install 完就該能啟動——不需要先架 redis、不需…
- Cron 的可觀測性:排程不該是黑箱 排程任務最陰險的故障模式是安靜地不跑。cron 表達式打錯、程序重啟後沒掛回去、上一輪卡死——沒有人會收到通知,直到某天發現三週的清理任務一次都沒執行。所以平台把「排程」與「可觀測」設計成一體。 慣例:@Cron 只准當扳機 @Cron 裝飾器一律放在 presentation 層的 scheduler 檔案裡,而且薄…