Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] 알림 생성, CODEF 주카드 등록 #51

Merged
merged 9 commits into from
Mar 12, 2024
7 changes: 5 additions & 2 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@ jobs:
java-version: '17'
distribution: "adopt"

- name: Make application.properties
- name: Make application.properties & Firebase Service Account Key
run: |
cd ./src/main/resources
touch ./application.properties
echo "${{ secrets.PROPERTIES }}" > ./application.properties
echo "${{ secrets.ONCE_FIREBASE_ADMINSDK }}" ./firebase/once-firebase-adminsdk.json
shell: bash

- name: Build with Gradle
Expand All @@ -51,11 +52,13 @@ jobs:
java-version: '17'
distribution: "adopt"

- name: Make application.properties
- name: Make application.properties & Firebase Service Account Key
run: |
cd ./src/main/resources
touch ./application.properties
echo "${{ secrets.PROPERTIES }}" > ./application.properties
echo "${{ secrets.ONCE_FIREBASE_ADMINSDK }}" ./firebase/once-firebase-adminsdk.json

shell: bash

- name: Build with Gradle
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,5 @@ out/


### Security ###
application.properties
application.properties
once-firebase-adminsdk.json
6 changes: 6 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ dependencies {
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'

implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'

//FCM
implementation 'com.google.firebase:firebase-admin:9.2.0'

//CODEF
implementation 'com.googlecode.json-simple:json-simple:1.1.1'
}

tasks.named('test') {
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/ewha/lux/once/OnceApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableJpaAuditing
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class OnceApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import ewha.lux.once.domain.card.dto.CardGoalRequestDto;
import ewha.lux.once.domain.card.dto.CardPerformanceRequestDto;
import ewha.lux.once.domain.card.dto.CodefCardListRequestDto;
import ewha.lux.once.domain.card.service.CardService;
import ewha.lux.once.domain.card.dto.MainCardRequestDto;
import ewha.lux.once.global.common.CommonResponse;
import ewha.lux.once.global.common.CustomException;
import ewha.lux.once.global.common.ResponseCode;
Expand Down Expand Up @@ -65,4 +67,38 @@ public CommonResponse<?> cardGoal(@AuthenticationPrincipal UserAccount user, @Re
return new CommonResponse<>(e.getStatus());
}
}
// [Get] CODEF 보유 카드 조회
@GetMapping("/list")
@ResponseBody
public CommonResponse<?> codefCardList (@AuthenticationPrincipal UserAccount user, @RequestBody CodefCardListRequestDto codefCardListRequestDto) {
try {
return new CommonResponse<>(ResponseCode.SUCCESS,cardService.getCodefCardList(user.getUsers(), codefCardListRequestDto));
} catch (CustomException e) {
return new CommonResponse<>(e.getStatus());
}
}

// [Post] 주카드 등록
@PostMapping("/main")
@ResponseBody
public CommonResponse<?> registerMainCard (@AuthenticationPrincipal UserAccount user, @RequestBody MainCardRequestDto mainCardRequestDto) {
try {
cardService.postRegisterCard(user.getUsers(), mainCardRequestDto);
return new CommonResponse<>(ResponseCode.SUCCESS);
} catch (CustomException e) {
return new CommonResponse<>(e.getStatus());
}
}

