Skip to content

Commit e9a7c7c

Browse files
authored
feat : template 기능 추가 (#55)
* chore : Template name, description 필드 추가 * chore : 요청 dto Template name, description 필드 추가 * chore : 응답 dto Template name, description 필드 추가 * chore : 업데이트 요청 dto Template name, description 필드 추가 * test : 업데이트 요청시 새로 추가된 필드 정상적으로 작동하는지 확인 * chore : 코드 리펙토링 * chore : 유저 id 파라미터 추가 * chore : 유저 id 파라미터 추가 * chore : 유저가 템플릿 수정/삭제시 권한 검증 추가 * test : 유저 그룹 검증하는 부분 추가 * test : 유저 그룹 검증하는 부분 추가
1 parent 0afddac commit e9a7c7c

File tree

9 files changed

+210
-54
lines changed

9 files changed

+210
-54
lines changed

bm-controller/src/main/java/org/benchmarker/bmcontroller/template/controller/TestTemplateApiController.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,19 @@ public ResponseEntity<List<TestTemplateResponseDto>> getTemplates(@PathVariable(
5555
@PatchMapping("/template")
5656
@PreAuthorize("hasAnyRole('USER')")
5757
public ResponseEntity<TestTemplateResponseDto> updateTemplate(@RequestBody TestTemplateUpdateDto resTestTemplate) throws Exception {
58-
return ResponseEntity.ok(testTemplateService.updateTemplate(resTestTemplate).get());
58+
59+
User currentUser = userContext.getCurrentUser();
60+
61+
return ResponseEntity.ok(testTemplateService.updateTemplate(resTestTemplate, currentUser.getId()).get());
5962
}
6063

6164
@DeleteMapping("/template/{template_id}")
6265
@PreAuthorize("hasAnyRole('USER')")
6366
public ResponseEntity<Void> deleteTemplate(@PathVariable Integer template_id) {
64-
testTemplateService.deleteTemplate(template_id);
67+
68+
User currentUser = userContext.getCurrentUser();
69+
70+
testTemplateService.deleteTemplate(template_id, currentUser.getId());
6571
return ResponseEntity.ok().build();
6672
}
6773

bm-controller/src/main/java/org/benchmarker/bmcontroller/template/controller/dto/TestTemplateRequestDto.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ public class TestTemplateRequestDto {
3535

3636
@NotNull
3737
private Integer cpuLimit;
38+
39+
private String name;
40+
41+
private String description;
3842

3943
public TestTemplate toEntity() {
4044
return TestTemplate.builder()

bm-controller/src/main/java/org/benchmarker/bmcontroller/template/controller/dto/TestTemplateResponseDto.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,38 +12,34 @@
1212
@AllArgsConstructor
1313
public class TestTemplateResponseDto {
1414

15-
@NotNull
1615
@JsonProperty("id")
1716
private Integer id;
1817

19-
@NotBlank
2018
@JsonProperty("user_group_id")
2119
private String userGroupId;
2220

23-
@NotBlank
2421
@JsonProperty("url")
2522
private String url;
2623

27-
@NotBlank
2824
@JsonProperty("method")
2925
private String method;
3026

3127
@JsonProperty("body")
3228
private String body;
3329

34-
@NotNull
3530
@JsonProperty("vuser")
3631
private Integer vuser;
3732

38-
@NotNull
3933
@JsonProperty("maxRequest")
4034
private Integer maxRequest;
4135

42-
@NotNull
4336
@JsonProperty("maxDuration")
4437
private Integer maxDuration;
4538

46-
@NotNull
4739
@JsonProperty("cpuLimit")
4840
private Integer cpuLimit;
41+
42+
private String name;
43+
44+
private String description;
4945
}

bm-controller/src/main/java/org/benchmarker/bmcontroller/template/controller/dto/TestTemplateUpdateDto.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@ public class TestTemplateUpdateDto {
2727

2828
private Integer cpuLimit;
2929

30+
private String name;
31+
32+
private String description;
33+
3034
}

bm-controller/src/main/java/org/benchmarker/bmcontroller/template/model/TestTemplate.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
11
package org.benchmarker.bmcontroller.template.model;
22

3-
import jakarta.persistence.Column;
4-
import jakarta.persistence.Entity;
5-
import jakarta.persistence.FetchType;
6-
import jakarta.persistence.GeneratedValue;
7-
import jakarta.persistence.GenerationType;
8-
import jakarta.persistence.Id;
9-
import jakarta.persistence.JoinColumn;
10-
import jakarta.persistence.ManyToOne;
11-
import jakarta.persistence.OneToMany;
3+
import jakarta.persistence.*;
4+
125
import java.util.List;
136
import lombok.AllArgsConstructor;
147
import lombok.Builder;
@@ -56,6 +49,11 @@ public class TestTemplate extends BaseTime {
5649
@Column(nullable = false)
5750
private Integer cpuLimit;
5851

52+
private String name;
53+
54+
@Lob
55+
private String description;
56+
5957
@OneToMany(mappedBy = "testTemplate", fetch = FetchType.EAGER)
6058
private List<TestResult> testResults;
6159

@@ -69,6 +67,8 @@ public void update(TestTemplateUpdateDto testTemplate) {
6967
this.maxRequest = testTemplate.getMaxRequest();
7068
this.maxDuration = testTemplate.getMaxDuration();
7169
this.cpuLimit = testTemplate.getCpuLimit();
70+
this.name = testTemplate.getName();
71+
this.description = testTemplate.getDescription();
7272
}
7373

7474
public TestTemplateResponseDto convertToResponseDto() {
@@ -83,6 +83,8 @@ public TestTemplateResponseDto convertToResponseDto() {
8383
.maxRequest(this.maxRequest)
8484
.maxDuration(this.maxDuration)
8585
.cpuLimit(this.cpuLimit)
86+
.name(this.name)
87+
.description(this.description)
8688
.build();
8789
}
8890
}

bm-controller/src/main/java/org/benchmarker/bmcontroller/template/service/ITestTemplateService.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package org.benchmarker.bmcontroller.template.service;
22

33
import org.benchmarker.bmcontroller.template.controller.dto.TestTemplateRequestDto;
4-
import org.benchmarker.bmcontroller.template.controller.dto.TestTemplateUpdateDto;
54
import org.benchmarker.bmcontroller.template.controller.dto.TestTemplateResponseDto;
5+
import org.benchmarker.bmcontroller.template.controller.dto.TestTemplateUpdateDto;
66

77
import java.util.List;
88
import java.util.Optional;
@@ -14,9 +14,12 @@ public interface ITestTemplateService {
1414
TestTemplateResponseDto getTemplate(Integer id);
1515

1616
List<TestTemplateResponseDto> getAllTemplatesAdmin();
17+
1718
List<TestTemplateResponseDto> getTemplates(String groupId, String userId);
19+
1820
List<TestTemplateResponseDto> getTemplates(String groupId);
19-
Optional<TestTemplateResponseDto> updateTemplate(TestTemplateUpdateDto testTemplate) throws Exception;
2021

21-
void deleteTemplate(Integer id);
22+
Optional<TestTemplateResponseDto> updateTemplate(TestTemplateUpdateDto testTemplate, String userId);
23+
24+
void deleteTemplate(Integer id, String userId);
2225
}

bm-controller/src/main/java/org/benchmarker/bmcontroller/template/service/TestTemplateService.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,30 @@
88
import org.benchmarker.bmcontroller.template.controller.dto.TestTemplateUpdateDto;
99
import org.benchmarker.bmcontroller.template.model.TestTemplate;
1010
import org.benchmarker.bmcontroller.template.repository.TestTemplateRepository;
11-
import org.benchmarker.bmcontroller.user.util.UserServiceUtils;
1211
import org.benchmarker.bmcontroller.user.controller.dto.GroupInfo;
12+
import org.benchmarker.bmcontroller.user.repository.UserGroupJoinRepository;
1313
import org.benchmarker.bmcontroller.user.repository.UserGroupRepository;
14+
import org.benchmarker.bmcontroller.user.util.UserServiceUtils;
1415
import org.springframework.stereotype.Service;
1516

1617
import java.util.ArrayList;
1718
import java.util.List;
1819
import java.util.Optional;
1920

21+
import static org.benchmarker.bmcommon.util.NoOp.noOp;
22+
2023
@Service
2124
@RequiredArgsConstructor
2225
public class TestTemplateService extends AbstractTestTemplateService {
2326

2427
private final TestTemplateRepository testTemplateRepository;
28+
2529
private final UserGroupRepository userGroupRepository;
30+
2631
private final UserServiceUtils userServiceUtils;
2732

33+
private final UserGroupJoinRepository userGroupJoinRepository;
34+
2835
@Override
2936
public Optional<TestTemplateResponseDto> createTemplate(
3037
TestTemplateRequestDto reqTestTemplate) {
@@ -75,24 +82,47 @@ public List<TestTemplateResponseDto> getTemplates(String groupId) {
7582
}
7683

7784
@Override
78-
public Optional<TestTemplateResponseDto> updateTemplate(TestTemplateUpdateDto testTemplate)
79-
throws Exception {
85+
public Optional<TestTemplateResponseDto> updateTemplate(TestTemplateUpdateDto testTemplate, String userId) {
8086

8187
// 템플릿이 존재하는지 먼저 파악.
8288
TestTemplate preTestTemplate = testTemplateRepository.findById(testTemplate.getId())
8389
.orElseThrow(() -> new GlobalException(ErrorCode.TEMPLATE_NOT_FOUND));
8490

91+
// 등록되어 있는 그룹인지만 검증
92+
userGroupRepository.findById(testTemplate.getUserGroupId())
93+
.orElseThrow(() -> new GlobalException(ErrorCode.GROUP_NOT_FOUND));
94+
95+
userGroupJoinRepository.findByUserIdAndUserGroupId(userId, testTemplate.getUserGroupId()).ifPresentOrElse(
96+
(u) -> {
97+
noOp();
98+
},
99+
() -> {
100+
throw new GlobalException(ErrorCode.USER_NOT_IN_GROUP);
101+
});
102+
85103
preTestTemplate.update(testTemplate);
86104

87105
return Optional.of(testTemplateRepository.save(preTestTemplate).convertToResponseDto());
88106
}
89107

90108
@Override
91-
public void deleteTemplate(Integer id) {
109+
public void deleteTemplate(Integer id, String userId) {
92110

93111
TestTemplate preTestTemplate = testTemplateRepository.findById(id)
94112
.orElseThrow(() -> new GlobalException(ErrorCode.TEMPLATE_NOT_FOUND));
95113

114+
// 등록되어 있는 그룹인지만 검증
115+
userGroupRepository.findById(preTestTemplate.getUserGroup().getId())
116+
.orElseThrow(() -> new GlobalException(ErrorCode.GROUP_NOT_FOUND));
117+
118+
userGroupJoinRepository.findByUserIdAndUserGroupId(userId, preTestTemplate.getUserGroup().getId()).ifPresentOrElse(
119+
(u) -> {
120+
noOp();
121+
},
122+
() -> {
123+
throw new GlobalException(ErrorCode.USER_NOT_IN_GROUP);
124+
});
125+
96126
testTemplateRepository.delete(preTestTemplate);
97127
}
98128
}

bm-controller/src/test/java/org/benchmarker/bmcontroller/template/controller/TestTemplateApiControllerTest.java

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
import org.benchmarker.bmcontroller.user.model.User;
1818
import org.benchmarker.bmcontroller.user.model.UserGroup;
1919
import org.benchmarker.bmcontroller.user.model.UserGroupJoin;
20+
import org.benchmarker.bmcontroller.user.model.enums.GroupRole;
2021
import org.benchmarker.bmcontroller.user.repository.UserGroupJoinRepository;
2122
import org.benchmarker.bmcontroller.user.repository.UserGroupRepository;
2223
import org.benchmarker.bmcontroller.user.repository.UserRepository;
24+
import org.benchmarker.bmcontroller.user.service.GroupService;
2325
import org.benchmarker.bmcontroller.user.service.UserContext;
2426
import org.junit.jupiter.api.AfterEach;
2527
import org.junit.jupiter.api.BeforeEach;
@@ -77,6 +79,9 @@ class TestTemplateApiControllerTest {
7779
@MockBean
7880
UserGroupJoinRepository userGroupJoinRepository;
7981

82+
@MockBean
83+
GroupService groupService;
84+
8085
@AfterEach
8186
void removeAll() {
8287
testTemplateRepository.deleteAll();
@@ -312,12 +317,20 @@ public void getTemplateWithGroup() throws Exception {
312317
@WithMockUser(username = TestUserConsts.id, roles = "USER")
313318
public void updateTemplate() throws Exception {
314319
//given
320+
User defaultUser = UserHelper.createDefaultUser();
321+
userRepository.save(defaultUser);
322+
323+
UserGroup userGroup = UserHelper.createDefaultUserGroup();
324+
userGroupRepository.save(userGroup);
325+
326+
groupService.addUserToGroupAdmin(userGroup.getId(), defaultUser.getId(), GroupRole.LEADER);
327+
315328
TestTemplateUpdateDto reqTestTemplate = TestTemplateUpdateDto.builder()
316329
.id(10)
317330
.url("test.com")
318331
.method("get")
319332
.body("")
320-
.userGroupId("userGroup")
333+
.userGroupId(userGroup.getId())
321334
.vuser(3)
322335
.cpuLimit(3)
323336
.maxRequest(3)
@@ -329,15 +342,16 @@ public void updateTemplate() throws Exception {
329342
.url("test.com")
330343
.method("get")
331344
.body("")
332-
.userGroupId("userGroup")
345+
.userGroupId(userGroup.getId())
333346
.vuser(3)
334347
.cpuLimit(3)
335348
.maxRequest(3)
336349
.maxDuration(3)
337350
.build();
338351

339352
// when
340-
when(testTemplateService.updateTemplate(any())).thenReturn(Optional.of(resTestTemplate));
353+
when(testTemplateService.updateTemplate(any(), any())).thenReturn(Optional.of(resTestTemplate));
354+
when(userContext.getCurrentUser()).thenReturn(defaultUser);
341355

342356
// then
343357
mockMvc.perform(patch("/api/template")
@@ -366,20 +380,29 @@ public void updateTemplate() throws Exception {
366380
@WithMockUser(username = TestUserConsts.id, roles = "USER")
367381
public void updateTemplateWithoutRequiredFieldsThrowsException() throws Exception {
368382
//given
383+
User defaultUser = UserHelper.createDefaultUser();
384+
userRepository.save(defaultUser);
385+
386+
UserGroup userGroup = UserHelper.createDefaultUserGroup();
387+
userGroupRepository.save(userGroup);
388+
389+
groupService.addUserToGroupAdmin(userGroup.getId(), defaultUser.getId(), GroupRole.LEADER);
390+
369391
TestTemplateUpdateDto reqTestTemplate = TestTemplateUpdateDto.builder()
370392
.id(10)
371393
// .url("test.com")
372394
.method("get")
373395
.body("")
374-
.userGroupId("userGroup")
396+
.userGroupId(userGroup.getId())
375397
.vuser(3)
376398
.cpuLimit(3)
377399
.maxRequest(3)
378400
.maxDuration(3)
379401
.build();
380402

381403
// when
382-
when(testTemplateService.updateTemplate(any())).thenThrow(new GlobalException(ErrorCode.BAD_REQUEST));
404+
when(testTemplateService.updateTemplate(any(), any())).thenThrow(new GlobalException(ErrorCode.BAD_REQUEST));
405+
when(userContext.getCurrentUser()).thenReturn(defaultUser);
383406

384407
// then
385408
mockMvc.perform(patch("/api/template")
@@ -396,8 +419,18 @@ public void updateTemplateWithoutRequiredFieldsThrowsException() throws Exceptio
396419
@WithMockUser(username = TestUserConsts.id, roles = "USER")
397420
public void deleteTemplate() throws Exception {
398421

422+
// given
423+
User defaultUser = UserHelper.createDefaultUser();
424+
userRepository.save(defaultUser);
425+
426+
UserGroup userGroup = UserHelper.createDefaultUserGroup();
427+
userGroupRepository.save(userGroup);
428+
429+
groupService.addUserToGroupAdmin(userGroup.getId(), defaultUser.getId(), GroupRole.LEADER);
430+
399431
// when
400-
doNothing().when(testTemplateService).deleteTemplate(any());
432+
doNothing().when(testTemplateService).deleteTemplate(any(), any());
433+
when(userContext.getCurrentUser()).thenReturn(defaultUser);
401434

402435
// then
403436
mockMvc.perform(delete("/api/template/{template_id}", 10))

0 commit comments

Comments
 (0)