Files
new_apiServer_oms/src/main/java/com/bb/front/ApiFrontController.java

414 lines
13 KiB
Java
Raw Normal View History

2026-03-06 02:52:51 +08:00
package com.bb.front;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import org.codehaus.jettison.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import com.bb.exception.ApiException;
import com.bb.jwt.JwtClame;
import com.bb.jwt.JwtManager;
import com.bb.model.ApiResponse;
import com.bb.model.ApiVendorCompInfo;
import com.bb.model.Banner;
import com.bb.model.BoardListSearch;
import com.bb.model.CashSearch;
import com.bb.model.Member;
import com.bb.model.Site;
import com.bb.model.SiteSearch;
import com.bb.service.BoardService;
import com.bb.service.CashService;
import com.bb.service.CommonService;
import com.bb.service.UserService;
import com.bb.util.IPKit;
import io.jsonwebtoken.ExpiredJwtException;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@RestController
@Slf4j
@RequestMapping("/api")
@RequiredArgsConstructor
@SecurityRequirement(name = "Authorization")
public class ApiFrontController {
private final UserService userService;
private final CashService cashService;
private final BoardService boardService;
private final CommonService commonService;
@Autowired
RestTemplate restTemplate;
private final JwtManager jwtManager;
@GetMapping("/health")
public String health( HttpServletRequest request,ModelMap model) throws Exception {
return "alive";
}
@ResponseBody
@PostMapping(value="/main")
public ApiResponse main(@RequestHeader String token, HttpServletRequest request) throws Exception {
ApiResponse apiResponse = new ApiResponse();
try {
Site site = getSiteByCheck(request);
if(site==null) {
throw new ApiException("1000", "accessDinied");
}
JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token);
apiResponse.success();
} catch(ApiException e) {
log.error(e.toString());
apiResponse = e.getApiResponse();
} catch (Exception e) {
log.error(e.toString());
e.printStackTrace();
apiResponse.fail();
}
return apiResponse;
}
@ResponseBody
@PostMapping(value="/getToken")
public ApiResponse getToken(@RequestHeader String token, HttpServletRequest request) throws Exception {
ApiResponse apiResponse = new ApiResponse();
try {
Site site = getSiteByCheck(request);
if(site==null) {
throw new ApiException("1000", "accessDinied");
}
JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token);
JwtClame jwtinfo = new JwtClame();
jwtinfo.setSiteIdx(site.getSiteIdx());
jwtinfo.setSiteId(site.getSiteId());
jwtinfo.setMemId(tokenInfo.getMid());
jwtinfo.setMemIdx(tokenInfo.getMidx());
jwtinfo.setPartnerLevel(tokenInfo.getPartnerLevel());
int tokenValidationSec = commonService.getSiteLogoutTimeLimit(site.getSiteId());
log.info("#-getToken::tokenValidationSec: " + tokenValidationSec);
String tok = jwtManager.generateToken(jwtinfo, tokenValidationSec);
apiResponse.put("token", tok);
//로그인 로그 ,
try {
Map logParam = new HashMap();
logParam.put("siteId", site.getSiteId());
logParam.put("memId", tokenInfo.getMid());
logParam.put("logType", "TOKEN");
logParam.put("logoutYn", "");
logParam.put("logName", "로그인토큰");
logParam.put("logDesc", "토큰갱신");
logParam.put("regId", "");
logParam.put("regIp", IPKit.getIpAddressByRequest(request));
logParam.put("token", tok);
commonService.insertlog(logParam);
logParam.put("actionType", 2);
commonService.updateAcctionLog(logParam);
} catch(Exception e){System.out.print(e.toString());}
apiResponse.success();
} catch(ExpiredJwtException je) {
log.error("#-getToken::"+je.getMessage());
} catch(ApiException e) {
log.error("#-getToken::"+e.toString());
apiResponse = e.getApiResponse();
} catch (Exception e) {
log.error("#-getToken::"+e.toString());
e.printStackTrace();
apiResponse.fail();
}
return apiResponse;
}
@SecurityRequirement(name = "Authorization")
@ResponseBody
@PostMapping(value="/main/popupList")
public ApiResponse popupList(@RequestHeader String token, HttpServletRequest request) throws Exception {
ApiResponse apiResponse = new ApiResponse();
try {
if(token==null) {
throw new ApiException("1000", "accessDinied");
}
JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token);
SiteSearch paramSite = new SiteSearch();
paramSite.setSiteId(tokenInfo.getSid());
List<Banner> popupList = commonService.getLoginPopupList(paramSite);
apiResponse.put("list", popupList);
apiResponse.success();
} catch(ApiException e) {
log.error(e.toString());
apiResponse = e.getApiResponse();
} catch (Exception e) {
log.error(e.toString());
e.printStackTrace();
apiResponse.fail();
}
return apiResponse;
}
@ResponseBody
@PostMapping(value="/main/cashList")
public ApiResponse cashList(HttpServletRequest request) throws Exception {
ApiResponse apiResponse = new ApiResponse();
try {
Site site = getSiteByCheck(request);
if(site==null) {
throw new ApiException("1000", "accessDinied");
}
CashSearch inParam = new CashSearch();
inParam.setSiteId(site.getSiteId());
inParam.setCashType("1");
List<HashMap<String, String>> cashInList = cashService.getMainCashList(inParam);
CashSearch outParam = new CashSearch();
outParam.setSiteId(site.getSiteId());
outParam.setCashType("-1");
List<HashMap<String, String>> cashOutList = cashService.getMainCashList(outParam);
apiResponse.put("cashInList", cashInList);
apiResponse.put("cashOutList", cashOutList);
apiResponse.success();
} catch(ApiException e) {
log.error(e.toString());
apiResponse = e.getApiResponse();
} catch (Exception e) {
log.error(e.toString());
e.printStackTrace();
apiResponse.fail();
}
return apiResponse;
}
@ResponseBody
@PostMapping(value={"/main/nt/list"})
public ApiResponse blist(HttpServletRequest request) throws Exception {
ApiResponse apiResponse = new ApiResponse();
try {
Site site = getSiteByCheck(request);
if(site==null) {
throw new ApiException("1000", "accessDinied");
}
BoardListSearch search = new BoardListSearch();
search.setSiteId(site.getSiteId());
List<HashMap<String, String>> boardList = boardService.getMainBoardList(search);
apiResponse.put("boardList", boardList);
apiResponse.success();
} catch(ApiException e) {
log.error(e.toString());
apiResponse = e.getApiResponse();
} catch (Exception e) {
log.error(e.toString());
e.printStackTrace();
apiResponse.fail();
}
return apiResponse;
}
@ResponseBody
@PostMapping(value={"/main/board/list"})
public ApiResponse blist2(HttpServletRequest request, @Valid @RequestBody BoardListSearch search) throws Exception {
ApiResponse apiResponse = new ApiResponse();
try {
Site site = getSiteByCheck(request);
if(site==null) {
throw new ApiException("1000", "accessDinied");
}
search.setSiteId(site.getSiteId());
log.info("#-MAIN::blist2::"+site.getSiteId()+"::: BoardListSearch : " + search);
List<HashMap<String, String>> boardList = boardService.getMainBoardList2(search);
apiResponse.put("boardList", boardList);
apiResponse.success();
} catch(ApiException e) {
log.error(e.toString());
apiResponse = e.getApiResponse();
} catch (Exception e) {
log.error(e.toString());
e.printStackTrace();
apiResponse.fail();
}
return apiResponse;
}
@ResponseBody
@PostMapping(value={"/isPlayGame"})
public ApiResponse isPlayGame(HttpServletRequest request, @RequestHeader String token) throws Exception {
ApiResponse apiResponse = new ApiResponse();
try {
if(token==null) {
throw new ApiException("1000", "accessDinied");
}
JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token);
Member search = new Member();
search.setMemId(tokenInfo.getMid());
search.setSiteId(tokenInfo.getSid());
search.setIntervalTime(-120);
HashMap<String, String> lastGameInfo = userService.getLastGameInfo(search);
if(lastGameInfo != null && lastGameInfo.get("cashType").toString().equals("BET")) {
// Playing Game
apiResponse.put("isPlayGame", "Y");
} else {
// Not Playing Game
apiResponse.put("isPlayGame", "N");
}
apiResponse.success();
} catch(ApiException e) {
log.error(e.toString());
apiResponse = e.getApiResponse();
} catch (Exception e) {
log.error(e.toString());
e.printStackTrace();
apiResponse.fail();
}
return apiResponse;
}
@ResponseBody
@GetMapping(value={"/coin"})
public ApiResponse coin(HttpServletRequest request, @RequestHeader String token, @RequestParam String symbol) throws Exception {
ApiResponse apiResponse = new ApiResponse();
try {
if(token==null) {
throw new ApiException("1000", "accessDinied");
}
JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token);
final String LOG_PREFIX = "#-TRIPLE::COIN::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::";
log.info(LOG_PREFIX+ "Request symbol : " + symbol);
HashMap<String, String> param = new HashMap<String, String>();
param.put("siteId", tokenInfo.getSid());
param.put("apiVendorCode", "triple");
ApiVendorCompInfo vendorCompInfo = userService.getApiVendorCompInfo(param);
// 헤더에 토큰 세팅
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.set("User-Agent", "PostmanRuntime/7.28.4");
headers.set("Authorization", vendorCompInfo.getClientSecretKey());
headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8")));
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(vendorCompInfo.getApiUrl() + "/getToken");
HttpEntity<HashMap<String, String>> entity = new HttpEntity<>(null, headers);
ResponseEntity<String> tokenRes = restTemplate.postForEntity(builder.toUriString(), entity, String.class);
log.info(LOG_PREFIX+ "Token Response : " + tokenRes.getBody());
JSONObject tokenObj = new JSONObject(tokenRes.getBody());
String apiToken = tokenObj.getJSONObject("data").getString("token");
headers.set("token", apiToken);
builder = UriComponentsBuilder.fromHttpUrl(vendorCompInfo.getApiUrl() + "/coin?symbol=" + symbol + "&currency=usd");
entity = new HttpEntity<>(null, headers);
ResponseEntity<String> coinRes = restTemplate.postForEntity(builder.toUriString(), entity, String.class);
log.info(LOG_PREFIX+ "Coin Response : " + coinRes.getBody());
JSONObject resultObj = new JSONObject(coinRes.getBody());
JSONObject dataObj = resultObj.getJSONObject("data");
JSONObject infoObj = dataObj.getJSONObject("info");
String currencyUsd = infoObj.getString("currentPrice");
builder = UriComponentsBuilder.fromHttpUrl(vendorCompInfo.getApiUrl() + "/coin?symbol=" + symbol + "&currency=krw");
entity = new HttpEntity<>(null, headers);
coinRes = restTemplate.postForEntity(builder.toUriString(), entity, String.class);
log.info(LOG_PREFIX+ "Coin Response : " + coinRes.getBody());
resultObj = new JSONObject(coinRes.getBody());
dataObj = resultObj.getJSONObject("data");
infoObj = dataObj.getJSONObject("info");
String currencyKrw = infoObj.getString("currentPrice");
HashMap<String, String> dataMap = new HashMap<>();
dataMap.put("currencyUsd", currencyUsd);
dataMap.put("currencyKrw", currencyKrw);
apiResponse.put("info", dataMap);
apiResponse.success();
} catch(ApiException e) {
JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token);
final String LOG_PREFIX = "#-TRIPLE::COIN::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::";
log.error(e.toString());
apiResponse = e.getApiResponse();
} catch (Exception e) {
JwtManager.TokenInfo tokenInfo = jwtManager.getTokenInfo(token);
final String LOG_PREFIX = "#-TRIPLE::COIN::"+tokenInfo.getSid()+"::"+tokenInfo.getMid()+":::";
log.error(e.toString());
e.printStackTrace();
apiResponse.fail();
}
return apiResponse;
}
private Site getSiteByCheck(HttpServletRequest request) {
Site site = userService.getSiteInfoByKey(request.getHeader("Authorization").toString());
return site;
}
}