-
Notifications
You must be signed in to change notification settings - Fork 2
feat/#30: Meeting 생성 api 구현 완료 #32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
4389fcd
feat/#30: Meetings Entity 추가
djlim2425 89d46f4
feat/#30: MeetingRepository 추가
djlim2425 95bc6bc
refactor/#30: Meetings Entity 수정
djlim2425 cabd6e3
feat/#30: Meeting 통일 에러코드 추가
djlim2425 cae336f
feat/#30: MeetingConverter 추가
djlim2425 09825fc
Merge branch 'dev' into feat/#30-create-meetings-api
djlim2425 ec894fc
feat/#30: Workspace ErrorStatus 추가
djlim2425 d44d571
fix/#30: Meeting 필드 WorkSpace로 수정
djlim2425 69563ac
feat/#30: Meeting DTO 추가
djlim2425 459709e
feat/#30: MeetingService추가
djlim2425 08a2951
feat/#30: MeetingController추가
djlim2425 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
44 changes: 44 additions & 0 deletions
44
src/main/java/com/haru/api/domain/meeting/controller/MeetingController.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| package com.haru.api.domain.meeting.controller; | ||
|
|
||
| import com.haru.api.domain.meeting.dto.MeetingRequestDTO; | ||
| import com.haru.api.domain.meeting.dto.MeetingResponseDTO; | ||
| import com.haru.api.domain.meeting.service.MeetingService; | ||
| import com.haru.api.domain.user.security.jwt.SecurityUtil; | ||
| import com.haru.api.global.apiPayload.ApiResponse; | ||
| import com.haru.api.global.apiPayload.code.status.ErrorStatus; | ||
| import com.haru.api.global.apiPayload.exception.GeneralException; | ||
| import lombok.RequiredArgsConstructor; | ||
| import org.springframework.http.HttpStatus; | ||
| import org.springframework.http.MediaType; | ||
| import org.springframework.web.bind.annotation.PostMapping; | ||
| import org.springframework.web.bind.annotation.RequestMapping; | ||
| import org.springframework.web.bind.annotation.RequestPart; | ||
| import org.springframework.web.bind.annotation.RestController; | ||
| import org.springframework.web.multipart.MultipartFile; | ||
|
|
||
| @RestController | ||
| @RequestMapping("/api/v1/meetings") | ||
| @RequiredArgsConstructor | ||
| public class MeetingController { | ||
|
|
||
| private final MeetingService meetingService; | ||
|
|
||
| @PostMapping( | ||
| consumes = {MediaType.MULTIPART_FORM_DATA_VALUE }, | ||
| produces = MediaType.APPLICATION_JSON_VALUE | ||
| ) | ||
| public ApiResponse<MeetingResponseDTO.createMeetingResponse> createMeeting( | ||
| @RequestPart("agendaFile") MultipartFile agendaFile, | ||
| @RequestPart("request") MeetingRequestDTO.createMeetingRequest request) { | ||
|
|
||
| // file업로드가 되지 않는 경우 controller단에서 요청 처리 | ||
| if (agendaFile == null || agendaFile.isEmpty()) { | ||
| throw new GeneralException(ErrorStatus.MEETING_FILE_NOT_FOUND); | ||
| } | ||
| Long userId = SecurityUtil.getCurrentUserId(); | ||
|
|
||
| MeetingResponseDTO.createMeetingResponse response = meetingService.createMeeting(userId, agendaFile, request); | ||
|
|
||
| return ApiResponse.onSuccess(response); | ||
| } | ||
| } |
18 changes: 18 additions & 0 deletions
18
src/main/java/com/haru/api/domain/meeting/converter/MeetingConverter.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| package com.haru.api.domain.meeting.converter; | ||
|
|
||
| import com.haru.api.domain.meeting.dto.MeetingResponseDTO; | ||
| import com.haru.api.domain.meeting.entity.Meetings; | ||
| import org.springframework.stereotype.Component; | ||
|
|
||
| @Component | ||
| public class MeetingConverter { | ||
|
|
||
| // Entity -> ResponseDTO | ||
| public static MeetingResponseDTO.createMeetingResponse toCreateMeetingResponse(Meetings meeting) { | ||
| return MeetingResponseDTO.createMeetingResponse.builder() | ||
| .meetingId(meeting.getId()) | ||
| .title(meeting.getTitle()) | ||
| .updatedAt(meeting.getCreatedAt()) | ||
| .build(); | ||
| } | ||
| } |
14 changes: 14 additions & 0 deletions
14
src/main/java/com/haru/api/domain/meeting/dto/MeetingRequestDTO.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| package com.haru.api.domain.meeting.dto; | ||
|
|
||
| import lombok.Builder; | ||
| import lombok.Getter; | ||
|
|
||
| public class MeetingRequestDTO { | ||
|
|
||
| @Getter | ||
| @Builder | ||
| public static class createMeetingRequest{ | ||
| private Long workspaceId; | ||
| private String title; | ||
| } | ||
| } |
19 changes: 19 additions & 0 deletions
19
src/main/java/com/haru/api/domain/meeting/dto/MeetingResponseDTO.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| package com.haru.api.domain.meeting.dto; | ||
|
|
||
| import com.haru.api.domain.meeting.entity.Meetings; | ||
| import lombok.Builder; | ||
| import lombok.Getter; | ||
|
|
||
| import java.time.LocalDateTime; | ||
|
|
||
|
|
||
| public class MeetingResponseDTO { | ||
| @Getter | ||
| @Builder | ||
| public static class createMeetingResponse{ | ||
| private String title; | ||
| private Long meetingId; | ||
| private LocalDateTime updatedAt; | ||
|
|
||
| } | ||
| } |
53 changes: 53 additions & 0 deletions
53
src/main/java/com/haru/api/domain/meeting/entity/Meetings.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| package com.haru.api.domain.meeting.entity; | ||
|
|
||
| import com.haru.api.domain.user.entity.Users; | ||
| import com.haru.api.domain.workspace.entity.Workspace; | ||
| import com.haru.api.global.common.entity.BaseEntity; | ||
| import jakarta.persistence.*; | ||
| import lombok.*; | ||
| import org.hibernate.annotations.DynamicInsert; | ||
| import org.hibernate.annotations.DynamicUpdate; | ||
|
|
||
| @Entity | ||
| @Table(name = "meetings") | ||
| @Getter | ||
| @DynamicUpdate | ||
| @DynamicInsert | ||
| @NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
| public class Meetings extends BaseEntity { | ||
| @Id | ||
| @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
| private Long id; | ||
|
|
||
| @Column(nullable = false, length = 50) | ||
| private String title; | ||
|
|
||
| //file을 직접 저장하면 db의 용량이 커지고 조회때마다 io가 커지므로 저장하지 않도록 함 | ||
| //private String agendaFile; | ||
|
|
||
| private String agendaResult; | ||
|
|
||
| @Column(columnDefinition="TEXT") | ||
| private String proceeding; | ||
|
|
||
| @ManyToOne(fetch = FetchType.LAZY) | ||
| private Users users; | ||
|
|
||
| @ManyToOne(fetch = FetchType.LAZY) | ||
| private Workspace workspaces; | ||
|
|
||
| private Meetings(String title, String agendaResult, Users users, Workspace workspaces) { | ||
| this.title = title; | ||
| this.agendaResult = agendaResult; | ||
| this.users = users; | ||
| this.workspaces = workspaces; | ||
| } | ||
|
|
||
| public static Meetings createInitialMeeting(String title, String agendaResult, Users users, Workspace workspaces) { | ||
| return new Meetings(title, agendaResult, users, workspaces); | ||
| } | ||
|
|
||
| public void updateProceeding(String proceeding) { | ||
| this.proceeding = proceeding; | ||
| } | ||
| } |
9 changes: 9 additions & 0 deletions
9
src/main/java/com/haru/api/domain/meeting/repository/MeetingRepository.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| package com.haru.api.domain.meeting.repository; | ||
|
|
||
| import com.haru.api.domain.meeting.entity.Meetings; | ||
| import org.springframework.data.jpa.repository.JpaRepository; | ||
| import org.springframework.stereotype.Repository; | ||
|
|
||
| @Repository | ||
| public interface MeetingRepository extends JpaRepository<Meetings, Long> { | ||
| } |
10 changes: 10 additions & 0 deletions
10
src/main/java/com/haru/api/domain/meeting/service/MeetingService.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| package com.haru.api.domain.meeting.service; | ||
|
|
||
| import com.haru.api.domain.meeting.dto.MeetingRequestDTO; | ||
| import com.haru.api.domain.meeting.dto.MeetingResponseDTO; | ||
| import org.springframework.web.multipart.MultipartFile; | ||
|
|
||
| public interface MeetingService { | ||
|
|
||
| public MeetingResponseDTO.createMeetingResponse createMeeting(Long userId, MultipartFile agendaFile, MeetingRequestDTO.createMeetingRequest request); | ||
| } |
58 changes: 58 additions & 0 deletions
58
src/main/java/com/haru/api/domain/meeting/service/MeetingServiceImpl.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,58 @@ | ||
| package com.haru.api.domain.meeting.service; | ||
|
|
||
| import com.haru.api.domain.meeting.converter.MeetingConverter; | ||
| import com.haru.api.domain.meeting.dto.MeetingRequestDTO; | ||
| import com.haru.api.domain.meeting.dto.MeetingResponseDTO; | ||
| import com.haru.api.domain.meeting.entity.Meetings; | ||
| import com.haru.api.domain.meeting.repository.MeetingRepository; | ||
| import com.haru.api.domain.user.entity.Users; | ||
| import com.haru.api.domain.user.repository.UserRepository; | ||
| import com.haru.api.domain.workspace.entity.Workspace; | ||
| import com.haru.api.domain.workspace.repository.WorkspaceRepository; | ||
| import com.haru.api.global.apiPayload.code.status.ErrorStatus; | ||
| import com.haru.api.global.apiPayload.exception.handler.MemberHandler; | ||
| import com.haru.api.global.apiPayload.exception.handler.TempHandler; | ||
| import lombok.RequiredArgsConstructor; | ||
| import org.springframework.stereotype.Service; | ||
| import org.springframework.transaction.annotation.Transactional; | ||
| import org.springframework.web.multipart.MultipartFile; | ||
|
|
||
| @Service | ||
| @RequiredArgsConstructor | ||
| @Transactional(readOnly = true) | ||
| public class MeetingServiceImpl implements MeetingService{ | ||
|
|
||
| private final UserRepository userRepository; | ||
| private final WorkspaceRepository workspaceRepository; | ||
| private final MeetingRepository meetingRepository; | ||
|
|
||
| @Override | ||
| @Transactional | ||
| public MeetingResponseDTO.createMeetingResponse createMeeting( | ||
| Long userId, | ||
| MultipartFile agendaFile, | ||
| MeetingRequestDTO.createMeetingRequest request) | ||
| { | ||
| Users foundUser = userRepository.findById(userId) | ||
| .orElseThrow(() -> new MemberHandler(ErrorStatus.MEMBER_NOT_FOUND)); | ||
|
|
||
| Workspace foundWorkspace = workspaceRepository.findById(request.getWorkspaceId()) | ||
| .orElseThrow(() -> new TempHandler(ErrorStatus.WORKSPACE_NOT_FOUND)); | ||
|
|
||
| // agendaFile을 openAi 활용하여 요약 - 미구현 | ||
| String agendaResult = "안건지 요약 - 미구현"; | ||
|
|
||
|
|
||
| Meetings newMeetings = Meetings.createInitialMeeting( | ||
| request.getTitle(), | ||
| agendaResult, | ||
| foundUser, | ||
| foundWorkspace | ||
| ); | ||
|
|
||
| Meetings savedMeeting = meetingRepository.save(newMeetings); | ||
|
|
||
|
|
||
| return MeetingConverter.toCreateMeetingResponse(savedMeeting); | ||
| } | ||
| } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Builder사용해주시면 좋을 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
DDD설계 원칙에 따라 유연성 있는 builder패턴을 사용하지 않고
정적팩토리메서드를 통해 Meeting 객체가 생성될 때 필수 필드들을 강제하고, 도메인 객체 자체가 자신의 생성규칙을 책임지며 초기상태 회의를 생성한다는 의도를 드러내어줄 수 있습니다!