Skip to content

Commit 96a0a0e

Browse files
committed
fix: fix the architecture of UpdateParameterMenu
1. parameter 업데이트할 때 입력 받는 구조를 변경했습니다. 2. parameter 업데이트했을 때 기존 유저들의 group에도 반영될 수 있도록 수정했습니다. 3. test를 진행할 수 있도록 테스트 데이터를 삽입했습니다.
1 parent f093a62 commit 96a0a0e

13 files changed

+295
-78
lines changed

src/me/smartstore/Main.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public class Main {
44
public static void main(String[] args) {
5-
// SmartStoreApp.test().run();
6-
SmartStoreApp.getInstance().run();
5+
SmartStoreApp.getInstance().test().run();
6+
// SmartStoreApp.getInstance().run();
77
}
88
}

src/me/smartstore/SmartStoreApp.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package me.smartstore;
22

3+
import me.smartstore.customer.CustomerRepository;
4+
import me.smartstore.group.Group;
5+
import me.smartstore.group.GroupParameter;
36
import me.smartstore.menu.Menu;
47
import me.smartstore.menu.topic.StartMenu;
58

@@ -10,6 +13,37 @@ private SmartStoreApp() {}
1013
public static SmartStoreApp getInstance() { return INSTANCE; }
1114

1215
public SmartStoreApp test() {
16+
Integer[][] groupParameters = new Integer[][] {
17+
{10, 100_000},
18+
{20, 200_000},
19+
{30, 300_000}
20+
};
21+
CustomerRepository repository = CustomerRepository.getInstance();
22+
23+
Group[] groups = Group.getUsedGroups();
24+
for (int i = 0; i < groups.length; i++) {
25+
Group group = groups[i];
26+
Integer[] param = groupParameters[i];
27+
group.setGroupParameter(param);
28+
for (int j = 0; j < 10; j++) {
29+
repository.resetTempCustomer();
30+
31+
String id = String.format("%s_%02d", group.name(), j);
32+
repository.setTempId(id);
33+
34+
String name = String.format(Character.toString('a'+j).repeat(4));
35+
repository.setTempName(name);
36+
37+
Integer spentHours = (int) (Math.random() * 10) + param[0];
38+
repository.setTempSpentHours(spentHours);
39+
40+
Integer totalPaidAmount = (int) (Math.random() * 100_000) + param[1];
41+
repository.setTempTotalPaidAmount(totalPaidAmount);
42+
43+
repository.updateGroupOfTempCustomer();
44+
repository.addTempIntoRepository();
45+
}
46+
}
1347
return this;
1448
}
1549

src/me/smartstore/customer/CustomerRepository.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,21 @@ public String getSummaryByTotalPaidAmount(Order order) {
170170
return getSummary();
171171
}
172172

