Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: woowacourse/spring-roomescape-admin
Choose a Base Repository
woowacourse/spring-roomescape-admin
Astro-Yu/spring-roomescape-admin
20HyeonsuLee/spring-roomescape-admin
2Jin1031/spring-roomescape-admin
3Juhwan/spring-roomescape-admin
AppleMint98/spring-roomescape-admin
Arachneee/spring-roomescape-admin
BurningFalls/spring-roomescape-admin
Byesol/spring-roomescape-admin
Chaeyoung714/spring-roomescape-admin
CheChe903/spring-roomescape-admin
Chocochip101/spring-roomescape-admin
Choidongjun0830/spring-roomescape-admin
ChooSeoyeon/spring-roomescape-admin
CodingMasterLSW/spring-roomescape-admin
Comedy-Coding-Club/spring-roomescape-admin
Dobby-Kim/spring-roomescape-admin
Dompoo/spring-roomescape-admin
DongchannN/spring-roomescape-admin
Firedrago95/spring-roomescape-admin
GIVEN53/spring-roomescape-admin
Hacanna42/spring-lv2-roomescape-admin
HaiSeong/spring-roomescape-admin
Ho-Tea/spring-roomescape-admin
HoeSeong123/spring-roomescape-admin
HyungHoKim00/spring-roomescape-admin
J-I-H-O/spring-roomescape-admin
JINU-CHANG/spring-roomescape-admin
JO-eusan/spring-roomescape-admin
JiHyeonL/spring-roomescape-admin
Jin409/spring-roomescape-admin
KJungW/spring-roomescape-admin
Kimprodp/spring-roomescape-admin
KoSeonJe/spring-roomescape-admin
Libienz/spring-roomescape-admin
Mingyum-Kim/spring-roomescape-admin
Minjoo522/spring-roomescape-admin
Minuring/spring-roomescape-admin
PgmJun/spring-roomescape-admin
RaZel713/spring-roomescape-admin
Ryan-Dia/spring-roomescape-admin
Starlight258/spring-roomescape-admin
Sung-june27/spring-roomescape-admin
V4N1LLA/spring-roomescape-admin
YehyeokBang/spring-roomescape-admin
YuyoungRhee/spring-roomescape-admin
abc5259/spring-roomescape-admin
alstn113/spring-roomescape-admin
ashsty/spring-roomescape-admin
awrion3/spring-roomescape-admin
ay-eonii/spring-roomescape-admin
bowook/spring-roomescape-admin
changuii/spring-roomescape-admin
choijy1705/spring-roomescape-admin
coli-geonwoo/spring-roomescape-admin
cookie-meringue/spring-roomescape-admin
cutehumanS2/spring-roomescape-admin
dbsdndcks/spring-roomescape-admin
devhoya97/spring-roomescape-admin
dlfmadlanjwl/spring-roomescape-admin
donghoony/woowacourse-level-2-roomescape
dwax1324/spring-roomescape-admin
dye0p/spring-roomescape-admin
egaeng09/spring-roomescape-admin
ehBeak/spring-roomescape-admin
ehtjsv2/spring-roomescape-admin
eoehd1ek/spring-roomescape-admin
eun-byeol/spring-roomescape-admin
eunjungL/spring-roomescape-admin
eunseongu/spring-roomescape-admin
fromitive/spring-roomescape-admin
gabean13/spring-roomescape-admin
geoje/spring-roomescape-admin
goohong/spring-roomescape-admin
gyungchan-jo/spring-roomescape-admin
hangillee/spring-roomescape-admin
helenason/spring-roomescape-admin
hjk0761/spring-roomescape-admin
hongkikii/spring-roomescape-admin
horizonpioneer/spring-roomescape-admin
hoyeonyy/spring-roomescape-admin
hw0603/spring-roomescape-admin
hyeon0208/spring-roomescape-admin
hyxrxn/spring-roomescape-admin
ikjo39/spring-roomescape-admin
jaehyeon2650/spring-roomescape-admin
jbilee/spring-roomescape-admin
jhan0121/spring-roomescape-admin
jhon3242/spring-roomescape-admin
jimi567/spring-roomescape-admin
jinchiim/spring-roomescape-admin
jinu0328/spring-roomescape-admin
jjunh0/spring-roomescape-admin
jminkkk/spring-roomescape-admin
jongmee/spring-roomescape-admin
joon6093/spring-roomescape-admin
jumdo12/spring-roomescape-admin
junhaa/spring-roomescape-admin
jye326/spring-roomescape-admin
kelly6bf/spring-roomescape-admin
khabh/spring-roomescape-admin
kimdevv/spring-roomescape-admin
kiwoook/spring-roomescape-admin
kjyyjk/spring-roomescape-admin
koust6u/spring-roomescape-admin
ksk0605/spring-roomescape-admin
kunsanglee/spring-roomescape-admin
kwonkeonhyeong/spring-roomescape-admin
kysub99/spring-roomescape-admin
kyum-q/spring-roomescape-admin
le2sky/spring-roomescape-admin
leegwichan/spring-roomescape-admin
lilychoibb/spring-roomescape-admin
linirini/spring-roomescape-admin
ljhee92/spring-roomescape-admin
m-a-king/spring-roomescape-admin
masonkimseoul/spring-roomescape-admin
minSsan/spring-roomescape-admin
minjae8563/spring-roomescape-admin
mzeong/spring-roomescape-admin
nak-honest/spring-roomescape-admin
nayonsoso/spring-roomescape-admin
nourzoo/spring-roomescape-admin
oshyun00/spring-roomescape-admin
phk1128/spring-roomescape-admin
ppparkta/spring-roomescape-admin
praisebak/spring-roomescape-admin
pricelees/spring-roomescape-admin
reddevilmidzy/spring-roomescape-admin
rladmstn/spring-roomescape-admin
robinjoon/spring-roomescape-admin
saera-yook/spring-roomescape-admin
seaniiio/spring-roomescape-admin
seokmyungham/spring-roomescape-admin
seunghye218/spring-roomescape-admin
shin-jisong/spring-roomescape-admin
skylar1220/spring-roomescape-admin
slimsha2dy/spring-roomescape-admin
soeun2537/spring-roomescape-admin
songsunkook/spring-roomescape-admin
sonjh919/spring-roomescape-admin
supernovaMK/spring-roomescape-admin
tackyu/spring-roomescape-admin
taek2222/spring-roomescape-admin
takoyakimchi/spring-roomescape-admin
theminjunchoi/spring-roomescape-admin
threepebbles/spring-roomescape-admin
tkdgur0906/spring-roomescape-admin
tsulocalize/spring-roomescape-admin
unh6unh6/spring-roomescape-admin
unifolio0/spring-roomescape-admin
wodnd0131/spring-roomescape-admin
woowacourse-6th-code-review-study/spring-roomescape-admin
xogns1514/spring-roomescape-admin
yechop/spring-roomescape-admin
yeezy-com/spring-roomescape-admin
yeong0jae/spring-roomescape-admin
yeonnhuu/spring-roomescape-admin
yesjuhee/spring-roomescape-admin
youngsu5582/spring-roomescape-admin
zangsu/spring-roomescape-admin
zeus6768/spring-roomescape-admin
Nothing to show
base: astro-yu
...
head repository: Astro-Yu/spring-roomescape-admin
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: step1
Choose a head ref
Able to merge. These branches can be automatically merged.
Discuss and review the changes in this comparison with others. Learn about pull requests
@Astro-Yu

