Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package clap.server.adapter.inbound.web.dto.task;


public record AttachmentRequest(
Long fileId,
String fileUrl) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.time.LocalDateTime;

public record AttachmentResponse(
Long fileId,
String fileName,
String fileSize,
String fileUrl,
Expand Down
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

같은 dto 형식이라도 dto는 API마다 분리해주시면 좋을것 같습니다!

Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package clap.server.adapter.inbound.web.dto.task;

public record CreateTaskResponse(


public record CreateAndUpdateTaskResponse(
Long taskId,
Long categoryId,
String title
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package clap.server.adapter.inbound.web.dto.task;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

import java.util.List;

public record UpdateTaskRequest(
@NotNull
Long taskId,
@NotNull
Long categoryId,
@NotNull
Long mainCategoryId,
@NotBlank
String title,
String description,
List<AttachmentRequest> attachmentRequests
) {
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,25 +1,30 @@
package clap.server.adapter.inbound.web.task;

import clap.server.adapter.inbound.web.dto.task.FindTaskDetailsResponse;
import clap.server.adapter.inbound.web.dto.task.FindTaskListRequest;
import clap.server.adapter.inbound.web.dto.task.FindTaskListResponse;
import clap.server.application.port.inbound.task.FindTaskDetailsUsecase;
import clap.server.application.port.inbound.task.FindTaskListUsecase;
import clap.server.common.annotation.architecture.WebAdapter;
import lombok.RequiredArgsConstructor;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@WebAdapter
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/tasks")
public class FindTaskListController {
public class FindTaskController {
private final FindTaskDetailsUsecase taskDetailsUsecase;
private final FindTaskListUsecase taskListUsecase;
private static final Long taskId = 3L;
private static final Long memberId = 4L;


@GetMapping("/requests")
public ResponseEntity<Page<FindTaskListResponse>> getRequestedTaskList(
@RequestParam(defaultValue = "0") int page,
Expand All @@ -28,4 +33,9 @@ public ResponseEntity<Page<FindTaskListResponse>> getRequestedTaskList(
Pageable pageable = PageRequest.of(page, size);
return ResponseEntity.ok(taskListUsecase.findRequestedTaskList(memberId, pageable, findTaskListRequest));
}
}

@GetMapping("/requests/details")
public ResponseEntity<List<FindTaskDetailsResponse>> getRequestedTaskDetails(){
return ResponseEntity.ok(taskDetailsUsecase.findRequestedTaskDetails(memberId, taskId));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package clap.server.adapter.inbound.web.task;

import clap.server.adapter.inbound.web.dto.task.CreateTaskRequest;
import clap.server.adapter.inbound.web.dto.task.CreateAndUpdateTaskResponse;
import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest;
import clap.server.application.port.inbound.task.CreateTaskUsecase;
import clap.server.application.port.inbound.task.UpdateTaskUsecase;
import clap.server.common.annotation.architecture.WebAdapter;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;


@WebAdapter
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/tasks")
public class ManagementTaskController {

private final CreateTaskUsecase createTaskUsecase;
private final UpdateTaskUsecase updateTaskUsecase;
private static final Long memberId = 4L;

@PostMapping
public ResponseEntity<CreateAndUpdateTaskResponse> createTask(
@RequestBody @Valid CreateTaskRequest createTaskRequest){
return ResponseEntity.ok(createTaskUsecase.createTask(memberId, createTaskRequest));
}

@PatchMapping
public ResponseEntity<CreateAndUpdateTaskResponse> updateTask(
@RequestBody @Valid UpdateTaskRequest updateTaskRequest){
return ResponseEntity.ok(updateTaskUsecase.updateTask(memberId, updateTaskRequest));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,9 @@ public List<Attachment> findAllByTaskId(final Long taskId) {
.map(attachmentPersistenceMapper::toDomain)
.collect(Collectors.toList());
}

@Override
public void deleteByIds(List<Long> attachmentIds) {
attachmentRepository.deleteAllByAttachmentIdIn(attachmentIds);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ public class AttachmentEntity extends BaseTimeEntity {
@Column(nullable = false)
private String fileUrl;

@Column(nullable = false)
private String fileSize;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "task_id")
private TaskEntity task;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "comment_id")
private CommentEntity comment;

@Column(nullable = false)
private String fileSize;
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@
@Repository
public interface AttachmentRepository extends JpaRepository<AttachmentEntity, Long> {
List<AttachmentEntity> findAllByTask_TaskId(Long taskId);
// fileIds 목록을 받아 해당하는 파일들을 삭제
void deleteAllByAttachmentIdIn(List<Long> attachmentIds);

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package clap.server.application.Task;

import clap.server.adapter.inbound.web.dto.task.CreateTaskRequest;
import clap.server.adapter.inbound.web.dto.task.CreateTaskResponse;
import clap.server.adapter.inbound.web.dto.task.CreateAndUpdateTaskResponse;

import clap.server.application.mapper.AttachmentMapper;
import clap.server.application.mapper.TaskMapper;
import clap.server.application.port.inbound.domain.CategoryService;
import clap.server.application.port.inbound.domain.MemberService;
Expand All @@ -25,7 +24,6 @@

@ApplicationService
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class CreateTaskService implements CreateTaskUsecase {

private final MemberService memberService;
Expand All @@ -35,16 +33,15 @@ public class CreateTaskService implements CreateTaskUsecase {

@Override
@Transactional
public CreateTaskResponse createTask(Long requesterId, CreateTaskRequest createTaskRequest) {
public CreateAndUpdateTaskResponse createTask(Long requesterId, CreateTaskRequest createTaskRequest) {
Member member = memberService.findActiveMember(requesterId);
Category category = categoryService.findById(createTaskRequest.categoryId());

Task task = TaskMapper.toTask(member, category, createTaskRequest.title(), createTaskRequest.description());
Task task = Task.createTask(member, category, createTaskRequest.title(), createTaskRequest.description());
Task savedTask = commandTaskPort.save(task);

List<Attachment> attachments = AttachmentMapper.toAttachments(savedTask, createTaskRequest.fileUrls());
List<Attachment> attachments = Attachment.createAttachments(savedTask, createTaskRequest.fileUrls());
commandAttachmentPort.saveAll(attachments);

return TaskMapper.toCreateTaskResponse(savedTask);
return TaskMapper.toCreateAndUpdateTaskResponse(savedTask);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public List<FindTaskDetailsResponse> findRequestedTaskDetails(final Long request
memberService.findActiveMember(requesterId);
Task task = loadTaskPort.findById(taskId)
.orElseThrow(()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND));
List<Attachment> attachments = loadAttachmentPort.findAllByTaskId(taskId);
List<Attachment> attachments = loadAttachmentPort.findAllByTaskId(taskId); //TODO: comment에 달린 이미지 첨부파일은 가져오지 않도록 수정
return TaskMapper.toFindTaskDetailResponses(task, attachments);
}
}
57 changes: 57 additions & 0 deletions src/main/java/clap/server/application/Task/UpdateTaskService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package clap.server.application.Task;

import clap.server.adapter.inbound.web.dto.task.CreateAndUpdateTaskResponse;
import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest;
import clap.server.application.mapper.AttachmentMapper;
import clap.server.application.mapper.TaskMapper;
import clap.server.application.port.inbound.domain.CategoryService;
import clap.server.application.port.inbound.domain.MemberService;
import clap.server.application.port.inbound.domain.TaskService;
import clap.server.application.port.inbound.task.UpdateTaskUsecase;
import clap.server.application.port.outbound.task.CommandAttachmentPort;
import clap.server.application.port.outbound.task.CommandTaskPort;

import clap.server.common.annotation.architecture.ApplicationService;
import clap.server.domain.model.member.Member;
import clap.server.domain.model.task.Attachment;
import clap.server.domain.model.task.Category;
import clap.server.domain.model.task.Task;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;



@ApplicationService
@RequiredArgsConstructor
@Slf4j
public class UpdateTaskService implements UpdateTaskUsecase {

private final MemberService memberService;
private final CategoryService categoryService;
private final TaskService taskService;
private final CommandTaskPort commandTaskPort;
private final CommandAttachmentPort commandAttachmentPort;


@Override
@Transactional
public CreateAndUpdateTaskResponse updateTask(Long requesterId, UpdateTaskRequest updateTaskRequest) {
Member member = memberService.findActiveMember(requesterId);
Category category = categoryService.findById(updateTaskRequest.categoryId());
Task task = taskService.findById(updateTaskRequest.taskId());

Task updatedTask = Task.updateTask(task, member, category, updateTaskRequest.title(), updateTaskRequest.description());
Task savedTask = commandTaskPort.save(updatedTask);

List<Long> attachmentIds = AttachmentMapper.toAttachmentIds(updateTaskRequest.attachmentRequests());
commandAttachmentPort.deleteByIds(attachmentIds);

List<Attachment> attachments = Attachment.updateAttachments(savedTask, updateTaskRequest.attachmentRequests());
commandAttachmentPort.saveAll(attachments);
return TaskMapper.toCreateAndUpdateTaskResponse(savedTask);
}
}
19 changes: 10 additions & 9 deletions src/main/java/clap/server/application/mapper/AttachmentMapper.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
package clap.server.application.mapper;

import clap.server.adapter.inbound.web.dto.task.AttachmentRequest;
import clap.server.adapter.inbound.web.dto.task.AttachmentResponse;
import clap.server.adapter.inbound.web.dto.task.FindTaskDetailsResponse;
import clap.server.domain.model.task.Attachment;
import clap.server.domain.model.task.Task;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class AttachmentMapper {
private AttachmentMapper() {
throw new IllegalArgumentException();
}

public static List<Attachment> toAttachments(Task task, List<String> fileUrls) {
return fileUrls.stream()
.map(fileUrl -> Attachment.builder()
.task(task)
.fileUrl(fileUrl)
.originalName("파일 예시 이름")
.fileSize("16MB") //TODO: 하드코딩 제거
.build())
.collect(Collectors.toList());


public static List<Long> toAttachmentIds(List<AttachmentRequest> attachmentRequests) {
return attachmentRequests.stream()
.map(AttachmentRequest::fileId)
.filter(Objects::nonNull)
.toList();
}

}

Loading
Loading