Skip to content

๐Ÿš€ 2๋‹จ๊ณ„ - ์ง€ํ•˜์ฒ  ๋…ธ์„  ๊ด€๋ฆฌ (์ง€ํ•˜์ฒ  ๋…ธ์„  ์ƒ์„ฑ) #956

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: jeongwon-iee
Choose a base branch
from
Open
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ dependencies {

// log
implementation 'net.rakugakibox.spring.boot:logback-access-spring-boot-starter:2.7.1'
implementation 'org.projectlombok:lombok:1.18.22'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.rest-assured:rest-assured:4.5.1'
Expand All @@ -28,4 +29,4 @@ dependencies {

test {
useJUnitPlatform()
}
}
27 changes: 0 additions & 27 deletions src/main/java/subway/Station.java

This file was deleted.

9 changes: 0 additions & 9 deletions src/main/java/subway/StationRequest.java

This file was deleted.

19 changes: 0 additions & 19 deletions src/main/java/subway/StationResponse.java

This file was deleted.

41 changes: 0 additions & 41 deletions src/main/java/subway/StationService.java

This file was deleted.

12 changes: 12 additions & 0 deletions src/main/java/subway/SubwayService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package subway;

public interface SubwayService<T, V> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

์„œ๋น„์Šค ๋ ˆ์ด์–ด์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์‹œ๋„ ๐Ÿ‘
ํ•˜์ง€๋งŒ ํฐ ๋ชฉ์  ์—†์ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜์‹ ๊ฑฐ๋ผ๋ฉด ๋ฐ”๋กœ ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋„ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๋งํฌ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!
https://velog.io/@hsw0194/Spring-Boot%EC%97%90%EC%84%9C-interface%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

StaionService, LineService, StationService ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์ƒ์„ฑ, ์กฐํšŒ, ๋ชฉ๋ก, ์‚ญ์ œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๊ธฐ์—
SubwayService๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋†“๊ณ  ์žฌ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค โ˜ป


V create(T request);

// SubwayResponse get(SubwayRequest subwayRequest);
//
// SubwayResponse update(SubwayRequest subwayRequest);
//
// SubwayResponse delete(SubwayRequest subwayRequest);
}
30 changes: 30 additions & 0 deletions src/main/java/subway/line/LineController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package subway.line;

import java.net.URI;

import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import lombok.RequiredArgsConstructor;
import subway.line.request.LineRequest;
import subway.line.response.LineResponse;

@RequiredArgsConstructor
@RestController
public class LineController {

private final LineService lineService;

@PostMapping(
value = "/lines",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<LineResponse> createLine(@RequestBody LineRequest lineRequest) {
LineResponse line = lineService.create(lineRequest);
return ResponseEntity.created(URI.create("/lines/" + line.getId())).body(line);
}
}
8 changes: 8 additions & 0 deletions src/main/java/subway/line/LineRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package subway.line;

import org.springframework.data.jpa.repository.JpaRepository;

import subway.line.domain.Line;

public interface LineRepository extends JpaRepository<Line, Long> {
}
57 changes: 57 additions & 0 deletions src/main/java/subway/line/LineService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package subway.line;

import java.util.Arrays;

import javax.transaction.Transactional;

import org.springframework.stereotype.Service;

import lombok.RequiredArgsConstructor;
import subway.SubwayService;
import subway.line.domain.Line;
import subway.line.request.LineRequest;
import subway.line.response.LineResponse;
import subway.station.StationRepository;
import subway.station.domain.Station;

@RequiredArgsConstructor
@Service
public class LineService implements SubwayService<LineRequest, LineResponse> {

private final LineRepository lineRepository;
private final StationRepository stationRepository;

@Transactional
@Override
public LineResponse create(LineRequest lineRequest) {
return saveLine(lineRequest);
}

private LineResponse saveLine(LineRequest lineRequest) {
Line line = lineRepository.save(new Line(
lineRequest.getName(),
lineRequest.getColor(),
lineRequest.getUpStationId(),
lineRequest.getDownStationId(),
lineRequest.getDistance()
));
return createLineResponse(line);
}

private LineResponse createLineResponse(Line line) {
Station upStation = getStation(line.getUpStationId());
Station downStation = getStation(line.getDownStationId());

return LineResponse.builder()
.id(line.getId())
.name(line.getName())
.color(line.getColor())
.stations(Arrays.asList(upStation, downStation))
.build();
}

private Station getStation(Long id) {
return stationRepository.findById(id)
.orElseGet(() -> stationRepository.save(new Station("์ง€ํ•˜์ฒ ์—ญ" + id)));
}
}
38 changes: 38 additions & 0 deletions src/main/java/subway/line/domain/Line.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package subway.line.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@Entity
public class Line {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(length = 20, nullable = false)
private String name;
@Column(length = 20, nullable = false)
private String color;
@Column(nullable = false)
private Long upStationId;
@Column(nullable = false)
private Long downStationId;
@Column(nullable = false)
private Long distance;

public Line(String name, String color, Long upStationId, Long downStationId, Long distance) {
this.name = name;
this.color = color;
this.upStationId = upStationId;
this.downStationId = downStationId;
this.distance = distance;
}
}
16 changes: 16 additions & 0 deletions src/main/java/subway/line/request/LineRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package subway.line.request;

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class LineRequest {

private final String name;
private final String color;
private final Long upStationId;
private final Long downStationId;
private final Long distance;

}
18 changes: 18 additions & 0 deletions src/main/java/subway/line/response/LineResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package subway.line.response;

import java.util.List;

import lombok.Builder;
import lombok.Getter;
import subway.station.domain.Station;

@Getter
@Builder
public class LineResponse {

private final Long id;
private final String name;
private final String color;
private final List<Station> stations;

}
Original file line number Diff line number Diff line change
@@ -1,22 +1,29 @@
package subway;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
package subway.station;

import java.net.URI;
import java.util.List;

import org.springframework.http.ResponseEntity;
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 lombok.RequiredArgsConstructor;
import subway.station.request.StationRequest;
import subway.station.response.StationResponse;

@RestController
@RequiredArgsConstructor
public class StationController {
private StationService stationService;

public StationController(StationService stationService) {
this.stationService = stationService;
}
private final StationService stationService;

@PostMapping("/stations")
public ResponseEntity<StationResponse> createStation(@RequestBody StationRequest stationRequest) {
StationResponse station = stationService.saveStation(stationRequest);
StationResponse station = stationService.create(stationRequest);
return ResponseEntity.created(URI.create("/stations/" + station.getId())).body(station);
}

Expand All @@ -30,4 +37,4 @@ public ResponseEntity<Void> deleteStation(@PathVariable Long id) {
stationService.deleteStationById(id);
return ResponseEntity.noContent().build();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package subway;
package subway.station;

import org.springframework.data.jpa.repository.JpaRepository;

import subway.station.domain.Station;

public interface StationRepository extends JpaRepository<Station, Long> {
}
Loading