Add a title

Add a description

Select a reply

Loading
Slash commands
Preview
Loading
Slash commands
Preview

An unexpected error has occurred

Allowing edits by maintainers

If checked, users with write access to woowacourse/spring-roomescape-admin can add new commits to your step1 branch.

You can always change this setting later.

Remember, contributions to this repository should follow our GitHub Community Guidelines.
Helpful resources
  • 17 commits
  • 11 files changed
  • 2 contributors

Commits on Apr 15, 2025

  1. Copy the full SHA
    4f48d18 View commit details
  2. Copy the full SHA
    592d82d View commit details
  3. feat: Person 구현

    CodingMasterLSW committed Apr 15, 2025
    Copy the full SHA
    d559874 View commit details
  4. Copy the full SHA
    b145df0 View commit details
  5. Copy the full SHA
    b00fe54 View commit details
  6. Copy the full SHA
    6126276 View commit details
  7. Copy the full SHA
    31640e4 View commit details
  8. Copy the full SHA
    1405d3a View commit details

Commits on Apr 16, 2025

  1. Copy the full SHA
    230aea4 View commit details
  2. Copy the full SHA
    6b2c805 View commit details
  3. Copy the full SHA
    972370a View commit details
  4. Copy the full SHA
    5f40c9b View commit details
  5. Copy the full SHA
    a032fa9 View commit details
  6. Copy the full SHA
    f7d9c49 View commit details
  7. Copy the full SHA
    e029161 View commit details

