Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -1,14 +1,43 @@
package com.back.together02be.asset.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.back.together02be.asset.dto.response.StockInfoRes;
import com.back.together02be.asset.dto.response.TotalPurchaseRes;
import com.back.together02be.asset.repository.UserStockRepository;
import com.back.together02be.asset.service.AssetService;
import com.back.together02be.global.apiRes.ApiRes;
import com.back.together02be.users.service.UsersService;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.web.bind.annotation.*;

import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;

import java.util.List;
import java.util.Map;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/asset")
@Tag(name = "AssetController", description = "์ž์‚ฐ API")
public class AssetController {
private final AssetService assetService;
private final UsersService usersService;


@GetMapping("/accounts/{userId}")
@Operation(summary = "์ด ๋งค์ˆ˜๊ธˆ ์กฐํšŒ")
public ApiRes<TotalPurchaseRes> totalPrice(@PathVariable long userId){
//์ธ์ฆ๋œ ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
//Users actor= rq.getActor();
//userId = 1L;
//์ด๋งค์ˆ˜์•ก ๊ฐ€์ ธ์˜ค๊ธฐ
long totalPurchase = assetService.getTotalAmountByUserId(userId);
List<StockInfoRes> stockInfos = assetService.getStockInfo(userId);

return new ApiRes<>(
"์กฐํšŒ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.",
new TotalPurchaseRes(totalPurchase,stockInfos)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.back.together02be.asset.dto.response;

public record StockInfoRes(
String stockCode,
long quantity
) { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.back.together02be.asset.dto.response;

import com.back.together02be.asset.controller.AssetController;

import java.util.List;

public record TotalPurchaseRes(
long totalAmount,
List<StockInfoRes> stocks
) { }
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.back.together02be.asset.enitity;
package com.back.together02be.asset.entity;

import com.back.together02be.global.entity.BaseEntity;
import com.back.together02be.users.enitity.Users;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.back.together02be.asset.enitity;
package com.back.together02be.asset.entity;

import com.back.together02be.global.entity.BaseEntity;
import com.back.together02be.stock.enitity.Stock;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.back.together02be.asset.repository;

import com.back.together02be.asset.entity.UserAccount;
import org.springframework.data.jpa.repository.JpaRepository;

import com.back.together02be.asset.enitity.UserAccount;
import java.util.Optional;

public interface UserAccountRepository extends JpaRepository<UserAccount, Long> {
Optional<UserAccount> findByUsersId(Long usersId);
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package com.back.together02be.asset.repository;

import com.back.together02be.asset.entity.UserStock;
import org.springframework.data.jpa.repository.JpaRepository;

import com.back.together02be.asset.enitity.UserAccount;
import com.back.together02be.asset.entity.UserAccount;

public interface UserStockRepository extends JpaRepository<UserAccount, Long> {
import java.util.List;

public interface UserStockRepository extends JpaRepository<UserStock, Long> {
public List<UserStock> findAllByUsersId(Long userId);
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,31 @@
package com.back.together02be.asset.service;

import com.back.together02be.asset.dto.response.StockInfoRes;
import com.back.together02be.asset.entity.UserStock;
import com.back.together02be.asset.repository.UserAccountRepository;
import com.back.together02be.asset.repository.UserStockRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import lombok.RequiredArgsConstructor;
import java.util.List;

@Service
@RequiredArgsConstructor
public class AssetService {
private final UserAccountRepository userAccountRepository;
private final UserStockRepository userStockRepository;
public long getTotalAmountByUserId(long userId){
return userAccountRepository.findByUsersId(userId)
.orElseThrow(()->new RuntimeException("๊ณ„์ขŒ ์—†์Œ"))
.getTotalPurchase();
}
public List<StockInfoRes> getStockInfo(long userId){
List<UserStock> userStocks = userStockRepository.findAllByUsersId(userId);

List<StockInfoRes> stockInfos = userStocks.stream()
.map(us->new StockInfoRes(us.getStock().getStockCode(),us.getQuantity()))
.toList();

return stockInfos;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.back.together02be.asset.controller;

import com.back.together02be.asset.entity.UserAccount;
import com.back.together02be.asset.entity.UserStock;
import com.back.together02be.asset.repository.UserAccountRepository;
import com.back.together02be.asset.repository.UserStockRepository;
import com.back.together02be.stock.enitity.Stock;
import com.back.together02be.stock.repository.StockRepository;
import com.back.together02be.users.enitity.Users;
import com.back.together02be.users.repository.UsersRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc;
import org.springframework.test.web.servlet.MockMvc;

import java.util.List;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;

@SpringBootTest
@AutoConfigureMockMvc
public class AssetControllerTest {
@Autowired
private MockMvc mockMvc;

@Autowired
private UserAccountRepository userAccountRepository;
@Autowired
private UsersRepository usersRepository;
@Autowired
private StockRepository StockRepository;
@Autowired
private UserStockRepository userStockRepository;
@Autowired
private StockRepository stockRepository;

@BeforeEach
void setUp(){
Users testUser = new Users("user1","1234","my_nick");
usersRepository.save(testUser);

UserAccount testUserAccount = new UserAccount(testUser,10000L,1000000L);
userAccountRepository.save(testUserAccount);

Stock samsung = new Stock("005930", "์‚ผ์„ฑ์ „์ž","kospi");
Stock hynix = new Stock("000660", "SKํ•˜์ด๋‹‰์Šค","kospi");
stockRepository.saveAll(List.of(samsung, hynix));

UserStock us1 = new UserStock(testUser, samsung, 10L, 5000L);
UserStock us2 = new UserStock(testUser, hynix, 2L, 10000L);
userStockRepository.saveAll(List.of(us1,us2));
}

@Test
@DisplayName("์ด๋งค์ˆ˜๊ธˆ ๋ฐ ๋ณด์œ  ์ฃผ์‹ ๋ชฉ๋ก ์กฐํšŒ ํ…Œ์ŠคํŠธ")
void test1() throws Exception{
mockMvc.perform(get("/api/asset/accounts/1"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.data.totalAmount").value(10000L))
// 2. ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ ๊ฒ€์ฆ
.andExpect(jsonPath("$.data.stocks.length()").value(2))
// 3. ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ (์‚ผ์„ฑ์ „์ž)
.andExpect(jsonPath("$.data.stocks[0].stockCode").value("005930"))
.andExpect(jsonPath("$.data.stocks[0].quantity").value(10))
// 4. ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ (SKํ•˜์ด๋‹‰์Šค)
.andExpect(jsonPath("$.data.stocks[1].stockCode").value("000660"))
.andExpect(jsonPath("$.data.stocks[1].quantity").value(2));
}
}