Skip to content

gksgh108/tino-bus

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

티노 버스 서비스

티노는 학교 버스를 너무 좋아해요!
버스에 사랑에 빠진 티노는 하루종일 버스를 기다린답니다!
티노를 위한 버스 알림 서비스를 만들어보아요!

요구사항

사전 진행

image

위 표에 있는 데이터는 기본 데이터이다.
즉, 위 데이터를 기본 세팅 후에 진행한다.
상시 운행중인 시간은 5분 단위로 간격을 두고 추가한다.
예외 메시지는 자율적으로 작성한다.
제발 여기다 push/merge 하지 마세요!! fork 한 후에 각자 닉네임으로 branch 파서 제작하고 PR 날려주세용
착한 우리 부원들은 문제 끝까지 읽고 풀기!!! 제발~

새로운 버스 추가

Request : POST api/buses
{
  "startPosition": "school",
  "departureTime": "10:30"
}
Response : 201 created
{
  "id": 6,
  "startPosition": "school",
  "startAt": "10:30"
}

예외 상황

  • 시작지가 같으며, 기존에 운행하는 버스와 출발 시간이 5분 미만으로 차이가 나면 안 됨. ex) 기존에 10:30분 출발 버스가 있으면, 1:34분에 출발하는 버스는 추가할 수 없음

버스 불러오기

Request : Get api/buses?start-position=출발위치
Response : 200 ok
[
  {
    "id": 5,
    "startAt": "16:30"
  },
  {
    "id": 6,
    "startAt": "16:40"
  },
  {
    "id": 7,
    "startAt": "16:50"
  }
]
Request : Get api/buses?start-position=출발위치&start-at=12:26
Response : 200 ok
[
  {
    "id": 5,
    "startAt": "12:30"
  },
  {
    "id": 6,
    "startAt": "12:40"
  },
  {
    "id": 7,
    "startAt": "12:50"
  }
]
Request : Get api/buses?start-position=출발위치&page=5
Response : 200 ok
[
  {
    "id": 5,
    "startAt": "16:30"
  },
  {
    "id": 6,
    "startAt": "16:40"
  },
  {
    "id": 7,
    "startAt": "16:50"
  },
  {
    "id": 8,
    "startAt": "17:00"
  },
  {
    "id": 9,
    "startAt": "17:10"
  }
]

파라미터값 :

  • start-position : 필수
  • start-at : 선택, 기본값 = 현재시간
  • page : 선택, 기본값 = 3

예외사항

  • 파라미터값이 정해진 형식이 아니라면 예외처리

버스 수정

Request : put api/buses/{id}
{
  "startPosition": "school",
  "departureTime": "10:30"
}
Response : 200 ok
{
  "id": 5,
  "startPosition": "school",
  "departureTime": "10:30"
}

예외상황

  • 만약 id에 해당하는 버스가 없을 시 예외처리 해야
  • 시작지가 같으며, 기존에 운행하는 버스와 출발 시간이 5분 미만으로 차이가 나면 안 됨. ex) 기존에 10:30분 출발 버스가 있으면, 10:34분에 출발하는 버스는 추가할 수 없음

버스 삭제

Request : DELETE api/buses/{id}
Response : 204 no content

예외 상황

  • 만약 id에 해당하는 버스가 없을 시 예외처리 해야

지원 환경

  • java 11 이상
  • gradle
  • spring-boot 2.7

기본 세팅 라이브러리 (필요시 추가 가능)

  • spring-boot-starter-data-jpa
  • spring-boot-starter-validation
  • lombok
  • h2

규칙

  1. 손보다 머리로 먼저 하세요
    1. 머리로 먼저 푼 다음 -> 기능 목록 작성
    2. 처음부터 TODO 를 100% 완벽하게 만들 수 없어
    3. 최대한 기능 목록 먼저 만들고, 구현하면서 유동적으로 변경, 추가 가능
  2. 메서드 길이를 최대한 짧게 (최대 10)
  3. 파라미터 개수도 최소화
  4. MVC 모듈 분할
  5. controller - service - repository 단계 분할
  6. 일급 컬렉션 생성
  7. Exception Handler 생성
  8. else, switch, ? 금지
  9. 들여쓰기는 최대 2까지만 서용
class A { 
  void hello () {
    while {
    	if {
			// 여기까지만 허용
  	} 
    }
  }
}
  1. 나만의 단위 테스트
  2. 단위 구현 당 커밋 나누기, 커밋 규칙 준수
  • method(주요 클래스) : 설명
  • method :
    • test
    • feat
    • fix
    • chore
    • docs
    • refactor
  1. 리펙터링 필수

  2. 미리 깔끔하게 짜면 좋지만, 일단 구현 -> 후 리펙터링도 가능

  3. 이것까지 바라지는 않는다 왜냐면 나도 못함

  • 기능 목록 작성 이후, 단위 테스트를 먼저 만든다, 그 이후 테스트에 맞춰서 구현 : TDD -> 찐또배기로 하면 ㅈㄴ 어려워
  • TDD 연습하는데 이런 문제가 더 없음
  • 너의 목적이 TDD가 아니라 생각, 궁극적 목적 : 객체지향적 설계 : TDD 욕심 일단 부리지 말고, 객체지향적으로 먼저 접근해보고
  • 그 이후 자신감이 붙으면 TDD도 트라이 해보셈
  1. 앵간하면 배열 ㄴㄴ 리스트 쓰세용, 추가적으로 람다 스트림 변환 가능하면 람스 쓰세용, 반복문 쓰지 마시고(앵간하면)
  • 궁극적 목표 : 객체지향적 설계 - 클린코드

  • 만약에 자신감이 붙는다?

    • 람다 스트림
    • TDD
  • 무지성 풀이 : 30분 컷

  • 위에 규칙 다 지키면 솔직히 10시간 오바 쌉가능

  • 다풀고 리뷰 원하면 수다방에 편하게 말씀해주세용

  • 문제 오류 혹은 더 나은 방향으로 수정 가능하면 PR 편하게 날려주세용

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%