Skip to content

Commit

Permalink
Common/dev/feat coin#1604 (#1628)
Browse files Browse the repository at this point in the history
* [FE] FIX: 재화 까비상점, 동전줍기 Nav 다크모드 적용 #1604

* [FE] FEAT: /main club section인 곳들도 AlertStyled div 넣어줌#1604

* [FE] FIX: 동전줍기 Nav box-shadow 적용 #1604

* [FE] FEAT: 아이템 사용 내역이 없을 경우 나타나는 문구에 DarkMode 색상 적용 #1604

* [FE] FEAT: StoreMain 페이지 Header 의 border-bottom 색상을 DarkMode 색상으로 변경 #1604

* [FE] REFACT: clubSectionsData를 mapPositionData.ts에 넣음 #1604

* [FE] FIX: WarningNotification svg 파일 사용 구조 변경&텍스트 색상 변경#1604

* [FE] FIX: top nav button myCoinBtn 어드민 페이지에서 안보이게&id, type등 의미에 맞게 이름 변경#1604

* [FE] FIX: SearchBar에 있는 SearchIcon svg 사용 구조 변경&TopNavButton 중 searchButton 크기 조정 방법 변경#1604

* [FE] FIX: SearchItemByIntraId private icon 안나오는거 고침#1604

* [FE] FIX: cabinetIconComponentMap 중 private icon 사용하는 곳 크기 조정#1604

* [FE] FIX: /home에 있는 아이콘 svg 파일 사용방식 변경#1604

* [FE] FIX: privateIcon.svg 사용하는 곳들 모두 크기 조정완료#1604

* [FE] FIX: privateIcon shareIcon clubIcon storeExtension 사용하는 부분 크기 조정#1604

* [FE] FEAT: 페널티 모달 날짜 오류 수정 #1604

* [FE] FEAT: Profile 페이지에서 연장권 Card 삭제 #1604

* [FE] FEAT: 새로고침시 home으로 이동 말고 현재 url로 새로고침 #1604

* [FE] FEAT: 프로필페이지에서 연장권 카드 삭제 후 레이아웃 조정#1604

* [FE] FEAT: ItmeUsageLogPage 첫 랜더링 시 로딩 애니메이션 추가 #1604

* [BE] FIX : 어드민에서 층 전체 사물함 안불러와지는 오류 수정

* [FE] FIX: 확대시 코인 깨짐 방지 및 동전줍기 비활성화 #1604

* [FE] FIX: 알림권 사용 모달 문구 수정   #1604

* [FE] FIX: 메인 컬러값 변경 하면 코인 색상도 같이 변경 #1604

* [FE] FIX: Store 새로고침할 경우 LeftStoreNav 에 해당 페이지 선택되도록 수정 #1604

* [BE] FIX : 동전 줍기 동기 처리 및 DB에 저장 로직 추가

* [BE] FIX: SWAP 아이템 1일 1회 사용 제한 적용

* [FE] FEAT: 프로필 페이지 연장권 삭제 후 레이아웃 조정#1604

* [FE] REFACT: DisplayStyleCard ProfilePage 리팩토링#1604

* [FE] REFACT: extensionTicket.svg, storeExtension.svg extension.svg로 통합#1604

* [FE] FIX: 백엔드가 보내주는 데이터에 맞춰 ALERT->ALARM으로 변경#1604

* [FE] FIX: 알림 등록권 사용 연속 2회이상일때 ui 바로 렌더링되게 변경#1604

* [FE] FEAT: UserInfoArea->UserCabinetInfoArea & UserStoreInfoArea css 완성#1604

* [FE] FEAT: UserInfoArea에서의 로고이미지 svg파일로 변경#1604

* [FE] FEAT: UserStoreInfoArea에 openUserStore,closeUserStore 정의해서 넣고 styled component명 UserStoreInfoArea에 맞게 변경#1604

* [FE] FIX: light-grayLine 사용하는 곳 grayLine으로 변경#1604

* [FE] FEAT: UserInfoArea 대신 UserCabinetInfoArea import #1604

* [FE] FIX: AdminLayout쪽 UserInfoAreaContainer->UserCabinetInfoAreaContainer#1604

