[英]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.