Skip to content
Open
Show file tree
Hide file tree
Changes from 6 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,12 @@
package com.soogung.simblue.domain.group.domain.repository;

import com.soogung.simblue.domain.group.domain.Group;
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,7 @@
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,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 getListGroups(){
return queryGroupService.execute();
}

}
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,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,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 {

final GroupRepository groupRepository;

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

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

import com.soogung.simblue.domain.application.presentation.dto.response.ApplicationResponse;
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.response.GroupListResponse;
import com.soogung.simblue.domain.group.presentation.dto.response.GroupResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class QueryGroupService {

private final GroupRepository groupRepository;

@Transactional(readOnly = true)
public GroupListResponse execute(){
return new GroupListResponse(
groupRepository.findAll()
.stream().map(GroupResponse::of).collect(Collectors.toList())
);
}

}