* [FE] FEAT: 유지보수 위해 인벤토리, 아이템사용내역, 코인내역에서 데이터 없을때의 문구와 아이콘을 UnavailableDataInfo를 정의해 대체#1604

* [FE] FIX: 사용가능페이지 사물함 없을때 UnavailableDataInfo로 교체#1604

* [FE] FIX: 사물함설정-사물함이름 수정하다 취소 눌렀을때 초기화되게 변경#1604

* [FE] ETC: 어드민 /main 데이터 정상적으로 불러온 후 private,share,club icon 정상적으로 렌더링되는지 확인#1604

* [FE] FIX: getDefaultCabinetInfo title:null->로 수정#1604

* [FE] DOCS: DisplayStyleInitializer.ts->displayStyleInitializer.ts#1604

* [FE] FEAT: admin 페널티 모달 css완성, 코인 다크모드 색상 통일 #1604

* [FE] FIX: 유저 아이템 지급 버튼 생성  #1604

* [FE] FIX: IItemDetail itemName:StoreItemType->string, itemType:string->StoreItemType으로 변경&IItemDetail 사용하는 부분 변경사항 적용#1604

* [FE] FIX: 유저 아이템 지급 nav 수정  #1604

* [FE] FIX: UserStoreInfoArea.tsx에서 ban modal 관련된 이름 아이템 지급 모달 관련되게 변경#1604

* [FE] FIX: ISelectedUserInfo->ISelectedUserCabinetInfo & ISelectedUserStoreInfo 생성 및 사용#1604

* [FE] FIX: UserInfoArea 잘 안열리고 잘 안닫히는 버그 해결#1604

* [FE] REFACT: UserStoreInfo container 삭제#1604

* [FE] FIX: 연장권 사용 모달 아이템 없을 때 처리   #1604

* [FE] FIX: 아이템 사용 모달에서 보유한 아이템만 보이도록 수정, SearchItemByIntraId 리팩토링 #1604

* [FE] FEAT: 코인 통계 axios 작성 #1604

* [FE] FEAT: 코인 통계 CSS#1604

* [FE] FEAT: LogTable 에 들어가 있는 불필요한 padding 삭제 #1604

* [FE] FEAT: media.css 수정 #1604

* [FE] FEAT: API 명세에 맞는 mock data 로 표 구성 완료 #1604

* [FE] FEAT: Admin 아이템 사용 내역 표 구현 #1604

* [FE] FEAT: Admin 아이템 사용 내역 표 세부 사항 구현 #1604

* [FE] FEAT: AdminLentLog 의 margin-top 속성 조정 #1604

* [FE] FEAT: useMenu 호출에 맞는 함수명 변경 #1604

* [FE] FEAT: AdminItemUsageLogPage 구현 #1604

* [FE] FEAT: AdminItemUsageLogPage 추가 #1604

* [FE] FEAT: AdminDto 에 아이템 사용내역 관련 interface 추가 #1604

* [FE] FEAT: mockData로 코인 통계 띄우기#1604

* [FE] FIX: leader.svg, crown.svg 통합#1604

* [FE] FEAT: 유저/사물함 검색 시 그에 대응되는 cabinetInfoArea 문구로 수정#1604

* [FE] FIX: Selector 아이콘 ReactComponent 사용하는 구조로 변경#1604

* [FE] FIX: 연장권 사용 모달 아이템 없을 때 disabled  #1604

* [FE] FEAT: admin store 라우터 설정#1604

* [FE] FEAT: *선택해주세요 하는 부분들 SelectInduction 컴포넌트 만들어서 적용#1604

* [FE] FEAT: Dropdown Penalty모달 로직 수정 #1604

* [FE] FIX: 아이템 관리 버튼 눌렀을때 info area 두개 나오는거 해결#1604

* [FE] FEAT: AdminStore 페이지 속성 수정 #1604

* [FE] FEAT: AdminStorePage 에 전체 재화 현황 PieChart 추가 #1604

* [FE] FEAT: 코인 통계 api 받아와서 데이터 띄우기 준비 갈 완료#1604

* [FE] FEAT: 재화 전체 그래프 형식 잡기 #1604

* [FE] FIX: AdminNavType 적용 안된곳 적용시킴#1604

