routing.js 8.64 KB
module.exports = function(app, Users, Timetables)
{
    var passport = require('passport');

    app.get('/', function(req, res)
    {
        // 로그인 중이면 메인페이지로
        if(req.isAuthenticated())
            res.redirect("/main");
        // 로그인 중이 아니라면 인덱스페이지
        else
        {
            res.render("index");
            console.log("The index page!");
        }
    });
    
    // 로그인 수행 - POST
    app.route('/login')
    .post(passport.authenticate('login',
    {
        successRedirect: '/main',
        failureRedirect: '/'
        //failureFlash : true
    }))
    // unexpected access
    .get(function(req, res)
    {
        res.redirect("/");
    });


    // 로그아웃 수행
    app.get('/logout', function(req, res)
    {
        req.logout();
        res.redirect('/');
    })

    
    // Join
    app.route('/join')
    // 처음 Join화면 랜더 - GET
    .get(function(req, res)
    {
        res.render("join")
    })
    // 실제 Join 수행 - POST
    .post(passport.authenticate('join',
    {
        successRedirect: '/main',
        failureRedirect: '/',
        //failureFlash : true
    }));


    // 메인화면 - 로그인 후 기본 검색화면으로
    app.get('/main', function(req, res)
    {
        // 로그인 중이라면
        if(req.isAuthenticated())
        {
            console.log("Logged in page");
            res.render("main");
        }
        // 로그인 중이 아니라면
        else res.redirect("/");

    });

    // 마이페이지 - 로그인 필수
    app.get('/mypage',function(req, res)
    {
        // 로그인 중이라면
        if(req.isAuthenticated())
        {
            // find를 쓰면, 다행으로 반환되기 때문에 결과의 첫번째 요소를 지정하고 해야함
            // 그래서 하나만을 대상으로 할 때는 보통 findOne을 사용
            // mongoose로 디비 find는 콜백으로 정의해야함.
            Users.findOne({id: req.user}, function(err, user_info)
            {
                console.log("mypage");
                res.render("mypage",
                {
                    id: user_info.id,
                    name: user_info.name
                });    
            });
            
        }
        // 로그인 중이 아니라면
        else res.redirect("/");
    });


    // 동명이인 검색 페이지
    app.post("/samename" ,function(req, res)
    {
        // 크롤링으로 samename list 추출
        var samename_list2 = [];
        function temp(callback)
        {
            var samename_search = require("./selenium-function/same_name_search");
            samename_search.First_Search(req.body.samename).then(function(resolvedData)
            {
                samename_list2 = resolvedData;
                console.log(resolvedData);
                callback();
            });
        }

        temp(function()
        {
            console.log("samename page");
            //console.log(samename_list2);
            res.render("samename",{samename : samename_list2});
        });
    });

    // 인물-방송정보 페이지
    app.get("/programs", function(req, res)
    {
        var program_list = 
        [
            ["https://search.pstatic.net/common?type=o&size=120x172&quality=90&direct=true&src=http%3A%2F%2Fsstatic.naver.net%2Fkeypage%2Fimage%2Fdss%2F57%2F03%2F30%2F31%2F57_9033031_poster_image_1543806768348.jpg",
            "2018",
            "아모르파티",
            true,
            "SUN",
            "2240"],
            ["https://search.pstatic.net/common?type=o&size=120x172&quality=90&direct=true&src=http%3A%2F%2Fsstatic.naver.net%2Fkeypage%2Fimage%2Fdss%2F57%2F03%2F30%2F31%2F57_9033031_poster_image_1543806768348.jpg",
            "2018",
            "아모르파티",
            true,
            "SUN",
            "2240"]
        ];
        res.render("programs", {programs: program_list});
    });

    // 나만의 시간표에 추가 - 로그인 필수
    app.get("/addtt", function(req, res)
    {
        if(req.isAuthenticated())
        {
            // 유저가 선택한 프로그램 정보 입력
            var program = new Timetables();
            program.user_id = req.user;
            program.pname = "아모르파티";
            program.pweekday = 5;
            program.start_hour = 10;
            program.start_min = 50;

            // DB저장
            program.save(function(err)
            {
                if(err)
                {
                    console.log(err);
                    res.send("Error!")
                }
                else
                {
                    console.log("TT Add Success");
                    res.redirect('/timetable');
                }
            });
        }
        // 로그인 중이 아니라면
        else res.redirect("/");
    });




    // 나만의 시간표 - 로그인 필수
    app.get("/timetable", function(req, res)
    {

        if(req.isAuthenticated())
        {
            // 유저별 프로그램 리스트 만들기
            var program_list = [];

            // 디비에서 유저아이디에 맞는 programs 가져오기
            // 디비정보 가져오는 것은 동기로 설정
            function temp(callback)
            {
                Timetables.find({user_id: req.user},function(err, programs)
                {
                    if(err)
                    {
                        console.log(err);
                        res.send("Error!");
                    }
                    else
                    {
                        programs.forEach(val =>
                        {
                            // 시간조정 로직
                            e_wd = new Date().getDay();
                            e_year = new Date().getFullYear();
                            e_month = new Date().getMonth();
                            e_date = new Date().getDate() + val.pweekday - e_wd;
                            differ = val.pweekday - e_wd;

                            // 실질적인 프로그램 리스트 만들기
                            program_list.push([val.pname, e_year, e_month, e_date, val.start_hour, val.start_min, e_year, e_month, e_date, val.start_hour+2, val.start_min]);
                            console.log(program_list);
                        });
                    }
                    callback();
                });
            }

            temp(function()
            {       
                res.render("timetable", {pl: JSON.stringify(program_list)});
            });
        }
        // 로그인 중이 아니라면
        else res.redirect("/");
    });


    // 나만의 시간표 수정 - 로그인 필수
    app.route("/ttlist")
    // GET - List로 보여주기
    .get(function(req, res)
    {
        if(req.isAuthenticated())
        {
            // Timetables에서 리스트로 유저에게 보여주기
            Timetables.find({user_id: req.user}, function(err, programs)
            {
                if(err)
                {
                    console.log(err);
                    res.send("Error!");
                }
                else
                {
                    console.log("Show Programs");
                    res.render("ttlist", {pl: programs});
                }    
            });

        }
        // 로그인 중이 아니라면
        else res.redirect("/");
    })
    .post(function(req, res)
    {
        if(req.isAuthenticated())
        {

        }
        // 로그인 중이 아니라면
        else res.redirect("/");
    });


}





/*
(구)직접 DB에 저장하기
.post(function(req, res) // 실제 Join 수행 - POST
{
    // user정보 입력
    var user = new Users();
    user.id = req.body.id;
    user.pwd = req.body.pwd;
    user.name = req.body.name;

    // DB저장
    user.save(function(err)
    {
        if(err)
        {
            console.log(err);
            res.send("Error!")
        }
        else
        {
            console.log("Join Success");
            res.redirect('/');
        }
    });   
});
*/

/*
(구)직접 로그인 하기
app.post('/login', function(req, res)
{
    Users.find({id: req.body.id, pwd: req.body.pwd},{_id: 1}, function(err, user)
    {
        if(err)
        {
            console.log("Error!");
            res.send("Error!")
        }

        // 매칭정보 없음 - 로그인 실패
        if(user.length==0)
        {
            console.log("Login failed!")
            res.send("Login_failed");
        }
        
        // 매칭정보 있음 - 로그인 성공
        else
        {
            console.log("Login Success!")
            res.redirect("/main");
            // main으로 이동
        }
    });
});
*/