๋ฐ์ํ
์์กด์ฑ ์ถ๊ฐ
- WEB
- JPA
- Hateoas
- H2
- Lombok
Event ์์ฑ API ๊ตฌํ : ๋น์ฆ๋์ค ๋ก์ง
Event ์์ฑ API
package me.iseunghan.demoinflearnrestapi.events;
import lombok.*;
import javax.persistence.*;
import java.time.LocalDateTime;
//hashcode์์ of="id"๋ก ์ค ์ด์ ? ์ฐ๊ด๊ด๊ณ๊ฐ ์์๋ ๊ทธ ๊ด๊ณ๊ฐ ์ํธ์ฐธ์กฐ ๊ด๊ณ์์ ์ฐธ์กฐํ๋ ์ํฉ์์ ์คํ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ ์๊ฐ ์๊ธฐ๋๋ฌธ์, id๋ก๋ง ํด์์ฝ๋๋ฅผ ์์ฑํ๋ค.
//์๋ก๊ฐ์ ๋ฉ์๋๋ฅผ ๊ณ์ ๊ณ์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์คํ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
@Builder @AllArgsConstructor @NoArgsConstructor
@Getter @Setter @EqualsAndHashCode(of = "id")
@Entity
public class Event {
@Id @GeneratedValue
private Integer id;
private String name;
private String description;
private LocalDateTime beginEnrollmentDateTime;
private LocalDateTime closeEnrollmentDateTime;
private LocalDateTime beginEventDateTime;
private LocalDateTime endEventDateTime;
private String location; // (optional) ์ด๊ฒ ์์ผ๋ฉด ์จ๋ผ์ธ ๋ชจ์
private int basePrice; // (optional)
private int maxPrice; // (optional)
private int limitOfEnrollment;
private boolean offline;
private boolean free;
//enum์ Jpa์ ๋งคํ์ ์ฃผ์์ ์ด
//๊ธฐ๋ณธ์ค์ ์ด ORDINAL์ธ๋ฐ, String์ผ๋ก ์ง์ ์ ๋ ์์ ํ๋ค.
@Enumerated(EnumType.STRING)
private EventStatus eventStatus = EventStatus.PUBLISHED;
}
@Builder
๋ฑ Lombokr ๊ด๋ จ ์ ๋
ธํ
์ด์
์ด ์ค๋ฅ๊ฐ ๋ฌ์ ๊ฒฝ์ฐ
์์กด์ฑ์ ์ถ๊ฐํด์คฌ๋๋ฐ ์ค๋ฅ๊ฐ ๋๋ค๋ฉด ? -> Lombok plugin์ ์ค์นํด์ฃผ๋ฉด ํด๊ฒฐ!
Event ์์ฑ API ๊ตฌํ : ํ ์คํธ ๋ง๋ค๊ธฐ
์คํ๋ง ๋ถํธ ์ฌ๋ผ์ด์ค ํ ์คํธ
- WebMvcTest
- MockMvc ๋น์ ์๋ ์ค์ ํด์ค๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฅ ๊ฐ์ ธ์์ ์ฐ๋ฉด ๋จ.
- ์น ๊ด๋ จ ๋น๋ง ๋ฑ๋กํด์ค๋ค.(์ฌ๋ผ์ด์ค)
- MockMvc
- ์คํ๋ง Mvc ํ ์คํธ ํต์ฌ ํด๋์ค
- ์น ์๋ฒ๋ฅผ ๋์ฐ์ง ์๊ณ ๋ ์คํ๋ง MVC (DispatcherServlet)๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค๋ฌ ํ ์ค ํธ์ฉ์ผ๋ก ์์ฃผ ์ฐ์.
ํ ์คํธ ํ ๊ฒ
ํ ์คํธ ํ ๊ฒ
- ์
๋ ฅ๊ฐ๋ค์ ์ ๋ฌํ๋ฉด JSON ์๋ต์ผ๋ก 201์ด ๋์ค๋์ง ํ์ธ
- Location ํค๋์ ์์ฑ๋ ์ด๋ฒคํธ๋ฅผ ์กฐํํ ์ ์๋ URI ๋ด๊ฒจ ์๋์ง ํ์ธ.
- id๋ DB์ ๋ค์ด๊ฐ ๋ ์๋์์ฑ๋ ๊ฐ์ผ๋ก ๋์ค๋์ง ํ์ธ
- ์
๋ ฅ๊ฐ์ผ๋ก ๋๊ฐ id๋ eventStatus, offline, free ์ด๋ฐ ๋ฐ์ดํฐ๊น์ง ๊ฐ์ด ์ฃผ๋ฉด?
- Bad_Request๋ก ์๋ต vs ๋ฐ๊ธฐ๋ก ๋ฐ๊ธฐ๋ก ํ ๊ฐ ์ด์ธ๋ ์ด์ธ๋ ๋ฌด์๋ฌด์
- ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ด์ํ ๊ฒฝ์ฐ Bad_Request๋ก ์๋ต
- ๋น์ฆ๋์ค ๋ก์ง ์ ์ฉ ๋๋์ง ์๋ต ๋ฉ์์ง ํ์ธ
- offline๊ณผ free ๊ฐ ํ์ธ
- ์๋ต์ HATEOA์ profile ๊ด๋ จ ๋งํฌ๊ฐ ์๋์ง ํ์ธ.
- self (view)
- update (๋ง๋ ์ฌ๋์ ์์ ํ ์ ์์ผ๋๊น)
- events (๋ชฉ๋ก์ผ๋ก ๊ฐ๋ ๋งํฌ)
- API ๋ฌธ์ ๋ง๋ค๊ธฐ
- ์์ฒญ ๋ฌธ์ํ
- ์๋ต ๋ฌธ์ํ
- ๋งํฌ ๋ฌธ์ํ
- profile ๋งํฌ ์ถ๊ฐ
๋ฐ์ํ