Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: cotato-manage 과제 구현 #4

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[feat] 도메인 및 ENUM 작성
suhhyun524 committed Dec 21, 2023
commit 96ef9c25cd591877c02cd6cd372188fad5187b7d
73 changes: 73 additions & 0 deletions src/main/java/cotato/cotatomanage/management/domain/Member.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package cotato.cotatomanage.management.domain;

import cotato.cotatomanage.management.dto.request.RegisterRequest;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Member {

private static final int MAX_AGE = 27;
private static final int PERIOD_INCREASING_ABILITY = 2;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NotNull
@Size(max = 20)
private String name;

@NotNull
private int period;

@NotNull
private int age;

@NotNull
@Enumerated(EnumType.STRING)
private Part part;

// 생성자
@Builder
private Member(
String name,
int period,
int age,
Part part) {

this.name = name;
this.period = period;
this.age = age;
this.part = part;
}

public static Member of(RegisterRequest registerRequest) {
return Member.builder()
.name(registerRequest.getName())
.period(registerRequest.getPeriod())
.age(registerRequest.getAge())
.part(registerRequest.getPart())
.build();
}

private int calcAbilityByPeriod(int periodNow) {
return PERIOD_INCREASING_ABILITY * (periodNow - this.getPeriod());
}

public int calcAbility(int periodNow) {
int ability = this.getAge() + calcAbilityByPeriod(periodNow);

if (this.getAge() <= MAX_AGE) {
return ability + PartMonth.calcAbilityByMonth(this);
}
return ability;
}
}
28 changes: 28 additions & 0 deletions src/main/java/cotato/cotatomanage/management/domain/Part.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package cotato.cotatomanage.management.domain;


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.util.stream.Stream;

@Getter
@RequiredArgsConstructor
public enum Part {
DESIGNER("디자이너"),
PRODUCT("기획"),
BACKEND("백엔드"),
FRONTEND("프론트엔드");

@JsonValue private final String part;

@JsonCreator
public static Part parsing(String inputValue) {
return Stream.of(Part.values())
.filter(part -> part.getPart().equals(inputValue))
.findFirst()
.orElse(null);
}
}
46 changes: 46 additions & 0 deletions src/main/java/cotato/cotatomanage/management/domain/PartMonth.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package cotato.cotatomanage.management.domain;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.time.LocalDate;
import java.util.List;
import java.util.stream.Stream;

import static cotato.cotatomanage.management.domain.Part.*;

@Getter
@RequiredArgsConstructor
public enum PartMonth {

PRODUCT_MONTH(PRODUCT, List.of(1, 5, 9), 10),
DESIGNER_MONTH(DESIGNER, List.of(2, 6, 10), 10),
FRONTEND_MONTH(FRONTEND, List.of(3, 7, 11), 10),
BACKEND_MONTH(BACKEND, List.of(4, 8, 12), 10);

private Part part;
private List<Integer> months;
private int number;

PartMonth(Part part, List<Integer> months, int number) {
this.part = part;
this.months = months;
this.number = number;
}

public static PartMonth partParsing(Part part) {
return Stream.of(PartMonth.values())
.filter(partMonth -> partMonth.getPart().equals(part))
.findFirst()
.orElse(null);
}

public static int calcAbilityByMonth(Member member) {
PartMonth partMonth = partParsing(member.getPart());
int monthNow = LocalDate.now().getDayOfMonth();
if (partMonth.months.contains(monthNow)) {
return partMonth.getNumber();
}
return 0;
}
}