// [Get] 주카드 실적 업데이트
@GetMapping("/main/performance")
@ResponseBody
public CommonResponse<?> registerMainCard (@AuthenticationPrincipal UserAccount user) {
try {
cardService.updateOwnedCardsPerformance(user.getUsers());
return new CommonResponse<>(ResponseCode.SUCCESS);
} catch (CustomException e) {
return new CommonResponse<>(e.getStatus());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ewha.lux.once.domain.card.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CodefCardListRequestDto {
private String code;
private String id;
private String password;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ewha.lux.once.domain.card.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CodefCardListResponseDto {
private String cardName;
private String cardImg;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ewha.lux.once.domain.card.dto;

import java.util.List;

import lombok.ToString;

@ToString
public class GoogleMapPlaceResponseDto {

private List<Place> places;

public GoogleMapPlaceResponseDto() {
}

public GoogleMapPlaceResponseDto(List<Place> places) {
this.places = places;
}

public List<Place> getPlaces() {
return places;
}

public void setPlaces(List<Place> places) {
this.places = places;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ewha.lux.once.domain.card.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class MainCardRequestDto {
private String code;
private String cardName;

}
26 changes: 26 additions & 0 deletions src/main/java/ewha/lux/once/domain/card/dto/Place.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ewha.lux.once.domain.card.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@ToString
@Getter
@Setter
@AllArgsConstructor
public class Place {
private String formattedAddress;
private Location location;


@Getter
@Setter
@ToString
@AllArgsConstructor
public static class Location{
private double latitude;
private double longitude;

}
}
2 changes: 2 additions & 0 deletions src/main/java/ewha/lux/once/domain/card/entity/OwnedCard.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,6 @@ public class OwnedCard extends BaseEntity {
public void releaseMaincard() {
this.isMain = false;
}

public void setMaincard() { this.isMain = true; }
}
85 changes: 76 additions & 9 deletions src/main/java/ewha/lux/once/domain/card/service/CardService.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package ewha.lux.once.domain.card.service;

import ewha.lux.once.domain.card.dto.CardGoalRequestDto;
import ewha.lux.once.domain.card.dto.CardPerformanceRequestDto;
import ewha.lux.once.domain.card.dto.MontlyBenefitResponseDto;
import ewha.lux.once.domain.card.dto.MyWalletResponseDto;
import ewha.lux.once.domain.card.dto.*;
import ewha.lux.once.domain.card.entity.Card;
import ewha.lux.once.domain.card.entity.OwnedCard;
import ewha.lux.once.domain.home.entity.Announcement;
import ewha.lux.once.domain.home.entity.ChatHistory;
import ewha.lux.once.domain.user.entity.Users;
import ewha.lux.once.global.common.CustomException;
Expand All @@ -15,12 +13,13 @@
import ewha.lux.once.global.repository.OwnedCardRepository;
import ewha.lux.once.global.repository.UsersRepository;
import lombok.RequiredArgsConstructor;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.springframework.stereotype.Service;
import ewha.lux.once.domain.home.service.CODEFAPIService;
import ewha.lux.once.domain.home.service.CODEFAsyncService;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;

@Service
Expand All @@ -30,6 +29,9 @@ public class CardService {
private final OwnedCardRepository ownedCardRepository;
private final ChatHistoryRepository chatHistoryRepository;
private final UsersRepository usersRepository;
private final CODEFAPIService codefapi;
private final CODEFAsyncService codefAsyncService;
private final CardRepository cardRepository;

public MyWalletResponseDto.MyWalletProfileDto getMyWalletInfo(Users nowUser) throws CustomException {
List<OwnedCard> ownedCards = ownedCardRepository.findOwnedCardByUsers(nowUser);
Expand All @@ -50,7 +52,7 @@ public MyWalletResponseDto.MyWalletProfileDto getMyWalletInfo(Users nowUser) thr
ownedCard.isMain(),
ownedCard.getPerformanceCondition(),
ownedCard.getCurrentPerformance(),
ownedCard.getPerformanceCondition() - ownedCard.getCurrentPerformance(),
Math.max(ownedCard.getPerformanceCondition() - ownedCard.getCurrentPerformance(),0),
cardBenefitList
);
})
Expand Down Expand Up @@ -136,4 +138,69 @@ private List<MyWalletResponseDto.CardBenefitListDto> splitCardSummary(String car
}
return cardBenefitList;
}
public List<CodefCardListResponseDto> getCodefCardList(Users nowUser,CodefCardListRequestDto codefCardListRequestDto) throws CustomException {
// 커넥티드 아이디
String connectedId;
if(nowUser.getConnectedId() == null){ // 저장되어있지 않은 경우
// 계정 생성
connectedId = codefapi.CreateConnectedID(codefCardListRequestDto);
nowUser.setConnectedId(connectedId);
usersRepository.save(nowUser);
} else if (codefapi.IsRegistered(codefCardListRequestDto.getCode(),nowUser.getConnectedId())=="0"){ // 커넥티드 아이디가 해당 카드사와 연결되어있지 않은 경우
// 계정 추가
connectedId = codefapi.AddToConnectedID(nowUser, codefCardListRequestDto);
} else {
connectedId = nowUser.getConnectedId();
}
JSONArray dataArray = codefapi.GetCardList(codefCardListRequestDto.getCode(), connectedId);

List<CodefCardListResponseDto> cardDTOList = new ArrayList<>();
for (Object obj : dataArray) {
JSONObject dataObject = (JSONObject) obj;
String resCardName = (String) dataObject.get("resCardName");
String resImageLink = (String) dataObject.get("resImageLink");

CodefCardListResponseDto cardDTO = new CodefCardListResponseDto(resCardName, resImageLink);
cardDTOList.add(cardDTO);
}
return cardDTOList;

}
public void postRegisterCard(Users nowUser, MainCardRequestDto mainCardRequestDto) throws CustomException{
// 카드
Optional<Card> optionalCard = cardRepository.findCardByName(mainCardRequestDto.getCardName());
Card card = optionalCard.orElseThrow(() -> new CustomException(ResponseCode.CARD_NOT_FOUND));
// 보유 카드 가져오기
Optional<OwnedCard> optionalOwnedCard = ownedCardRepository.findOwnedCardByUsersAndCard(nowUser, card);
OwnedCard ownedCard;
if (optionalOwnedCard.isPresent()) {
ownedCard = optionalOwnedCard.get();
} else {
ownedCard = OwnedCard.builder()
.users(nowUser)
.card(card)
.build();
}

String connectedId = nowUser.getConnectedId();

// 실적 조회
HashMap<String,Object> performResult = codefapi.Performace(mainCardRequestDto.getCode(),connectedId,mainCardRequestDto.getCardName());
int performanceCondition = (int) performResult.get("performanceCondition");
int currentPerformance = (int) performResult.get("currentPerformance");
String cardNo = (String) performResult.get("resCardNo");

codefAsyncService.saveFavorite(mainCardRequestDto.getCode(),connectedId, ownedCard,nowUser,cardNo);

ownedCard.setMaincard();
ownedCard.setPerformanceCondition(performanceCondition);
ownedCard.setCurrentPerformance(currentPerformance);

ownedCardRepository.save(ownedCard);
}
// 보유 주카드 실적 업데이트
public void updateOwnedCardsPerformance(Users nowUser) throws CustomException {
codefAsyncService.updateOwnedCardsPerformanceCodef(nowUser);
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package ewha.lux.once.domain.home.controller;

import ewha.lux.once.domain.card.dto.CardPerformanceRequestDto;
import ewha.lux.once.domain.home.dto.FCMTokenDto;
import ewha.lux.once.domain.home.service.FirebaseCloudMessageService;
import ewha.lux.once.domain.home.service.HomeService;
import ewha.lux.once.global.common.CommonResponse;
import ewha.lux.once.global.common.CustomException;
Expand Down Expand Up @@ -67,8 +70,6 @@ public CommonResponse<?> announcedetail(@PathVariable Long announceId) {
} catch (CustomException e){
return new CommonResponse<>(e.getStatus());
}

}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ewha.lux.once.domain.home.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class AnnouncementRequestDto {
private String targetToken;
private String title;
private String body;
}
14 changes: 14 additions & 0 deletions src/main/java/ewha/lux/once/domain/home/dto/FCMTokenDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ewha.lux.once.domain.home.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class FCMTokenDto {
private String token;
}
Loading
Loading