Cafeteria API 서버
- API 서버: cafeteria-server
- Android 앱: cafeteria-android
- 관리용 API 서버: cafeteria-management-server
- 웹 콘솔: cafeteria-management-web
- API 서버 배포 스크립트: cafeteria-server-deploy
이 서버는 다음 API를 제공합니다.
- 식단 정보 제공
- 할인 바코드 제공
- 피드백 수신, 답장과 공지사항 제공
- 결제시 할인 유효성 검증
- 결제시 할인 내역 등록
이 애플리케이션은 밥아저씨의 "Clean Architecture"를 준수합니다. 아닐 수도 있음 :D
app
└ docs → 문서
└ lib → 애플리케이션 소스
└ common → 애플리케이션 전역에서 쓰이는 객체
└ di → 의존성 주입 클래스 선언과 모듈 정의
└ utils → 유틸리티
└ domain → 도메인 레이어 (엔터프라이즈 비즈니스 규칙과 애플리케이션 비즈니스 규칙을 통합)
└ constants → 상수 정의
└ entities → 도메인 모델 (엔티티)
└ repositories → 데이터에 접근하는 객체의 인터페이스
└ security → 인증 또는 개인정보과 관련된 객체
└ services → controller와 repository 사이의 도메인 로직을 처리하는 객체
└ usecases → 애플리케이션 비즈니스 규칙
└ validators → 요청의 유효성을 검사하는 객체
└ interfaces → 인터페이스 어댑터 레이어 (애플리케이션 비즈니스 규칙과 외부 레이어를 연결)
└ controllers → Hapi.js 라우터의 handler
└ converter → 외부 모델을 도메인 모델로 바꾸어 주는 객체
└ security → security 구현
└ serializers → 도메인 모델을 외부 응답 모델로 바꾸어 주는 객체
└ services → services 구현
└ storage → repository 구현
└ validators → validators 구현
└ infrastructure → 프레임워크, 드라이버 (DB, 웹서버 등)
└ database → ORM과 DB 연결 객체
└ webserver → Hapi.js 웹 서버 구성 (서버, 라우터, 플러그인 등)
└ server.mjs → Hapi.js 서버 정의
└ public → 웹 서버에 의해 public으로 제공되는 파일들 (res/images 등)
└ test → 테스트 소스
└ integration → 통합 테스트
└ mocks → 테스트용으로 구현한 목(mock) 소스 파일
└ unit → 유닛 테스트
└ index.mjs → 메인 애플리케이션 진입점
└ config.mjs → 설정 파일
카페테리아 학생 할인을 제공받으려면 아래의 조건들을 만족해야 합니다:
- 1: requestShouldBeInMealTime
- 2: cafeteriaShouldSupportDiscount
- 3: userShouldExist
- 4: barcodeShouldBeActive
- 5: discountShouldBeFirstToday
- 6: barcodeShouldNotBeUsedRecently
- 7: tokenShouldBeValid
- 식단 파싱 버그 해결
- 고객센터 신설
- 타겟 공지 및 앱 업데이트 지원
- 사용자가 없으면 최근 바코드 태그된 적도 없는 것으로 간주함
- 바코드 파싱 후 정수로 변환
/isBarcode
와/paymentSend
에 적용되는 validation rule 각각 다르게 함- 중복 로깅 문제 해결
- 사용자가 없는 상태에서도 transaction commit 가능해짐
- 바코드 태그시 모든 성공/실패 케이스에 TransactionHistory를 남김
- 더 유연한 동작 가능
- DB 테이블 수정 및 추가
- 생협 홈페이지 리뉴얼로 인한 식단 파싱 문제 해결
- 식단 양식 대응
- Remember-me token으로 로그인할 수 없는 문제 해결
- 카페테리아 정보 요청시 500 에러 해결
- 응답 모델 문서 수정
- 식단 생협 홈페이지에서 직접 가져옴
- 코너에 조식/중식/석식 구분 추가
- 테스트 계정 추가
- 로그아웃 컨트롤러 500 버그 해결
- 로그인이 안 되는 심각한 버그 해결
- 광범위한 유닛 테스트 추가
- 도메인과 HTTPS 적용
- Notification API 이름 FeedbackReplies로 변경
- 내부 DB 구조 변경 (notifications -> feedback_replies, id와 feedback_id 추가)
- /isBarcode와 /paymentSend에 대응되는 입력 유효성 검사 로직 강화
- 도메인 엔티티 Cafeteria 확장
- 결제 유효성 검사에서 Cafeteria 할인 지원 여부 명시적으로 확인
- 로그인 시도시 응답 없는 경우 대응
- ES6 지원 추가, 클래스 기반으로 재설계
- 새로운 피드백과 답장 기능 추가
- 기존 API 모두 지원
- 최소 기능으로 새로운 시작 1.0.0 !!
- 실서버에 배포
- CI 테스트 적용
소스 코드에는 GPLv3 라이센스가 적용됩니다. 라이센스는 이곳에서 확인하실 수 있습니다.
- 좋은 레퍼런스 제공해주신 Jérémy Buget님
- 바쁘신 와중에도 큰 도움 주신 doukong님, Gowoon Jung님
- 먼저 왔다 가신 jaemoon님, Minjae Son님, jongwook님