package net.changwoo.x1wins.service;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import net.changwoo.x1wins.dao.BbsDao;
import net.changwoo.x1wins.dao.ConfigDao;
import net.changwoo.x1wins.dao.UserDao;
import net.changwoo.x1wins.entity.Bbs;
import net.changwoo.x1wins.entity.Config;
import net.changwoo.x1wins.entity.Reply;
import net.changwoo.x1wins.entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class BbsService {
private static final Logger logger = LoggerFactory
.getLogger(BbsService.class);
@Autowired
private BbsDao bbsDao;
@Autowired
private ConfigDao configDao;
@Autowired
private UserDao userDao;
public void saveBbs(Bbs bbs, int bbsnum, HttpServletRequest request)
throws Exception {
Config config = configDao.findAllByProperty("bbsnum", bbsnum).get(0);
// config.setBbsnum(bbsnum);
// config.setBbsname("test");
// config.setUserid("tester");
HttpSession session = request.getSession(false);
String userid;
if (session.getAttribute("userid") != null) {
userid = session.getAttribute("userid").toString();
} else {
userid = "illegal userid";
}
bbs.setIp(request.getRemoteAddr());
bbs.setUserid(userid);
bbs.setConfig(config);
bbsDao.saveOrUpdate(bbs);
}
public void updateBbs(Bbs bbs, int bbsnum, HttpServletRequest request)
throws Exception {
int count = bbsDao.findById(bbs.getNum()).getCount();
bbs.setCount(count);
saveBbs(bbs, bbsnum, request);
}
public void delete(int bbsnum, int num) throws Exception {
Bbs bbs = bbsDao.findById(num);
// Config config = configDao.findAllByProperty("bbsnum", bbsnum).get(0);
// config.setBbsnum(bbsnum);
// config.setBbsname("test");
// config.setUserid("tester");
// bbs.setConfig(config);
bbsDao.delete(bbs);
}
public void findListAndPaging(int bbsnum, int pageNum, int perPage,
Map model, HttpServletRequest request) throws Exception {
// bbs list
List<Bbs> bbss = bbsDao.findList(bbsnum);
// total row size
int totalRowSize = bbss.size();
// list sublist index value
int fromIndex = (pageNum - 1) * perPage;
int toIndex = fromIndex + perPage;
if (toIndex > totalRowSize) {
toIndex = totalRowSize;
}
// list sublist
bbss = bbss.subList(fromIndex, toIndex);
logger.debug("bbss.size() is : " + bbss.size());
logger.debug("totalRowSize is : " + totalRowSize);
int pageSize = 0;
if (totalRowSize % perPage == 0) {
pageSize = totalRowSize / perPage;
} else {
pageSize = totalRowSize / perPage + 1;
}
int startPage = 0;
int endPage = 0;
if (pageNum > perPage) {
startPage = pageNum / perPage * perPage;
} else {
startPage = 1;
}
endPage = startPage + perPage;
if (pageSize < endPage) {
endPage = pageSize;
}
String paging = "";
for (int i = startPage; i <= endPage; i++) {
if (i == pageNum) {
paging += "<b>";
}
paging += " <a href=\"" + request.getContextPath() + "/bbs/"
+ bbsnum + "/list/" + i + "\">" + i + "</a> ";
if (i == pageNum) {
paging += "</b>";
}
}
// bbs list type
Config config = configDao.findAllByProperty("bbsnum", bbsnum).get(0);
int listTypeNum = config.getListTypeNum();
String bbsname = config.getBbsname();
List<Config> configs = configDao.findAllByProperty("publicYn", 1);
logger.debug(configs.size() + " configs size");
model.put("bbsnum", bbsnum);
model.put("bbsname", bbsname);
model.put("bbss", bbss);
model.put("paging", paging);
model.put("listtypenum", listTypeNum);
model.put("configs", configs);
}
public Bbs findDetail(int num) throws Exception {
Bbs bbs = null;
try {
bbs = bbsDao.findBbsDetailById(num);
int count = bbs.getCount();
count++;
bbs.setCount(count);
bbsDao.saveOrUpdate(bbs);
} catch (Exception e) {
logger.debug(e.toString());
}
return bbs;
}
public boolean validSignin(int bbsnum, HttpServletRequest request)
throws Exception {
boolean resultBoolean = false;
HttpSession session = request.getSession(false);
// if (request.getSession(false) != null){
logger.debug("login id " + session.getAttribute("userid"));
if (session.getAttribute("userid") != null) {
// login y
logger.debug("login y ");
// userid
// String userid = session.getAttribute("userid").toString();
// User user = userDao.findAllByProperty("userid", userid).get(0);
resultBoolean = true;
} else {
resultBoolean = false;
}
if (resultBoolean == false) {
String message = "no sigin";
throw new Exception(message);
}
return resultBoolean;
}
public boolean validOwn(int num, HttpServletRequest request)
throws Exception {
boolean resultBoolean = false;
HttpSession session = request.getSession(false);
// if (request.getSession(false) != null){
logger.debug("login id " + session.getAttribute("userid"));
if (session.getAttribute("userid") != null) {
// login y
logger.debug("login y ");
Bbs bbs = bbsDao.findById(num);
String bbsUserid = bbs.getUserid();
String sessionUserid = session.getAttribute("userid").toString();
resultBoolean = bbsUserid.equals(sessionUserid);
// userid
// String userid = session.getAttribute("userid").toString();
// User user = userDao.findAllByProperty("userid", userid).get(0);
} else {
resultBoolean = false;
}
if (resultBoolean == false) {
String message = "no own";
throw new Exception(message);
}
return resultBoolean;
}
public boolean validRead(int bbsnum, HttpServletRequest request)
throws Exception {
boolean resultBoolean = false;
String message = "";
logger.debug("bbsnum validRead " + bbsnum);
List configList = configDao.findAllByProperty("bbsnum", bbsnum);
if (configList.size() <= 0) {
message = "bbs is not exist";
throw new Exception(message);
}
Config config = (Config) configList.get(0);
int publicYn = config.getPublicYn();
logger.debug("publicYn " + publicYn);
if (publicYn == 0) {
// no public
message = "this bbs is close";
resultBoolean = false;
} else {
// yes public
// read avialble level
int readFrom = config.getReadFrom();
int readUntil = config.getReadUntil();
// user level valid
if (readFrom == 0 && readUntil == 0) {
resultBoolean = true;
} else {
HttpSession session = request.getSession(false);
// if (request.getSession(false) != null){
logger.debug("login id " + session.getAttribute("userid"));
if (session.getAttribute("userid") != null) {
// login y
logger.debug("login y ");
// userid
String userid = session.getAttribute("userid").toString();
User user = userDao.findAllByProperty("userid", userid)
.get(0);
int level = user.getLevel();
if (readFrom <= level && level <= readUntil) {
resultBoolean = true;
} else {
// fail
resultBoolean = false;
message = "you have level problem";
}
} else {
// login n
logger.debug("login n ");
resultBoolean = false;
message = "you must login";
}
}
}
if (resultBoolean == false) {
throw new Exception(message);
}
return resultBoolean;
}
public boolean validWrite(int bbsnum, HttpServletRequest request)
throws Exception {
boolean resultBoolean = false;
String message = "";
logger.debug("bbsnum " + bbsnum);
Config config = configDao.findAllByProperty("bbsnum", bbsnum).get(0);
int publicYn = config.getPublicYn();
logger.debug("publicYn " + publicYn);
if (publicYn == 0) {
// no public
message = "this bbs is close";
resultBoolean = false;
} else {
// yes public
HttpSession session = request.getSession(false);
// if (request.getSession(false) != null){
logger.debug("login id " + session.getAttribute("userid"));
if (session.getAttribute("userid") != null) {
// login y
logger.debug("login y ");
// read avialble level
int writeFrom = config.getWriteFrom();
int writeUntil = config.getWriteUntil();
// userid
String userid = session.getAttribute("userid").toString();
User user = userDao.findAllByProperty("userid", userid).get(0);
int level = user.getLevel();
// user level valid
if (writeFrom <= level && level <= writeUntil) {
// success
resultBoolean = true;
} else if (writeFrom == 0 && writeUntil == 0) {
// success
resultBoolean = true;
} else {
// fail
resultBoolean = false;
message = "you have level problem";
}
} else {
// login n
logger.debug("login n ");
resultBoolean = false;
message = "you must login";
}
}
if (resultBoolean == false) {
throw new Exception(message);
}
return resultBoolean;
}
}