From 6b59bc36fbda9b35192e90a1a760d2490d8f0cde Mon Sep 17 00:00:00 2001 From: gomster Date: Tue, 20 Sep 2022 22:09:42 +0900 Subject: [PATCH 01/10] =?UTF-8?q?feat[#2]=20:=20Category=20Create=20API=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../category/application/CategoryService.java | 8 ++++++++ .../application/dto/CategoryContentDto.java | 20 +++++++++++++++++++ .../domain/ActivityType.java | 2 +- .../hispath/category/domain/Category.java | 15 ++++++++++++-- .../presentation/CategoryController.java | 13 ++++++++++++ .../request/CategoryCreateRequest.java | 13 ++++++++++++ 6 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/server/hispath/category/application/dto/CategoryContentDto.java rename src/main/java/com/server/hispath/{activity => category}/domain/ActivityType.java (57%) create mode 100644 src/main/java/com/server/hispath/category/presentation/request/CategoryCreateRequest.java diff --git a/src/main/java/com/server/hispath/category/application/CategoryService.java b/src/main/java/com/server/hispath/category/application/CategoryService.java index 55c0bb1..79f36eb 100644 --- a/src/main/java/com/server/hispath/category/application/CategoryService.java +++ b/src/main/java/com/server/hispath/category/application/CategoryService.java @@ -1,8 +1,11 @@ package com.server.hispath.category.application; +import com.server.hispath.category.application.dto.CategoryContentDto; +import com.server.hispath.category.domain.Category; import com.server.hispath.category.domain.repository.CategoryRepository; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import lombok.RequiredArgsConstructor; @@ -12,4 +15,9 @@ public class CategoryService { private final CategoryRepository categoryRepository; + @Transactional + public Long create(CategoryContentDto dto){ + Category savedCategory = categoryRepository.save(Category.from(dto)); + return savedCategory.getId(); + } } diff --git a/src/main/java/com/server/hispath/category/application/dto/CategoryContentDto.java b/src/main/java/com/server/hispath/category/application/dto/CategoryContentDto.java new file mode 100644 index 0000000..daa6337 --- /dev/null +++ b/src/main/java/com/server/hispath/category/application/dto/CategoryContentDto.java @@ -0,0 +1,20 @@ +package com.server.hispath.category.application.dto; + +import com.server.hispath.category.domain.ActivityType; +import com.server.hispath.category.presentation.request.CategoryCreateRequest; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class CategoryContentDto { + private ActivityType type; + private String name; + + public static CategoryContentDto of(CategoryCreateRequest request) { + return new CategoryContentDto(ActivityType.valueOf(request.getType()), request.getName()); + } +} diff --git a/src/main/java/com/server/hispath/activity/domain/ActivityType.java b/src/main/java/com/server/hispath/category/domain/ActivityType.java similarity index 57% rename from src/main/java/com/server/hispath/activity/domain/ActivityType.java rename to src/main/java/com/server/hispath/category/domain/ActivityType.java index 1861c09..78d1e50 100644 --- a/src/main/java/com/server/hispath/activity/domain/ActivityType.java +++ b/src/main/java/com/server/hispath/category/domain/ActivityType.java @@ -1,4 +1,4 @@ -package com.server.hispath.activity.domain; +package com.server.hispath.category.domain; public enum ActivityType { MILEAGE_ACTIVITY, PROJECT diff --git a/src/main/java/com/server/hispath/category/domain/Category.java b/src/main/java/com/server/hispath/category/domain/Category.java index 15e0130..d0c1db0 100644 --- a/src/main/java/com/server/hispath/category/domain/Category.java +++ b/src/main/java/com/server/hispath/category/domain/Category.java @@ -5,9 +5,11 @@ import javax.persistence.*; import com.server.hispath.activity.domain.Activity; -import com.server.hispath.activity.domain.ActivityType; +import com.server.hispath.category.application.dto.CategoryContentDto; import com.server.hispath.common.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.SQLDelete; @@ -15,8 +17,10 @@ @Entity @Getter -@NoArgsConstructor @Where(clause = "deleted = false") +@Builder +@NoArgsConstructor +@AllArgsConstructor @SQLDelete(sql = "UPDATE category SET deleted = true Where id = ?") public class Category extends BaseEntity { @@ -31,4 +35,11 @@ public class Category extends BaseEntity { @Enumerated(EnumType.STRING) private ActivityType type; + + public static Category from(CategoryContentDto dto) { + return Category.builder() + .type(dto.getType()) + .name(dto.getName()) + .build(); + } } diff --git a/src/main/java/com/server/hispath/category/presentation/CategoryController.java b/src/main/java/com/server/hispath/category/presentation/CategoryController.java index 155c23b..b7e5f13 100644 --- a/src/main/java/com/server/hispath/category/presentation/CategoryController.java +++ b/src/main/java/com/server/hispath/category/presentation/CategoryController.java @@ -1,14 +1,27 @@ package com.server.hispath.category.presentation; import com.server.hispath.category.application.CategoryService; +import com.server.hispath.category.application.dto.CategoryContentDto; +import com.server.hispath.category.presentation.request.CategoryCreateRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor; @RestController @RequiredArgsConstructor +@RequestMapping("/api") public class CategoryController { private final CategoryService categoryService; + + @PostMapping("/category") + public ResponseEntity create(@RequestBody CategoryCreateRequest request){ + Long savedId = categoryService.create(CategoryContentDto.of(request)); + return ResponseEntity.ok(savedId); + } } diff --git a/src/main/java/com/server/hispath/category/presentation/request/CategoryCreateRequest.java b/src/main/java/com/server/hispath/category/presentation/request/CategoryCreateRequest.java new file mode 100644 index 0000000..d48732a --- /dev/null +++ b/src/main/java/com/server/hispath/category/presentation/request/CategoryCreateRequest.java @@ -0,0 +1,13 @@ +package com.server.hispath.category.presentation.request; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +public class CategoryCreateRequest { + private String type; + private String name; +} From e731095ec821f5a5274269ff0483870afd9e2f34 Mon Sep 17 00:00:00 2001 From: gomster Date: Tue, 20 Sep 2022 22:19:22 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat[#2]=20:=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=20=EB=8B=A8=EC=9D=BC=EC=A1=B0=ED=9A=8C=20API?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../category/application/CategoryService.java | 10 ++++++++- .../application/dto/CategoryContentDto.java | 9 ++++---- .../application/dto/CategoryCreateDto.java | 20 ++++++++++++++++++ .../hispath/category/domain/Category.java | 4 ++-- .../presentation/CategoryController.java | 20 +++++++++++------- .../response/CategoryResponse.java | 21 +++++++++++++++++++ 6 files changed, 69 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/server/hispath/category/application/dto/CategoryCreateDto.java create mode 100644 src/main/java/com/server/hispath/category/presentation/response/CategoryResponse.java diff --git a/src/main/java/com/server/hispath/category/application/CategoryService.java b/src/main/java/com/server/hispath/category/application/CategoryService.java index 79f36eb..18b7438 100644 --- a/src/main/java/com/server/hispath/category/application/CategoryService.java +++ b/src/main/java/com/server/hispath/category/application/CategoryService.java @@ -1,8 +1,10 @@ package com.server.hispath.category.application; import com.server.hispath.category.application.dto.CategoryContentDto; +import com.server.hispath.category.application.dto.CategoryCreateDto; import com.server.hispath.category.domain.Category; import com.server.hispath.category.domain.repository.CategoryRepository; +import com.server.hispath.exception.category.CategoryNotFoundException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -16,8 +18,14 @@ public class CategoryService { private final CategoryRepository categoryRepository; @Transactional - public Long create(CategoryContentDto dto){ + public Long create(CategoryCreateDto dto){ Category savedCategory = categoryRepository.save(Category.from(dto)); return savedCategory.getId(); } + + @Transactional(readOnly = true) + public CategoryContentDto findById(Long id){ + Category category = categoryRepository.findById(id).orElseThrow(CategoryNotFoundException::new); + return CategoryContentDto.from(category); + } } diff --git a/src/main/java/com/server/hispath/category/application/dto/CategoryContentDto.java b/src/main/java/com/server/hispath/category/application/dto/CategoryContentDto.java index daa6337..f0e2a2a 100644 --- a/src/main/java/com/server/hispath/category/application/dto/CategoryContentDto.java +++ b/src/main/java/com/server/hispath/category/application/dto/CategoryContentDto.java @@ -1,7 +1,6 @@ package com.server.hispath.category.application.dto; -import com.server.hispath.category.domain.ActivityType; -import com.server.hispath.category.presentation.request.CategoryCreateRequest; +import com.server.hispath.category.domain.Category; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,10 +10,10 @@ @NoArgsConstructor @AllArgsConstructor public class CategoryContentDto { - private ActivityType type; + private Long id; private String name; - public static CategoryContentDto of(CategoryCreateRequest request) { - return new CategoryContentDto(ActivityType.valueOf(request.getType()), request.getName()); + public static CategoryContentDto from(Category category) { + return new CategoryContentDto(category.getId(), category.getName()); } } diff --git a/src/main/java/com/server/hispath/category/application/dto/CategoryCreateDto.java b/src/main/java/com/server/hispath/category/application/dto/CategoryCreateDto.java new file mode 100644 index 0000000..579d1dd --- /dev/null +++ b/src/main/java/com/server/hispath/category/application/dto/CategoryCreateDto.java @@ -0,0 +1,20 @@ +package com.server.hispath.category.application.dto; + +import com.server.hispath.category.domain.ActivityType; +import com.server.hispath.category.presentation.request.CategoryCreateRequest; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class CategoryCreateDto { + private ActivityType type; + private String name; + + public static CategoryCreateDto of(CategoryCreateRequest request) { + return new CategoryCreateDto(ActivityType.valueOf(request.getType()), request.getName()); + } +} diff --git a/src/main/java/com/server/hispath/category/domain/Category.java b/src/main/java/com/server/hispath/category/domain/Category.java index d0c1db0..4451e20 100644 --- a/src/main/java/com/server/hispath/category/domain/Category.java +++ b/src/main/java/com/server/hispath/category/domain/Category.java @@ -5,7 +5,7 @@ import javax.persistence.*; import com.server.hispath.activity.domain.Activity; -import com.server.hispath.category.application.dto.CategoryContentDto; +import com.server.hispath.category.application.dto.CategoryCreateDto; import com.server.hispath.common.BaseEntity; import lombok.AllArgsConstructor; @@ -36,7 +36,7 @@ public class Category extends BaseEntity { @Enumerated(EnumType.STRING) private ActivityType type; - public static Category from(CategoryContentDto dto) { + public static Category from(CategoryCreateDto dto) { return Category.builder() .type(dto.getType()) .name(dto.getName()) diff --git a/src/main/java/com/server/hispath/category/presentation/CategoryController.java b/src/main/java/com/server/hispath/category/presentation/CategoryController.java index b7e5f13..f25e85e 100644 --- a/src/main/java/com/server/hispath/category/presentation/CategoryController.java +++ b/src/main/java/com/server/hispath/category/presentation/CategoryController.java @@ -2,13 +2,12 @@ import com.server.hispath.category.application.CategoryService; import com.server.hispath.category.application.dto.CategoryContentDto; +import com.server.hispath.category.application.dto.CategoryCreateDto; import com.server.hispath.category.presentation.request.CategoryCreateRequest; +import com.server.hispath.category.presentation.response.CategoryResponse; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import lombok.RequiredArgsConstructor; @@ -16,12 +15,19 @@ @RequiredArgsConstructor @RequestMapping("/api") public class CategoryController { - + private final CategoryService categoryService; @PostMapping("/category") - public ResponseEntity create(@RequestBody CategoryCreateRequest request){ - Long savedId = categoryService.create(CategoryContentDto.of(request)); + public ResponseEntity create(@RequestBody CategoryCreateRequest request) { + Long savedId = categoryService.create(CategoryCreateDto.of(request)); return ResponseEntity.ok(savedId); } + + @GetMapping("/category/{id}") + public ResponseEntity find(@PathVariable Long id) { + CategoryContentDto dto = categoryService.findById(id); + CategoryResponse response = CategoryResponse.from(dto); + return ResponseEntity.ok(response); + } } diff --git a/src/main/java/com/server/hispath/category/presentation/response/CategoryResponse.java b/src/main/java/com/server/hispath/category/presentation/response/CategoryResponse.java new file mode 100644 index 0000000..3ffbf4a --- /dev/null +++ b/src/main/java/com/server/hispath/category/presentation/response/CategoryResponse.java @@ -0,0 +1,21 @@ +package com.server.hispath.category.presentation.response; + +import com.server.hispath.category.application.dto.CategoryContentDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class CategoryResponse { + private Long categoryId; + private String name; + + public static CategoryResponse from(CategoryContentDto dto) { + return new CategoryResponse(dto.getId(), dto.getName()); + } +} From dc5ccf0ad69e96b7d425cec669b95d32db8fca11 Mon Sep 17 00:00:00 2001 From: gomster Date: Tue, 20 Sep 2022 22:24:19 +0900 Subject: [PATCH 03/10] =?UTF-8?q?feat[#2]=20:=20category=20=EB=8B=A4?= =?UTF-8?q?=EC=A4=91=20=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../category/application/CategoryService.java | 15 +++++++++++++-- .../category/presentation/CategoryController.java | 12 ++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/server/hispath/category/application/CategoryService.java b/src/main/java/com/server/hispath/category/application/CategoryService.java index 18b7438..f475ed1 100644 --- a/src/main/java/com/server/hispath/category/application/CategoryService.java +++ b/src/main/java/com/server/hispath/category/application/CategoryService.java @@ -1,5 +1,8 @@ package com.server.hispath.category.application; +import java.util.List; +import java.util.stream.Collectors; + import com.server.hispath.category.application.dto.CategoryContentDto; import com.server.hispath.category.application.dto.CategoryCreateDto; import com.server.hispath.category.domain.Category; @@ -18,14 +21,22 @@ public class CategoryService { private final CategoryRepository categoryRepository; @Transactional - public Long create(CategoryCreateDto dto){ + public Long create(CategoryCreateDto dto) { Category savedCategory = categoryRepository.save(Category.from(dto)); return savedCategory.getId(); } @Transactional(readOnly = true) - public CategoryContentDto findById(Long id){ + public CategoryContentDto findById(Long id) { Category category = categoryRepository.findById(id).orElseThrow(CategoryNotFoundException::new); return CategoryContentDto.from(category); } + + @Transactional(readOnly = true) + public List findAll() { + List categories = categoryRepository.findAll(); + return categories.stream() + .map(CategoryContentDto::from) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/com/server/hispath/category/presentation/CategoryController.java b/src/main/java/com/server/hispath/category/presentation/CategoryController.java index f25e85e..aecd8b9 100644 --- a/src/main/java/com/server/hispath/category/presentation/CategoryController.java +++ b/src/main/java/com/server/hispath/category/presentation/CategoryController.java @@ -1,5 +1,8 @@ package com.server.hispath.category.presentation; +import java.util.List; +import java.util.stream.Collectors; + import com.server.hispath.category.application.CategoryService; import com.server.hispath.category.application.dto.CategoryContentDto; import com.server.hispath.category.application.dto.CategoryCreateDto; @@ -30,4 +33,13 @@ public ResponseEntity find(@PathVariable Long id) { CategoryResponse response = CategoryResponse.from(dto); return ResponseEntity.ok(response); } + + @GetMapping("/categories") + public ResponseEntity> findAll() { + List dtos = categoryService.findAll(); + List responses = dtos.stream() + .map(CategoryResponse::from) + .collect(Collectors.toList()); + return ResponseEntity.ok(responses); + } } From 46d885dbd1bd213936113b68e614e0df359be053 Mon Sep 17 00:00:00 2001 From: gomster Date: Tue, 20 Sep 2022 22:39:41 +0900 Subject: [PATCH 04/10] =?UTF-8?q?feat[#2]=20:=20Category=20update,=20delet?= =?UTF-8?q?e=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../category/application/CategoryService.java | 17 ++++++++++++-- ...egoryCreateDto.java => CategoryCUDto.java} | 8 +++---- .../hispath/category/domain/Category.java | 9 ++++++-- .../presentation/CategoryController.java | 22 +++++++++++++++---- ...ateRequest.java => CategoryCURequest.java} | 2 +- 5 files changed, 45 insertions(+), 13 deletions(-) rename src/main/java/com/server/hispath/category/application/dto/{CategoryCreateDto.java => CategoryCUDto.java} (63%) rename src/main/java/com/server/hispath/category/presentation/request/{CategoryCreateRequest.java => CategoryCURequest.java} (85%) diff --git a/src/main/java/com/server/hispath/category/application/CategoryService.java b/src/main/java/com/server/hispath/category/application/CategoryService.java index f475ed1..55a3f87 100644 --- a/src/main/java/com/server/hispath/category/application/CategoryService.java +++ b/src/main/java/com/server/hispath/category/application/CategoryService.java @@ -4,7 +4,7 @@ import java.util.stream.Collectors; import com.server.hispath.category.application.dto.CategoryContentDto; -import com.server.hispath.category.application.dto.CategoryCreateDto; +import com.server.hispath.category.application.dto.CategoryCUDto; import com.server.hispath.category.domain.Category; import com.server.hispath.category.domain.repository.CategoryRepository; import com.server.hispath.exception.category.CategoryNotFoundException; @@ -21,7 +21,7 @@ public class CategoryService { private final CategoryRepository categoryRepository; @Transactional - public Long create(CategoryCreateDto dto) { + public Long create(CategoryCUDto dto) { Category savedCategory = categoryRepository.save(Category.from(dto)); return savedCategory.getId(); } @@ -39,4 +39,17 @@ public List findAll() { .map(CategoryContentDto::from) .collect(Collectors.toList()); } + + @Transactional + public CategoryContentDto update(Long id, CategoryCUDto dto){ + Category category = categoryRepository.findById(id).orElseThrow(CategoryNotFoundException::new); + category.update(dto); + return CategoryContentDto.from(category); + } + + @Transactional + public void delete(Long id){ + Category category = categoryRepository.findById(id).orElseThrow(CategoryNotFoundException::new); + category.deleteContent(); + } } diff --git a/src/main/java/com/server/hispath/category/application/dto/CategoryCreateDto.java b/src/main/java/com/server/hispath/category/application/dto/CategoryCUDto.java similarity index 63% rename from src/main/java/com/server/hispath/category/application/dto/CategoryCreateDto.java rename to src/main/java/com/server/hispath/category/application/dto/CategoryCUDto.java index 579d1dd..31c5e82 100644 --- a/src/main/java/com/server/hispath/category/application/dto/CategoryCreateDto.java +++ b/src/main/java/com/server/hispath/category/application/dto/CategoryCUDto.java @@ -1,7 +1,7 @@ package com.server.hispath.category.application.dto; import com.server.hispath.category.domain.ActivityType; -import com.server.hispath.category.presentation.request.CategoryCreateRequest; +import com.server.hispath.category.presentation.request.CategoryCURequest; import lombok.AllArgsConstructor; import lombok.Getter; @@ -10,11 +10,11 @@ @Getter @NoArgsConstructor @AllArgsConstructor -public class CategoryCreateDto { +public class CategoryCUDto { private ActivityType type; private String name; - public static CategoryCreateDto of(CategoryCreateRequest request) { - return new CategoryCreateDto(ActivityType.valueOf(request.getType()), request.getName()); + public static CategoryCUDto of(CategoryCURequest request) { + return new CategoryCUDto(ActivityType.valueOf(request.getType()), request.getName()); } } diff --git a/src/main/java/com/server/hispath/category/domain/Category.java b/src/main/java/com/server/hispath/category/domain/Category.java index 4451e20..8aab04f 100644 --- a/src/main/java/com/server/hispath/category/domain/Category.java +++ b/src/main/java/com/server/hispath/category/domain/Category.java @@ -5,7 +5,7 @@ import javax.persistence.*; import com.server.hispath.activity.domain.Activity; -import com.server.hispath.category.application.dto.CategoryCreateDto; +import com.server.hispath.category.application.dto.CategoryCUDto; import com.server.hispath.common.BaseEntity; import lombok.AllArgsConstructor; @@ -36,7 +36,12 @@ public class Category extends BaseEntity { @Enumerated(EnumType.STRING) private ActivityType type; - public static Category from(CategoryCreateDto dto) { + public void update(CategoryCUDto dto) { + this.type = dto.getType(); + this.name = dto.getName(); + } + + public static Category from(CategoryCUDto dto) { return Category.builder() .type(dto.getType()) .name(dto.getName()) diff --git a/src/main/java/com/server/hispath/category/presentation/CategoryController.java b/src/main/java/com/server/hispath/category/presentation/CategoryController.java index aecd8b9..934897f 100644 --- a/src/main/java/com/server/hispath/category/presentation/CategoryController.java +++ b/src/main/java/com/server/hispath/category/presentation/CategoryController.java @@ -5,8 +5,8 @@ import com.server.hispath.category.application.CategoryService; import com.server.hispath.category.application.dto.CategoryContentDto; -import com.server.hispath.category.application.dto.CategoryCreateDto; -import com.server.hispath.category.presentation.request.CategoryCreateRequest; +import com.server.hispath.category.application.dto.CategoryCUDto; +import com.server.hispath.category.presentation.request.CategoryCURequest; import com.server.hispath.category.presentation.response.CategoryResponse; import org.springframework.http.ResponseEntity; @@ -22,8 +22,8 @@ public class CategoryController { private final CategoryService categoryService; @PostMapping("/category") - public ResponseEntity create(@RequestBody CategoryCreateRequest request) { - Long savedId = categoryService.create(CategoryCreateDto.of(request)); + public ResponseEntity create(@RequestBody CategoryCURequest request) { + Long savedId = categoryService.create(CategoryCUDto.of(request)); return ResponseEntity.ok(savedId); } @@ -42,4 +42,18 @@ public ResponseEntity> findAll() { .collect(Collectors.toList()); return ResponseEntity.ok(responses); } + + @PatchMapping("/category/{id}") + public ResponseEntity update(@PathVariable Long id, @RequestBody CategoryCURequest request) { + CategoryContentDto dto = categoryService.update(id, CategoryCUDto.of(request)); + CategoryResponse response = CategoryResponse.from(dto); + + return ResponseEntity.ok(response); + } + + @DeleteMapping("/category/{id}") + public ResponseEntity delete(@PathVariable Long id) { + categoryService.delete(id); + return ResponseEntity.ok(id); + } } diff --git a/src/main/java/com/server/hispath/category/presentation/request/CategoryCreateRequest.java b/src/main/java/com/server/hispath/category/presentation/request/CategoryCURequest.java similarity index 85% rename from src/main/java/com/server/hispath/category/presentation/request/CategoryCreateRequest.java rename to src/main/java/com/server/hispath/category/presentation/request/CategoryCURequest.java index d48732a..000540b 100644 --- a/src/main/java/com/server/hispath/category/presentation/request/CategoryCreateRequest.java +++ b/src/main/java/com/server/hispath/category/presentation/request/CategoryCURequest.java @@ -7,7 +7,7 @@ @Getter @Setter @NoArgsConstructor -public class CategoryCreateRequest { +public class CategoryCURequest { private String type; private String name; } From 584c7db164b46da56d02c06f6a88c978d0852aa0 Mon Sep 17 00:00:00 2001 From: gomster Date: Tue, 20 Sep 2022 22:51:49 +0900 Subject: [PATCH 05/10] =?UTF-8?q?fix[#2]=20:=20API=20=EC=9D=BC=EB=B6=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - @SQLDELETE에 옵션을 주었기에, 그냥 delete를 사용해도 된다. --- src/main/java/com/server/hispath/HispathApplication.java | 2 ++ .../server/hispath/category/application/CategoryService.java | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/server/hispath/HispathApplication.java b/src/main/java/com/server/hispath/HispathApplication.java index e2d77f7..13c7ac8 100644 --- a/src/main/java/com/server/hispath/HispathApplication.java +++ b/src/main/java/com/server/hispath/HispathApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication +@EnableJpaAuditing public class HispathApplication { public static void main(String[] args) { diff --git a/src/main/java/com/server/hispath/category/application/CategoryService.java b/src/main/java/com/server/hispath/category/application/CategoryService.java index 55a3f87..89c3bf3 100644 --- a/src/main/java/com/server/hispath/category/application/CategoryService.java +++ b/src/main/java/com/server/hispath/category/application/CategoryService.java @@ -49,7 +49,6 @@ public CategoryContentDto update(Long id, CategoryCUDto dto){ @Transactional public void delete(Long id){ - Category category = categoryRepository.findById(id).orElseThrow(CategoryNotFoundException::new); - category.deleteContent(); + categoryRepository.deleteById(id); } } From fe0088ec14568b43ff0fd69ec83764a1c32b65d2 Mon Sep 17 00:00:00 2001 From: gomster Date: Tue, 20 Sep 2022 23:00:38 +0900 Subject: [PATCH 06/10] =?UTF-8?q?docs[#2]=20:=20Category=20API=20Swagger?= =?UTF-8?q?=20=EB=AA=85=EC=84=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../category/presentation/CategoryController.java | 12 +++++++++++- src/main/java/com/server/hispath/docs/ApiDoc.java | 6 +++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/server/hispath/category/presentation/CategoryController.java b/src/main/java/com/server/hispath/category/presentation/CategoryController.java index 934897f..8dd3ed0 100644 --- a/src/main/java/com/server/hispath/category/presentation/CategoryController.java +++ b/src/main/java/com/server/hispath/category/presentation/CategoryController.java @@ -4,14 +4,17 @@ import java.util.stream.Collectors; import com.server.hispath.category.application.CategoryService; -import com.server.hispath.category.application.dto.CategoryContentDto; import com.server.hispath.category.application.dto.CategoryCUDto; +import com.server.hispath.category.application.dto.CategoryContentDto; import com.server.hispath.category.presentation.request.CategoryCURequest; import com.server.hispath.category.presentation.response.CategoryResponse; +import com.server.hispath.docs.ApiDoc; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.ApiOperation; + import lombok.RequiredArgsConstructor; @RestController @@ -21,13 +24,17 @@ public class CategoryController { private final CategoryService categoryService; + @PostMapping("/category") + @ApiOperation(value = ApiDoc.CATEGORY_CREATE) public ResponseEntity create(@RequestBody CategoryCURequest request) { Long savedId = categoryService.create(CategoryCUDto.of(request)); return ResponseEntity.ok(savedId); } + @GetMapping("/category/{id}") + @ApiOperation(value = ApiDoc.CATEGORY_READ) public ResponseEntity find(@PathVariable Long id) { CategoryContentDto dto = categoryService.findById(id); CategoryResponse response = CategoryResponse.from(dto); @@ -35,6 +42,7 @@ public ResponseEntity find(@PathVariable Long id) { } @GetMapping("/categories") + @ApiOperation(value = ApiDoc.CATEGORY_READ_ALL) public ResponseEntity> findAll() { List dtos = categoryService.findAll(); List responses = dtos.stream() @@ -44,6 +52,7 @@ public ResponseEntity> findAll() { } @PatchMapping("/category/{id}") + @ApiOperation(value = ApiDoc.CATEGORY_UPDATE) public ResponseEntity update(@PathVariable Long id, @RequestBody CategoryCURequest request) { CategoryContentDto dto = categoryService.update(id, CategoryCUDto.of(request)); CategoryResponse response = CategoryResponse.from(dto); @@ -52,6 +61,7 @@ public ResponseEntity update(@PathVariable Long id, @RequestBo } @DeleteMapping("/category/{id}") + @ApiOperation(value = ApiDoc.CATEGORY_DELETE) public ResponseEntity delete(@PathVariable Long id) { categoryService.delete(id); return ResponseEntity.ok(id); diff --git a/src/main/java/com/server/hispath/docs/ApiDoc.java b/src/main/java/com/server/hispath/docs/ApiDoc.java index 0e1188e..93f24a4 100644 --- a/src/main/java/com/server/hispath/docs/ApiDoc.java +++ b/src/main/java/com/server/hispath/docs/ApiDoc.java @@ -9,5 +9,9 @@ public class ApiDoc { /* Activity 관련 API 명세 */ /* Category 관련 API 명세 */ - + public static final String CATEGORY_READ = "단일 카테고리 조회"; + public static final String CATEGORY_READ_ALL = "모든 카테고리 조회"; + public static final String CATEGORY_CREATE = "카테고리 생성"; + public static final String CATEGORY_UPDATE = "카테고리 수정"; + public static final String CATEGORY_DELETE = "카테고리 삭제"; } \ No newline at end of file From ca97fa84fd0ac691405bb06ada69bff59ef872ab Mon Sep 17 00:00:00 2001 From: gomster Date: Wed, 21 Sep 2022 10:50:47 +0900 Subject: [PATCH 07/10] =?UTF-8?q?feat[#2]=20:=20Activity=20Create=20API=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/application/ActivityService.java | 12 ++++++++++ .../application/dto/ActivityContentDto.java | 24 +++++++++++++++++++ .../hispath/activity/domain/Activity.java | 17 ++++++++++++- .../presentation/ActivityController.java | 17 +++++++++++++ .../request/ActivityCURequest.java | 16 +++++++++++++ .../java/com/server/hispath/docs/ApiDoc.java | 1 + 6 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/server/hispath/activity/application/dto/ActivityContentDto.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/request/ActivityCURequest.java diff --git a/src/main/java/com/server/hispath/activity/application/ActivityService.java b/src/main/java/com/server/hispath/activity/application/ActivityService.java index e1fa9db..b69f487 100644 --- a/src/main/java/com/server/hispath/activity/application/ActivityService.java +++ b/src/main/java/com/server/hispath/activity/application/ActivityService.java @@ -1,6 +1,11 @@ package com.server.hispath.activity.application; +import com.server.hispath.activity.application.dto.ActivityContentDto; +import com.server.hispath.activity.domain.Activity; import com.server.hispath.activity.domain.repository.ActivityRepository; +import com.server.hispath.category.domain.Category; +import com.server.hispath.category.domain.repository.CategoryRepository; +import com.server.hispath.exception.category.CategoryNotFoundException; import org.springframework.stereotype.Service; @@ -11,5 +16,12 @@ public class ActivityService { private final ActivityRepository activityRepository; + private final CategoryRepository categoryRepository; + public Long create(Long categoryId, ActivityContentDto dto) { + Category category = categoryRepository.findById(categoryId).orElseThrow(CategoryNotFoundException::new); + Activity activity = Activity.from(category, dto); + Activity savedActivity = activityRepository.save(activity); + return savedActivity.getId(); + } } diff --git a/src/main/java/com/server/hispath/activity/application/dto/ActivityContentDto.java b/src/main/java/com/server/hispath/activity/application/dto/ActivityContentDto.java new file mode 100644 index 0000000..b5a8c3e --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/ActivityContentDto.java @@ -0,0 +1,24 @@ +package com.server.hispath.activity.application.dto; + +import com.server.hispath.activity.presentation.request.ActivityCURequest; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class ActivityContentDto { + + private String semester; + private boolean personal; + private int requestStatus; + private String data; + + public static ActivityContentDto from(ActivityCURequest request){ + return new ActivityContentDto(request.getSemester(), request.isPersonal(), request.getRequestStatus(), request.getData()); + } +} diff --git a/src/main/java/com/server/hispath/activity/domain/Activity.java b/src/main/java/com/server/hispath/activity/domain/Activity.java index 4ee2322..0d75939 100644 --- a/src/main/java/com/server/hispath/activity/domain/Activity.java +++ b/src/main/java/com/server/hispath/activity/domain/Activity.java @@ -4,10 +4,13 @@ import java.util.List; import javax.persistence.*; +import com.server.hispath.activity.application.dto.ActivityContentDto; import com.server.hispath.category.domain.Category; import com.server.hispath.common.BaseEntity; import com.server.hispath.student.domain.participate.Participant; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.SQLDelete; @@ -15,7 +18,9 @@ @Entity @Getter +@Builder @NoArgsConstructor +@AllArgsConstructor @Where(clause = "deleted = false") @SQLDelete(sql = "UPDATE activity SET deleted = true Where id = ?") public class Activity extends BaseEntity { @@ -33,8 +38,18 @@ public class Activity extends BaseEntity { private int requestStatus; - private String date; + private String data; @OneToMany(mappedBy = "activity") private List participants = new ArrayList<>(); + + public static Activity from(Category category, ActivityContentDto dto) { + return Activity.builder() + .category(category) + .semester(dto.getSemester()) + .personel(dto.isPersonal()) + .requestStatus(dto.getRequestStatus()) + .data(dto.getData()) + .build(); + } } diff --git a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java index 93d5630..2b0cd4c 100644 --- a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java +++ b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java @@ -1,13 +1,30 @@ package com.server.hispath.activity.presentation; import com.server.hispath.activity.application.ActivityService; +import com.server.hispath.activity.application.dto.ActivityContentDto; +import com.server.hispath.activity.presentation.request.ActivityCURequest; +import com.server.hispath.docs.ApiDoc; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.ApiOperation; + import lombok.RequiredArgsConstructor; @RestController @RequiredArgsConstructor +@RequestMapping("/api") public class ActivityController { private final ActivityService activityService; + + @PostMapping("/activity") + @ApiOperation(value = ApiDoc.ACTIVITY_CREATE) + public ResponseEntity create(@RequestBody ActivityCURequest request) { + Long id = activityService.create(request.getCategoryId(), ActivityContentDto.from(request)); + return ResponseEntity.ok(id); + } } diff --git a/src/main/java/com/server/hispath/activity/presentation/request/ActivityCURequest.java b/src/main/java/com/server/hispath/activity/presentation/request/ActivityCURequest.java new file mode 100644 index 0000000..9e61e43 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/request/ActivityCURequest.java @@ -0,0 +1,16 @@ +package com.server.hispath.activity.presentation.request; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +public class ActivityCURequest { + private Long categoryId; + private String semester; + private boolean personal; + private int requestStatus; + private String data; +} diff --git a/src/main/java/com/server/hispath/docs/ApiDoc.java b/src/main/java/com/server/hispath/docs/ApiDoc.java index 93f24a4..c4473f3 100644 --- a/src/main/java/com/server/hispath/docs/ApiDoc.java +++ b/src/main/java/com/server/hispath/docs/ApiDoc.java @@ -7,6 +7,7 @@ public class ApiDoc { /* Activity 관련 API 명세 */ + public static final String ACTIVITY_CREATE = "단일 활동 생성"; /* Category 관련 API 명세 */ public static final String CATEGORY_READ = "단일 카테고리 조회"; From a1d7946579c2e4b40eaa44ff7a8f3dceeb1fcef5 Mon Sep 17 00:00:00 2001 From: gomster Date: Wed, 21 Sep 2022 14:25:51 +0900 Subject: [PATCH 08/10] =?UTF-8?q?feat[#2]=20:=20Activity=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/application/ActivityService.java | 22 +++++++++++++ .../activity/application/dto/ActivityDto.java | 24 ++++++++++++++ .../hispath/activity/domain/Activity.java | 7 +++-- .../presentation/ActivityController.java | 31 ++++++++++++++++--- .../response/ActivityResponse.java | 25 +++++++++++++++ .../category/application/dto/CategoryDto.java | 21 +++++++++++++ .../java/com/server/hispath/docs/ApiDoc.java | 2 ++ 7 files changed, 126 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/server/hispath/activity/application/dto/ActivityDto.java create mode 100644 src/main/java/com/server/hispath/activity/presentation/response/ActivityResponse.java create mode 100644 src/main/java/com/server/hispath/category/application/dto/CategoryDto.java diff --git a/src/main/java/com/server/hispath/activity/application/ActivityService.java b/src/main/java/com/server/hispath/activity/application/ActivityService.java index b69f487..1a6be1b 100644 --- a/src/main/java/com/server/hispath/activity/application/ActivityService.java +++ b/src/main/java/com/server/hispath/activity/application/ActivityService.java @@ -1,12 +1,18 @@ package com.server.hispath.activity.application; +import java.util.List; +import java.util.stream.Collectors; + import com.server.hispath.activity.application.dto.ActivityContentDto; +import com.server.hispath.activity.application.dto.ActivityDto; import com.server.hispath.activity.domain.Activity; import com.server.hispath.activity.domain.repository.ActivityRepository; import com.server.hispath.category.domain.Category; import com.server.hispath.category.domain.repository.CategoryRepository; +import com.server.hispath.exception.activity.ActivityNotFoundException; import com.server.hispath.exception.category.CategoryNotFoundException; +import org.springframework.data.crossstore.ChangeSetPersister; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; @@ -24,4 +30,20 @@ public Long create(Long categoryId, ActivityContentDto dto) { Activity savedActivity = activityRepository.save(activity); return savedActivity.getId(); } + + public ActivityDto find(Long id) { + Activity activity = this.findById(id); + return ActivityDto.from(activity); + } + + private Activity findById(Long id) { + return activityRepository.findById(id).orElseThrow(ActivityNotFoundException::new); + } + + public List findAll() { + List activities = activityRepository.findAll(); + return activities.stream() + .map(ActivityDto::from) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/com/server/hispath/activity/application/dto/ActivityDto.java b/src/main/java/com/server/hispath/activity/application/dto/ActivityDto.java new file mode 100644 index 0000000..74f6df7 --- /dev/null +++ b/src/main/java/com/server/hispath/activity/application/dto/ActivityDto.java @@ -0,0 +1,24 @@ +package com.server.hispath.activity.application.dto; + +import com.server.hispath.activity.domain.Activity; +import com.server.hispath.category.application.dto.CategoryDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ActivityDto { + private Long id; + private CategoryDto categoryDto; + private String semester; + private boolean personal; + private String data; + + public static ActivityDto from(Activity activity) { + return new ActivityDto(activity.getId(), CategoryDto.from(activity.getCategory()), + activity.getSemester(), activity.isPersonal(), activity.getData()); + } +} diff --git a/src/main/java/com/server/hispath/activity/domain/Activity.java b/src/main/java/com/server/hispath/activity/domain/Activity.java index 0d75939..41f04e5 100644 --- a/src/main/java/com/server/hispath/activity/domain/Activity.java +++ b/src/main/java/com/server/hispath/activity/domain/Activity.java @@ -8,6 +8,7 @@ import com.server.hispath.category.domain.Category; import com.server.hispath.common.BaseEntity; import com.server.hispath.student.domain.participate.Participant; +import com.sun.istack.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; @@ -32,12 +33,14 @@ public class Activity extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) private Category category; + @NotNull private String semester; - private boolean personel; + private boolean personal; private int requestStatus; + @NotNull private String data; @OneToMany(mappedBy = "activity") @@ -47,7 +50,7 @@ public static Activity from(Category category, ActivityContentDto dto) { return Activity.builder() .category(category) .semester(dto.getSemester()) - .personel(dto.isPersonal()) + .personal(dto.isPersonal()) .requestStatus(dto.getRequestStatus()) .data(dto.getData()) .build(); diff --git a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java index 2b0cd4c..ded4374 100644 --- a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java +++ b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java @@ -1,15 +1,17 @@ package com.server.hispath.activity.presentation; +import java.util.List; +import java.util.stream.Collectors; + import com.server.hispath.activity.application.ActivityService; import com.server.hispath.activity.application.dto.ActivityContentDto; +import com.server.hispath.activity.application.dto.ActivityDto; import com.server.hispath.activity.presentation.request.ActivityCURequest; +import com.server.hispath.activity.presentation.response.ActivityResponse; import com.server.hispath.docs.ApiDoc; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import io.swagger.annotations.ApiOperation; @@ -27,4 +29,25 @@ public ResponseEntity create(@RequestBody ActivityCURequest request) { Long id = activityService.create(request.getCategoryId(), ActivityContentDto.from(request)); return ResponseEntity.ok(id); } + + @GetMapping("/activity/{id}") + @ApiOperation(value = ApiDoc.ACTIVITY_READ) + public ResponseEntity find(@PathVariable Long id) { + + ActivityResponse response = ActivityResponse.from(activityService.find(id)); + return ResponseEntity.ok(response); + + } + + @GetMapping("/activities") + @ApiOperation(value = ApiDoc.ACTIVITY_READ_ALL) + public ResponseEntity> findAll() { + + List responses = activityService.findAll() + .stream() + .map(ActivityResponse::from) + .collect(Collectors.toList()); + return ResponseEntity.ok(responses); + + } } diff --git a/src/main/java/com/server/hispath/activity/presentation/response/ActivityResponse.java b/src/main/java/com/server/hispath/activity/presentation/response/ActivityResponse.java new file mode 100644 index 0000000..07985bf --- /dev/null +++ b/src/main/java/com/server/hispath/activity/presentation/response/ActivityResponse.java @@ -0,0 +1,25 @@ +package com.server.hispath.activity.presentation.response; + +import com.server.hispath.activity.application.dto.ActivityDto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ActivityResponse { + private Long id; + private Long categoryId; + private String categoryName; + private String semester; + private boolean personal; + private String data; + + public static ActivityResponse from(ActivityDto dto) { + return new ActivityResponse(dto.getId(), dto.getCategoryDto().getId(), dto.getCategoryDto().getName(), + dto.getSemester(), dto.isPersonal(), dto.getData()); + } +} diff --git a/src/main/java/com/server/hispath/category/application/dto/CategoryDto.java b/src/main/java/com/server/hispath/category/application/dto/CategoryDto.java new file mode 100644 index 0000000..2f96fa6 --- /dev/null +++ b/src/main/java/com/server/hispath/category/application/dto/CategoryDto.java @@ -0,0 +1,21 @@ +package com.server.hispath.category.application.dto; + +import com.server.hispath.category.domain.ActivityType; +import com.server.hispath.category.domain.Category; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class CategoryDto { + private Long id; + private String type; + private String name; + + public static CategoryDto from(Category category) { + return new CategoryDto(category.getId(), category.getType().name(), category.getName()); + } +} diff --git a/src/main/java/com/server/hispath/docs/ApiDoc.java b/src/main/java/com/server/hispath/docs/ApiDoc.java index c4473f3..6a81c7c 100644 --- a/src/main/java/com/server/hispath/docs/ApiDoc.java +++ b/src/main/java/com/server/hispath/docs/ApiDoc.java @@ -8,6 +8,8 @@ public class ApiDoc { /* Activity 관련 API 명세 */ public static final String ACTIVITY_CREATE = "단일 활동 생성"; + public static final String ACTIVITY_READ = "단일 활동 조회"; + public static final String ACTIVITY_READ_ALL = "모든 활동 조회"; /* Category 관련 API 명세 */ public static final String CATEGORY_READ = "단일 카테고리 조회"; From e973d86b978b5ec04803e1f7559826967c1bdd4c Mon Sep 17 00:00:00 2001 From: gomster Date: Wed, 21 Sep 2022 14:38:30 +0900 Subject: [PATCH 09/10] =?UTF-8?q?feat[#2]=20:=20Activity=20update=20API=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/application/ActivityService.java | 30 +++++++++++++------ .../hispath/activity/domain/Activity.java | 8 +++++ .../presentation/ActivityController.java | 9 ++++++ .../category/application/CategoryService.java | 8 +++-- .../presentation/CategoryController.java | 2 +- .../java/com/server/hispath/docs/ApiDoc.java | 2 ++ 6 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/server/hispath/activity/application/ActivityService.java b/src/main/java/com/server/hispath/activity/application/ActivityService.java index 1a6be1b..b5bcf97 100644 --- a/src/main/java/com/server/hispath/activity/application/ActivityService.java +++ b/src/main/java/com/server/hispath/activity/application/ActivityService.java @@ -7,13 +7,12 @@ import com.server.hispath.activity.application.dto.ActivityDto; import com.server.hispath.activity.domain.Activity; import com.server.hispath.activity.domain.repository.ActivityRepository; +import com.server.hispath.category.application.CategoryService; import com.server.hispath.category.domain.Category; -import com.server.hispath.category.domain.repository.CategoryRepository; import com.server.hispath.exception.activity.ActivityNotFoundException; -import com.server.hispath.exception.category.CategoryNotFoundException; -import org.springframework.data.crossstore.ChangeSetPersister; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import lombok.RequiredArgsConstructor; @@ -22,28 +21,41 @@ public class ActivityService { private final ActivityRepository activityRepository; - private final CategoryRepository categoryRepository; + private final CategoryService categoryService; + @Transactional public Long create(Long categoryId, ActivityContentDto dto) { - Category category = categoryRepository.findById(categoryId).orElseThrow(CategoryNotFoundException::new); + Category category = categoryService.findById(categoryId); Activity activity = Activity.from(category, dto); Activity savedActivity = activityRepository.save(activity); return savedActivity.getId(); } - + @Transactional(readOnly = true) public ActivityDto find(Long id) { Activity activity = this.findById(id); return ActivityDto.from(activity); } - private Activity findById(Long id) { - return activityRepository.findById(id).orElseThrow(ActivityNotFoundException::new); - } + + @Transactional(readOnly = true) public List findAll() { List activities = activityRepository.findAll(); return activities.stream() .map(ActivityDto::from) .collect(Collectors.toList()); } + + @Transactional + public ActivityDto update(Long id, Long categoryId, ActivityContentDto dto){ + Activity activity = this.findById(id); + Category category = categoryService.findById(categoryId); + activity.update(category, dto); + + return ActivityDto.from(activity); + } + + private Activity findById(Long id) { + return activityRepository.findById(id).orElseThrow(ActivityNotFoundException::new); + } } diff --git a/src/main/java/com/server/hispath/activity/domain/Activity.java b/src/main/java/com/server/hispath/activity/domain/Activity.java index 41f04e5..b21b85d 100644 --- a/src/main/java/com/server/hispath/activity/domain/Activity.java +++ b/src/main/java/com/server/hispath/activity/domain/Activity.java @@ -55,4 +55,12 @@ public static Activity from(Category category, ActivityContentDto dto) { .data(dto.getData()) .build(); } + + public void update(Category category, ActivityContentDto dto){ + this.category = category; + this.semester = dto.getSemester(); + this.personal = dto.isPersonal(); + this.requestStatus = dto.getRequestStatus(); + this.data = dto.getData(); + } } diff --git a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java index ded4374..ac42747 100644 --- a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java +++ b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java @@ -50,4 +50,13 @@ public ResponseEntity> findAll() { return ResponseEntity.ok(responses); } + + @PatchMapping("/activity/{id}") + @ApiOperation(value = ApiDoc.ACTIVITY_UPDATE) + public ResponseEntity update(@PathVariable Long id, @RequestBody ActivityCURequest request) { + ActivityDto dto = activityService.update(id, request.getCategoryId(), ActivityContentDto.from(request)); + ActivityResponse response = ActivityResponse.from(dto); + + return ResponseEntity.ok(response); + } } diff --git a/src/main/java/com/server/hispath/category/application/CategoryService.java b/src/main/java/com/server/hispath/category/application/CategoryService.java index 89c3bf3..0b52862 100644 --- a/src/main/java/com/server/hispath/category/application/CategoryService.java +++ b/src/main/java/com/server/hispath/category/application/CategoryService.java @@ -27,8 +27,8 @@ public Long create(CategoryCUDto dto) { } @Transactional(readOnly = true) - public CategoryContentDto findById(Long id) { - Category category = categoryRepository.findById(id).orElseThrow(CategoryNotFoundException::new); + public CategoryContentDto find(Long id) { + Category category = this.findById(id); return CategoryContentDto.from(category); } @@ -51,4 +51,8 @@ public CategoryContentDto update(Long id, CategoryCUDto dto){ public void delete(Long id){ categoryRepository.deleteById(id); } + + public Category findById(Long id){ + return categoryRepository.findById(id).orElseThrow(CategoryNotFoundException::new); + } } diff --git a/src/main/java/com/server/hispath/category/presentation/CategoryController.java b/src/main/java/com/server/hispath/category/presentation/CategoryController.java index 8dd3ed0..fe812e8 100644 --- a/src/main/java/com/server/hispath/category/presentation/CategoryController.java +++ b/src/main/java/com/server/hispath/category/presentation/CategoryController.java @@ -36,7 +36,7 @@ public ResponseEntity create(@RequestBody CategoryCURequest request) { @GetMapping("/category/{id}") @ApiOperation(value = ApiDoc.CATEGORY_READ) public ResponseEntity find(@PathVariable Long id) { - CategoryContentDto dto = categoryService.findById(id); + CategoryContentDto dto = categoryService.find(id); CategoryResponse response = CategoryResponse.from(dto); return ResponseEntity.ok(response); } diff --git a/src/main/java/com/server/hispath/docs/ApiDoc.java b/src/main/java/com/server/hispath/docs/ApiDoc.java index 6a81c7c..9325290 100644 --- a/src/main/java/com/server/hispath/docs/ApiDoc.java +++ b/src/main/java/com/server/hispath/docs/ApiDoc.java @@ -10,6 +10,8 @@ public class ApiDoc { public static final String ACTIVITY_CREATE = "단일 활동 생성"; public static final String ACTIVITY_READ = "단일 활동 조회"; public static final String ACTIVITY_READ_ALL = "모든 활동 조회"; + public static final String ACTIVITY_UPDATE = "활동 수정"; + public static final String ACTIVITY_DELETE = "활동 삭제"; /* Category 관련 API 명세 */ public static final String CATEGORY_READ = "단일 카테고리 조회"; From 6dd6934988b230a6735e382320db79462f27a3cf Mon Sep 17 00:00:00 2001 From: gomster Date: Wed, 21 Sep 2022 14:40:39 +0900 Subject: [PATCH 10/10] =?UTF-8?q?feat[#2]=20:=20Activity=20Delete=20API=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hispath/activity/application/ActivityService.java | 5 +++++ .../hispath/activity/presentation/ActivityController.java | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/com/server/hispath/activity/application/ActivityService.java b/src/main/java/com/server/hispath/activity/application/ActivityService.java index b5bcf97..d0ebcba 100644 --- a/src/main/java/com/server/hispath/activity/application/ActivityService.java +++ b/src/main/java/com/server/hispath/activity/application/ActivityService.java @@ -55,6 +55,11 @@ public ActivityDto update(Long id, Long categoryId, ActivityContentDto dto){ return ActivityDto.from(activity); } + @Transactional + public void delete(Long id){ + activityRepository.deleteById(id); + } + private Activity findById(Long id) { return activityRepository.findById(id).orElseThrow(ActivityNotFoundException::new); } diff --git a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java index ac42747..5933219 100644 --- a/src/main/java/com/server/hispath/activity/presentation/ActivityController.java +++ b/src/main/java/com/server/hispath/activity/presentation/ActivityController.java @@ -59,4 +59,11 @@ public ResponseEntity update(@PathVariable Long id, @RequestBo return ResponseEntity.ok(response); } + + @DeleteMapping("/activity/{id}") + @ApiOperation(value = ApiDoc.ACTIVITY_DELETE) + public ResponseEntity delete(@PathVariable Long id) { + activityService.delete(id); + return ResponseEntity.ok(id); + } }