-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #173 from IT-Cotato/feature/144-refactor-query
Feature: Member, Room, MemberRoom, Place 더미데이터 생성 로직 구현
- Loading branch information
Showing
4 changed files
with
204 additions
and
0 deletions.
There are no files selected for viewing
22 changes: 22 additions & 0 deletions
22
backend/src/main/java/middle_point_search/backend/common/dummy/DataInitConfig.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package middle_point_search.backend.common.dummy; | ||
|
||
import org.springframework.boot.CommandLineRunner; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import middle_point_search.backend.domains.member.repository.MemberRepository; | ||
|
||
@Configuration | ||
@RequiredArgsConstructor | ||
public class DataInitConfig { | ||
|
||
@Bean | ||
CommandLineRunner initData(MemberRepository memberRepo, DataInitService dataInitService) { | ||
return args -> { | ||
if (memberRepo.count() == 0) { | ||
dataInitService.initializeData(); | ||
} | ||
}; | ||
} | ||
} |
94 changes: 94 additions & 0 deletions
94
backend/src/main/java/middle_point_search/backend/common/dummy/DataInitService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
package middle_point_search.backend.common.dummy; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
import org.springframework.security.crypto.password.PasswordEncoder; | ||
import org.springframework.stereotype.Service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import middle_point_search.backend.common.dummy.repository.JDBCRepository; | ||
import middle_point_search.backend.domains.member.domain.Member; | ||
import middle_point_search.backend.domains.member.domain.Role; | ||
import middle_point_search.backend.domains.member.repository.MemberRepository; | ||
import middle_point_search.backend.domains.memberRoom.domain.MemberRoom; | ||
import middle_point_search.backend.domains.place.domain.Place; | ||
import middle_point_search.backend.domains.room.domain.Room; | ||
|
||
@Slf4j | ||
@Service | ||
@RequiredArgsConstructor | ||
public class DataInitService { | ||
|
||
private final PasswordEncoder passwordEncoder; | ||
private final JDBCRepository JDBCRepository; | ||
private final MemberRepository memberRepository; | ||
|
||
public void initializeData() { | ||
log.info("DataInitService.initializeData ======================"); | ||
|
||
// 시간 재기 추후 삭제 | ||
long startTime = System.currentTimeMillis(); | ||
|
||
// Members 생성 | ||
List<Member> members = new ArrayList<>(); | ||
String password = passwordEncoder.encode("1234"); | ||
for (int i = 1; i <= 500000; i++) { | ||
Member member = Member.createWithoutAddress( | ||
"user" + i + "@test.com", | ||
password, | ||
"user" + i, | ||
Role.USER); | ||
members.add(member); | ||
} | ||
JDBCRepository.saveAllMembers(members); | ||
|
||
members = memberRepository.findAll(); // 엔티티 조회 | ||
|
||
// Rooms 생성 | ||
List<Room> rooms = new ArrayList<>(); | ||
for (int i = 1; i <= 1; i++) { | ||
Room room = Room.builder() | ||
.id(String.valueOf(i)) | ||
.name("room" + i) | ||
.memo("memo" + i) | ||
.build(); | ||
rooms.add(room); | ||
} | ||
JDBCRepository.saveAllRooms(rooms); | ||
|
||
// MemberRooms 생성 | ||
List<MemberRoom> memberRooms = new ArrayList<>(); | ||
for (int i = 1; i <= 500000; i++) { | ||
MemberRoom memberRoom = MemberRoom.builder() | ||
.member(members.get(i - 1)) | ||
.room(rooms.get(i - 1)) | ||
.build(); | ||
memberRooms.add(memberRoom); | ||
} | ||
JDBCRepository.saveAllMemberRooms(memberRooms); | ||
|
||
// Places 생성 | ||
List<Place> places = new ArrayList<>(); | ||
for (int i = 1; i <= 500000; i++) { | ||
Place place = Place.builder() | ||
.siDo("siDo" + i) | ||
.siGunGu("siGunGu" + i) | ||
.roadNameAddress("roadNameAddress" + i) | ||
.addressLatitude(37.0 + i * 0.0001) | ||
.addressLongitude(127.0 + i * 0.0001) | ||
.room(rooms.get(i - 1)) | ||
.member(members.get(i - 1)) | ||
.googlePlaceId("googlePlaceId" + i) | ||
.build(); | ||
places.add(place); | ||
} | ||
JDBCRepository.saveAllPlaces(places); | ||
|
||
// 시간 재기, 추후 삭제 | ||
long endTime = System.currentTimeMillis(); | ||
long duration = endTime - startTime; | ||
log.info("Data initialization took " + duration + " milliseconds"); | ||
} | ||
} |
86 changes: 86 additions & 0 deletions
86
...end/src/main/java/middle_point_search/backend/common/dummy/repository/JDBCRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
package middle_point_search.backend.common.dummy.repository; | ||
|
||
import java.sql.PreparedStatement; | ||
import java.util.List; | ||
|
||
import org.springframework.jdbc.core.JdbcTemplate; | ||
import org.springframework.stereotype.Repository; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import middle_point_search.backend.domains.member.domain.Member; | ||
import middle_point_search.backend.domains.memberRoom.domain.MemberRoom; | ||
import middle_point_search.backend.domains.place.domain.Place; | ||
import middle_point_search.backend.domains.room.domain.Room; | ||
|
||
@Repository | ||
@RequiredArgsConstructor | ||
public class JDBCRepository { | ||
|
||
private final JdbcTemplate jdbcTemplate; | ||
|
||
// 모든 멤버 bulk 저장 | ||
public void saveAllMembers(List<Member> members) { | ||
String sql = "INSERT INTO member (email, pw, name, role, exist_address) " + | ||
"VALUES (?, ?, ?, ?, ?)"; | ||
|
||
jdbcTemplate.batchUpdate(sql, | ||
members, | ||
members.size(), | ||
(PreparedStatement ps, Member member) -> { | ||
ps.setString(1, member.getEmail()); | ||
ps.setString(2, member.getPw()); | ||
ps.setString(3, member.getName()); | ||
ps.setString(4, member.getRole().name()); | ||
ps.setBoolean(5, member.getExistAddress()); | ||
}); | ||
} | ||
|
||
// 모든 방 bulk 저장 | ||
public void saveAllRooms(List<Room> rooms) { | ||
String sql = "INSERT INTO room (room_id, room_name, room_memo) " + | ||
"VALUES (?, ?, ?)"; | ||
|
||
jdbcTemplate.batchUpdate(sql, | ||
rooms, | ||
rooms.size(), | ||
(PreparedStatement ps, Room room) -> { | ||
ps.setString(1, room.getId()); | ||
ps.setString(2, room.getName()); | ||
ps.setString(3, room.getMemo()); | ||
}); | ||
} | ||
|
||
// 모든 멤버 방 bulk 저장 | ||
public void saveAllMemberRooms(List<MemberRoom> memberRooms) { | ||
String sql = "INSERT INTO member_room (member_id, room_id) " + | ||
"VALUES (?, ?)"; | ||
|
||
jdbcTemplate.batchUpdate(sql, | ||
memberRooms, | ||
memberRooms.size(), | ||
(PreparedStatement ps, MemberRoom memberRoom) -> { | ||
ps.setLong(1, memberRoom.getMember().getId()); | ||
ps.setString(2, memberRoom.getRoom().getId()); | ||
}); | ||
} | ||
|
||
// 모든 Place bulk 저장 | ||
public void saveAllPlaces(List<Place> places) { | ||
String sql = "INSERT INTO place (si_do, si_gun_gu, road_name_address, address_latitude, address_longitude, room_id, member_id, google_place_id) " + | ||
"VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; | ||
|
||
jdbcTemplate.batchUpdate(sql, | ||
places, | ||
places.size(), | ||
(PreparedStatement ps, Place place) -> { | ||
ps.setString(1, place.getSiDo()); | ||
ps.setString(2, place.getSiGunGu()); | ||
ps.setString(3, place.getRoadNameAddress()); | ||
ps.setDouble(4, place.getAddressLatitude()); | ||
ps.setDouble(5, place.getAddressLongitude()); | ||
ps.setString(6, place.getRoom().getId()); | ||
ps.setLong(7, place.getMember().getId()); | ||
ps.setString(8, place.getGooglePlaceId()); | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters