- 노선에 역 등록 API 신규 구현
- 노선에 역 제거 API 신규 구현
- 노선 조회 API 수정
- 노선에 포함된 역을 순서대로 보여주도록 응답을 개선합니다.
- 노선 목록 조회 API 수정
- 노선에 포함된 역을 순서대로 보여주도록 응답을 개선합니다.
- 경로 조회 API 구현
- 출발역과 도착역 사이의 최단 거리 경로를 구하는 API를 구현합니다.
- 최단 거리 경로와 함께 총 거리 정보를 함께 응답합니다.
- 한 노선에서 경로 찾기 뿐만 아니라 여러 노선의 환승도 고려합니다.
- 요금 조회 기능 추가
- 경로 조회 시 요금 정보를 포함하여 응답합니다.
- 노선별 추가 요금 정책 반영
- 연령별 요금 할인 정책 반영
- 데이터베이스 설정을 프로덕션과 테스트를 다르게 합니다.
- 프로덕션의 데이터베이스는 로컬에 저장될 수 있도록 설정
- 테스트용 데이터베이스는 인메모리로 동작할 수 있도록 설정
한글명 | 영문명 | 설명 |
---|---|---|
노선 | line | 구간의 모음, 이름을 가진다 |
역 | station | 이름을 가진다 |
구간 | section | 상행역, 하행역, 거리를 가진다. |
상행역 | upStation | 위에 존재하는 역이다. |
하행역 | downStation | 아래에 존재하는 역이다. |
거리 | distance | 두 역 사이의 거리다. |
- 역 최초 등록시, 두 역을 동시에 등록해야 한다.
- 역 등록시 출발역, 도착역, 거리 정보를 입력한다.
- 상행역과 하행역은 다른 역이어야 한다.
- 거리는 양의 정수이다.
- 해당 노선에 대한 구간 정보가 이미 존재할 경우
- 상행역과 하행역 중 하나가 노선에 등록되어 있어야한다.
- 이미 존재하는 구간 사이에 역을 추가할 수 있다.
- 거리 정보를 고려해야 한다.
- 입력된 거리는 기존 구간의 거리보다 작아야한다.
- 거리는 양의 정수이다.
- 거리 정보를 고려해야 한다.
- 하나의 역은 여러 노선에 등록될 수 있다.
- 노선에 등록된 역이 2개일 경우, 하나의 역 제거시 두 역 모두 제거된다.
- 중간 역이 제거될 경우, 양 옆 역의 거리를 합해준다.
Method | URL | HttpStatus | Description |
---|---|---|---|
GET | /lines | 200 | 전체 노선 목록을 조회한다. |
GET | /lines/{lineId} | 200 | 해당 노선을 조회한다. |
POST | /lines | 201 | 노선을 생성한다. |
PUT | /lines/{lineId} | 200 | 해당 노선 정보를 수정한다. |
DELETE | /lines/{lineId} | 204 | 해당 노선을 삭제한다. |
POST | /lines/{lineId}/stations | 201 | 해당 노선에 구간을 추가한다. |
DELETE | /lines/{lineId}/stations/{stationId} | 204 | 해당 노선에서 해당 역을 삭제한다. |
NONE
Body
{
"lines": [
{
"id": 1,
"name": "2호선",
"color": "GREEN",
"stations": [
{
"id": 1,
"name": "역삼역"
},
{
"id": 2,
"name": "삼성역"
},
{
"id": 3,
"name": "잠실역"
}
]
},
{
"id": 2,
"name": "3호선",
"color": "ORANGE",
"stations": [
{
"id": 1,
"name": "교대역"
},
{
"id": 2,
"name": "고속터미널역"
},
{
"id": 3,
"name": "신사역"
}
]
}
]
}
NONE
Body
{
"id": 1,
"name": "2호선",
"color": "GREEN",
"stations": [
{
"id": 1,
"name": "역삼역"
},
{
"id": 2,
"name": "삼성역"
},
{
"id": 3,
"name": "잠실역"
}
]
}
BODY
{
"name": "2호선",
"color": "GREEN"
}
BODY
{
"id": 1,
"name": "2호선",
"color": "GREEN"
}
BODY
{
"name": "2호선",
"color": "GREEN"
}
NONE
Body
{
"upStationId": 1,
"downStationId": 2,
"distance": 15
}
Body
{
"id": 1,
"name": "2호선",
"color": "GREEN",
"stations": [
{
"id": 1,
"name": "역삼역"
},
{
"id": 2,
"name": "삼성역"
},
{
"id": 3,
"name": "잠실역"
}
]
}
NONE
NONE
NONE
NONE
Method | URL | HttpStatus | Description |
---|---|---|---|
GET | /stations | 200 | 전체 역 목록을 조회한다. |
GET | /stations/{id} | 200 | 해당 역을 조회한다. |
POST | /stations | 200 | 해당 역을 등록한다. |
PUT | /stations/{id} | 200 | 해당 역을 수정한다. |
DELETE | /stations/{id} | 204 | 해당 역을 삭제한다. |
NONE
Body
{
"stations": [
{
"id": 1,
"name": "역삼역"
},
{
"id": 2,
"name": "삼성역"
},
{
"id": 3,
"name": "잠실역"
}
]
}
NONE
Body
{
"id": 1,
"name": "역삼역"
}
BODY
{
"name": "역삼역"
}
BODY
{
"id": 1,
"name": "역삼역"
}
BODY
{
"id": 1,
"name": "건대역"
}
NONE
NONE
NONE
erDiagram
line ||--|{ section : line_id
line {
BIGINT id
VARCHAR(50) name
VARCHAR(50) color
TIMESTAMP created_at
TIMESTAMP updated_at
}
station ||--|{ section : up_station_id
station ||--|{ section : down_station_id
station {
BIGINT id
VARCHAR(50) name
TIMESTAMP created_at
TIMESTAMP updated_at
}
section {
BIGINT id
BIGINT line_id
BIGINT up_station_id
BIGINT down_station_id
INT distance
TIMESTAMP created_at
TIMESTAMP updated_at
}