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
Expand Up @@ -6,6 +6,7 @@
import com.btg.infrastructure.web.auth.dto.request.SignupRequest;
import com.btg.infrastructure.web.auth.dto.response.LoginResponse;
import com.btg.infrastructure.web.auth.dto.response.TokenResponse;
import com.btg.infrastructure.web.mapper.AuthResponseMapper;
import com.btg.infrastructure.web.user.dto.response.UserResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
Expand All @@ -22,6 +23,7 @@ public class AuthController {
private final LoginUseCase loginUseCase;
private final RefreshTokenUseCase refreshTokenUseCase;
private final LogoutUseCase logoutUseCase;
private final AuthResponseMapper authResponseMapper;

@PostMapping("/signup")
public ResponseEntity<UserResponse> signup(@Valid @RequestBody SignupRequest request) {
Expand All @@ -33,14 +35,8 @@ public ResponseEntity<UserResponse> signup(@Valid @RequestBody SignupRequest req

SignupUseCase.UserResult result = signupUseCase.signup(command);

UserResponse response = new UserResponse(
result.id(),
result.email(),
result.name(),
result.createdAt()
);

return ResponseEntity.status(HttpStatus.CREATED).body(response);
return ResponseEntity.status(HttpStatus.CREATED)
.body(authResponseMapper.toUserResponse(result));
}

@PostMapping("/login")
Expand All @@ -52,30 +48,15 @@ public ResponseEntity<LoginResponse> login(@Valid @RequestBody LoginRequest requ

LoginUseCase.LoginResult result = loginUseCase.login(command);

UserResponse userResponse = new UserResponse(
result.user().id(),
result.user().email(),
result.user().name(),
result.user().createdAt()
);

LoginResponse response = new LoginResponse(
result.accessToken(),
result.refreshToken(),
userResponse
);

return ResponseEntity.ok(response);
return ResponseEntity.ok(authResponseMapper.toLoginResponse(result));
}

@PostMapping("/refresh")
public ResponseEntity<TokenResponse> refreshToken(@Valid @RequestBody RefreshTokenRequest request) {
RefreshTokenUseCase.RefreshTokenCommand command = new RefreshTokenUseCase.RefreshTokenCommand(request.refreshToken());
RefreshTokenUseCase.TokenResult result = refreshTokenUseCase.refreshToken(command);

TokenResponse response = new TokenResponse(result.accessToken());

return ResponseEntity.ok(response);
return ResponseEntity.ok(authResponseMapper.toTokenResponse(result));
}

@PostMapping("/logout")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,32 @@
package com.btg.infrastructure.web.dailyprogress;

import com.btg.core.application.port.in.dailyprogress.GetDailyProgressUseCase;
import com.btg.core.application.port.in.dailyprogress.UpdateDailyProgressUseCase;
import com.btg.infrastructure.web.dailyprogress.dto.request.UpdateDailyProgressRequest;
import com.btg.infrastructure.web.dailyprogress.dto.response.DailyProgressResponse;
import com.btg.infrastructure.web.dailyprogress.dto.response.DailyProgressSummaryResponse;
import com.btg.infrastructure.web.dailyprogress.dto.response.DailyStatResponse;
import com.btg.infrastructure.web.dailyprogress.dto.response.MyDailyProgressResponse;
import com.btg.core.application.port.in.dailyprogress.UpdateDailyProgressUseCase;
import com.btg.infrastructure.web.mapper.DailyProgressResponseMapper;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.stream.Collectors;

@RestController
@RequestMapping("/tasks/{taskId}/daily-progress")
@RequiredArgsConstructor
public class DailyProgressController {

private final GetDailyProgressUseCase getDailyProgressUseCase;
private final UpdateDailyProgressUseCase updateDailyProgressUseCase;
private final DailyProgressResponseMapper dailyProgressResponseMapper;

@GetMapping
public ResponseEntity<DailyProgressSummaryResponse> getDailyProgressSummary(@PathVariable Long taskId) {
GetDailyProgressUseCase.DailyProgressSummaryResult result =
getDailyProgressUseCase.getDailyProgressSummary(taskId);

DailyProgressSummaryResponse response = new DailyProgressSummaryResponse(
result.taskId(),
result.startDate(),
result.endDate(),
result.dailyStats().stream()
.map(stat -> new DailyStatResponse(
stat.date(),
stat.completedCount(),
stat.totalParticipants(),
stat.completionRate()
))
.collect(Collectors.toList())
);

return ResponseEntity.ok(response);
return ResponseEntity.ok(dailyProgressResponseMapper.toSummaryResponse(result));
}

@GetMapping("/me")
Expand All @@ -52,19 +37,7 @@ public ResponseEntity<MyDailyProgressResponse> getMyDailyProgress(@PathVariable
GetDailyProgressUseCase.MyDailyProgressResult result =
getDailyProgressUseCase.getMyDailyProgress(taskId, userId);

MyDailyProgressResponse response = new MyDailyProgressResponse(
result.taskId(),
result.userId(),
result.dailyRecords().stream()
.map(record -> new DailyProgressResponse(
record.date(),
record.completed(),
record.completedAt()
))
.collect(Collectors.toList())
);

return ResponseEntity.ok(response);
return ResponseEntity.ok(dailyProgressResponseMapper.toMyProgressResponse(result));
}

@PatchMapping("/{date}")
Expand All @@ -87,12 +60,6 @@ public ResponseEntity<DailyProgressResponse> updateDailyProgress(
UpdateDailyProgressUseCase.DailyProgressResult result =
updateDailyProgressUseCase.updateDailyProgress(command);

DailyProgressResponse response = new DailyProgressResponse(
result.date(),
result.completed(),
result.completedAt()
);

return ResponseEntity.ok(response);
return ResponseEntity.ok(dailyProgressResponseMapper.toProgressResponse(result));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@
import com.btg.infrastructure.web.group.dto.request.CreateGroupRequest;
import com.btg.infrastructure.web.group.dto.request.UpdateGroupRequest;
import com.btg.infrastructure.web.group.dto.response.*;
import com.btg.infrastructure.web.mapper.GroupResponseMapper;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.stream.Collectors;

@RestController
@RequestMapping("/groups")
@RequiredArgsConstructor
Expand All @@ -23,6 +22,8 @@ public class GroupController {
private final DeleteGroupUseCase deleteGroupUseCase;
private final ListGroupsUseCase listGroupsUseCase;

private final GroupResponseMapper groupResponseMapper;

@PostMapping
public ResponseEntity<GroupResponse> createGroup(@Valid @RequestBody CreateGroupRequest request) {
// TODO: Get authenticated user ID from SecurityContext
Expand All @@ -37,21 +38,8 @@ public ResponseEntity<GroupResponse> createGroup(@Valid @RequestBody CreateGroup

CreateGroupUseCase.GroupResult result = createGroupUseCase.createGroup(command);

GroupResponse response = new GroupResponse(
result.id(),
result.name(),
result.description(),
result.memberCount(),
result.maxMembers(),
new UserResponse(
result.createdBy().id(),
result.createdBy().email(),
result.createdBy().name()
),
result.createdAt()
);

return ResponseEntity.status(HttpStatus.CREATED).body(response);
return ResponseEntity.status(HttpStatus.CREATED)
.body(groupResponseMapper.toResponse(result));
}

// TODO: GET /groups/search - 그룹 검색
Expand All @@ -74,52 +62,14 @@ public ResponseEntity<PagedGroupResponse> listGroups(

ListGroupsUseCase.PagedGroupResult result = listGroupsUseCase.listGroups(query);

PagedGroupResponse response = new PagedGroupResponse(
result.content().stream()
.map(group -> new GroupResponse(
group.id(),
group.name(),
group.description(),
group.memberCount(),
group.maxMembers(),
new UserResponse(
group.createdBy().id(),
group.createdBy().email(),
group.createdBy().name()
),
group.createdAt()
))
.collect(Collectors.toList()),
result.totalElements(),
result.totalPages(),
result.page(),
result.size()
);

return ResponseEntity.ok(response);
return ResponseEntity.ok(groupResponseMapper.toPagedResponse(result));
}

@GetMapping("/{groupId}")
public ResponseEntity<GroupDetailResponse> getGroup(@PathVariable Long groupId) {
GetGroupUseCase.GroupDetailResult result = getGroupUseCase.getGroup(groupId);

GroupDetailResponse response = new GroupDetailResponse(
result.id(),
result.name(),
result.description(),
result.memberCount(),
result.maxMembers(),
new UserResponse(
result.createdBy().id(),
result.createdBy().email(),
result.createdBy().name()
),
result.createdAt(),
result.myRole(),
result.taskCount()
);

return ResponseEntity.ok(response);
return ResponseEntity.ok(groupResponseMapper.toDetailResponse(result));
}

@PutMapping("/{groupId}")
Expand All @@ -140,21 +90,7 @@ public ResponseEntity<GroupResponse> updateGroup(

UpdateGroupUseCase.GroupResult result = updateGroupUseCase.updateGroup(command);

GroupResponse response = new GroupResponse(
result.id(),
result.name(),
result.description(),
result.memberCount(),
result.maxMembers(),
new UserResponse(
result.createdBy().id(),
result.createdBy().email(),
result.createdBy().name()
),
result.createdAt()
);

return ResponseEntity.ok(response);
return ResponseEntity.ok(groupResponseMapper.toResponse(result));
}

@DeleteMapping("/{groupId}")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.btg.infrastructure.web.mapper;

import com.btg.core.application.port.in.auth.LoginUseCase;
import com.btg.core.application.port.in.auth.RefreshTokenUseCase;
import com.btg.core.application.port.in.auth.SignupUseCase;
import com.btg.infrastructure.web.auth.dto.response.LoginResponse;
import com.btg.infrastructure.web.auth.dto.response.TokenResponse;
import com.btg.infrastructure.web.user.dto.response.UserResponse;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;

@Mapper(
componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.ERROR
)
public interface AuthResponseMapper {

// SignupUseCase 변환
UserResponse toUserResponse(SignupUseCase.UserResult result);

// LoginUseCase 변환
LoginResponse toLoginResponse(LoginUseCase.LoginResult result);
UserResponse toUserResponse(LoginUseCase.LoginResult.UserInfo userInfo);

// RefreshTokenUseCase 변환
TokenResponse toTokenResponse(RefreshTokenUseCase.TokenResult result);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.btg.infrastructure.web.mapper;

import com.btg.core.application.port.in.dailyprogress.GetDailyProgressUseCase;
import com.btg.core.application.port.in.dailyprogress.UpdateDailyProgressUseCase;
import com.btg.infrastructure.web.dailyprogress.dto.response.DailyProgressResponse;
import com.btg.infrastructure.web.dailyprogress.dto.response.DailyProgressSummaryResponse;
import com.btg.infrastructure.web.dailyprogress.dto.response.DailyStatResponse;
import com.btg.infrastructure.web.dailyprogress.dto.response.MyDailyProgressResponse;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;

import java.util.List;

@Mapper(
componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.ERROR
)
public interface DailyProgressResponseMapper {

// GetDailyProgressUseCase 변환
DailyProgressSummaryResponse toSummaryResponse(GetDailyProgressUseCase.DailyProgressSummaryResult result);
DailyStatResponse toStatResponse(GetDailyProgressUseCase.DailyStat stat);
List<DailyStatResponse> toStatResponseList(List<GetDailyProgressUseCase.DailyStat> stats);

MyDailyProgressResponse toMyProgressResponse(GetDailyProgressUseCase.MyDailyProgressResult result);
DailyProgressResponse toProgressResponse(GetDailyProgressUseCase.DailyRecord record);
List<DailyProgressResponse> toProgressResponseList(List<GetDailyProgressUseCase.DailyRecord> records);

// UpdateDailyProgressUseCase 변환
DailyProgressResponse toProgressResponse(UpdateDailyProgressUseCase.DailyProgressResult result);
}
Loading
Loading