我想设计一个简单的折扣代码应用程序,允许用户跟踪他们对折扣代码的使用情况。我已经有用户可以使用的折扣代码的现有“公共”列表。但是,用户也应该能够注册使用“私人”折扣代码。在最简单的形式中,这些表可能看起来像这样,带有相应的@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,即所有公共的和他们自己添加/使用的所有私人的。但是,用户不应该能够看到其他用户添加到他们自己的列表中的代码。2.用户应该能够在网站 x 上使用代码 y 注册购买。如果是新的discount_code,应该保存。用法discount_usages也应保存到,如果是用户第一次使用,则作为新行保存discount_code,或者如果用户以前使用过该代码,则更新行。笔记:( discount_code_id, user_id) 唯一标识 中的一行discount_usages。@ManyToOne如果每个“私有”discount_code都保存在每个使用它的客户的单独行中,则也可以将其建模为关系。问题:是否可以在不增加大量复杂性的情况下满足这些要求?我的第一次尝试是将以下内容添加到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);但是这样做的复杂性增加得非常快,而且很容易出现编程错误,不小心将私人代码显示给错误的用户。
1 回答
HUH函数
TA贡献1836条经验 获得超4个赞
是否可以在不增加大量复杂性的情况下满足这些要求?
在我看来,你当然可以。
如果您担心未来的复杂性,可以使用Specification pattern
在您的情况下,您可以编写以下规则:
所有公共的
他们自己添加/使用的所有私人的
添加回答
举报
0/150
提交
取消