iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0

今天我們實作Users的CRUD,但今天因為花很多時間在前端的Header的排版,所以沒有什麼時間可以細作Users
我們先根據Native Camp的會員頁和註冊頁來看大概需要什麼欄位後暫時先宣告好我們的schema。
Users.java 題外話lombok很好用,省了很多工

package com.mock.nativecamp.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "Users")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Users {
    @Id
    private String id;
    private String name;
    private String email;
    private String password;
    private String status;
    private String coin;
    private String timezone;
    private String payMethod;
    private String nextPayCheck;
    private String ssoId;
}

然後就可以開始撰寫我們的controller和service了,controller主要是定義API接口,service則是做邏輯處理和Repository CRUD的呼叫。
由於時間關係我只做到Create User和Get all Users和Get one User。
UsersController.java

package com.mock.nativecamp.controller;

import com.mock.nativecamp.model.Users;
import com.mock.nativecamp.service.UsersService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/users")
public class UsersController {

    private final UsersService usersService;

    public UsersController(UsersService usersService) {
        this.usersService = usersService;
    }

    /**
     * Signup user
     * @param user
     * @return AdminUser
     * @throws Exception
     */
    @PostMapping(path = "/signup", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public Object SignupUser(@RequestBody Users user) throws Exception {
        return usersService.signupUser(user);
    }

    /**
     * Get all Users
     * @return Users list
     * @throws Exception
     */
    @GetMapping(path = "/all", produces = MediaType.APPLICATION_JSON_VALUE)
    public Object GetAllUsers() throws Exception {
        return usersService.getAllUsers();
    }

    /**
     * Get one user
     * @return Users
     * @throws Exception
     */
    @GetMapping(path = "/user", produces = MediaType.APPLICATION_JSON_VALUE)
    public Object GetUsers(@RequestParam String id) throws Exception {
        return usersService.getUser(id);
    }

}

因為只是簡單的測試是否可以操作存取MongoDB,尚未做邏輯檢查。
UsersService.java

package com.mock.nativecamp.service;

import com.mock.nativecamp.model.Users;
import com.mock.nativecamp.repository.UsersRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class UsersService {

    @Autowired
    private UsersRepository usersRepository;

    public Object signupUser(Users user) {
        usersRepository.save(user);
        return new ResponseEntity(HttpStatus.ACCEPTED);
    }

    public Object getAllUsers() {
        return usersRepository.findAll();
    }

    public Object getUser(String id) {
        return usersRepository.findById(id);
    }
}

然後運行起來使用postman來測試
新增使用者
https://ithelp.ithome.com.tw/upload/images/20210920/20140358T1g9BoUMLK.png

取得使用者列表
https://ithelp.ithome.com.tw/upload/images/20210920/20140358x1m6bVJ5CI.png

取得單一使用者
https://ithelp.ithome.com.tw/upload/images/20210920/20140358RZImqa6qT7.png

下一篇應該是會把CRUD都給完成,然後透過網站end to end的確認邏輯後再來實作在service上。


上一篇
[Day4]專案始動-續(後端篇)
下一篇
[Day 6]中秋時在做什麼,有沒有空,可以幫想標題嗎(前端篇)
系列文
關於我快30歲的後端工程師,想轉職成全端工程師,在前端世界中尋求機會的那件事(後端篇)18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言