Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
22b8467
fix: riot api key 입력
kanginkug Nov 28, 2023
6acc76f
fix: api로 데이터 불러오기 위한 dependency 추가
kanginkug Nov 28, 2023
b1ce542
feat: summoner v4를 받아오기 위한 엔티티 생성
kanginkug Nov 28, 2023
ac08ce7
feat: summoner v4를 받아오기 위한 클래스 생성
kanginkug Nov 28, 2023
4b38dfe
feat: summoner v4를 받아오기 위한 서비스 생성 403에러가 뜨기 때문에 수정해야한다.
kanginkug Nov 28, 2023
627b3a5
fix: riot api key 수정
kanginkug Nov 28, 2023
05d274a
fix: 생성자를 만드는 어노테이션 추가
kanginkug Nov 28, 2023
fca6b53
feat: SummonerRepository 생성
kanginkug Nov 28, 2023
6223506
feat: SummonerResponseDto 생성
kanginkug Nov 28, 2023
6371a36
fix: 상태코드가 200이 아니면 아이디가 존재하지 않는다는 에러메세지 출력 & summonerResponseDto를 이용…
kanginkug Nov 28, 2023
53b9625
feat: matchId를 저장하는 엔티티 생성
kanginkug Nov 30, 2023
ce2a5c4
feat: MatchIdRepository 새엇ㅇ
kanginkug Nov 30, 2023
c6d6922
feat: MatchIdResponseDto 생성
kanginkug Nov 30, 2023
61e0cde
fix: summoner엔티티에 matchIds컬럼을 추가했기 때문에 생성자도 수정해야 했다. 그리고 카멜 표기법도 스네이크…
kanginkug Nov 30, 2023
3dcb425
fix: matchId를 불러와 저장하기 위한 controller를 만들었다. 이것을 SummonerController에 추…
kanginkug Nov 30, 2023
8dd3d18
fix: puuid로 소환사 정보를 불러오는 jpa 생성
kanginkug Nov 30, 2023
0b82081
fix: matchId를 불러와서 puuid로 소환사 정보를 찾아 온 후 matchId 테이블에 summoner의 id와 m…
kanginkug Nov 30, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,12 @@
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5</version>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spring boot 는 버전 정보 안 써주면 알아서 호환되는걸로 맞춰서 지워주는게 좋다고 아는데 어떻게생각하시나요?

</dependency>

</dependencies>

<build>
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/lbs/lbs/controller/SummonerController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package lbs.lbs.controller;

import lbs.lbs.entity.MatchId;
import lbs.lbs.entity.Summoner;
import lbs.lbs.service.SummonerService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;

@RestController
@RequestMapping("/summoners")
@RequiredArgsConstructor
public class SummonerController {

private final SummonerService summonerService;

@GetMapping("/{summonerName}")
public Summoner callSummonerByName(@PathVariable(name = "summonerName") String summonerName) {
// URL 인코딩 사용
summonerName = URLEncoder.encode(summonerName, StandardCharsets.UTF_8);
Summoner apiResult = summonerService.callRiotAPISummonerByName(summonerName);
return apiResult;
}

@PostMapping("/match-ids/{puuid}")
public List<MatchId> getMatchIds(@PathVariable(name = "puuid") String puuid) {
List<MatchId> matchIds = summonerService.getMatchIds(puuid);

return matchIds;
}
}
12 changes: 12 additions & 0 deletions src/main/java/lbs/lbs/dto/MatchIdResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package lbs.lbs.dto;

import lbs.lbs.entity.MatchId;
import lombok.Getter;

import java.util.ArrayList;
import java.util.List;

@Getter
public class MatchIdResponseDto {
List<MatchId> matchIdList = new ArrayList<>();
}
15 changes: 15 additions & 0 deletions src/main/java/lbs/lbs/dto/SummonerResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package lbs.lbs.dto;

import lombok.Getter;

@Getter
public class SummonerResponseDto {
private String id;

private String accountId;
private String revisionDate;
private String profileIconId;
private String puuid;
private String name;
private int summonerLevel;
}
27 changes: 27 additions & 0 deletions src/main/java/lbs/lbs/entity/MatchId.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package lbs.lbs.entity;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor
public class MatchId {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;

private String match_id;

@ManyToOne(fetch = FetchType.LAZY)
private Summoner summoner;


public MatchId(String match_id, Summoner summoner) {
this.match_id = match_id;
this.summoner = summoner;
}
}
39 changes: 39 additions & 0 deletions src/main/java/lbs/lbs/entity/Summoner.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package lbs.lbs.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import lombok.*;

import java.util.List;