Commits on Apr 17, 2025

  1. Copy the full SHA
    4e82d31 View commit details
  2. Copy the full SHA
    c5d8e90 View commit details
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# 방탈출 어드민 페이지 작성하기

## 홈 화면

- [x] 어드민 페이지를 응답할 수 있도록 구현한다

## 예약 조회 기능

- [x] GET 메서드를 만들어 예약 목록을 조회 기능을 만든다.

## 예약 추가

- [x] POST 메서드를 만들어 예약 추가 기능을 만든다.

## 예약 취소

- [x] DELETE 메서드를 만들어 예약 삭제 기능을 만든다.
1 change: 0 additions & 1 deletion src/main/java/roomescape/RoomescapeApplication.java
Original file line number Diff line number Diff line change
@@ -8,5 +8,4 @@ public class RoomescapeApplication {
public static void main(String[] args) {
SpringApplication.run(RoomescapeApplication.class, args);
}

}
19 changes: 19 additions & 0 deletions src/main/java/roomescape/controller/AdminController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package roomescape.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class AdminController {

@GetMapping("/admin")
public String admin() {
return "admin/index";
}

@GetMapping("/admin/reservation")
public String reservation() {
return "admin/reservation-legacy";
}
}
49 changes: 49 additions & 0 deletions src/main/java/roomescape/controller/RoomescapeController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package roomescape.controller;

import java.time.LocalDateTime;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import roomescape.domain.Person;
import roomescape.domain.Reservation;
import roomescape.domain.ReservationTime;
import roomescape.domain.Reservations;
import roomescape.dto.ReservationRequestDto;
import roomescape.dto.ReservationResponseDto;

@RestController
public class RoomescapeController {

private final Reservations reservations = new Reservations();
private final AtomicLong reservationIndex = new AtomicLong(1);
private final AtomicLong personIndex = new AtomicLong(1);

@GetMapping("/reservations")
public List<ReservationResponseDto> readReservations() {
return reservations.getReservations().stream()
.map(ReservationResponseDto::from)
.toList();
}

@PostMapping("/reservations")
public Reservation createReservations(
@RequestBody ReservationRequestDto reservationRequestDto) {
Person person = new Person(personIndex.getAndIncrement(), reservationRequestDto.name());
ReservationTime reservationTime = new ReservationTime(
LocalDateTime.of(reservationRequestDto.date(), reservationRequestDto.time()));
Reservation reservation = new Reservation(reservationIndex.getAndIncrement(), person,
reservationTime);
reservations.save(reservation);
return reservation;
}

@DeleteMapping("/reservations/{id}")
public void deleteReservation(@PathVariable(name = "id") Long id) {
reservations.deleteById(id);
}
}
5 changes: 5 additions & 0 deletions src/main/java/roomescape/domain/Person.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package roomescape.domain;

