우리가 ArticleController랑 MemberCtroller에서 로그인을 체크를 했잖아 그런데 약간 코드가 중복되는 느낌이라 이게 최적화된 코드는 아니라고 생각해. 그래서 지금 해볼거는 App 클래스에서 로그인 로그아웃을 관리 해 줄거야.
String forLoginCheck = controllerName + "/" + actionMethodName;
switch (forLoginCheck) {
case "article/write":
case "article/delete":
case "article/modify":
case "member/logout":
if (Controller.isLogined() == false) {
System.out.println("로그인 필요해");
continue;
}
break;
}
switch (forLoginCheck) {
case "member/login":
case "member/join":
if (Controller.isLogined()) {
System.out.println("로그아웃 필요해");
continue;
}
break;
}
if (controllerName.equals("article")) {
controller = articleController;
} else if (controllerName.equals("member")) {
controller = memberController;
} else {
System.out.println("지원하지 않는 기능입니다");
continue;
}
controller.doAction(cmd, actionMethodName);
}
App클래스의 코드는 이정도로만 보면 될 것 같은데, controllerName이랑 controllerName이 뭐하는 변수인지는 알고 있지? 저번시간에 했을 텐데.. 음.. 뭐였더라..맛있는거??
controllerName은 member인지 article인지 사용자가 어떤거를 선택했는지 저장하는 변수이고 actionMethodName은 write나 login 이런 메서드를 수행하겠다. 라는 변수야. 그래서 해야할게
먼저 controllerName 변수랑 actionMethodName를 /로 나눈다고 생각할거야. 그래서 우리가입력을 하게 되면 예를 들어 artirlce/write이런식으로 forLoginCheck변수에 저장이 되는거지
그럼 우리가 article write를 명령어로 입력 했는데 만약 로그인이 안되어있다?? 그럼 로그인 하라고 문구가 나오게 할거야.
또 로그인이 되어있는 상태로 member login 이렇게 입력했으면 로그아웃이 필요하다고 문구를 띄울거야.
그리고 뭐 당연히 artcle만 입력하거나 member만 입력하거나 이러면 안되겠지?
이렇게 해서 ArticleController와 MemberController에 중복을 없애고 더욱 컨트롤러 같은 일만 하게되었어.
우리가 게시글을 작성한다고 할 때 게시글에 우리의 이름 or id가 남잖아? 그걸 해볼거야.
작성한 사람이 누군지는 알아야 하니까! 그래서 어떤식으로 할건지 또 생각을 해야해
먼저 새로운 변수가 필요할거야, 그래서 memberId라는 변수를 만들어 주자. 어디에 만들어야 할까? membe? article?? 대답안하니!! article에 만들어야 한다고 생각합니다..
맞아 ! 그래서 article에 만들어 주자. 왜냐하면 게시글에 정보가 남아야 하니까. 그래서 Artilce 필드에 변수를 생성하고 getter setter도 만들어야겠지?
그리고 이제 컨트롤러에서 객체를 생성할 때 Article article = new Article(id, regDate, updateDate, loginedMember.getId(), title, body); 이렇게 get으로 값을 받아오자.
System.out.println("번호 : " + foundArticle.getId());
System.out.println("작성날짜 : " + foundArticle.getRegDate());
System.out.println("수정날짜 : " + foundArticle.getUpdateDate());
System.out.println("작성자 : " + foundArticle.getMemberId());
System.out.println("제목 : " + foundArticle.getTitle());
System.out.println("내용 : " + foundArticle.getBody());
그럼 이제 보여줄 때 이렇게 보여주면 작성자도 같이 보이게 될거야!
게시글이 작성되었을 때, 게시글을 수정하고 삭제하는거는 작성자만 할 수 있는 권한이지? 이상한 사람이 수정, 삭제하면 안되잖아. 그래서 이걸 해보자.
if (foundArticle.getMemberId() != loginedMember.getId()) {
System.out.println("권한 없음");
return;
}
articles.remove(foundArticle);
System.out.println(id + "번 게시글이 삭제되었습니다");
}
그래서 이렇게 그냥 작성한 foundArticle의 MemberId를 get으로 받아오고 로그인 된 아이디도 get으로 받아와서 서로 비교해주면 끝!!