Skip to content

Commit

Permalink
Merge pull request #173 from IT-Cotato/feature/144-refactor-query
Browse files Browse the repository at this point in the history
Feature: Member, Room, MemberRoom, Place 더미데이터 생성 로직 구현
  • Loading branch information
yooooonshine authored Feb 20, 2025
2 parents 29f1075 + 011803f commit 4649184
Show file tree
Hide file tree
Showing 4 changed files with 204 additions and 0 deletions.
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();
}
};
}
}
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");
}
}
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());
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import middle_point_search.backend.domains.member.domain.Member;
Expand Down Expand Up @@ -51,6 +52,7 @@ public class Place {
@Column(nullable = false)
private String googlePlaceId;

@Builder
private Place(String siDo, String siGunGu, String roadNameAddress, Double addressLatitude,
Double addressLongitude, Room room, Member member, String googlePlaceId) {
this.siDo = siDo;
Expand Down

0 comments on commit 4649184

Please sign in to comment.