[Day 13]每天前进一点应该也是进步吧?(後端篇)

挑战目标: MockNative Camp


今天来做教师的更新API,因为我没有实际看过教师更新的画面,所以这边就简单的来更新一些栏位示范,基本上其余栏位也只是复制到payload中的patchreq object就可以了。
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 birthday;
    private String referrerEmail;
    @NonNull
    private String country;
    @NonNull
    private String nationality;
}

TeachersController.java 这边只贴新增的code

 @PatchMapping(path = "/patch/{userId}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public Object patchTeacher(@PathVariable("userId") String userId, @RequestBody PatchReq patchReq) {
        return teachersServer.updateTeacher(userId, patchReq);
    }

Teachers.java teacher object 新增update method

    public Teachers updateTeacher(Teachers teacher, PatchReq patchReq) {
        teacher.setFirstName(patchReq.getFirstName());
        if (patchReq.getMiddleName() != null) {
            teacher.setMiddleName(patchReq.getMiddleName());
        }
        teacher.setLastName(patchReq.getLastName());
        teacher.setBirthday(patchReq.getBirthday());
        if (teacher.getReferrerEmail() == null & patchReq.getReferrerEmail() != null) {
            teacher.setReferrerEmail(patchReq.getReferrerEmail());
        }
        teacher.setCountry(patchReq.getCountry());
        teacher.setNationality(patchReq.getNationality());
        return teacher;
    }

TeachersServer.java 这边做了先查询在更新,加入检查是否有此纪录,没有的话回传404并log

  public Object updateTeacher(String userId, PatchReq patchReq) {
        Teachers teacher = teachersRepository.findByUserId(userId);
        if (teacher == null) {
            log.error(String.format("Teacher not found id: %s", userId));
            return new ResponseEntity(HttpStatus.NOT_FOUND);
        }
        teacher.updateTeacher(teacher, patchReq);
        teachersRepository.save(teacher);
        return new ResponseEntity(HttpStatus.ACCEPTED);
    }

没有找到纪录
https://ithelp.ithome.com.tw/upload/images/20210928/20140358b0j0g4KcvQ.png
log 显示,然後可以看到用了AOP拦截并log request跟response後,不用额外加code,真的很方便。
https://ithelp.ithome.com.tw/upload/images/20210928/20140358PvfPMt4lcg.png

成功更新教师资料
https://ithelp.ithome.com.tw/upload/images/20210928/201403587TjSqDt4Ko.png
查看教师资料
https://ithelp.ithome.com.tw/upload/images/20210928/20140358gVkPTsmgch.png

接下来继续Mock也只是重复的新增model、controller、service的CRUD,前端那边看起来要串接应该还要很久,甚至来不及串接,我会思考剩下的时间要不要转向其他方向,像是一些全局性error handling 或者是部署更甚至是socket以及WebRTC的实作。


<<:  Day-13 观念补遗:TDZ与全域变数

>>:  Day16 - 完成爬虫功能

Day-16 最近有看到什麽好玩有趣的网页或功能?

这种软性面试题又来啦!看似简单,但其实不好作答哦! 这种面试题从对答中可以看出你的人格特质是什麽,...

CompTIA SY0-601 Braindumps - All About The SY0-601 Exam

Most of the aspiring professionals are getting cer...

[Python 爬虫这样学,一定是大拇指拉!] DAY19 - Python:Requests 基本应用 (2)

今天要来讲的是,读取送出 Request 後拿回来的 Response。 读取 Response 以...

资安这条路 31 - [WebSecurity] 资源分享

感谢追踪我的所有人,如果你还要看有关资安的题材,欢迎在下面留言,我可能会更新在这里或是 blog。 ...

Day 01:前言 - 打开地图,开始我们的旅程吧!

自我介绍 大家好,我是你们这30天的向导,我叫Andy Chiang,目前就读中兴大学资工系,大二升...