* [FE] FEAT: coinflow 컴포넌트 adminStorePage에 이식 #1604

* [FE] FEAT: 어드민 페이지에서 새로고침했을때 새로고침한 위치로 남아있게 변경#1604

* [FE] FEAT: coinFlow 토글 기능 구현 #1604

* [FE] FIX: CI 깨짐 해결 #1604

* [FE] FEAT: Admin dto 수정 #1604

* [FE] FEAT: 아이템 내역 container 작성 #1604

* [FE] FEAT: AdminItemProvideLog 추가 #1604

* [FE] FEAT: AdminItemProviedTable 추가 #1604

* [FE] FEAT: 아이템 내역, 아이템 지급 기록 toggle 버튼 추가 #1604

* [FE] FEAT: AdminStorePage 에 전체 재화 현황 mock data 적용 완료 #1604

* [FE] FIX: AdminNavType 타입 적용 안된 곳 적용#1604

* [FE] FEAT: 페널티 사용 모달 #1604

* [FE] FIX: 동전 주우러 가기 모달 안나오는 오류 수정 #1604

* [BE] FIX : 아이템 목록 요청 유저 + 어드민 전부 가능하도록 수정

* [FE] FIX: 페널티 모닲 출력시 일수와 시간까지 같이 표현 #1604

* [FE] FEAT: 아이템 지급 모달 아이템 드롭다운 axiosItems로 받은 아이템들로 띄움#1604

* [FE] FEAT: 아이템 클릭할때마다 axiosItems 사용해서 해당 타입들 dropdown options에 넣음#1604

* [FE] FEAT: admin 재화 사용 통계 css 수정 #1604

* [FE] FEAT: CI CD 수정 #1604

* [FE] FIX:CI 해결, 아이템 사용 통계 axios 적용 #1604

* [FE] FIX:CI 해결 #1604

* [FE] FIX: 페널티 모달 문구 수정 #1604

* [FE] FEAT: IDropdownOptions에 hasNoOptions 넣어 옵션이 여러개가 아니면 화살표 안보이게 함#1604

* [FE] FEAT: Dropdown 옵션이 여러개가 아닐때 화살표 보여줌->안보여줌으로 수정#1604

* [FE] FIX: admin 아이템 기록 뒤로가기 안되는 버그 수정(miyu님 암살 실패) #1604

* [FE] FEAT: 아이템 지급 모달 api 적용#1604

* [FE] REFACT: 아이템 정렬하는 함수 sortItems 정의해서 StoreMainPage, AdminItemProvisionModal에 적용#1604

* [BE] FIX: getAllItems 가격 부등호 오류 수정

* [BE] FIX: 아이템 SKU 기준 오름차순 정렬

* [FE] REFACT: getTypeOptions 만들어 중복되는 코드 대체#1604

* [BE] FIX: DB 가격 정책대로 다시 괄호 변경

* [FE] FIX: 연장권 사용 모달 기본값 수정  #1604

* [FE] REFACT: AdminNavType->CabinetDetailAreaType으로 이름 변경#1604

* [FE] DOCS: cabinetDetailAreaType->cabinetDetailArea.type으로 파일명 변경#1604

* [FE] FIX: SearchListItem 다크모드 적용 안된 부분 적용#1604

* [BE] admin controller 생성

* [BE] admin controller 생성

* FEAT: 관리자 계정에서 아이템 지급 목록 조회 컨트롤러 및 dto 작성

* FEAT: ItemAssignResponseDto mapper 작성

* FEAT: 특정 유저의 아이템 이력 조회 기능

* FIX: 음수 가격의 아이템 및 양수 가격의 아이템 모두 조회

* FEAT: 아이템별 구매 인원 조회 컨트롤러 작성

* FEAT: 아이템 id에 대한 구매 횟수 반환 기능

* [FEAT] admin 특정 기간(한 달)동안 코인 줍기 횟수를 횟수 별로 통계

* [BE] FIX : 사물함 목록 조회 시 과거 기록부터 조회되던 현상 수정

* [FEAT] admin 전체 기간동안의 동전 총 발행량 및 총 사용량 기능

* FEAT: 날짜별 코인 사용량 컨트롤러 작성

