diff --git a/domain/src/main/java/nexters/payout/domain/portfolio/domain/Portfolio.java b/domain/src/main/java/nexters/payout/domain/portfolio/domain/Portfolio.java new file mode 100644 index 00000000..bee73dad --- /dev/null +++ b/domain/src/main/java/nexters/payout/domain/portfolio/domain/Portfolio.java @@ -0,0 +1,43 @@ +package nexters.payout.domain.portfolio.domain; + +import jakarta.persistence.CollectionTable; +import jakarta.persistence.ElementCollection; +import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import lombok.Getter; +import nexters.payout.domain.BaseEntity; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + + +@Entity +@Getter +public class Portfolio extends BaseEntity { + + @ElementCollection + @CollectionTable(name = "portfolio_stock", joinColumns = @JoinColumn(name = "portfolio_id")) + private List stocks = new ArrayList<>(); + private Instant expireAt; + + public Portfolio() { + super(null); + } + + public Portfolio(final UUID id, final Instant expireAt) { + super(id); + this.expireAt = expireAt; + } + + public Portfolio(final Instant expireAt, List stocks) { + super(null); + this.stocks = stocks; + this.expireAt = expireAt; + } + + public boolean isExpired() { + return expireAt.isAfter(Instant.now()); + } +} diff --git a/domain/src/main/java/nexters/payout/domain/portfolio/domain/PortfolioStock.java b/domain/src/main/java/nexters/payout/domain/portfolio/domain/PortfolioStock.java new file mode 100644 index 00000000..3bcdf104 --- /dev/null +++ b/domain/src/main/java/nexters/payout/domain/portfolio/domain/PortfolioStock.java @@ -0,0 +1,32 @@ +package nexters.payout.domain.portfolio.domain; + +import jakarta.persistence.Embeddable; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.UUID; + +@Embeddable +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class PortfolioStock { + + private UUID stockId; + private Integer shares; + + + public PortfolioStock(final UUID id, final UUID stockId, final Integer shares) { + this.stockId = stockId; + this.shares = shares; + } + + private PortfolioStock(final UUID stockId, final Integer shares) { + this.stockId = stockId; + this.shares = shares; + } + + public PortfolioStock create(final UUID portfolioId, final UUID stockId, final Integer shares) { + return new PortfolioStock(portfolioId, stockId, shares); + } +} diff --git a/domain/src/main/java/nexters/payout/domain/portfolio/domain/repository/PortfolioRepository.java b/domain/src/main/java/nexters/payout/domain/portfolio/domain/repository/PortfolioRepository.java new file mode 100644 index 00000000..e6a697d7 --- /dev/null +++ b/domain/src/main/java/nexters/payout/domain/portfolio/domain/repository/PortfolioRepository.java @@ -0,0 +1,10 @@ +package nexters.payout.domain.portfolio.domain.repository; + +import nexters.payout.domain.portfolio.domain.Portfolio; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.UUID; + +public interface PortfolioRepository extends JpaRepository { + +} diff --git a/domain/src/main/resources/db/migration/V5__add_portfolio.sql b/domain/src/main/resources/db/migration/V5__add_portfolio.sql new file mode 100644 index 00000000..40469046 --- /dev/null +++ b/domain/src/main/resources/db/migration/V5__add_portfolio.sql @@ -0,0 +1,16 @@ +create table portfolio +( + id binary (16) not null + primary key, + expire_at datetime(6), + created_at datetime(6), + last_modified_at datetime(6) +) engine = innodb + default charset = utf8mb4; + +create table portfolio_stock ( + portfolio_id binary(16) not null, + stock_id binary(16), + shares integer +) engine=InnoDB + default charset = utf8mb4; \ No newline at end of file diff --git a/domain/src/test/java/nexters/payout/domain/stock/service/StockDividendAnalysisServiceTest.java b/domain/src/test/java/nexters/payout/domain/stock/service/StockDividendAnalysisServiceTest.java index f6211a64..99fc987f 100644 --- a/domain/src/test/java/nexters/payout/domain/stock/service/StockDividendAnalysisServiceTest.java +++ b/domain/src/test/java/nexters/payout/domain/stock/service/StockDividendAnalysisServiceTest.java @@ -81,7 +81,7 @@ class StockDividendAnalysisServiceTest { Dividend pastDividend = DividendFixture.createDividendWithExDividendDate( UUID.randomUUID(), - LocalDate.of(now.getYear(), now.getMonth().minus(1), now.getDayOfMonth()) + LocalDate.of(now.getYear(), now.getMonth().minus(1), 1) .atStartOfDay(ZoneId.systemDefault()).toInstant() ); diff --git a/domain/src/testFixtures/java/nexters/payout/domain/PortfolioFixture.java b/domain/src/testFixtures/java/nexters/payout/domain/PortfolioFixture.java new file mode 100644 index 00000000..7404ca69 --- /dev/null +++ b/domain/src/testFixtures/java/nexters/payout/domain/PortfolioFixture.java @@ -0,0 +1,18 @@ +package nexters.payout.domain; + +import nexters.payout.domain.portfolio.domain.Portfolio; +import nexters.payout.domain.portfolio.domain.PortfolioStock; + +import java.time.Instant; +import java.util.UUID; + +public class PortfolioFixture { + + public static Portfolio createPortfolio(Instant expireAt) { + return new Portfolio(UUID.randomUUID(), expireAt); + } + + public static PortfolioStock createPortfolioStock(UUID portfolioId, UUID stockId, Integer shares) { + return new PortfolioStock(UUID.randomUUID(), stockId, shares); + } +}