173+
public void updateGroupIn(Group group) {
174+
Group[] groups = Group.values();
175+
int idx = 0;
176+
while (groups[idx] != group)
177+
idx++;
178+
Group rightLowGroup = groups[idx - 1];
179+
int size = customerList.size();
180+
for (int i = 0; i < size; ++i) {
181+
Customer customer = customerList.get(i);
182+
Group g = customer.getGroup();
183+
if (g == group || g == rightLowGroup)
184+
customer.updateGroup();
185+
}
186+
}
187+
173188
@Override
174189
public String toString() {
175190
if (customerList.isEmpty()) return "No Customers." + " Please input one first.\n";

src/me/smartstore/group/Group.java

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.smartstore.group;
22

3+
import me.smartstore.customer.CustomerRepository;
34
import me.smartstore.menu.exception.InvalidGroupNameException;
45

56
import java.util.Arrays;
@@ -11,6 +12,10 @@ public enum Group {
1112
VIP("V"),
1213
VVIP("VV");
1314

15+
private static final Group[] USED_GROUPS = { GENERAL, VIP, VVIP };
16+
private static GroupParameter tempParameter;
17+
private static Group tempGroup;
18+
1419
private final String shortcut;
1520
private final GroupParameter groupParameter;
1621

@@ -19,9 +24,11 @@ public enum Group {
1924
this.groupParameter = new GroupParameter();
2025
}
2126

27+
public static Group[] getUsedGroups() { return USED_GROUPS; }
28+
2229
public static Group getGroupByString(String s) throws InvalidGroupNameException {
23-
Group[] groups = Group.values();
24-
return Arrays.stream(groups, 1, groups.length)
30+
Group[] groups = Group.getUsedGroups();
31+
return Arrays.stream(groups)
2532
.filter(group -> group.isName(s))
2633
.findAny()
2734
.orElseThrow(() -> new InvalidGroupNameException("\nInvalid Group Name for Input. Please try again.\n"));
@@ -37,9 +44,9 @@ public void setGroupParameter(Integer[] groupParameterArguments) {
3744
}
3845

3946
public static Group calculate(Integer spentHours, Integer totalPaidAmount) {
40-
Group[] groups = values();
47+
Group[] groups = getUsedGroups();
4148
Group ret = NONE;
42-
int i = 1;
49+
int i = 0;
4350
for (; i < groups.length; ++i) {
4451
Group group = groups[i];
4552
GroupParameter parameter = group.groupParameter;
@@ -56,9 +63,43 @@ public static Group calculate(Integer spentHours, Integer totalPaidAmount) {
5663
return ret;
5764
}
5865

66+
public static void setTempMinSpentHours(Integer minSpentHours) {
67+
tempParameter.setMinSpentHours(minSpentHours);
68+
}
69+
70+
public static void setTempMinTotalPaidAmount(Integer minTotalPaidAmount) {
71+
tempParameter.setMinTotalPaidAmount(minTotalPaidAmount);
72+
}
73+
74+
public static void setTempParameter(Group group) {
75+
GroupParameter param = group.groupParameter;
76+
tempParameter = new GroupParameter(param.getMinSpentHours(), param.getMinTotalPaidAmount());
77+
tempGroup = group;
78+
}
79+
80+
public static String getUpdateBeforeAndAfterInfo() {
81+
String before = tempGroup.groupParameter.toString();
82+
String after = tempParameter.toString();
83+
return getGroupNameInfo(tempGroup) +
84+
"Before: " + before + '\n'+
85+
"After : " + after;
86+
}
87+
88+
public static void updateGroupParameter() {
89+
GroupParameter param = tempGroup.groupParameter;
90+
param.setMinSpentHours(tempParameter.getMinSpentHours());
91+
param.setMinTotalPaidAmount(tempParameter.getMinTotalPaidAmount());
92+
93+
CustomerRepository.getInstance().updateGroupIn(tempGroup);
94+
}
95+
5996
@Override
6097
public String toString() {
61-
return "\nGroupType: " + this.name() + '\n'
98+
return getGroupNameInfo(this)
6299
+ "Parameter: " + this.groupParameter + '\n';
63100
}
101+
102+
public static String getGroupNameInfo(Group group) {
103+
return '\n' + "Group: " + group.name() + '\n';
104+
}
64105
}

src/me/smartstore/group/GroupParameter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ public class GroupParameter {
66

77
public GroupParameter() {}
88

9+
public GroupParameter(Integer minSpentHours, Integer minTotalPaidAmount) {
10+
this.minSpentHours = minSpentHours;
11+
this.minTotalPaidAmount = minTotalPaidAmount;
12+
}
13+
914
public void setMinSpentHours(Integer minSpentHours) {
1015
this.minSpentHours = minSpentHours;
1116
}

src/me/smartstore/menu/Menu.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ public abstract class Menu {
99
private static final Reader reader = Reader.getInstance();
1010
private static final Printer printer = Printer.getInstance();
1111
protected static final String END_INPUT = "** Press 'end', if you want to exit! **\n";
12-
protected static final String GROUP_OUTPUT =
13-
'\n' +
14-
"Which group (GENERAL (G), VIP (V), VVIP (VV))?\n"
15-
+ END_INPUT;
1612

1713
private Menu[] nextMenus;
1814
private Menu BACK_MENU;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package me.smartstore.menu.group;
2+
3+
import me.smartstore.group.Group;
4+
import me.smartstore.menu.Menu;
5+
import me.smartstore.menu.exception.InputIsEndException;
6+
import me.smartstore.menu.exception.InvalidGroupNameException;
7+
import me.smartstore.menu.topic.GroupMenu;
8+
9+
public abstract class GroupParameterMenu extends Menu {
10+
11+
private static final String GROUP_OUTPUT =
12+
'\n' +
13+
"Which group (GENERAL (G), VIP (V), VVIP (VV))?\n"
14+
+ END_INPUT;
15+
private Group groupCache;
16+
17+
@Override
18+
public Menu printAndInputAndGetNextMenu() {
19+
if (getPrevMenu() == GroupMenu.getInstance()) {
20+
while (true) {
21+
print(GROUP_OUTPUT);
22+
try {
23+
String groupName = inputStringOrEnd();
24+
groupCache = Group.getGroupByString(groupName);
25+
break;
26+
} catch (InputIsEndException e) {
27+
print(e.getMessage());
28+
return GroupMenu.getInstance();
29+
} catch (InvalidGroupNameException e) {
30+
print(e.getMessage());
31+
}
32+
}
33+
}
34+
return handleAndMoveToNextMenu(groupCache);
35+
}
36+
37+
@Override
38+
protected void setNextMenus() {}
39+
40+
protected abstract Menu handleAndMoveToNextMenu(Group group);
41+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package me.smartstore.menu.group;
2+
3+
import me.smartstore.menu.Menu;
4+
import me.smartstore.menu.exception.InputIsEndException;
5+
6+
import java.util.InputMismatchException;
7+
8+
public abstract class InputGroupParmeterMenu extends Menu {
9+
10+
private final String PARAMETER_INPUT;
11+
12+
InputGroupParmeterMenu(String PARAMETER_INPUT) { this.PARAMETER_INPUT = PARAMETER_INPUT; }
13+
14+
@Override
15+
public Menu printAndInputAndGetNextMenu() {
16+
while (true) {
17+
print(PARAMETER_INPUT);
18+
try {
19+
Integer property = inputZeroOrPositiveIntegerOrEnd();
20+
setTempProperty(property);
21+
return getPrevMenu();
22+
} catch (InputMismatchException e) {
23+
print(e.getMessage());
24+
} catch (InputIsEndException e) {
25+
print(e.getMessage());
26+
return getPrevMenu();
27+
}
28+
}
29+
}
30+
31+
@Override
32+
protected void setNextMenus() {}
33+
34+
protected abstract void setTempProperty(Integer property);
35+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package me.smartstore.menu.group;
2+
3+
import me.smartstore.group.Group;
4+
5+
public class InputMinSpentHoursMenu extends InputGroupParmeterMenu {
6+
7+
private static final String MIN_SPENT_HOURS_INPUT =
8+
'\n' + "Input " + "Minimum " + "Spent Hours" + ":\n" + END_INPUT;
9+
10+
private static class InstanceHolder {
11+
private static final InputMinSpentHoursMenu INSTANCE = new InputMinSpentHoursMenu();
12+
}
13+
private InputMinSpentHoursMenu() { super(MIN_SPENT_HOURS_INPUT); }
14+
15+
public static InputMinSpentHoursMenu getInstance() { return InstanceHolder.INSTANCE; }
16+
17+
@Override
18+
protected void setNextMenus() {}
19+
20+
protected void setTempProperty(Integer property) {
21+
Group.setTempMinSpentHours(property);
22+
}
23+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package me.smartstore.menu.group;
2+
3+
import me.smartstore.group.Group;
4+
5+
public class InputMinTotalPaidAmountMenu extends InputGroupParmeterMenu {
6+
7+
private static final String MIN_SPENT_HOURS_INPUT =
8+
'\n' + "Input " + "Minimum " + "Total Paid Amount" + ":\n" + END_INPUT;
9+
10+
private static class InstanceHolder {
11+
private static final InputMinTotalPaidAmountMenu INSTANCE = new InputMinTotalPaidAmountMenu();
12+
}
13+
private InputMinTotalPaidAmountMenu() { super(MIN_SPENT_HOURS_INPUT); }
14+
15+
public static InputMinTotalPaidAmountMenu getInstance() { return InstanceHolder.INSTANCE; }
16+
17+
@Override
18+
protected void setNextMenus() {}
19+
20+
protected void setTempProperty(Integer property) {
21+
Group.setTempMinTotalPaidAmount(property);
22+
}
23+
}

0 commit comments

Comments
 (0)