iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
Vibe Coding

做一個團購後端,順便搞懂那些事 系列

初入 Spring Boot 的世界,想試著用 AI 輔助開發,但不只是讓 AI 幫我寫程式。透過和 AI 討論、比較不同方案,思考技術取捨與決策,理解程式背後的原因。希望這 30 天不只做出一套後端系統,也能在 AI coding 的過程中,練習真正屬於自己的技術判斷力。

參賽天數 28 天 | 共 28 篇文章 | 0 人訂閱 訂閱系列文 RSS系列文 |團隊AI的I,是I人的I
DAY 11

Day 11|10:05 撤了客服,10:06 舊 token 為什麼還能看全部訂單

一開始設計 JWT 時,把 role 放進 token 看起來很合理,之後每次請求只要驗證 JWT,就可以直接知道使用者是不是客服,不需要再查資料庫,這個做法看...

DAY 12

Day 12|換掉網址裡的 ID,就看得到別人的餘額?!

使用者登入後,可以查看自己的帳戶餘額,也可以查看自己參與的團購訂單;客服則可以查看任何一張訂單。 原本的帳戶查詢 API 讓 client 傳入 userId:...

DAY 13

Day 13|設計訂單狀態機

團購訂單有五種狀態。狀態本身不難,難的是每個狀態允許哪些操作——這件事若沒有明確定義,會散落成各處的 if 判斷。 狀態 意義 可下單/改單 可取消 可扣...

DAY 14

Day 14|測試變綠了,真的代表規則被守住了嗎?

昨天把訂單狀態的轉換規則定下來,其中有一條規則很重要: 結算時如果餘額不足,訂單必須進入 FAILED,不能停在 CLOSED。 CLOSED 代表「訂單已...

DAY 15

Day 15|分頁查詢:資料變動時,分頁可能位移

按照使用者的使用流程,團購的第一步是「挑店家」,使用者登入後,使用者會看到一份店家清單,依低消(min_order_amount,滿多少錢店家才接單)由低到高排...

DAY 16

Day 16|店家改價之後,已經下的單要扣多少?

團主選一家店開團,參與者從菜單點品項。截止時,系統依每個人點餐的金額從餘額扣款,而扣款前這筆金額會先被凍結,這裡其實有兩條很重要的規則: 使用者下單時看到多少...

DAY 17

Day 17|CAS:兩台機器同時扣款會發生什麼事?

結算團購訂單時,系統需要從每位參加者的帳戶餘額中扣除應付金額。 User user = userMapper.selectById(userId); if (...

DAY 18

Day 18|列鎖:如何避免同一個使用者同時下單造成超支?

使用者參加團購時,系統要先確認他付得起,這裡看的不是帳戶實際餘額,而是可用餘額: 可用餘額 = 帳戶餘額 − 尚未結算品項的金額總和 目前 users.bal...

DAY 19

Day 19|@Transactional 的邊界:哪些操作該被 rollback?

每次訂團購的時候,團主都要像債主般的追著跟大家要錢,所以在做這個專案的時候,就刻意地把規格設計成「訂單扣款時,只要有一個人儲值帳戶裡面的錢不夠扣款,就不能扣款」...

DAY 20

Day 20|MVCC:拿到鎖了,為什麼還讀到舊資料?

先來個前情提要,Day 18用 SELECT ... FOR UPDATE,讓同一個使用者的下單流程依序取得 users 這一列的鎖,避免兩筆訂單同時扣掉相同的...