diff --git a/src/main/java/com/example/oneul/domain/post/dao/PostCommandJdbcRespositoryImpl.java b/src/main/java/com/example/oneul/domain/post/dao/PostCommandJdbcRespositoryImpl.java deleted file mode 100644 index 0fa19ca..0000000 --- a/src/main/java/com/example/oneul/domain/post/dao/PostCommandJdbcRespositoryImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.example.oneul.domain.post.dao; - - -import java.util.HashMap; -import java.util.Map; - -import javax.sql.DataSource; - -import com.example.oneul.domain.post.domain.Post; - -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; -import org.springframework.jdbc.core.simple.SimpleJdbcInsert; - -public class PostCommandJdbcRespositoryImpl implements PostCommandRepository { - private final JdbcTemplate jdbcTemplate; - - public PostCommandJdbcRespositoryImpl(DataSource dataSource){ - this.jdbcTemplate = new JdbcTemplate(dataSource); - } - - @Override - public Post save(Post post){ - SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate); - jdbcInsert.withTableName("post").usingGeneratedKeyColumns("id"); - - Map parameters = new HashMap<>(); - parameters.put("content", post.getContent()); - parameters.put("writer", post.getWriter()); - Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters)); - post.setId(key.longValue()); - - return new Post(); - } - - @Override - public Post update(Post post){ - return new Post(); - } - - @Override - public void deleteById(Long id){ - - } - - @Override - public void delete(Post post){ - - } -} diff --git a/src/main/java/com/example/oneul/domain/post/dao/PostCommandJpaRepositoryImpl.java b/src/main/java/com/example/oneul/domain/post/dao/PostCommandJpaRepositoryImpl.java deleted file mode 100644 index c2e090e..0000000 --- a/src/main/java/com/example/oneul/domain/post/dao/PostCommandJpaRepositoryImpl.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.example.oneul.domain.post.dao; - -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.LockModeType; -import javax.transaction.Transactional; - -import com.example.oneul.domain.post.domain.Post; - -import org.springframework.data.jpa.repository.Lock; -import org.springframework.stereotype.Repository; - -@Repository -@Transactional -public class PostCommandJpaRepositoryImpl implements PostCommandRepository { - private final EntityManager em; - - public PostCommandJpaRepositoryImpl(EntityManagerFactory entityManagerFactory){ - this.em = entityManagerFactory.createEntityManager(); - } - - @Override - public Post save(Post post) { - em.persist(post); - return post; - } - - @Override - @Lock(LockModeType.PESSIMISTIC_WRITE) - public Post update(Post post){ - return em.merge(post); - } - - @Override - public void deleteById(Long id){ - Post post = em.createQuery("select p from Post p where p.id = :id", Post.class) - .setParameter("id", id) - .getSingleResult(); - delete(post); - } - - @Override - public void delete(Post post){ - em.remove(post); - } -} diff --git a/src/main/java/com/example/oneul/domain/post/dao/PostCommandRepository.java b/src/main/java/com/example/oneul/domain/post/dao/PostCommandRepository.java index 67b2060..b31d76b 100644 --- a/src/main/java/com/example/oneul/domain/post/dao/PostCommandRepository.java +++ b/src/main/java/com/example/oneul/domain/post/dao/PostCommandRepository.java @@ -2,9 +2,10 @@ package com.example.oneul.domain.post.dao; import com.example.oneul.domain.post.domain.Post; -public interface PostCommandRepository{ +import org.springframework.data.repository.CrudRepository; + +public interface PostCommandRepository extends CrudRepository { Post save(Post post); - Post update(Post post); void deleteById(Long id); void delete(Post post); } diff --git a/src/main/java/com/example/oneul/domain/post/domain/Post.java b/src/main/java/com/example/oneul/domain/post/domain/Post.java index 40e3731..6e13b8a 100644 --- a/src/main/java/com/example/oneul/domain/post/domain/Post.java +++ b/src/main/java/com/example/oneul/domain/post/domain/Post.java @@ -10,6 +10,7 @@ import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; @@ -21,7 +22,7 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener; @Entity @EntityListeners(AuditingEntityListener.class) public class Post { - @Id @GeneratedValue + @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @CreatedDate private LocalDateTime createdAt; diff --git a/src/main/java/com/example/oneul/global/config/JdbcConfig.java b/src/main/java/com/example/oneul/global/config/JdbcConfig.java deleted file mode 100644 index 8fbb50e..0000000 --- a/src/main/java/com/example/oneul/global/config/JdbcConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.oneul.global.config; - -import javax.sql.DataSource; - -import com.example.oneul.domain.post.dao.PostCommandJdbcRespositoryImpl; -import com.example.oneul.domain.post.dao.PostCommandRepository; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JdbcConfig { - private final DataSource dataSource; - - public JdbcConfig(DataSource dataSource){ - this.dataSource = dataSource; - } - - @Bean - public PostCommandRepository postCommandRepository(){ - return new PostCommandJdbcRespositoryImpl(dataSource); - } -} diff --git a/src/test/java/com/example/oneul/repository/PostCommandRepositoryTest.java b/src/test/java/com/example/oneul/repository/PostCommandRepositoryTest.java index f60485f..f57c0e8 100644 --- a/src/test/java/com/example/oneul/repository/PostCommandRepositoryTest.java +++ b/src/test/java/com/example/oneul/repository/PostCommandRepositoryTest.java @@ -7,14 +7,10 @@ import com.example.oneul.domain.post.dao.PostQueryRepository; import com.example.oneul.domain.post.domain.Post; import com.example.oneul.domain.user.dao.UserRepository; import com.example.oneul.domain.user.domain.UserEntity; -import com.example.oneul.global.config.JdbcConfig; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.test.context.ActiveProfiles; import org.testcontainers.containers.GenericContainer; import org.testcontainers.junit.jupiter.Testcontainers; @@ -23,7 +19,7 @@ import org.testcontainers.junit.jupiter.Testcontainers; @ActiveProfiles("test") @SpringBootTest public class PostCommandRepositoryTest { - private PostCommandRepository postCommandRepository; + @Autowired private PostCommandRepository postCommandRepository; @Autowired private PostQueryRepository postQueryRepository; @Autowired private UserRepository userRepository; @@ -35,23 +31,18 @@ public class PostCommandRepositoryTest { System.setProperty("spring.redis.host", redis.getContainerIpAddress()); System.setProperty("spring.redis.port", redis.getFirstMappedPort() + ""); } - - @BeforeAll - public void init(){ - ApplicationContext ac = new AnnotationConfigApplicationContext(JdbcConfig.class); - postCommandRepository = ac.getBean("postCommandRepository", PostCommandRepository.class); - } - private UserEntity createTestUser(){ - return userRepository.save(UserEntity.builder() - .username("test user") + private UserEntity getOrCreateTestUser(){ + return userRepository.findByUsername("test_user").orElseGet(() -> + userRepository.save(UserEntity.builder() + .username("test_user") .password("test pw") - .build()); + .build())); } @Test public void saveTest(){ - UserEntity testUser = createTestUser(); + UserEntity testUser = getOrCreateTestUser(); Post post = Post.builder() .content("test content") @@ -66,7 +57,7 @@ public class PostCommandRepositoryTest { @Test public void updateTest(){ - UserEntity testUser = createTestUser(); + UserEntity testUser = getOrCreateTestUser(); Post post = Post.builder() .content("test content") @@ -76,28 +67,14 @@ public class PostCommandRepositoryTest { Post createdPost = postCommandRepository.save(post); createdPost.setConent("updated"); - Post updatedPost = postCommandRepository.update(createdPost); - - assertEquals(createdPost, updatedPost);; - } - - // TODO: 왜 Transaction이 없다고 할까 - @Test - public void deleteTest(){ - UserEntity testUser = createTestUser(); - - Post post = Post.builder() - .content("test content") - .writer(testUser) - .build(); - - Post createdPost = postCommandRepository.save(post); - postCommandRepository.delete(createdPost); + Post updatedPost = postCommandRepository.save(createdPost); + Post savedPost = postQueryRepository.findById(updatedPost.getId()).orElse(null); + assertEquals(updatedPost, savedPost); } @Test public void deleteByIdTest(){ - UserEntity testUser = createTestUser(); + UserEntity testUser = getOrCreateTestUser(); Post post = Post.builder() .content("test content") @@ -107,5 +84,6 @@ public class PostCommandRepositoryTest { Post createdPost = postCommandRepository.save(post); System.out.println("post id: " + post.getId()); postCommandRepository.deleteById(createdPost.getId()); + } }