* FEAT: 날짜별 코인 사용량 조회 기능

* [BE] FIX : redis 동기화 로직 추가 및 연장권 스케줄러에서 재화 발행하도록 변경

* [BE] FIX: admin 전체 기간동안의 동전 총 발행량 및 총 사용량 반환 부분 변경

* [BE] FIX : 동기화 내에서 불필요한 코드 동기화 밖으로 퇴출

* [BE] FIX: 특정 기간동안 재화 사용량 반환시 사용 시점이 아닌 구매시점 확인

* [BE] FIX: 아이템 히스토리 조회시 구매일 순으로 정렬해서 반환

* [FE] FIX: 페널티 dropdown 모달 뺴기 #1604

* [FE] FEAT: 페널티 dropdown 코드 통일화 시킴 #1604

* [BE] FIX: 메서드명 변경

* [BE] FIX: TotalCoinAmountDto 음수 로직 생성자 내부로 변경

* [BE] FIX: ItemHistoryQueryService 메서드명 find로 변경

* [BE] FIX: 동전 줍기 20일 보상 랜덤값 생성 로직 ThreadLocalRandom으로 변경

* [FE] FIX: 아이템 사용 통계 api 적용 #1604

* [FE] FEAT: coinFlow GE오류 해결 #1604

* [FE] FEAT: 아이템 지급 기록 관련 토글 및 표 삭제 #1604

* [BE] FIX: redis coin 양 저장 key 변경

* [BE] FIX : 재화 통계 요청 시 used 조회 안되는 오류 수정

* [FE] FIX: 동전줍기 20회 이상 줍기 시도시 오류 해결 #1604

* [FE] FIX: coinFlow nivo 데이터 유형 맞추기 #1604

* [FE] FEAT: admin axiosGetUserItems 작성 #1604

* [FE] FEAT: mock data 삭제 및 api 연결 #1604

* [FE] FEAT: AdminItemLogTable 수정 #1604

* [BE] FIX : 동전 줍기 보상 금액을 직접 처리에서 조회 후 처리로 변경(정합성 보장 및 유지보수성 개선)

* [FE] FIX: 아이템 사용 통계 그래프 색상 변경 및 까비상점 아이템 정렬 버그 해결 #1604

* [FE] FIX: 동전줍기 20회 이상 모달 오류 수정 #1604

* [FE] FIX: 페널티 모달 버튼 글자 수정 #1604

* [FE] FIX: 어드민 store 페이지 그리드 수정  #1604

* [BE] FIX : Item 관련 일부 메서드 이름 변경

* [FE] FIX: 페널티 아이템 없을시 모달에서 store로 이동 url 넣기 #1604

* [BE] FIX : purchase Item 네이밍 변경

* [FE] FIX: coinFlow 날짜 과거부터 표현 #1604

* [FE] FIX: 그래프 색상 수정 #1604

* [BE] DOCS: TODO from sanan

* [FE] FIX: 아이템 지급하기 dto 변경사항 적용#1604

* [FE] FEAT: 동전 줍기 통계 표 변경 및 api 적용#1604

* [FE] FEAT: 동전 줍기 통계 표 css#1604

* [FE] FEAT: 동전 줍기 통계 표 다크모드 적용#1604

* [FE] REFACT: padTo2Digits 사용해서 코드 길이 줄임#1604

* [FE] REFACT: AdminStorePage styled components 컨벤션에 맞게 수정#1604

* [FE] REFACT: StoreHorizontalBarChart 성능 좀 더 높이려 push 말고 스프레드 연산자 사용#1604

* [FE] FIX: StoreHorizontalBarChart에서 유저수가 0명일때 숫자 0 안보이게함#1604

* [FE] FIX: 아이템 지급 시 response modal 메시지 수정  #1604

* [FE] FEAT: 전체 재화 현황 api 받아오도록 수정 #1604

* [FE] FEAT: 아이템 지급 모달 특정 드롭다운 클릭시 다른 드롭다운 닫히게 함#1604

* [FE] FIX: 아이템 지급 실패시 상태코드에 따라 modalTitle 처리#1604

* [FE] FIX: coinFlow tooltip 수정 #1604

