我想设计一个简单的折扣代码应用程序,允许用户跟踪他们对折扣代码的使用情况。我已经有用户可以使用的折扣代码的现有“公共”列表。但是,用户也应该能够注册使用“私人”折扣代码。
在最简单的形式中,这些表可能看起来像这样,带有相应的@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);
但是这样做的复杂性增加得非常快,而且很容易出现编程错误,不小心将私人代码显示给错误的用户。
HUH函数
相关分类