@Entity
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Summoner {
@Id @Column(name = "summoner_id")
private String id;

private String profile_icon_id;
private String puuid;

@OneToMany(mappedBy = "summoner")
private List<MatchId> matchIds;

private String summoner_name;
private int summoner_level;

public Summoner(String id, String profile_icon_id, String puuid, String summoner_name, int summoner_level) {
this.id = id;
this.profile_icon_id = profile_icon_id;
this.puuid = puuid;
this.summoner_name = summoner_name;
this.summoner_level = summoner_level;
}


}
9 changes: 9 additions & 0 deletions src/main/java/lbs/lbs/repository/MatchIdRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package lbs.lbs.repository;

import lbs.lbs.entity.MatchId;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MatchIdRepository extends JpaRepository<MatchId, Long> {
}
14 changes: 14 additions & 0 deletions src/main/java/lbs/lbs/repository/SummonerRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package lbs.lbs.repository;

import lbs.lbs.entity.Summoner;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface SummonerRepository extends JpaRepository<Summoner, String> {
boolean existsById(String id);
Optional<Summoner> findById(String id);
Optional<Summoner> findByPuuid(String puuid);
}
104 changes: 104 additions & 0 deletions src/main/java/lbs/lbs/service/SummonerService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package lbs.lbs.service;

import com.fasterxml.jackson.databind.ObjectMapper;
import lbs.lbs.dto.MatchIdResponseDto;
import lbs.lbs.dto.SummonerResponseDto;
import lbs.lbs.entity.MatchId;
import lbs.lbs.entity.Summoner;
import lbs.lbs.repository.MatchIdRepository;
import lbs.lbs.repository.SummonerRepository;
import lombok.RequiredArgsConstructor;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class SummonerService {
private final ObjectMapper objectMapper = new ObjectMapper();

private final SummonerRepository summonerRepository;

private final MatchIdRepository matchIdRepository;
private final CloseableHttpClient httpClient = HttpClients.createDefault();

@Value("${riot.api.key}")
private String myKey;

public Summoner callRiotAPISummonerByName(String summonerName) {
try {
HttpGet request = new HttpGet("https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/"+ summonerName + "?api_key=" + myKey);
try (CloseableHttpResponse response = httpClient.execute(request)) {
int statusCode = response.getStatusLine().getStatusCode();

if (statusCode != 200) {
throw new NullPointerException("해당 아이디는 존재하지 않습니다.");
}
HttpEntity entity = response.getEntity();
SummonerResponseDto summonerResponseDto = objectMapper.readValue(entity.getContent(), SummonerResponseDto.class);

if(summonerRepository.existsById(summonerResponseDto.getId())){
return summonerRepository.findById(summonerResponseDto.getId()).orElseThrow(() ->
new NullPointerException("해당 아이디는 존재하지 않습니다."));

}
Summoner summoner = new Summoner(summonerResponseDto.getId(), summonerResponseDto.getProfileIconId(),
summonerResponseDto.getPuuid(),summonerResponseDto.getName(), summonerResponseDto.getSummonerLevel());

summonerRepository.save(summoner);
return summoner;
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
}

public List<MatchId> getMatchIds(String puuid) {
try {
HttpGet request = new HttpGet("https://asia.api.riotgames.com/lol/match/v5/matches/by-puuid/" + puuid + "/ids?start=0&count=20" + "&api_key=" + myKey);
try (CloseableHttpResponse response = httpClient.execute(request)) {

int statusCode = response.getStatusLine().getStatusCode();

if (statusCode != 200) {
throw new NullPointerException("해당 puuid가 존재하지 않습니다..");
}

HttpEntity entity = response.getEntity();
List<String> matchIdList = objectMapper.readValue(entity.getContent(), List.class);

Summoner summoner = summonerRepository.findByPuuid(puuid).orElseThrow(() ->
new NullPointerException("해당 아이디는 존재하지 않습니다."));

// matchIds를 설정할 때 builder() 대신에 set 메서드를 사용하여 id를 할당
summoner.setMatchIds(matchIdList.stream()
.map(matchId -> new MatchId(matchId, summoner))
.collect(Collectors.toList()));

summonerRepository.save(summoner);

// MatchId 저장 부분도 변경
List<MatchId> savedMatchIds = matchIdRepository.saveAll(
matchIdList.stream()
.map(matchIdStr -> new MatchId(matchIdStr, summoner))
.collect(Collectors.toList())
);

return savedMatchIds;
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
4 changes: 3 additions & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,6 @@ spring.security.oauth2.client.registration.google.client-id=183395526084-pgrgikh
spring.security.oauth2.client.registration.google.client-secret=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
spring.security.oauth2.client.registration.google.scope=email,profile

spring.profiles.include=oauth
spring.profiles.include=oauth

riot.api.key=RGAPI-38558dc3-3e7b-4dca-85db-45998f8484c3