* [FE] FEAT: StoreHorizontalBarChart 툴팁 공백 추가#1604

* [FE] FIX: CoinFlow 및 변수명 직관적으로 바꿈 #1604

* [FE] FIX: itembarchart 리팩토링  #1604

* [FE] FIX: dataToggleList 밖에다 선언 및 coinFlow이름 변경 #1604

* [FE] FIX: 모든 Dropdown에 바뀐 구조 적용#1604

* [FE] FEAT: Cointainer 을 Wrapper 로 수정 #1604

* [FE] FIX: 코인 내역에서 보유 코인이 10000 이상일 때 단위 세로로 출력되는 문제 해결 #1604

* [FE] FIX: 까비상점 연장권 구매 모달 수정  #1604

* [FE] FIX:  구매 모달 수정  #1604

* [FE] FIX: 수지회 상태 변경 모달 드롭다운 안열리는 문제 해결#1604

* [FE] FIX: dto 코드 정리하기 #1604

* [FE] FIX: 아이템 통계 그래프 수정 #1604

* [FE] FIX: 재화사용통계 모바일뷰 ui배치 #1604

* [FE] FEAT: 동전 줍기 통계 모바일 뷰 css 적용#1604

* [BE] FIX : 재화 통계 수치 안맞는 오류 수정

* [FE] REFACT: AdminItemProvisionModal item, item type에 따라 변수 및 함수명 수정#1604

* [FE] FIX: 아이템 통계 그래프 너비 수정 #1604

* [FE] FIX: section Alert 문구 강조 변경 #1604

* [FE] FIX: 아이템 통계 그래프 너비 다시 수정 #1604

* [BE] FEAT : 층 전체 사물함 조회 로직 및 오픈 예정 로직에 로직 설명 주석 추가

* [FE] FIX: 아이템 구매 모달 오류 수정  #1604

* [BE] FIX : CabinetFacadeService 줄 정리 및 이름 변경

* [FE] FIX: ItemUsageLogPage 에서 더보기 버튼 누른 후 화면 최상단으로 이동하는 문제 해결 #1604

* [FE] FEAT: PieChartCoin 이름 변경 #1604

* [FE] FEAT: AdminItemUsaLog 에 paginatedData 를 paginatedData.data 로 수정

* [FE] FEAT: AdminItemLogTable 에서 잘못 파싱된 값 수정 #1604

* [FE] FEAT: SearchItemByIntraId 에 getData 로직 추가 #1604

* [FE] FEAT: UserStoreInfoArea 의 return 값을 AdminItemUsageLogPage 로 수정 #1604

* [FE] FEAT: top 속성 0px 로 수정 #1604

* [FE] FEAT: AdminItemHistoryDto purchaseAt 이름 변경 #1604

* [FE] FEAT: left section nav에 알림 등록 안했을때 동아리 섹션 제외 빈 하트 띄움#1604

* [BE] FIX : NPE 발생 오류 수정

* [FE] FEAT: 어드민 left section nav에서 하트 아이콘 안띄움#1604

* [BE] FIX : prev_extension 가격 0원으로 변경

* [FE] FIX: CoinLog 에서 더보기 버튼 누른 후 화면 상단으로 올라가는 버그 수정 #1604

* [FE] FIX: 아이템 사용 통계 이름 변경 및 제목 가운데 정렬 #1604

* [BE] FIX : redis 조회 오류로 인해 로직 순서 변경

* [FE] FIX: 동전줍기 문장 변경 #1604

* [FE] FAET: inventory에 사용 안내문구 넣기 #1604

* [FE] FIX: inventory 변수명변경 #1604

* [FE] FIX: 아이템 구매 모달 리팩토링  #1604

* [FE] FIX: 아이템 사용 내역 아이콘 크기 통일 #1604

* [FE] FIX: IDropdown->IDropdownProps 이름 변경#1604

* [FE] FIX: IDropdown->IDropdownProps 이름 변경2#1604

---------

