public class Session {
public int loginedMemberId;
public Member loginedMember;
public Session() {
loginedMemberId = -1;
}
public void logout() {
Container.session.loginedMemberId = -1;
Container.session.loginedMember = null;
}
public void login(Member member) {
Container.session.loginedMember = member;
Container.session.loginedMemberId = member.id;
}
public boolean isLogined() {
return loginedMemberId != -1;
}
login( ) ,logout( ) 메소드를 만들어서 사용 if(Container.session.isLogined() == false){
System.out.println("로그인 후 이용해주세요.");
return;
}
if(Container.session.isLogined()){
System.out.println("로그아웃 후 이용해주세요.");
return;
}
isLogined( ) 는 로그인이 된상태라면 true , 로그인이 안된상태라면 false를 반환로그인시에만 write, modify, delete, logout 가능하게 함로그인이 안된 상태에서만 join, login을 가능하게 함 public void doWrite(String cmd) {
if(Container.session.isLogined() == false){
System.out.println("로그인 후 이용해주세요.");
return;
}
System.out.println("== 게시물 작성 ==");
System.out.printf("제목 : ");
String title = sc.nextLine();
System.out.printf("내용 : ");
String body = sc.nextLine();
int memberId = Container.session.loginedMemberId;
int id = articleService.doWrite(memberId, title, body);
회원의 id를 게시글의 memberId에 저장 sql.append("INSERT INTO article");
sql.append(" SET regDate = NOW()");
sql.append(", updateDate = NOW()");
sql.append(", memberId = ?", memberId);
sql.append(", title = ?", title);
sql.append(", `body` = ?", body);
public List<Article> getArticles() {
SecSql sql = new SecSql();
sql.append("SELECT A.*, M.name AS extra__writer");
sql.append(" FROM article AS A");
sql.append(" INNER JOIN `member` AS M");
sql.append(" ON A.memberId = M.id");
sql.append(" ORDER BY id DESC");
List<Map<String, Object>> articlesListMap = DBUtil.selectRows(Container.conn, sql);
작성자의 회원번호와 회원테이블의 회원번호를 통해 Join 하여 작성자정보를 알수있음 public String extra__writer;
public Article(Map<String, Object> articleMap) {
this.id = (int) articleMap.get("id");
this.regDate = (LocalDateTime) articleMap.get("regDate");
this.updateDate = (LocalDateTime) articleMap.get("updateDate");
this.memberId = (int) articleMap.get("memberId");
this.title = (String) articleMap.get("title");
this.body = (String) articleMap.get("body");
if (articleMap.get("extra__writer") != null) {
this.extra__writer = (String) articleMap.get("extra__writer");
}
}
필드(String extra__writer)를 추가 System.out.printf("번호 / %8s / 제목 / 작성자\n", "작성날짜");
for (Article article : articles) {
System.out.printf("%4d / %s / %s / %s\n", article.id, article.regDate, article.title,article.extra__writer);
public Article getArticleById(int id) {
SecSql sql = new SecSql();
sql.append("SELECT A.*, M.name AS extra__writer");
sql.append(" FROM article AS A");
sql.append(" INNER JOIN `member` AS M");
sql.append(" ON A.memberId = M.id");
sql.append(" WHERE A.id = ?" , id);
Map<String, Object> articleMap = DBUtil.selectRow(Container.conn, sql);
if (articleMap.isEmpty()) {
return null;
}
return new Article(articleMap);
}
//가져온 게시물의 extra__writer를 detail시 보여줌
System.out.printf("작성자 : %s\n", article.extra__writer);
public void increaseHit(int id) {
SecSql sql = new SecSql();
sql.append("UPDATE article");
sql.append(" SET hit = hit +1");
sql.append(" WHERE id = ?", id);
DBUtil.update(Container.conn, sql);
}
public void doModify(String cmd) {
if(Container.session.isLogined() == false){
System.out.println("로그인 후 이용해주세요.");
return;
}
int id = Integer.parseInt(cmd.split(" ")[2]);
Article article = articleService.getArticleById(id);
if (article == null) {
System.out.printf("%d번 게시글은 존재하지 않습니다.\n", id);
return;
}
if(article.memberId != Container.session.loginedMemberId) {
System.out.println("해당 게시물에 대한 권한이 없습니다.");
return;
}
로그인이 되어있을때 수정이 가능
로그인된 회원의 id( Container.session.loginedMemberId )와
게시물작성시 게시물에 남긴 회원의 id (memberId)가 일치할때만 수정이 가능
delete(삭제) 도 modify(수정) 과 동일하다