인프런 워밍업 클럽 스터디 0기
BE 2주차 마무리
package com.example.company.controller;
import com.example.company.dto.MemberResponse;
import com.example.company.dto.TeamResponse;
import com.example.company.dto.createTeamRequest;
import com.example.company.dto.createMemberRequest;
import com.example.company.service.CompanyService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class CompanyController {
private CompanyService companyService;
public CompanyController(CompanyService companyService) {
this.companyService = companyService;
}
@PostMapping("api/team")
public void saveTeam(@RequestBody createTeamRequest request){
companyService.saveTeam(request);
}
@PostMapping("api/member")
public void saveMember(@RequestBody createMemberRequest request){
companyService.saveMember(request);
}
@GetMapping("api/team")
public List<TeamResponse> getTeams(){
return companyService.getTeams();
}
@GetMapping("api/member")
public List<MemberResponse> getMembers(){
return companyService.getMembers();
}
}
package com.example.company.domain;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Entity
@Getter
@NoArgsConstructor
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
private String managerName;
private long memberCount;
public Team(String name) {
this.name = name;
}
public void setTeamManager(String name){
this.managerName = name;
}
public void setMemberCount(){
this.memberCount++;
}
}
package com.example.company.dto;
import lombok.Getter;
@Getter
public class createTeamRequest {
private String name;
}
package com.example.company.repository;
import com.example.company.domain.Team;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface TeamRepository extends JpaRepository<Team,Long> {
Optional<Team> findByName(String name);
}
@Transactional
public void saveTeam(createTeamRequest request){
teamRepository.save(new Team(request.getName()));
}
package com.example.company.dto;
import com.example.company.domain.Team;
import lombok.Getter;
@Getter
public class TeamResponse {
private String name;
private String manager;
private long memberCount;
public TeamResponse(Team team) {
this.name = team.getName();
this.manager = team.getManagerName();
this.memberCount = team.getMemberCount();
}
}
public List<TeamResponse> getTeams(){
List<Team> teams = teamRepository.findAll();
return teams.stream()
.map(TeamResponse::new)
.collect(Collectors.toList());
}
package com.example.company.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
@Entity
@Getter
@NoArgsConstructor
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
private long teamId;
@Enumerated(EnumType.STRING)
private Role role;
private LocalDate birthday;
private LocalDate workStartDate;
public Member(String name, long teamId, Role role,
LocalDate birthday, LocalDate workStartDate) {
this.name = name;
this.teamId = teamId;
this.role = role;
this.birthday = birthday;
this.workStartDate = workStartDate;
}
}
package com.example.company.domain;
public enum Role {
Manager,
Member;
}
package com.example.company.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import java.time.LocalDate;
@Getter
public class createMemberRequest {
private String name;
private String teamName;
@JsonProperty("isManager")
private boolean isManager;
private LocalDate workStartDate;
private LocalDate birthday;
}
package com.example.company.repository;
import com.example.company.domain.Member;
import org.springframework.data.jpa.repository.JpaRepository;
public interface MemberRepository extends JpaRepository<Member,Long> {
}
@Transactional
public void saveMember(createMemberRequest request){
Team team = teamRepository.findByName(request.getTeamName())
.orElseThrow(IllegalArgumentException::new);
Role role = request.isManager() ? Role.Manager : Role.Member;
memberRepository.save(new Member(request.getName(),team.getId(),
role, request.getBirthday(),
request.getWorkStartDate()));
if(role.equals(Role.Manager)){
team.setTeamManager(request.getName());
teamRepository.save(team);
}
team.setMemberCount();
teamRepository.save(team);
}
package com.example.company.dto;
import com.example.company.domain.Role;
import jakarta.persistence.Enumerated;
import lombok.Getter;
import java.time.LocalDate;
@Getter
public class MemberResponse {
private String name;
private String teamName;
private Role role;
private LocalDate birthday;
private LocalDate workStartDate;
public MemberResponse(String name, String teamName,
Role role, LocalDate birthday, LocalDate workStartDate) {
this.name = name;
this.teamName = teamName;
this.role = role;
this.birthday = birthday;
this.workStartDate = workStartDate;
}
}
public List<MemberResponse> getMembers(){
List<Member> members = memberRepository.findAll();
List<MemberResponse> memberResponses = new ArrayList<>();
for(Member m : members){
String teamName = teamRepository.findById(m.getTeamId()).orElseThrow().getName();
memberResponses.add(new MemberResponse(m.getName(),teamName,m.getRole()
,m.getBirthday(),m.getWorkStartDate()));
}
return memberResponses;
}