Skip to content
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

Feat/group(create, get list) #70

Open
wants to merge 15 commits into
base: develop
Choose a base branch
from
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.soogung.simblue.domain.group.domain;

import com.soogung.simblue.domain.group.domain.type.GroupType;
import com.soogung.simblue.global.entity.BaseTimeEntity;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Table(name = "tbl_group")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class Group extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "group_id")
private Long id;

@Column(nullable = false, length = 20)
private String name;

@Enumerated(EnumType.STRING)
@Column(nullable = false, length = 10)
private GroupType type;

@Builder
public Group(String name, GroupType type) {
this.name = name;
this.type = type;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.soogung.simblue.domain.group.domain;

import com.soogung.simblue.domain.user.domain.Student;
import com.soogung.simblue.global.entity.BaseTimeEntity;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Table(name = "tbl_member")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
public class Member extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id", nullable = false)
private Student student;

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

@Builder
public Member(Student student, Group group) {
this.student = student;
this.group = group;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.soogung.simblue.domain.group.domain.repository;

import com.soogung.simblue.domain.group.domain.Group;
import com.soogung.simblue.domain.group.domain.Member;
import org.springframework.data.repository.CrudRepository;

import java.util.List;


public interface GroupRepository extends CrudRepository<Group, Long> {

List<Group> findAll();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.soogung.simblue.domain.group.domain.repository;

import com.soogung.simblue.domain.group.domain.Member;
import org.springframework.data.repository.CrudRepository;

public interface MemberRepository extends CrudRepository<Member, Long> {


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.soogung.simblue.domain.group.domain.type;

public enum GroupType {

CLASS, YEAR, MAJOR, ETC
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.soogung.simblue.domain.group.exception;


import com.soogung.simblue.domain.group.exception.error.GroupErrorProperty;
import com.soogung.simblue.domain.user.exception.UserNotFoundException;
import com.soogung.simblue.global.error.exception.SimblueException;

public class GroupNotFoundException extends SimblueException {

public final static GroupNotFoundException EXCEPTION = new GroupNotFoundException();
private GroupNotFoundException() { super(GroupErrorProperty.GROUP_NOT_FOUND); }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.soogung.simblue.domain.group.exception.error;

import com.soogung.simblue.global.error.exception.ErrorProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum GroupErrorProperty implements ErrorProperty {

GROUP_NOT_FOUND(404, "그룹이 없습니다.");

private final int status;
private final String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.soogung.simblue.domain.group.facade;

import com.soogung.simblue.domain.application.domain.Application;
import com.soogung.simblue.domain.application.exception.ApplicationNotFoundException;
import com.soogung.simblue.domain.group.domain.Group;
import com.soogung.simblue.domain.group.domain.repository.GroupRepository;
import com.soogung.simblue.domain.group.exception.GroupNotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
@RequiredArgsConstructor
public class GroupFacade {

private final GroupRepository groupRepository;

@Transactional(readOnly = true)
public Group findGroup(Long id) {
return groupRepository.findById(id)
.orElseThrow(() -> GroupNotFoundException.EXCEPTION);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.soogung.simblue.domain.group.presentation;

import com.soogung.simblue.domain.group.presentation.dto.request.GroupRequest;
import com.soogung.simblue.domain.group.presentation.dto.response.GroupListResponse;
import com.soogung.simblue.domain.group.service.CreateGroupService;
import com.soogung.simblue.domain.group.service.QueryGroupService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RestController
@RequestMapping("/group")
@RequiredArgsConstructor
public class GroupController {

private final CreateGroupService createGroupService;

private final QueryGroupService queryGroupService;

@PostMapping
public void createGroup(@RequestBody @Valid GroupRequest request) {
createGroupService.execute(request);
}

@GetMapping
public GroupListResponse getGroupList(){
return queryGroupService.execute();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.soogung.simblue.domain.group.presentation;

import com.soogung.simblue.domain.group.presentation.dto.request.AddGroupRequest;
import com.soogung.simblue.domain.group.service.AddGroupService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@RestController
@RequestMapping("/group")
@RequiredArgsConstructor
public class MemberController {

private final AddGroupService addGroupService;

@PostMapping("/{id}/add")
public void addMember(@PathVariable Long id,@RequestBody @Valid AddGroupRequest request) {
addGroupService.execute(id, request);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.soogung.simblue.domain.group.presentation.dto.request;

import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;

@Getter
@NoArgsConstructor
public class AddGroupRequest {

private List<MemberRequest> memberList;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.soogung.simblue.domain.group.presentation.dto.request;

import com.soogung.simblue.domain.group.domain.Group;
import com.soogung.simblue.domain.group.domain.type.GroupType;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Getter
@AllArgsConstructor
@NoArgsConstructor
public class GroupRequest {

@NotNull
@Size(min = 1, max = 20)
private String name;

@NotNull
private GroupType type;

public Group toEntity() {
return Group.builder()
.name(name)
.type(type)
.build();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.soogung.simblue.domain.group.presentation.dto.request;

import com.sun.istack.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@AllArgsConstructor
@NoArgsConstructor
public class MemberRequest {

private Long studentId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.soogung.simblue.domain.group.presentation.dto.response;

import com.soogung.simblue.domain.group.domain.Group;
import com.soogung.simblue.domain.group.domain.type.GroupType;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

import java.util.List;

@Getter
@AllArgsConstructor
public class GroupListResponse {

private List<GroupResponse> groupList;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.soogung.simblue.domain.group.presentation.dto.response;

import com.soogung.simblue.domain.group.domain.Group;
import com.soogung.simblue.domain.group.domain.type.GroupType;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class GroupResponse {

private Long id;
private String name;
private GroupType type;

public static GroupResponse of(Group group) {
return GroupResponse.builder()
.id(group.getId())
.name(group.getName())
.type(group.getType())
.build();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.soogung.simblue.domain.group.service;

import com.soogung.simblue.domain.group.domain.Group;
import com.soogung.simblue.domain.group.domain.Member;
import com.soogung.simblue.domain.group.domain.repository.GroupRepository;
import com.soogung.simblue.domain.group.domain.repository.MemberRepository;
import com.soogung.simblue.domain.group.facade.GroupFacade;
import com.soogung.simblue.domain.group.presentation.dto.request.AddGroupRequest;
import com.soogung.simblue.domain.user.facade.UserFacade;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class AddGroupService {

private final GroupRepository groupRepository;
private final MemberRepository memberRepository;
private final UserFacade userFacade;
private final GroupFacade groupFacade;

@Transactional
public void execute(Long id, AddGroupRequest request) {

Group group = groupFacade.findGroup(id);

memberRepository.saveAll(
request.getMemberList().stream().map(
(member) -> Member.builder()
.student(userFacade.findStudentById(member.getStudentId()))
.group(group)
.build()
).collect(Collectors.toList())
);

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.soogung.simblue.domain.group.service;

import com.soogung.simblue.domain.group.domain.Group;
import com.soogung.simblue.domain.group.domain.repository.GroupRepository;
import com.soogung.simblue.domain.group.presentation.dto.request.GroupRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;

@Service
@RequiredArgsConstructor
public class CreateGroupService {

private final GroupRepository groupRepository;

@Transactional
public void execute(GroupRequest request) {
groupRepository.save(request.toEntity());
}

}
Loading