Co-authored-by: jiminChoi <[email protected]>
Co-authored-by: jnkeniaem <[email protected]>
Co-authored-by: gykoh42 <[email protected]>
Co-authored-by: Minkyu01 <[email protected]>
Co-authored-by: jiwon <[email protected]>
Co-authored-by: jeekim <[email protected]>
Co-authored-by: space <[email protected]>
Co-authored-by: saewoo1 <[email protected]>
Co-authored-by: Jiwon Park <[email protected]>
  • Loading branch information
10 people authored Jun 11, 2024
1 parent b089cff commit b39a6ff
Show file tree
Hide file tree
Showing 288 changed files with 10,591 additions and 1,933 deletions.
75 changes: 75 additions & 0 deletions backend/database/cabi_local.sql
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,81 @@ CREATE TABLE `club_registration`
COLLATE = utf8mb4_general_ci;


DROP TABLE IF EXISTS `item`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `item`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`price` bigint(20) NOT NULL,
`sku` varchar(64) NOT NULL,
`type` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;

LOCK TABLES `item` WRITE;
/*!40000 ALTER TABLE `item`
DISABLE KEYS */;
INSERT INTO `item`
VALUES (1, 0, 'EXTENSION_PREV', 'EXTENSION'),
(2, -2000, 'EXTENSION_31', 'EXTENSION'),
(3, -1200, 'EXTENSION_15', 'EXTENSION'),
(4, -300, 'EXTENSION_3', 'EXTENSION'),
(5, -6200, 'PENALTY_31', 'PENALTY'),
(6, -1400, 'PENALTY_7', 'PENALTY'),
(7, -600, 'PENALTY_3', 'PENALTY'),
(8, -100, 'SWAP', 'SWAP'),
(9, -100, 'ALARM', 'ALARM'),
(10, 10, 'COIN_COLLECT', 'COIN_COLLECT'),
(11, 2000, 'COIN_FULL_TIME', 'COIN_FULL_TIME'),
(12, 200, 'COIN_REWARD_200', 'COIN_REWARD'),
(13, 500, 'COIN_REWARD_500', 'COIN_REWARD'),
(14, 1000, 'COIN_REWARD_1000', 'COIN_REWARD'),
(15, 2000, 'COIN_REWARD_2000', 'COIN_REWARD');
/*!40000 ALTER TABLE `item`
ENABLE KEYS */;
UNLOCK TABLES;


DROP TABLE IF EXISTS `item_history`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `item_history`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`item_id` bigint(20) NOT NULL,
`user_id` bigint(20) NOT NULL,
`purchase_at` datetime(6) NOT NULL,
`used_at` datetime(6) DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `item_history_item_id` FOREIGN KEY (`item_id`) REFERENCES `item` (`id`),
CONSTRAINT `item_history_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;


DROP TABLE IF EXISTS `section_alarm`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `section_alarm`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`cabinet_place_id` bigint(20) NOT NULL,
`user_id` bigint(20) NOT NULL,
`registered_at` datetime(6) NOT NULL,
`alarmed_at` datetime(6) DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `section_alarm_cabinet_place_id`
FOREIGN KEY (`cabinet_place_id`) REFERENCES `cabinet_place` (`id`),
CONSTRAINT `section_alarm_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;


/*!40103 SET TIME_ZONE = @OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE = @OLD_SQL_MODE */;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.ftclub.cabinet.admin.club.service;

import static org.ftclub.cabinet.user.domain.UserRole.CLUB_ADMIN;
import static org.ftclub.cabinet.club.domain.UserRole.CLUB_ADMIN;

import java.util.List;
import java.util.Map;
Expand All @@ -9,6 +9,7 @@
import lombok.RequiredArgsConstructor;
import org.ftclub.cabinet.club.domain.Club;
import org.ftclub.cabinet.club.domain.ClubRegistration;
import org.ftclub.cabinet.club.domain.UserRole;
import org.ftclub.cabinet.club.service.ClubCommandService;
import org.ftclub.cabinet.club.service.ClubQueryService;
import org.ftclub.cabinet.club.service.ClubRegistrationCommandService;
Expand All @@ -19,7 +20,6 @@
import org.ftclub.cabinet.log.Logging;
import org.ftclub.cabinet.mapper.ClubMapper;
import org.ftclub.cabinet.user.domain.User;
import org.ftclub.cabinet.user.domain.UserRole;
import org.ftclub.cabinet.user.service.UserQueryService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.ftclub.cabinet.admin.dto;

