我想設(shè)計一個簡單的折扣代碼應(yīng)用程序,允許用戶跟蹤他們對折扣代碼的使用情況。我已經(jīng)有用戶可以使用的折扣代碼的現(xiàn)有“公共”列表。但是,用戶也應(yīng)該能夠注冊使用“私人”折扣代碼。在最簡單的形式中,這些表可能看起來像這樣,帶有相應(yīng)的@Entity類:折扣使用情況╔════╦══════════════════╦═════════╦════════════╦══════════╦═════╗║ id ║ discount_code_id ║ user_id ║ last_used ║ num_uses ║ ... ║╠════╬══════════════════╬═════════╬════════════╬══════════╬═════╣║ 1 ║ 2 ║ 7 ║ 2019-05-01 ║ 3 ║ ║║ 2 ║ 1 ║ 4 ║ 2019-07-10 ║ 1 ║ ║║ 3 ║ 3 ║ 11 ║ 2019-05-19 ║ 2 ║ ║║ 4 ║ 2 ║ 11 ║ 2019-05-01 ║ 1 ║ ║║ 5 ║ 2 ║ 6 ║ 2019-07-10 ║ 1 ║ ║║ 6 ║ 1 ║ 4 ║ 2019-05-19 ║ 2 ║ ║╚════╩══════════════════╩═════════╩════════════╩══════════╩═════╝折扣代碼╔════╦═══════╦════════════════╦═════════════════╦═════╗║ id ║ code ║ website ║ expiration-date ║ ... ║╠════╬═══════╬════════════════╬═════════════════╬═════╣║ 1 ║ t3fj4 ║ somestore.com ║ 2019-12-31 ║ ║║ 2 ║ ds7do ║ otherstore.com ║ 2019-12-31 ║ ║║ 3 ║ uw7tp ║ thirdstore.com ║ 2020-03-15 ║ ║╚════╩═══════╩════════════════╩═════════════════╩═════╝要求:1.我需要向用戶展示所有可用的discount_codes,即所有公共的和他們自己添加/使用的所有私人的。但是,用戶不應(yīng)該能夠看到其他用戶添加到他們自己的列表中的代碼。2.用戶應(yīng)該能夠在網(wǎng)站 x 上使用代碼 y 注冊購買。如果是新的discount_code,應(yīng)該保存。用法discount_usages也應(yīng)保存到,如果是用戶第一次使用,則作為新行保存discount_code,或者如果用戶以前使用過該代碼,則更新行。筆記:( discount_code_id, user_id) 唯一標識 中的一行discount_usages。@ManyToOne如果每個“私有”discount_code都保存在每個使用它的客戶的單獨行中,則也可以將其建模為關(guān)系。問題:是否可以在不增加大量復(fù)雜性的情況下滿足這些要求?我的第一次嘗試是將以下內(nèi)容添加到DiscountCode實體中:@ManyToOne(optional = true) User ownedByUser;然后在DiscountCodeRepository:@Query("select d from DiscountCode d where d.ownedByUser.id is null
or d.ownedByUser.id = :userId")
findAllByOwnedByUserIdOrOwnedByUserIdIsNull(@Param("userId") Long userId);但是這樣做的復(fù)雜性增加得非???,而且很容易出現(xiàn)編程錯誤,不小心將私人代碼顯示給錯誤的用戶。
1 回答

HUH函數(shù)
TA貢獻1836條經(jīng)驗 獲得超4個贊
是否可以在不增加大量復(fù)雜性的情況下滿足這些要求?
在我看來,你當(dāng)然可以。
如果您擔(dān)心未來的復(fù)雜性,可以使用Specification pattern
?
在您的情況下,您可以編寫以下規(guī)則:
所有公共的
他們自己添加/使用的所有私人的
添加回答
舉報
0/150
提交
取消