inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 BE 0기] 미니 프로젝트 1단계

ailen22
0

프로젝트 1단계

 

[
 {
  "name": "팀 이름"
  "manager": "팀 매니저 이름" //없을 경우 null
  "memberCount": 팀 인원 수 [숫자]
 }, ...
]
[
 {
  "name": "직원 이름",
  "teamName": "소속 팀 이름",
  "role": "MANAGER" or "MEMBER", //팀의 매니저인지 멤버인지
  "birthday": "1989-01-01",
  "workStartDate": "2024-01-01",
 }, ...
]

 

 Controller

@RestController
public class CompanyController {
    private CompanyService companyService;
    public CompanyController (CompanyService companyService) {
        this.companyService = companyService;
    }

    @PostMapping("/team")
    public void saveTeam(@RequestBody TeamCreateRequest request) {
        companyService.saveTeam(request);
    }

    @PostMapping("/member")
    public void saveMember(@RequestBody MemberCreateRequest request) {
        companyService.saveMember(request);
    }

    @GetMapping("/team")
    public List<TeamResponse> getTeam() {
        return companyService.getTeam();
    }

    @GetMapping("/member")
    public List<MemberResponse> getMember() {
        return companyService.getMember();
    }

}

 

Team

public class Team {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String name;
    private String manager;

    public Team(String name) {
        this.name = name;
    }

    public void setTeamManager(String name) {
        this.manager = name;
    }
}

 

Member

public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String name;
    private String teamName;
    @Enumerated(EnumType.STRING)
    private Role role;
    private LocalDate birthday;
    private LocalDate workStartDate;

    public Member(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;
    }
}

Role(Enum 클래스)

public enum Role {
    Manager, Member;
}

 

TeamCreateRequest

@Getter
public class TeamCreateRequest {
    private String name;
}

MemberCreateRequest

@Getter
public class MemberCreateRequest {
    private String name;
    private String teamName;
    @JsonProperty("managerORmember")
    private boolean memberORmeber;
    private LocalDate birthday;
    private LocalDate workStartDate;
}

 

Repository

@Repository
public interface MemberRepository extends JpaRepository<Member,Long> {
}

@Repository
public interface TeamRepository extends JpaRepository<Team, Long> {
    Optional<Team> findByName(String name);
}

Response

@Getter
public class TeamResponse {
    private String name;
    private String manager;

    public TeamResponse(Team team) {
        this.name = team.getName();
        this.manager = team.getManager();
    }
}

@Getter
public class MemberResponse {
    private String name;
    private String teamName;
    private Role role;
    private LocalDate birthday;
    private LocalDate workStartDate;

    public MemberResponse(Member member) {
        this.name = member.getName();
        this.teamName = member.getTeamName();
        this.role = member.getRole();
        this.birthday = member.getBirthday();
        this.workStartDate = member.getWorkStartDate();
    }
}

 

CompanyService

@Service
public class CompanyService {
    private final TeamRepository teamRepository;
    private final MemberRepository memberRepository;

    public CompanyService(TeamRepository teamRepository, MemberRepository memberRepository) {
        this.teamRepository = teamRepository;
        this.memberRepository = memberRepository;
    }

    @Transactional
    public void saveTeam(TeamCreateRequest request) {
        teamRepository.save(new Team(request.getName()));
    }

    @Transactional
    public void saveMember(MemberCreateRequest request) {
        Team team = teamRepository.findByName(request.getTeamName())
                .orElseThrow(IllegalArgumentException::new);
        Role role = request.isMemberORmeber() ? Role.Manager : Role.Member;

        memberRepository.save(new Member(request.getName(), team.getName(), role,
                request.getBirthday(), request.getWorkStartDate()));

        if(role.equals(Role.Manager)) {
            team.setTeamManager(request.getName());
            teamRepository.save(team);
        }
        teamRepository.save(team);
    }

    public List<TeamResponse> getTeam() {
        List<Team> teams = teamRepository.findAll();
        return teams.stream()
                .map(TeamResponse::new)
                .collect(Collectors.toList());
    }

    public List<MemberResponse> getMember() {
        List<Member> members = memberRepository.findAll();
        return members.stream()
                .map(MemberResponse::new)
                .collect(Collectors.toList());
    }
}

 

답변 0