挑战目标: 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);
}
没有找到纪录
log 显示,然後可以看到用了AOP拦截并log request跟response後,不用额外加code,真的很方便。
成功更新教师资料
查看教师资料
接下来继续Mock也只是重复的新增model、controller、service的CRUD,前端那边看起来要串接应该还要很久,甚至来不及串接,我会思考剩下的时间要不要转向其他方向,像是一些全局性error handling 或者是部署更甚至是socket以及WebRTC的实作。
这种软性面试题又来啦!看似简单,但其实不好作答哦! 这种面试题从对答中可以看出你的人格特质是什麽,...
Most of the aspiring professionals are getting cer...
今天要来讲的是,读取送出 Request 後拿回来的 Response。 读取 Response 以...
感谢追踪我的所有人,如果你还要看有关资安的题材,欢迎在下面留言,我可能会更新在这里或是 blog。 ...
自我介绍 大家好,我是你们这30天的向导,我叫Andy Chiang,目前就读中兴大学资工系,大二升...