Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/issue 53 #71

Merged
merged 2 commits into from
Jul 29, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions backend/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,13 @@ const passport = require("passport");
dotenv.config();
const pageRouter = require("./routes/page");
const authRouter = require("./routes/auth");
const postRouter = require("./routes/post");
const { sequelize } = require("./models");
const passportConfig = require("./passport");
const cors = require("cors");

const app = express();
app.use(cors());

passportConfig();
app.set("port", process.env.PORT || 8001);
app.set("view engine", "html");
Expand All @@ -23,7 +24,7 @@ nunjucks.configure("views", {
watch: true,
});
sequelize
.sync({ force: false }) //sequelize가 초기화 될 때 DB에 필요한 테이블 생성
.sync({ force: false })
.then(() => {
console.log("데이터베이스 연결 성공");
})
Expand All @@ -34,7 +35,6 @@ sequelize
app.use(morgan("dev"));
app.use(express.static(path.join(__dirname, "public")));
app.use("/img", express.static(path.join(__dirname, "uploads")));
app.use(cors());

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
Expand All @@ -54,7 +54,6 @@ app.use(passport.initialize());
app.use(passport.session());
app.use("/", pageRouter);
app.use("/auth", authRouter);
app.use("/post", postRouter);

app.use((req, res, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
Expand Down
1 change: 0 additions & 1 deletion backend/controllers/contributeProjects/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ const {
upload_commit,
} = require("../../routes/middlewares");
const { Post, User, Comment } = require("../../models");
//field값

const createContriProjectAPI = async (req, res) => {
let id = req.params.id;
Expand Down
36 changes: 0 additions & 36 deletions backend/controllers/index.js

This file was deleted.

2 changes: 1 addition & 1 deletion backend/controllers/mypage/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const express = require("express");
const router = express.Router();
const { isLoggedIn, isNotLoggedIn } = require("../../routes/middlewares");
const { Post, User } = require("../../models");
//field값

const readMyPageAPI = async (req, res, next) => {
try {
const myinfo = await User.findOne({
Expand Down
58 changes: 36 additions & 22 deletions backend/controllers/requestProjects/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ const {
upload,
} = require("../../routes/middlewares");
const { Post, User, Comment } = require("../../models");
//field값

const createProjectAPI = async (req, res) => {
if (req.file) {
Expand All @@ -16,28 +15,34 @@ const createProjectAPI = async (req, res) => {
mood: req.body.mood,
lyrics_text: req.body.lyrics_text,
audioFile: req.file.location,
music_field: Boolean(req.body.music_field),
lyrics_field: Boolean(req.body.lyrics_field),
instrument_field: Boolean(req.body.instrument_field),
music_field: req.body.music_field,
lyrics_field: req.body.lyrics_field,
instrument_field: req.body.instrument_field,
uid: req.user.id,
});
if (!post) {
res.status(400).json({
success: false,
post: post,
});
} else {
const post = await Post.create({
title: req.body.title,
description: req.body.description,
genre: req.body.genre,
mood: req.body.mood,
lyrics_text: req.body.lyrics_text,
music_field: req.body.music_field,
lyrics_field: req.body.lyrics_field,
instrument_field: req.body.instrument_field,
uid: req.user.id,
res.status(200).json({
sucess: true,
post: post,
});
}
} else {
const post = await Post.create({
title: req.body.title,
description: req.body.description,
genre: req.body.genre,
mood: req.body.mood,
lyrics_text: req.body.lyrics_text,
music_field: req.body.music_field,
lyrics_field: req.body.lyrics_field,
instrument_field: req.body.instrument_field,
uid: req.user.id,
});
if (!post) {
res.status(400).json({
sucess: false,
Expand All @@ -53,9 +58,14 @@ const createProjectAPI = async (req, res) => {

const mainInfoAPI = async (req, res) => {
const maininfo = await Post.findAll({
include: [
{
model: User,
attributes: ["email"],
},
],
attributes: [
"email",
"pid",
"id",
"title",
"music_field",
"lyrics_field",
Expand All @@ -66,6 +76,7 @@ const mainInfoAPI = async (req, res) => {
"lyrics_text",
],
});
res.set({ "access-control-allow-origin": "*" });
if (!maininfo) {
res.status(400).json({
success: false,
Expand All @@ -79,13 +90,16 @@ const commentsAPI = async (req, res, next) => {
let id = req.params.id;
try {
const comments = await Comment.findAll({
include: {
model: Post,
where: { id: id },
},
where: { uid: id },
});
const project = await Post.findAll({
where: { id: id },
const project = await Post.findOne({
where: { id },
include: [
{
model: User,
attributes: ["introduce", "email"],
},
],
});
res.status(200).json({ comments, project });
} catch (err) {
Expand Down
2 changes: 0 additions & 2 deletions backend/controllers/user/index.js

This file was deleted.

3 changes: 0 additions & 3 deletions backend/models/comment.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,3 @@ module.exports = class Comment extends Sequelize.Model {
db.Comment.belongsTo(db.User, { foreignKey: "uid", sourceKey: "id" });
}
};
//requestid 외래키
//uid 외래키
//constraint uid foreign key uid references user.uid on delete cascade on update cascade
6 changes: 3 additions & 3 deletions backend/models/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const Sequelize = require("sequelize");
const env = "test" || "development"; //config.json의 development 가져오기
const config = require("../config/config")[env]; //config.json의 development 가져오기
const env = "test" || "development";
const config = require("../config/config")[env];
const User = require("./user");
const Post = require("./post");
const Comment = require("./comment");
Expand All @@ -17,7 +17,7 @@ db.sequelize = sequelize;
db.User = User;
db.Post = Post;
db.Comment = Comment;
//사람과 게시글은 1:1관계, 게시글과 해시태그는 1:N 관계

User.init(sequelize);
Post.init(sequelize);
Comment.init(sequelize);
Expand Down
5 changes: 2 additions & 3 deletions backend/models/post.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ module.exports = class Post extends Sequelize.Model {
return super.init(
{
title: {
//id 생략. -> sequlize에서는 id가 생략될 수 있음.
type: Sequelize.STRING(140),
allowNull: false,
},
Expand Down Expand Up @@ -56,8 +55,8 @@ module.exports = class Post extends Sequelize.Model {
underscored: false,
modelName: "Post",
tableName: "posts",
paranoid: false, //deleted at false -> 게시글 삭제시 완전 삭제
charset: "utf8mb4", //이모티콘
paranoid: false,
charset: "utf8mb4",
collate: "utf8mb4_general_ci",
}
);
Expand Down
4 changes: 2 additions & 2 deletions backend/models/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@ module.exports = class User extends Sequelize.Model {
},
{
sequelize,
timestamps: true, //생성일 수정일 삭제일이 기록
timestamps: true,
underscored: false,
modelName: "User",
tableName: "users",
paranoid: true,
charset: "utf8",
collate: "utf8_general_ci", //한글 지원
collate: "utf8_general_ci",
}
);
}
Expand Down
4 changes: 1 addition & 3 deletions backend/passport/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const User = require("../models/user");

module.exports = () => {
passport.serializeUser((user, done) => {
done(null, user.id); // 세션에 user 의 id 만 저장
done(null, user.id);
});

passport.deserializeUser((id, done) => {
Expand All @@ -15,5 +15,3 @@ module.exports = () => {

local();
};

//serializeuser는
53 changes: 29 additions & 24 deletions backend/passport/localStrategy.js
Original file line number Diff line number Diff line change
@@ -1,30 +1,35 @@
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');
const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const bcrypt = require("bcrypt");

const User = require('../models/user');
const User = require("../models/user");

module.exports = () => {//로그인 로직. 모듈임.
passport.use(new LocalStrategy({
usernameField: 'email', //req.body.email
passwordField: 'password', //req.body.password
}, async (email, password, done) => {
try {
const exUser = await User.findOne({ where: { email } });//그 email을 가진 사람이 있나 찾기
if (exUser) {
const result = await bcrypt.compare(password, exUser.password);//brypt.compare로 비번이랑, 디비에 비번이랑 비교
if (result) {
done(null, exUser);
} else {
done(null, false, { message: '비밀번호가 일치하지 않습니다.' });
module.exports = () => {
passport.use(
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
},
async (email, password, done) => {
try {
const exUser = await User.findOne({ where: { email } });
if (exUser) {
const result = await bcrypt.compare(password, exUser.password);
if (result) {
done(null, exUser);
} else {
done(null, false, { message: "비밀번호가 일치하지 않습니다." });
}
} else {
done(null, false, { message: "가입되지 않은 회원입니다." });
}
} catch (error) {
console.error(error);
done(error);
}
} else {
done(null, false, { message: '가입되지 않은 회원입니다.' });
}
} catch (error) {
console.error(error);
done(error);
}
}));
)
);
};
//email, password로 로그인하는 것을 적은 파일
7 changes: 3 additions & 4 deletions backend/routes/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ const router = express.Router();
router.post("/join", isNotLoggedIn, async (req, res, next) => {
const { email, password } = req.body;
try {
const exUser = await User.findOne({ where: { email } }); //기존이메일로 가입한 사람이 있나?
const exUser = await User.findOne({ where: { email } });
if (exUser) {
return res.status(401).json({
msg: "User already exist",
success: false,
}); //프론트에서 이미 가입한 메일이라고 알림
});
}
const hash = await bcrypt.hash(password, 12); //기존이메일이 아니면 password를 해쉬화 해서 저장
const hash = await bcrypt.hash(password, 12);
await User.create({
email,
password: hash,
Expand All @@ -38,7 +38,6 @@ router.post("/login", isNotLoggedIn, (req, res, next) => {
return next(authError);
}
if (!user) {
//로그인 실패한 경우;
return res.status(200).json({
msg: `${info.message}`,
success: false,
Expand Down
Loading