public record Person(long id, String name) {

}
19 changes: 19 additions & 0 deletions src/main/java/roomescape/domain/Reservation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package roomescape.domain;

import java.time.LocalDate;
import java.time.LocalTime;

public record Reservation(long id, Person person, ReservationTime reservationTime) {

public String getPersonName() {
return person.name();
}

public LocalDate getDate() {
return reservationTime.getDate();
}

public LocalTime getTime() {
return reservationTime.getTime();
}
}
16 changes: 16 additions & 0 deletions src/main/java/roomescape/domain/ReservationTime.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package roomescape.domain;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public record ReservationTime(LocalDateTime reservationTime) {

public LocalDate getDate() {
return reservationTime.toLocalDate();
}

public LocalTime getTime() {
return reservationTime.toLocalTime();
}
}
34 changes: 34 additions & 0 deletions src/main/java/roomescape/domain/Reservations.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package roomescape.domain;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Reservations {

private final List<Reservation> reservations;

public Reservations() {
this.reservations = new ArrayList<>();
}

public List<Reservation> getReservations() {
return Collections.unmodifiableList(reservations);
}

public void save(Reservation reservation) {
reservations.add(reservation);
}

public void deleteById(long id) {
Reservation reservation = findById(id);
reservations.remove(reservation);
}

private Reservation findById(long id) {
return reservations.stream()
.filter(reservation -> reservation.id() == id)
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 예약번호 입니다."));
}
}
8 changes: 8 additions & 0 deletions src/main/java/roomescape/dto/ReservationRequestDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package roomescape.dto;

import java.time.LocalDate;
import java.time.LocalTime;

public record ReservationRequestDto(String name, LocalDate date, LocalTime time) {

}
16 changes: 16 additions & 0 deletions src/main/java/roomescape/dto/ReservationResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package roomescape.dto;

import java.time.format.DateTimeFormatter;
import roomescape.domain.Reservation;

public record ReservationResponseDto(long id, String name, String date, String time) {

public static ReservationResponseDto from(Reservation reservation) {
return new ReservationResponseDto(
reservation.id(),
reservation.getPersonName(),
reservation.getDate().toString(),
reservation.getTime().format(DateTimeFormatter.ofPattern("HH:mm"))
);
}
}
58 changes: 55 additions & 3 deletions src/test/java/roomescape/MissionStepTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
package roomescape;

import static org.hamcrest.Matchers.is;

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
@@ -12,9 +17,56 @@ public class MissionStepTest {
@Test
void 일단계() {
RestAssured.given().log().all()
.when().get("/")
.then().log().all()
.statusCode(200);
.when().get("/admin")
.then().log().all()
.statusCode(200);
}

@Test
void 이단계() {
RestAssured.given().log().all()
.when().get("/admin/reservation")
.then().log().all()
.statusCode(200);

RestAssured.given().log().all()
.when().get("/reservations")
.then().log().all()
.statusCode(200)
.body("size()",
is(0)); // 아직 생성 요청이 없으니 Controller에서 임의로 넣어준 Reservation 갯수 만큼 검증하거나 0개임을 확인하세요.
}

@Test
void 삼단계() {
Map<String, String> params = new HashMap<>();
params.put("name", "브라운");
params.put("date", "2023-08-05");
params.put("time", "15:40");

RestAssured.given().log().all()
.contentType(ContentType.JSON)
.body(params)
.when().post("/reservations")
.then().log().all()
.statusCode(200)
.body("id", is(1));

RestAssured.given().log().all()
.when().get("/reservations")
.then().log().all()
.statusCode(200)
.body("size()", is(1));

RestAssured.given().log().all()
.when().delete("/reservations/1")
.then().log().all()
.statusCode(200);

RestAssured.given().log().all()
.when().get("/reservations")
.then().log().all()
.statusCode(200)
.body("size()", is(0));
}
}
Comparing woowacourse:astro-yu...Astro-Yu:step1 · woowacourse/spring-roomescape-admin