Skip to content

Commit

Permalink
feat: add portfolio, portfolio stock entity (#89)
Browse files Browse the repository at this point in the history
* fix: fix test date time issue

* feat: add portfolio, portfolio stock entity

* feat: add portfolio, portfolio stock repository

* refactor: refactor package structure

* test: add test fixture

* setting: add db configuration

* fix: add @entity annotation

* fix: fix portfolio stock to element collection

* fix: remove portfolio id from PoltfolioStock

* setting: fix db configuration

* refactor: delete create method from portfolio entity
  • Loading branch information
chominho96 authored Apr 1, 2024
1 parent 0734962 commit ae2d7d9
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -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<PortfolioStock> 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<PortfolioStock> stocks) {
super(null);
this.stocks = stocks;
this.expireAt = expireAt;
}

public boolean isExpired() {
return expireAt.isAfter(Instant.now());
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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<Portfolio, UUID> {

}
16 changes: 16 additions & 0 deletions domain/src/main/resources/db/migration/V5__add_portfolio.sql
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
Expand Up @@ -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()
);

Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}

0 comments on commit ae2d7d9

Please sign in to comment.