[Day 12]我也好想成为时间管理大师(後端篇)

挑战目标: MockNative Camp


昨天我们将SignupReq.java给建立完,现在要开始做繁杂的工作,Object间的转换,不知道有没有更快速的方式。
首先要先在Teachers.java中加入一个method

package com.mock.nativecamp.model;

import com.mock.nativecamp.payload.teacher.SignupReq;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.List;

@Document(collection = "Teachers")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teachers {
    @Id
    private String userId;
    private String firstName;
    private String middleName;
    private String lastName;
    private String email;
    private String password;
    private String status;
    private String timezone;
    private String birthday;
    private String country;
    private String nationality;
    private String referrerEmail;
    private String classStatus;
    private String introductionVideo;
    private String rating;
    private String lastLogin;
    private Integer classCount;
    private Integer reservationCount;
    private Integer reservationCancelCount;
    private String selfIntroduction;
    private String employeeIntroduction;
    private String teachingYears;
    private List<String> picList;
    private List<String> badge;
    private List<String> characteristic;
    private List<String> hobby;

    public Teachers addTeachers(SignupReq signupReq) {
        Teachers teachers = new Teachers();
        teachers.setFirstName(signupReq.getFirstName());
        teachers.setMiddleName(signupReq.getMiddleName());
        teachers.setLastName(signupReq.getLastName());
        teachers.setEmail(signupReq.getEmail());
        teachers.setPassword(signupReq.getPassword());
        teachers.setBirthday(signupReq.getBirthday());
        teachers.setReferrerEmail(signupReq.getReferrerEmail());
        teachers.setCountry(signupReq.getCountry());
        teachers.setNationality(signupReq.getNationality());
        return teachers;
    }
}

然後TeachersController.java新增POST teacher、GET all teacher、GET one teacher

package com.mock.nativecamp.controller;

import com.mock.nativecamp.payload.teacher.SignupReq;
import com.mock.nativecamp.service.TeachersServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/teachers")
public class TeachersController {
    private final TeachersServer teachersServer;

    public TeachersController(TeachersServer teachersServer) {
        this.teachersServer = teachersServer;
    }

    /**
     * Signup teacher
     * @param signupReq
     * @return AdminUser
     * @throws Exception
     */
    @PostMapping(path = "/signup", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public Object SignupUser(@RequestBody SignupReq signupReq) throws Exception {
        return teachersServer.signupTeacher(signupReq);
    }

    /**
     * Get all Teachers
     * @return Teachers list
     * @throws Exception
     */
    @GetMapping(path = "/all", produces = MediaType.APPLICATION_JSON_VALUE)
    public Object GetAllTeachers() throws Exception {
        return teachersServer.getAllTeachers();
    }

    /**
     * Get one Teacher
     * @return Teachers
     * @throws Exception
     */
    @GetMapping(path = "/teacher", produces = MediaType.APPLICATION_JSON_VALUE)
    public Object GetTeacher(@RequestParam String id) throws Exception {
        return teachersServer.getTeacher(id);
    }
}

teachersServer.java还有TeachersRepository.java中加入相对应的code。
teachersServer.java

package com.mock.nativecamp.service;

import com.mock.nativecamp.model.Teachers;
import com.mock.nativecamp.payload.teacher.SignupReq;
import com.mock.nativecamp.repository.TeachersRepository;
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 TeachersServer {

    @Autowired
    private TeachersRepository teachersRepository;

    public Object signupTeacher(SignupReq signupReq) {
        Teachers teachers = new Teachers().addTeachers(signupReq);
        teachersRepository.save(teachers);
        return new ResponseEntity(HttpStatus.ACCEPTED);
    }

    public Object getAllTeachers() {
        return teachersRepository.findAll();
    }

    public Object getTeacher(String id) {
        return teachersRepository.findByUserId(id);
    }
}

TeachersRepository.java

package com.mock.nativecamp.repository;

import com.mock.nativecamp.model.Teachers;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface TeachersRepository extends MongoRepository<Teachers, String>{
    Teachers findByUserId(String id);
}

接下来就只剩patch了,关於patch因为我是偷懒的设计,由前端带完整资料过来,直接做更新,所以不应该在model中将原本NonNull的栏位拿掉,应该要保持原有的规则,所以修改後的teacher PatchReq.java

package com.mock.nativecamp.payload.teacher;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NonNull;

@Data
@AllArgsConstructor()
public class PatchReq {
    @NonNull
    private String firstName;
    private String middleName;
    @NonNull
    private String lastName;
    @NonNull
    private String email;
    @NonNull
    private String birthday;
    @NonNull
    private String country;
    @NonNull
    private String nationality;
}

新增教师
https://ithelp.ithome.com.tw/upload/images/20210927/201403589dVpEN9IFu.png
查询所有教师
https://ithelp.ithome.com.tw/upload/images/20210927/201403586wB9TP2iYe.png
查询单一教师
https://ithelp.ithome.com.tw/upload/images/20210927/201403584VY0fGxjfp.png

明天再来继续完成更新的API,真的很佩服时间管理大师,怎麽有办法在一天的时间内处理好这麽多事情啊?


<<:  [神经机器翻译理论与实作] Google Translate的神奇武器- Seq2Seq (I)

>>:  [Day12] 第十二章-完成注册API 修改route,controller,model(使用passport认证)

[Day19] TS:什麽!泛型的参数还能有预设值?

今天这个范例是来自第三方套件 utility-types,在有了前几天的知识後,让我们来试着了解这...

【领域展开 13 式】 有了骨头与皮肤,再搞清楚主要肌群 Menu 层级与操作

网站架构是骨头,布景主题是皮肤,Menu 是大肌肉 昨天【领域展开 12 式】 安装 Soledad...

Buy Store Location Data: Best Store Database Provider 2021

Store location data is information about the geogr...

Day24 - 【概念篇】Keycloak使用基本概念 - 第一部分: Client

本系列文之後也会置於个人网站 Client与一些安全相关的设定 在OAuth架构下的Client(...

[Android Studio] -- Day 5 主题变换Theme02

前言 今天读到Theme主题实作,刚好又是app主题色系变化。这次采用setTheme和Style来...