기획
사용자
- 도서관의 사용자를 등록할 수 있다. (이름 필수, 나이 선택)
- 도서관 사용자의 목록을 볼 수 있다.
- 도서관 사용자 이름을 업데이트 할 수 있다.
- 도서관 사용자 이름을 업데이트 할 수 있다.
- 도서관 사용자를 삭제할 수 있다.
책
- 도서관에 책을 등록 및 삭제할 수 있다.
- 사용자가 책을 빌릴 수 있다.
> 다른 사람이 그 책을 진작 빌렸다면 빌릴 수 없다.
- 사용자가 책을 반납할 수 있다.
유저 등록 API 스펙
이제 UserController와 요청을 받을 dto인 UserCreateRequest, 값을 저장할 User클래스를 만들겠습니다.
1. UserController : API 입구
2. UserCreateRequest : 요청 받을 dto
3. User : 값을 저장할 클래스
1. POST / user가 호출되면 saveUser 함수가 실행됩니다.
2. 이때 json형식으로 HTTP Body에 name과 age가 들어와서, 객체로 값이 맵핑됩니다.
3. request는 새로운 User(값을 저장할 클래스)를 만드는 데 사용됩니다.
4. 새로 만들어진 User객체(값을 저장하는 객체)는 LIst에 저장됩니다.
5. 함수가 예외없이 실행된다면, 200 OK를 반환하게 됩니다.
1. UserController
package com.group.libraryapp.controller.user;
import com.group.libraryapp.domain.user.User;
import com.group.libraryapp.dto.user.request.UserCreateRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class UserController {
private final List<User> users = new ArrayList<>();
@PostMapping("/user") //POST/ user
public void saveUser(@RequestBody UserCreateRequest request) { //아무것도 반환할게 없으므로
users.add(new User(request.getName(), request.getAge()));
}
}
2. UserCreateRequest
package com.group.libraryapp.dto.user.request;
public class UserCreateRequest {
private String name;
private Integer age; //그냥 Int는 null을 표기할 수 없음.
//getter
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
3. User
package com.group.libraryapp.domain.user;
public class User {
private String name;
private Integer age;
public User(String name, Integer age) {
//이름값이 null이거나 비어있을 때는 예외를 던져서 user자체가 생성이 안되고, 저장도 안됨.
if (name == null || name.isBlank()){
throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다", name));
}
this.name = name;
this.age = age;
}
}
// %s: 문자열 포맷팅에서 사용되는 형식지정자 - > 잘못된 name(John)이 들어왔습니다
// (%d는 정수, %f는 부동소수점 숫자를 대체)
'프로젝트 > 도서관리 프로젝트' 카테고리의 다른 글
도서관리 프로젝트[4] Controller 3단 분리, 스프링컨테이너, 스프링빈, 인스턴스화 (0) | 2023.06.21 |
---|---|
도서관리 프로젝트[3] 회원 수정, 삭제 (update, delete) (0) | 2023.06.15 |
도서관리 프로젝트[2] - 유저 조회 (0) | 2023.05.28 |
[before project] HTTP와 API (0) | 2023.05.27 |
[before project] DNS 네트워크 통신 (0) | 2023.05.26 |
댓글