Coder Social home page Coder Social logo

woowacourse-teams / 2022-ternoko Goto Github PK

View Code? Open in Web Editor NEW
44.0 3.0 6.0 3.33 MB

면담은 찐하게, 예약은 손쉽게! 올인원 면담 예약 서비스 터놓고 💖

Home Page: https://ternoko.site

TypeScript 33.75% JavaScript 0.71% HTML 0.29% Java 65.25%

2022-ternoko's Introduction

면담은 터놓고 Ternoko

Screen Shot 2022-10-11 at 2 49 34 PM

면담은 찐하게~ 예약은 손쉽게! 올인원 면담 예약 서비스 `터놓고` 👨‍👨‍👧‍👧


🚀크루 - `면담 예약`을 손쉽게 할 수 있어요!


ezgif com-gif-maker (2)

코치의 면담 예약 가능 시간 `조회`, 면담 사전 질문 `작성`, `면담 예약`, `알림`까지!

한번에 터놓고에서 관리할 수 있어요.

코치와의 `찐한 면담 시간이 당신을 기다리고` 있습니다.



🚀 코치 - `면담 관리`를 손쉽게 할 수 있어요!


ezgif com-gif-maker (1)

면담 예약 시간 `열기`, 면담 신청 `조회`, 면담 내역 `관리`, `알림`까지

한번에 터놓고에서 관리할 수 있어요.

나의 크루와의 찐한 면담 시간이 당신을 기다리고 있습니다.

터놓고 서비스 이용하기 🤍

👉 서비스 실제 페이지

우테코 크루들접근할 수 있어요.

👉 데모 페이지

외부인을 위한 데모 페이지입니다.

터놓고 Tech Wiki 📑

👉  위키페이지로 이동

Youtube 📺

1차 데모데이 2차 데모데이 3차 데모데이 4차 데모데이 5차 데모데이

팀원👨‍💻👩‍💻

FRONTEND FRONTEND BACKEND BACKEND BACKEND BACKEND BACKEND
록바 아놀드 수달 애쉬 바니 앤지 열음

FrontEnd 기술스택 & 인프라 💛

BackEnd 기술스택 & 인프라💙

image

우리의 약속 🤍

Version 2

image

Version 1

Screen Shot 2022-10-11 at 2 49 34 PM

2022-ternoko's People

Contributors

dongho108 avatar her0807 avatar hyeonbinsa avatar juhyung990122 avatar lokba avatar sanaandmomo avatar soominsohn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

2022-ternoko's Issues

[FE] feat: Calendar 고도화를 한다.

As-is

코치가 면담을 만들 때 날짜 선택시 활성화 되는 시간을 어떻게 할지 불분명하다.

To-be

  • Calendar 일괄 선택시 활성화하는 시간 분명하게 하기
  • Calendar 버그 수정
  • 요청시 날짜 중복 버그 수정

docs: 팀 컨벤션 수립

논의 사항

  • 배포(main) - 개발(develop) - 기능개발(feat)
    • 기능개발
      • Commit Message - Ex) feat/backend/reservation-#3
  • PR 템플릿
    • 라벨지로 Frontend Backend 표시
    • H2 글씨 크기
    • 제목
      • feat: 제목
    • Feat
      • 구현 기능
      • 논의 사항(선택)
      • 참고 레퍼런스(선택)
    • Fix
      • 수정 내용
      • 논의 사항(선택)
      • 참고 레퍼런스(선택)
    • Refactor
      • (추후)

[BE] refactor: DTO, Domain 생성 방식 논의

As-is

DTO 에서는 빌더패턴, Domain에서는 생성자패턴을 사용하고 있다.

To-be

다음 네가지 정책중 한가지를 선택한 뒤, 세부사항을 논의한다.

  • DTO에서는 빌더, Domain에서는 생성자
  • DTO에서는 생성자 , Domain에서는 빌더
  • DTO에서는 빌더, Domain에서는 빌더
  • DTO에서는 생성자, Domain에서는 생성자

[BE] chore: local환경과 배포환경의 yml설정을 분리한다.

As-is

  • 현재 yml파일이 하나이고, h2데이터베이스 접속설정이 되어있다.
  • 배포시에는 mysql db를 사용할 것이기 때문에 설정이 다르게 된다.

To-be

  • local, test, dev, prod yml을 분리한다.
  • default를 dev yml로 설정한다.
  • local환경에서 설정하는 방법을 문서화한다.

[FE] feat: UI / UX를 수정한다.

As-is

폰트, 폰트 사이즈, 컴포넌트 간의 간격, 넓이를 수정한다.

