簡體   English   中英

我應該如何使用 REST API 創建這個項目?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM