본문 바로가기
프로젝트/도서관리 프로젝트

도서관리 프로젝트[1] - 기획과 유저 등록

by CodeMango 2023. 5. 28.

기획

사용자

- 도서관의 사용자를 등록할 수 있다. (이름 필수, 나이 선택)

- 도서관 사용자의 목록을 볼 수 있다.

- 도서관 사용자 이름을 업데이트 할 수 있다.

- 도서관 사용자 이름을 업데이트 할 수 있다.

- 도서관 사용자를 삭제할 수 있다.

 

- 도서관에 책을 등록 및 삭제할 수 있다.

- 사용자가 책을 빌릴 수 있다.

  > 다른 사람이 그 책을 진작 빌렸다면 빌릴 수 없다.

- 사용자가 책을 반납할 수 있다.

 


유저 등록 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는 부동소수점 숫자를 대체)

 

댓글