오늘 공부한 내용은 나만의 맛집 리스트 프로젝트를 진행하기 위해 필요한 데이터베이스를 mySQL과 같이
데이터베이스 관리 시스템을 사용하지 않고 ArrayList를 이용해 JPA를 흉내내는 데이터베이스를 사용하였다.
MemoryDbEntity.java
package com.example.restaurant.db;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class MemoryDbEntity {
protected int index;
}
MemoryDbRepositoryAbstract.java
package com.example.restaurant.db;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
abstract public class MemoryDbRepositoryAbstract<T extends MemoryDbEntity> implements MemoryDbRepositoryIfs<T>{
private final List<T> db = new ArrayList<>();
private int index = 0;
@Override
public Optional<T> findById(int index) {
return db.stream().filter(it -> it.getIndex() == index).findFirst();
}
@Override
public T save(T entity) {
var optionalEntity = db.stream().filter(it -> it.getIndex() == entity.getIndex()).findFirst();
if(optionalEntity.isEmpty()) {// db에 이미 데이터가 있는 경우
index++;
entity.setIndex(index);
db.add(entity);
return entity;
} else { // db에 데이터가 없는 경우
var preIndex = optionalEntity.get().getIndex();
entity.setIndex(preIndex);
deleteById(preIndex);
db.add(entity);
return entity;
}
}
@Override
public void deleteById(int index) {
var optionalEntity = db.stream().filter(it -> it.getIndex() == index).findFirst();
if(optionalEntity.isPresent()) {
db.remove(optionalEntity.get());
}
}
@Override
public List<T> listAll() {
return db;
}
}
MemoryDbRepositoryIfs.java
package com.example.restaurant.db;
import java.util.List;
import java.util.Optional;
public interface MemoryDbRepositoryIfs<T> {
Optional<T> findById(int index);
T save(T entity);
void deleteById(int index);
List<T> listAll();
}
WishListEntity.java
package com.example.restaurant.wishlist.entity;
import com.example.restaurant.db.MemoryDbEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class WishListEntity extends MemoryDbEntity {
private String title; // 음식명, 장소명
private String category; // 카테고리
private String address; // 주소
private String readAddress; // 도로명
private String homePageLink; // 홈페이지 주소
private String imageLink; // 음식, 가게 이미지 주소
private boolean isVisit; // 방문여부
private int visitCount; // 방문 카운트
private LocalDateTime lastVisitDate; // 마지막 방문일자
}
WishListRepository.java
package com.example.restaurant.wishlist.repository;
import com.example.restaurant.db.MemoryDbRepositoryAbstract;
import com.example.restaurant.wishlist.entity.WishListEntity;
import org.springframework.stereotype.Repository;
@Repository
public class WishListRepository extends MemoryDbRepositoryAbstract<WishListEntity> {
}
WishListRepositoryTest.java
package com.example.restaurant.wishlist.repository;
import com.example.restaurant.wishlist.entity.WishListEntity;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class WishListRepositoryTest {
@Autowired
private WishListRepository wishListRepository;
private WishListEntity create() {
var wishList = new WishListEntity();
wishList.setTitle("title");
wishList.setCategory("category");
wishList.setAddress("address");
wishList.setReadAddress("readAddress");
wishList.setHomePageLink("");
wishList.setImageLink("");
wishList.setVisit(false);
wishList.setVisitCount(0);
wishList.setLastVisitDate(null);
return wishList;
}
@Test
public void saveTest() {
var wishListEntity = create();
var expected = wishListRepository.save(wishListEntity);
Assertions.assertNotNull(expected);
Assertions.assertEquals(1, expected.getIndex());
}
@Test
public void updateTest() {
var wishListEntity = create();
var expected = wishListRepository.save(wishListEntity);
expected.setTitle("update test");
var saveEntity = wishListRepository.save(expected);
Assertions.assertEquals("update test", saveEntity.getTitle());
Assertions.assertEquals(1, wishListRepository.listAll().size());
}
@Test
public void findByIdTest() {
var wishListEntity = create();
wishListRepository.save(wishListEntity);
var expected = wishListRepository.findById(1);
Assertions.assertEquals(true, expected.isPresent());
Assertions.assertEquals(1, expected.get().getIndex());
}
@Test
public void deleteTest() {
var wishListEntity = create();
wishListRepository.save(wishListEntity);
wishListRepository.deleteById(1);
int count = wishListRepository.listAll().size();
Assertions.assertEquals(0, count);
}
@Test
public void listAllTest() {
var wishListEntity1 = create();
wishListRepository.save(wishListEntity1);
var wishListEntity2 = create();
wishListRepository.save(wishListEntity2);
int count = wishListRepository.listAll().size();
Assertions.assertEquals(2, count);
}
}
오늘 공부한 내용은 여기까지 이다. 다음 시간에는 프로젝트에 필요한 REST API를 가발하는 공부를 진행하겠다.
다음시간에 봐용 ~~
'Spring Boot > naver-api 프로젝트' 카테고리의 다른 글
naver-api 연동하기 (0) | 2023.04.22 |
---|