๋ฐฐ๊ฒฝ
์ ํฌ ๋ชจ๋ฝ ์๋น์ค์์๋ โ์ญํ ์ ํ๊ธฐโ ๋ผ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ฐ์ผ๋ฆฌ ๋ง์คํฐ, ์๊ธฐ ๋ฑ ๊ทธ๋ฃน ๋ณ๋ก ๋ฑ๋กํ ์ญํ ๋ค์ ๋๋ค์ผ๋ก ์ ํด์ฃผ๋ ๊ธฐ๋ฅ์
๋๋ค. ์ญํ ์ ํ๊ธฐ์ ํ์ด์ง์์ ์ญํ ์ ํ๊ธฐ๋ฅผ ํด๋ฆญํ๋ฉด ๊ฐ ๊ทธ๋ฃน๋ง๋ค ์ ์ฅํ ์ญํ ์ ํ์๋ค๊ณผ ๋งค์นญ์์ผ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ญํ ์ ํ๊ธฐ ํ์คํ ๋ฆฌ๋ฅผ ์กฐํํ๋ API ๋ ์์ต๋๋ค. ์ด API ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ณต์กํ๊ธฐ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ JPA ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๋์ query dsl ์ ์ด์ฉํ์ฌ ํ๋ฐฉ ์ฟผ๋ฆฌ๋ก ๋ณด๋ด๊ณ ์์์ต๋๋ค. ์ด ํ๋ฐฉ ์ฟผ๋ฆฌ๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ 2๊ฐ๊ฐ ์์ฑ๋๊ณ ์์๊ณ ํด๋น ์ฟผ๋ฆฌ๋ก ์ธํด ์ฑ๋ฅ์ด ์ข์ง ์์๋๋ฐ์. ์ด ํ๋ฐฉ ์ฟผ๋ฆฌ์ ๋ํด ๋ถ์์ ํด๋ณด๊ณ ๋ ๋์ ๋ฐฉํฅ์ ์ฐพ์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ํ
ํด๋น ๊ธฐ๋ฅ์ erd ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ญํ ์ ํ๊ธฐ๋ฅผ ํด๋ฆญํ๋ฉด ์ญํ ํ์คํ ๋ฆฌ ํ
์ด๋ธ์ ํด๋ฆญํ ์๊ฐ์ด ์ ์ฅ๋๊ณ , ๊ฐ๊ฐ์ ๋งค์นญ ๊ฒฐ๊ณผ๊ฐ ์ญํ ์ ํ๊ธฐ ๊ฒฐ๊ณผ ํ
์ด๋ธ์ ์ ์ฅ๋ฉ๋๋ค.
์ค๋ ๋ณ๊ฒฝํ๋ ค๋ API ๋ ์ญ๋ ๋งค์นญ ๊ธฐ๋ก์ ์กฐํํ๋ API ์
๋๋ค. ๋ฐ์ดํฐ ์ ์ฅ์ date time ํ์
์ผ๋ก ํ์ง๋ง, ๋น์ฆ๋์ค ์ ์ฑ
์ ์๋ต์์๋ ์ผ๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ ํํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋ ์ง์ ์ฌ๋ฌ ๊ธฐ๋ก์ด ์๋ค๋ฉด ํด๋น ๋ ์ง์ ๊ฐ์ฅ ๋ง์ง๋ง ๊ฒฐ๊ณผ๋ฅผ ์๋ตํฉ๋๋ค.
๋ก์ง
ํด๋น ๋ก์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1.
teamCode ๋ก role ์กฐํ
2.
์กฐํํ roleId ๊ฐ ํฌํจ๋ role history ๋ชฉ๋ก์ ์ผ๋ณ๋ก ๊ทธ๋ฃนํ/์ ๋ ฌํ๊ณ ์กฐํ
3.
์กฐํ๋ role history ๊ฐ ํฌํจ๋ role match result ๋ฅผ ์กฐํ
List<RoleHistory> roleHistories = jpaQueryFactory.selectFrom(roleHistory)
.join(roleHistory.matchResults).fetchJoin()
.where(roleHistory.id.in(
JPAExpressions.select(roleHistory.id.max())
.from(roleHistory)
.groupBy(toLocalDate())
.orderBy(toLocalDate().desc())
.where(roleHistory.roleId.eq(
JPAExpressions.select(role.id)
.from(role)
.where(role.teamCode.code.eq(teamCode))
))
))
.fetch();
Java
๋ณต์ฌ
2๊ฐ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํด ํ๋ฐฉ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆด ์ ์์์ต๋๋ค.
select
rolehistor0_.id as id1_8_,
rolehistor0_.date_time as date_tim2_8_,
rolehistor0_.role_id as role_id3_8_,
matchresul1_.role_history_id as role_his1_6_0__,
matchresul1_.member_id as member_i2_6_0__,
matchresul1_.role_name as role_nam3_6_0__
from
role_history rolehistor0_
inner join
role_match_result matchresul1_
on rolehistor0_.id=matchresul1_.role_history_id
where
rolehistor0_.id in (
select
max(rolehistor2_.id)
from
role_history rolehistor2_
where
rolehistor2_.role_id=(
select
role3_.id
from
role role3_
where
role3_.team_code='edenee17'
)
group by
date(rolehistor2_.date_time)
order by
date(rolehistor2_.date_time) desc)
SQL
๋ณต์ฌ
using where ๋ ์คํ ๋ฆฌ์ง ์์ง์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ ๋ค mysql ์์ง์ด ์ถ๊ฐ ์ฒดํฌ๋ฅผ ํตํด ํํฐ๋งํ๋ค๋ ์ ๋ณด์
๋๋ค.
date ์ ํ ์ด์
์ฟผ๋ฆฌ ์ ์
3.
์งง๊ฒ ์ฌ๋ฌ๋ฒ
select
role0_.id as id1_5_,
role0_.created_at as created_2_5_,
role0_.updated_at as updated_3_5_,
role0_.team_code as team_cod4_5_
from
role role0_
where
role0_.team_code='edenee1'
SQL
๋ณต์ฌ
select
max(rolehistor0_.id) as col_0_0_
from
role_history rolehistor0_
where
rolehistor0_.role_id=17
group by
dayofyear(rolehistor0_.date_time)
order by
dayofyear(rolehistor0_.date_time);
SQL
๋ณต์ฌ
select
rolehistor0_.id as id1_8_,
rolehistor0_.date_time as date_tim2_8_,
rolehistor0_.role_id as role_id3_8_
from
role_history rolehistor0_
where
rolehistor0_.id in (
50000 , 9350
)
SQL
๋ณต์ฌ
select
matchresul0_.role_history_id as role_his1_6_0_,
matchresul0_.member_id as member_i2_6_0_,
matchresul0_.role_name as role_nam3_6_0_
from
role_match_result matchresul0_
where
matchresul0_.role_history_id in (
50000 , 9350
)
SQL
๋ณต์ฌ