[英]How should I go about creating this project using REST API?
我必须创建一个非常简单的 Spring“市场”应用程序。
无需前端
市场:
该系统必须作为一个简化的市场运行,用户可以是买家或卖家。
用户:
用户实体属性:id:1, username:"User1", account:0
//帐户只是随着数据库中的每个条目而增加。
用户可以买卖物品。
项目:
项目实体属性:id:3、name:Item1、ownerId:1。
与项目端点交互的示例: create: {id:1 name:"Item1", ownerId:1}
;
拥有 ownerId = 1 的 getAllItems(使用单个查询)
[
{
"id":3,
"name":”Item1”,
"ownerId":1,
“ownerUsername”:"User1"
}
]
例子:
“用户 1”拥有“项目 1”。 他想以 100 美元的价格出售它。 他创建了一个有效的合同。 其他用户可以查看所有有效合约并选择参与。 “User2”在她的帐户中有足够的钱并购买“Item1”。 合同现已关闭。 “用户 1”在他的帐户中收到 100 美元。 “User2”是“Item1”的新所有者。
合同:
合约实体属性:id、sellerId、buyerId、itemId、price、status。 (卖方是物品的所有者,不能是买方)端点 - CRUD。 与合约端点交互的示例:
创建: {itemId: 3, price: 100}
。 预期行为:在数据库中找到 id 为 3 的项目的所有者(ownerId = 1),将新的活动合约持久保存在数据库中:
{
"sellerId":1,
"itemId":3,
"price":100,
"active":true
}
通过 id 更新有效合约的价格: {"itemId":3, "price":200}
getAllActive 合约(使用单个本机查询):
[
{
"sellerId":1,
“sellerUsername”:"User1",
"itemId":3,
"price":200,
"active":true
}
]
通过 id {"itemId":3, "buyerId":2}
关闭有效合约。
预期行为:更新 id 1 和 id 2 用户的帐户。
通过可选参数 getAllClosed 合约:itemId、sellerId、buyerId(使用单个原生查询):
[
{
"sellerId":1,
“sellerUsername”:"User1",
"buyerId":2,
“buyerUsername”:"User2",
"itemId":3,
"price":100,
"active":false
}
]
到目前为止,这些是我的实体:
基本实体:
@MappedSuperclass
public abstract class BaseEntity {
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
用户:
@Entity
@Table(name = "users")
public class User extends BaseEntity{
private String username;
private Long account;
private Set<Item> items;
public User() {
}
@Column(name = "username", nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = "account", nullable = false)
public Long getAccount() {
return account;
}
public void setAccount(Long account) {
this.account = account;
}
@OneToMany(mappedBy = "id")
public Set<Item> getItems() {
return items;
}
public void setItems(Set<Item> items) {
this.items = items;
}
}
项目:
@Entity
@Table(name = "items")
public class Item extends BaseEntity{
private String name;
private String ownerUsername;
private User user;
public Item() {
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//get the id of the item's owner
@ManyToOne
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getOwnerUsername() {
return user.getUsername();
}
public void setOwnerUsername(String ownerUsername) {
this.ownerUsername = ownerUsername;
}
}
那么,从这里开始我该怎么办?
如果您已经创建了持久层(使用 Spring 数据 JPA 或其他映射器),则需要开发服务逻辑并创建表示层。
像这样(只是用户域)
UserService(服务层)
@Service
@RequiredArgsConstructor
public class UserService {
private final UserJpaRepository repository;
@Transactional
public Long createUser(String username) {
User user = new User();
user.setUsername(username);
// other logic ...
repository.save(user);
return user.getId();
}
@Transactional(readonly = true)
public User getUser(Long id) {
return repository.findById(id)
.orElseThrow(() -> IllegalArgumentsException("Not Found Entity."))
}
}
UserAPIController(表示层)
@RestController
@RequiredArgsConstructor
public class UserAPIController {
private final UserService userService;
@PostMapping("/users")
public ResponseEntity<Long> createUser(@RequestBody CreateUserDTO dto) {
Long userId = userService.createUser(dto.getUsername());
return new ResponseEntity(userId, HttpStatus.CREATED);
}
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.getUser(id);
return new ResponseEntity(user, HttpStatus.OK);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.