Skip to content
Open
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
13 changes: 1 addition & 12 deletions src/main/java/flipnote/group/adapter/in/web/GroupController.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,32 +117,21 @@ public ResponseEntity<FindGroupResponseDto> findGroup(

/**
* 그룹 삭제
* todo 추후 권한 체크 후 권한 확인 후 삭제
* @param userId
* @param groupId
* @return
*/
@DeleteMapping("/{groupId}")
public ResponseEntity<Void> deleteGroup(
@RequestHeader("X-USER-ID") Long userId,
@PathVariable("groupId") Long groupId
) {
@PathVariable("groupId") Long groupId) {

DeleteGroupCommand cmd = new DeleteGroupCommand(userId, groupId);

deleteGroupUseCase.deleteGroup(cmd);

return ResponseEntity.noContent().build();
}

//todo 그룹 내 멤버 조회

//todo 그룹 전체 조회

//todo 내 그룹 전체 조회

//todo 내가 생성한 그룹 전체 조회

//todo 하위 권한 수정

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package flipnote.group.adapter.in.web;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import flipnote.group.api.dto.request.GroupListRequestDto;
import flipnote.group.api.dto.response.CursorPagingResponseDto;
import flipnote.group.application.port.in.FindGroupUseCase;
import flipnote.group.domain.model.group.GroupInfo;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@RestController
@RequestMapping("/v1/groups")
public class GroupQueryController {

private final FindGroupUseCase findGroupUseCase;

//그룹 전체 조회
@GetMapping
public ResponseEntity<CursorPagingResponseDto<GroupInfo>> findGroup(
@RequestHeader("X-USER-ID") Long userId,
@Valid @ModelAttribute GroupListRequestDto req
) {
CursorPagingResponseDto<GroupInfo> res = findGroupUseCase.findAllGroup(userId, req);

return ResponseEntity.ok(res);
}

//내 그룹 전체 조회
@GetMapping("/me")
public ResponseEntity<CursorPagingResponseDto<GroupInfo>> findMyGroup(
@RequestHeader("X-USER-ID") Long userId,
@Valid @ModelAttribute GroupListRequestDto req
) {
CursorPagingResponseDto<GroupInfo> res = findGroupUseCase.findMyGroup(userId, req);

return ResponseEntity.ok(res);
}

//내가 생성한 그룹 전체 조회
@GetMapping("/created")
public ResponseEntity<CursorPagingResponseDto<GroupInfo>> findCreatedGroup(
@RequestHeader("X-USER-ID") Long userId,
@Valid @ModelAttribute GroupListRequestDto req
) {
CursorPagingResponseDto<GroupInfo> res = findGroupUseCase.findCreatedGroup(userId, req);

return ResponseEntity.ok(res);
}
}
78 changes: 78 additions & 0 deletions src/main/java/flipnote/group/adapter/in/web/JoinController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package flipnote.group.adapter.in.web;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import flipnote.group.api.dto.request.ApplicationFormRequestDto;
import flipnote.group.api.dto.response.ApplicationFormResponseDto;
import flipnote.group.api.dto.response.FindJoinFormListResponseDto;
import flipnote.group.application.port.in.JoinUseCase;
import flipnote.group.application.port.in.command.ApplicationFormCommand;
import flipnote.group.application.port.in.command.FindJoinFormCommand;
import flipnote.group.application.port.in.result.ApplicationFormResult;
import flipnote.group.application.port.in.result.FindJoinFormListResult;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

@RestController
@RequestMapping("/v1/groups/{groupId}")
@RequiredArgsConstructor
public class JoinController {

private final JoinUseCase joinUseCase;

/**
* 가입 신청 요청
* @param userId
* @param groupId
* @param req
* @return
*/
@PostMapping("/joins")
public ResponseEntity<ApplicationFormResponseDto> joinRequest(
@RequestHeader("X-USER-ID") Long userId,
@PathVariable("groupId") Long groupId,
@Valid @RequestBody ApplicationFormRequestDto req) {

ApplicationFormCommand cmd = new ApplicationFormCommand(userId, groupId, req.joinIntro());

ApplicationFormResult result = joinUseCase.joinRequest(cmd);

ApplicationFormResponseDto res = ApplicationFormResponseDto.from(result.join());

return ResponseEntity.status(HttpStatus.CREATED).body(res);
}

/**
* 그룹 가입 신청 리스트 조회
* @param userId
* @param groupId
* @return
*/
@GetMapping("/joins")
public ResponseEntity<FindJoinFormListResponseDto> findGroupJoinList(
@RequestHeader("X-USER-ID") Long userId,
@PathVariable("groupId") Long groupId) {

FindJoinFormCommand cmd = new FindJoinFormCommand(userId, groupId);

FindJoinFormListResult result = joinUseCase.findJoinFormList(cmd);

FindJoinFormListResponseDto res = FindJoinFormListResponseDto.from(result);

return ResponseEntity.status(HttpStatus.CREATED).body(res);
}

//todo 가입신청 응답

//todo 가입신청 삭제

//todo 내가 신청한 가입신청 리스트 조회
}
53 changes: 41 additions & 12 deletions src/main/java/flipnote/group/adapter/in/web/MemberController.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,47 @@
package flipnote.group.adapter.in.web;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import flipnote.group.api.dto.response.FindGroupMemberResponseDto;
import flipnote.group.application.port.in.FindGroupMemberUseCase;
import flipnote.group.application.port.in.command.FindGroupMemberCommand;
import flipnote.group.application.port.in.result.FindGroupMemberResult;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@RestController
@RequestMapping("/v1/groups/{groupId}")
public class MemberController {
//todo 가인 신청 요청

//todo 그룹 내 가입 신청한 리스트 조회

//todo 가입신청 응답

//todo 가입신청 삭제

//todo 내가 신청한 가입신청 리스트 조회

//todo 초대

//todo 그룹 멤버 추방
private final FindGroupMemberUseCase findGroupMemberUseCase;

/**
* 그룹 내 멤버 전체 조회
* @param userId
* @param groupId
* @return
*/
@GetMapping("/members")
public ResponseEntity<FindGroupMemberResponseDto> findGroupMembers(
@RequestHeader("X-USER-ID") Long userId,
@PathVariable("groupId") Long groupId) {

FindGroupMemberCommand cmd = new FindGroupMemberCommand(userId, groupId);

FindGroupMemberResult result = findGroupMemberUseCase.findGroupMember(cmd);

FindGroupMemberResponseDto res = FindGroupMemberResponseDto.from(result);

return ResponseEntity.ok(res);
}

//todo 하위 권한 수정

//todo 그룹 멤버 추방
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import lombok.AccessLevel;
Expand Down Expand Up @@ -40,14 +43,15 @@ public class GroupMemberEntity extends BaseEntity {
@Column(name = "user_id", nullable = false)
private Long userId;

@Column(name = "group_role_id", nullable = false)
private Long groupRoleId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "group_role_id", nullable = false)
private RoleEntity role;

@Builder
private GroupMemberEntity(Long groupId, Long userId, Long groupRoleId) {
private GroupMemberEntity(Long groupId, Long userId, RoleEntity role) {
this.groupId = groupId;
this.userId = userId;
this.groupRoleId = groupRoleId;
this.role = role;
}

/**
Expand All @@ -56,11 +60,11 @@ private GroupMemberEntity(Long groupId, Long userId, Long groupRoleId) {
* @param userId
* @return
*/
public static GroupMemberEntity create(Long groupId, Long userId, Long groupRoleId) {
public static GroupMemberEntity create(Long groupId, Long userId, RoleEntity role) {
return GroupMemberEntity.builder()
.groupId(groupId)
.userId(userId)
.groupRoleId(groupRoleId)
.role(role)
.build();
}
}
54 changes: 54 additions & 0 deletions src/main/java/flipnote/group/adapter/out/entity/JoinEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package flipnote.group.adapter.out.entity;

import flipnote.group.domain.model.BaseEntity;
import flipnote.group.domain.model.join.JoinStatus;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@Entity
@Table(name = "joins")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class JoinEntity extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "user_id", nullable = false)
private Long userId;

// @ManyToOne(fetch = FetchType.LAZY)
// @JoinColumn(name = "group_id", nullable = false)
// private GroupEntity group;

@Column(name = "group_id", nullable = false)
private Long groupId;

@Enumerated(EnumType.STRING)
@Column(nullable = false)
private JoinStatus status;

@Column(name = "form")
private String form;

@Builder
private JoinEntity(Long userId, Long groupId, JoinStatus status, String form) {
this.userId = userId;
this.groupId = groupId;
this.status = status;
this.form = form;
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
package flipnote.group.adapter.out.persistence;

import java.util.List;

import org.springframework.stereotype.Repository;

import flipnote.group.adapter.out.entity.GroupMemberEntity;
import flipnote.group.adapter.out.entity.RoleEntity;
import flipnote.group.adapter.out.persistence.mapper.GroupMemberMapper;
import flipnote.group.application.port.out.GroupMemberRepositoryPort;
import flipnote.group.domain.model.member.GroupMemberRole;
import flipnote.group.domain.model.member.MemberInfo;
import flipnote.group.infrastructure.persistence.jpa.GroupMemberRepository;
import flipnote.group.infrastructure.persistence.jpa.GroupRoleRepository;
import lombok.RequiredArgsConstructor;

@Repository
@RequiredArgsConstructor
public class GroupMemberRepositoryAdapter implements GroupMemberRepositoryPort {

private final GroupRoleRepository groupRoleRepository;
private final GroupMemberRepository groupMemberRepository;

/**
Expand All @@ -20,8 +27,11 @@ public class GroupMemberRepositoryAdapter implements GroupMemberRepositoryPort {
* @param userId
*/
@Override
public void save(Long groupId, Long userId, Long roleId) {
groupMemberRepository.save(GroupMemberMapper.create(groupId, userId, roleId));
public void save(Long groupId, Long userId, GroupMemberRole role) {

RoleEntity roleEntity = groupRoleRepository.findByGroupIdAndRole(groupId, role);

groupMemberRepository.save(GroupMemberMapper.create(groupId, userId, roleEntity));
}

/**
Expand All @@ -31,7 +41,26 @@ public void save(Long groupId, Long userId, Long roleId) {
* @return
*/
@Override
public boolean existsUserInGroup(Long groupId, Long userId) {
return groupMemberRepository.existsByGroupIdAndUserId(groupId, userId);
public void existsUserInGroup(Long groupId, Long userId) {

boolean isMember = groupMemberRepository.existsByGroupIdAndUserId(groupId, userId);

if(!isMember) {
throw new IllegalArgumentException("user not in Group");
}
}

/**
* 그룹 멤버 아이디 조회
* @param groupId
* @return
*/
@Override
public List<MemberInfo> findMemberInfo(Long groupId) {
List<GroupMemberEntity> entities = groupMemberRepository.findAllByGroupId(groupId);

List<MemberInfo> memberInfo = GroupMemberMapper.toMemberInfo(entities);

return memberInfo;
}
}
Loading