import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class AdminItemHistoryDto {

private LocalDateTime purchaseAt;
private LocalDateTime usedAt;
private String itemName;
private String itemDetails;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.ftclub.cabinet.admin.dto;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class AdminItemHistoryPaginationDto {

private List<AdminItemHistoryDto> itemHistories;
private Long totalLength;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package org.ftclub.cabinet.admin.item.controller;

import lombok.RequiredArgsConstructor;
import org.ftclub.cabinet.admin.dto.AdminItemHistoryPaginationDto;
import org.ftclub.cabinet.admin.item.service.AdminItemFacadeService;
import org.ftclub.cabinet.admin.statistics.service.AdminStatisticsFacadeService;
import org.ftclub.cabinet.auth.domain.AuthGuard;
import org.ftclub.cabinet.auth.domain.AuthLevel;
import org.ftclub.cabinet.dto.ItemAssignRequestDto;
import org.ftclub.cabinet.dto.ItemCreateDto;
import org.ftclub.cabinet.log.Logging;
import org.springframework.data.domain.Pageable;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/v5/admin/items")
@RequiredArgsConstructor
@RestController
@Logging
public class AdminItemController {

private final AdminItemFacadeService adminItemFacadeService;
private final AdminStatisticsFacadeService adminStatisticsFacadeService;


@PostMapping("")
@AuthGuard(level = AuthLevel.ADMIN_ONLY)
public void createItem(@RequestBody ItemCreateDto itemCreateDto) {
adminItemFacadeService.createItem(itemCreateDto.getPrice(),
itemCreateDto.getSku(), itemCreateDto.getType());
}

@PostMapping("/assign")
@AuthGuard(level = AuthLevel.ADMIN_ONLY)
public void assignItem(@RequestBody ItemAssignRequestDto itemAssignRequestDto) {
adminItemFacadeService.assignItem(itemAssignRequestDto.getUserIds(),
itemAssignRequestDto.getItemSku());
}

/**
* 특정 유저의 아이템 history 조회
*
* @param userId
* @param pageable
* @return
*/
@GetMapping("/users/{userId}")
@AuthGuard(level = AuthLevel.ADMIN_ONLY)
public AdminItemHistoryPaginationDto getUserItemHistoryPagination(
@PathVariable(value = "userId") Long userId, Pageable pageable) {
return adminItemFacadeService.getUserItemHistories(userId, pageable);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.ftclub.cabinet.admin.item.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.ftclub.cabinet.admin.dto.AdminItemHistoryDto;
import org.ftclub.cabinet.admin.dto.AdminItemHistoryPaginationDto;
import org.ftclub.cabinet.dto.ItemPurchaseCountDto;
import org.ftclub.cabinet.dto.ItemStatisticsDto;
import org.ftclub.cabinet.item.domain.Item;
import org.ftclub.cabinet.item.domain.ItemHistory;
import org.ftclub.cabinet.item.domain.ItemType;
import org.ftclub.cabinet.item.domain.Sku;
import org.ftclub.cabinet.item.service.ItemCommandService;
import org.ftclub.cabinet.item.service.ItemHistoryCommandService;
import org.ftclub.cabinet.item.service.ItemHistoryQueryService;
import org.ftclub.cabinet.item.service.ItemPolicyService;
import org.ftclub.cabinet.item.service.ItemQueryService;
import org.ftclub.cabinet.mapper.ItemMapper;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
public class AdminItemFacadeService {

private final ItemQueryService itemQueryService;
private final ItemCommandService itemCommandService;
private final ItemHistoryCommandService itemHistoryCommandService;
private final ItemHistoryQueryService itemHistoryQueryService;
private final ItemPolicyService itemPolicyService;
private final ItemMapper itemMapper;

@Transactional
public void createItem(Integer Price, Sku sku, ItemType type) {
itemCommandService.createItem(Price, sku, type);
}

@Transactional
public void assignItem(List<Long> userIds, Sku sku) {
Item item = itemQueryService.getBySku(sku);
LocalDateTime now = null;
if (item.getPrice() > 0) {
now = LocalDateTime.now();
}
itemHistoryCommandService.createItemHistories(userIds, item.getId(), now);
}

@Transactional(readOnly = true)
public AdminItemHistoryPaginationDto getUserItemHistories(Long userId, Pageable pageable) {
Page<ItemHistory> itemHistoryWithItem =
itemHistoryQueryService.findItemHistoriesByUserIdWithItem(userId, pageable);

List<AdminItemHistoryDto> result = itemHistoryWithItem.stream()
.map(ih -> itemMapper.toAdminItemHistoryDto(ih, ih.getItem()))
.collect(Collectors.toList());

return new AdminItemHistoryPaginationDto(result, itemHistoryWithItem.getTotalElements());
}

@Transactional(readOnly = true)
public ItemStatisticsDto getItemPurchaseStatistics() {
List<Item> itemsOnSale = itemQueryService.getUseItemIds();
List<ItemPurchaseCountDto> result = itemsOnSale.stream()
.map(item -> {
int userCount = itemHistoryQueryService.findPurchaseCountByItemId(item.getId());
return itemMapper.toItemPurchaseCountDto(item, userCount);
}).collect(Collectors.toList());

return new ItemStatisticsDto(result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package org.ftclub.cabinet.admin.statistics.controller;

import java.time.LocalDateTime;
import lombok.RequiredArgsConstructor;
import org.ftclub.cabinet.admin.item.service.AdminItemFacadeService;
import org.ftclub.cabinet.admin.statistics.service.AdminStatisticsFacadeService;
import org.ftclub.cabinet.auth.domain.AuthGuard;
import org.ftclub.cabinet.auth.domain.AuthLevel;
import org.ftclub.cabinet.dto.CoinCollectStatisticsDto;
import org.ftclub.cabinet.dto.CoinStaticsDto;
import org.ftclub.cabinet.dto.ItemStatisticsDto;
import org.ftclub.cabinet.dto.TotalCoinAmountDto;
import org.ftclub.cabinet.log.Logging;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.DateTimeFormat.ISO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/v5/admin/statistics")
@RequiredArgsConstructor
@Logging
public class AdminItemStatisticsController {

private final AdminStatisticsFacadeService adminStatisticsFacadeService;
private final AdminItemFacadeService adminItemFacadeService;

/**
* 특정 연도, 월의 동전 줍기 횟수를 횟수 별로 통계를 내서 반환
*
* @param year
* @param month 조회를 원하는 기간
* @return
*/
@GetMapping("/coins/collect")
@AuthGuard(level = AuthLevel.ADMIN_ONLY)
public CoinCollectStatisticsDto getCoinCollectCountByMonth(
@RequestParam("year") Integer year,
@RequestParam("month") Integer month) {
return adminStatisticsFacadeService.getCoinCollectCountByMonth(year, month);
}

/**
* 전체 기간동안 동전의 발행량 및 사용량 반환
*
* @return
*/
@GetMapping("/coins")
@AuthGuard(level = AuthLevel.ADMIN_ONLY)
public TotalCoinAmountDto getTotalCoinAmount() {
return adminStatisticsFacadeService.getTotalCoinAmount();
}

/**
* 아이템별 구매 인원 조회
*
* @return
*/
@GetMapping("/items")
@AuthGuard(level = AuthLevel.ADMIN_ONLY)
public ItemStatisticsDto getItemPurchaseStatistics() {
return adminItemFacadeService.getItemPurchaseStatistics();
}

/**
* 특정 기간동안 재화 사용량 및 발행량 조회
*
* @param startDate
* @param endDate 조회를 원하는 기간
* @return
*/
@GetMapping("/coins/use")
@AuthGuard(level = AuthLevel.ADMIN_ONLY)
public CoinStaticsDto getCoinStaticsDto(
@RequestParam("startDate") @DateTimeFormat(iso = ISO.DATE_TIME) LocalDateTime startDate,
@RequestParam("endDate") @DateTimeFormat(iso = ISO.DATE_TIME) LocalDateTime endDate) {
return adminStatisticsFacadeService.getCoinStaticsDto(startDate.toLocalDate(),
endDate.toLocalDate());

}

}
Loading

0 comments on commit b39a6ff

Please sign in to comment.