To-be

  • 폰트 적용
  • 폰트 사이즈 수정
  • 컴포넌트 간의 간격 수정
  • 넓이 수정
  • 그 외 UI / UX 수정

[BE] refactor: crew, coach 도메인을 분리한다.

As-is

  • 현재 크루와 코치의 도메인이 Member로 공유되고 있다.
  • 크루와 코치의 필드정보가 다르다
    • 코치에게는 상세정보 (한줄소개, 약력 등)이 존재한다.
  • 가독성이 떨어진다.

To-be

  • 크루도메인과 코치도메인을 분리해 Member를 상속하는 구조로 변경한다.

[FE] feat: 초기 환경을 설정한다.

As-is

  • 프로젝트 진행을 위해, 프론트엔드 개발 환경을 세팅한다.

To-be

  • eslint, prettier 설정
  • webpack 환경 설정
  • tsconfig.json 설정
  • 각종 라이브러리 설치(styled-components, storybook)

[BE] fix: 코치의 되는시간 설정 API를 수정한다.

As-is

  • 현재 api로는 요청으로 빈 리스트를 받았을 때 year, month를 파싱하지 못한다.
  • 그래서 빈리스트를 보내줄 때 year, month를 알지 못해 delete를 할 수 없다.

To-be

  • api 명세를 아래와 같이 수정한다.
  • Request
PUT /api/coaches/{coach_id}/calendar/times  HTTP/1.1
Accept: application/json
Host: localhost:8080
{
	"calendar" : [
		{
			"year" : 2022,
			"month" : 7,
			"times" : 
			[
				"2022-07-07 14:00",
				"2022-07-07 15:00",
				"2022-07-07 16:00"
			]
		},
		{
			"year" : 2022,
			"month" : 8,
			"times" : 
			[
				"2022-07-08 14:00",
				"2022-07-09 14:00",
				"2022-07-09 15:00"
			]
		}
	]
}

[BE] fix: 크루입장 면담 예약 생성 시 interviewQuestions 필드가 저장 안되는 문제를 해결한다.

As-is

문제

localhost:8080/api/reservations/coaches/1로 post 요청 시,
interviewQuestions 필드(fromItem)가 저장 안되는 문제가 발생하였습니다.

원인

image

다음과 같이 from_item 테이블의 interview_id 외래키가 null 값이여서 생기는 문제입니다.

To-be

  • ReservationService의 create함수를 수정한다.
  • formItem 저장 시 interview_id 외래키 값이 저장되게 수정한다.

[BE] feat: 배포를 위한 세팅을 한다.

As-is

  • 코치 더미 데이터를 자동으로 넣어주지 못하고 있다.
  • h2 DB여서 서버를 다시 올리면 데이터가 초기화된다.

To-be

  • 자바 코드상으로 어플리케이션이 실행될때 초기 더미 데이터를 save 하는 코드를 작성한다.
  • production 코드는 mysql를 사용하도록 설정한다.
  • 면담 예약을 삭제하는 api를 작성한다. (mysql 서버로 올리면 데이터가 초기화되지 않으므로)
  • yml 상의 중요 정보를 숨겨서 배포해야한다.

[FE] refactor: 전반적인 리팩터링

As-is

재활용을 하지 못하는 컴포넌트 및 미처하지 못한 리팩토링

To-be

  • context 사용
  • 도메인 로직이랑 컴포넌트 로직 분리
  • 전반적인 리팩토링(중복 코드 제거, 네이밍 변경 등)

[BE] refactor: 예약 일시 필드명 변경

As-is

면담 예약 일시 필드명이 변경 필요
현재 : reservationDate
이유 : Reservation에 대한 정보가 아닌 Interview에 대한 일시 정보

To-be

  • reservation이 아닌 interview로 수정

[BE] refactor: DTO, Domain 생성 방식 논의

As-is
DTO 에서는 빌더패턴, Domain에서는 생성자패턴을 사용하고 있다.

To-be
다음 네가지 정책중 한가지를 선택한 뒤, 세부사항을 논의한다.

  • DTO에서는 빌더, Domain에서는 생성자
    • DTO에서는 빌더, Domain에서는 생성자

[BE] 배포를 위한 CORS 충돌을 해결한다.

As-is

프론트 포트 번호와 백엔드 포트 번호가 달라서 나는 CORS 를 해결한다.

To-be

coach 데이터를 추가한다.

  • config 에서 url 허용
  • exposedHeader에 Location Header 허용

[BE] feat: custom Exception 을 도입한다.

As-is

기존에는 범용적인 Exception 사용하여, 구체적인 에러 내용을 메세지로만 파악했다.

