public class NaverService : INaverService
{
private readonly DBContext _dBContext;
public NaverService(DBContext dbContext)
{
_dBContext = dbContext;
}
public async Task<List<NaverEnginePage>> GetNaverEpProductInfo()
{
var connection = _dBContext.Database.GetDbConnection();
if (connection.State == ConnectionState.Closed) connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = "User Storage Procedure Name";
command.CommandType = CommandType.StoredProcedure;
var products = new List<NaverEnginePage>();
using (var reader = await command.ExecuteReaderAsync())
{
while (reader.Read())
{
products.Add(new NaverEnginePage()
{
id = reader["id"].ToString(),
title = reader["title"].ToString(),
price_pc = (int)reader["price_pc"],
link = reader["link"].ToString(),
image_link = reader["image_link"].ToString(),
category_name1 = reader["category_name1"].ToString(),
shipping = reader["shipping"].ToString()
});
}
}
return products;
}
}
}
- DB관련이나 PROC Name 같은거는 임의로 대체해서 서술
- 엔티티로 선언 후 해당 상품에 관련 정보를 add 시킴.
[HttpGet(ApiRoutes.Naver.GetNaverEpProductInfo)]
public async Task<IActionResult> GetNaverEpProductInfo()
{
var products = await _naverService.GetNaverEpProductInfo();
var tsv = new StringBuilder();
tsv.AppendLine("id\ttitle\tprice_pc\tlink\timage_link\tcategory_name1\tshipping");
foreach (var product in products)
{
tsv.AppendLine($"{product.id}\t{product.title}\t{product.price_pc}\t{product.link}\t{product.image_link}\t{product.category_name1}\t{product.shipping}");
}
return Content(tsv.ToString(), "text/plain", new UTF8Encoding(false));
}
- 해당 경로에서 .tsv 형식으로 만들어면 txt파일을 다운로드 받을수 있게 해야한다고 가이드에서 유도하기에
StringBuilder로 Append 하여 컬럼과 내용을 K=V 처럼 맞춰서 foreach 진행 - return할시 text/plain으로 형식을 맞춰서 내보냄