To-be

  • exception 상속 계층 만들기
  • exception 관리 class 구조 생각해보기

[BE/FE] git: PR merge 방식 변경 제안

As-is

터놓고 기존 PR은 create merge commit 방식임.
이 방식은 모든 커밋이력이 남게되어 이력이 깔끔하지 않다. + 머지커밋도 추가됨

스크린샷 2022-07-08 오전 9 55 58

To-be

PR 머지 방식을 Squash Merge 방식으로 변경하는 것을 제안합니다.

Result

Squash Merge 방식을 택한다.

[BE] refactor: 스프린트 1.5 내용을 refactoring 한다.

As-is

페어로 나뉘어 작성한 코드에 대해 리팩터링이 필요하다.

To-be

business logic 🤔

  • controller return value 를 domain 에서 dto 로 일괄 변경
  • member → Coach/Crew 분류
  • 도메인 검증로직 추가
  • FormItemDto → FormItemReqeust, FormItemResponse로 분리
  • DTO 내의 final 제거 및 @NoArgsConstructor 추가하기
  • MemberService에 line23 공백 추가~~
  • request 검증 어노테이션 추가
  • #50
@Column(nullable = false, length = 30)
private String crewNickname;
  • 전체적으로 회색 import문 제거 → intelliJ에서 설정해놔도 좋을 듯
  • formItem → ManyToOne 양방향 매핑으로
  • 연월 기준으로 조회해오는거 between vs where

test logic 🤔

  • test fixture 정리
  • displayName 규칙 적용

[BE] chore: 환경변수 세팅 변경

As-is

MySQL 접근값인 username, password 값을 환경변수로 관리하고 있다.

To-be

서브모듈을 도입하여 환경변수가 아닌 실행환경별 설정파일(yml) 단위로 관리하게끔 변경한다.

[BE] refactor: 테스트 격리 방법

As-Is

@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
@ActiveProfiles("test")
public class AcceptanceTest 

현재 @activeprofiles("test") 없는 상태에서 인수테스트랑 서비스 테스트 같이 돌리면, 데이터가 남는 에러 발견
그리고 @activeprofiles("test") 로 해결 했지만, 왜 되었는지 모르겠음. 추가 학습 필요

추가로 @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) 로도 가능

[BE] feat: 초기 환경을 설정한다.

As-is

  • 프로젝트 진행을 위해, 백엔드 개발 환경을 세팅한다.

To-be

  • Spring Web, Spring Data JPA, Lombok, Mysql driver, H2 database 추가
  • 우아한 테크코스 컨벤션 적용

[BE] feat: 코치 가능 시간 조회 기능 구현

As-is

코치 별 면담 예약을 위해 면담 가능 시간을 조회하는 기능이 필요하다.

To-be

  • 코치 별 가능 시간 조회 기능을 구현한다.
    GET /api/coaches/{coachId}/calendar/times?year={year}&month={month}

[FE] feat: 면담 신청 페이지를 개발한다.

As-is

면담 신청 페이지에 해당하는 컴포넌트를 구현한다.

To-be

  • 공통 컴포넌트 개발
  • 코치 선택 영역 개발
  • 날짜 및 시간 선택 영역 개발
  • 사전 논의 내용 입력 영역 개발
  • 면담 신청 완료 페이지 개발
  • 리팩토링

[BE] fix: 기본 환경설정 수정 및 코치 반환시 Response ERROR 변경

As-is

final 을 붙이면서 DTO 에 기본 생성자가 없어서 반환값 생성시 맵핑이 안되는 이슈 발견

@Getter
@AllArgsConstructor
public class CoachesResponse {

    private final List<CoachResponse> coaches;
}
cannot construct instance of `com.woowacourse.ternoko.dto.CoachesResponse` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

To-be

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class CoachesResponse {

    private List<CoachResponse> coaches;
}

설정 가독성 개선

dependencies {
	// jpa
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

	// spring-boot
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'org.springframework.boot:spring-boot-starter-web'

	// DB
	runtimeOnly 'com.h2database:h2'
	runtimeOnly 'mysql:mysql-connector-java'

	// lombok
	annotationProcessor 'org.projectlombok:lombok'
	compileOnly 'org.projectlombok:lombok'

	// test
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'io.rest-assured:rest-assured:4.4.0'

[BE] feat: Slack 회원 가입을 구현한다.

As-is

면담 시간 예약을 위해 회원이 필요하다.
추후 슬랙으로 알람 기능까지 도입할 예정이라 Slack social login 을 도입해볼까 ?

To-be

  • slack api 스펙을 확인한다.
  • member table 을 재설계한다.
  • 회원가입 로직을 구현한다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.