From 71aa5b17eee9788beb85968cf07181998b5ac447 Mon Sep 17 00:00:00 2001 From: Lee Soobeom Date: Wed, 13 Jul 2022 19:56:44 +0900 Subject: [PATCH] token user.id ref --- frontend/src/apis/post.api.ts | 5 +-- frontend/src/post/post.tsx | 2 +- frontend/src/post/posting.tsx | 16 +++++++--- frontend/src/types/index.tsx | 12 +++---- src/controllers/post.controller.ts | 26 +++++++++------ src/db/post.db.ts | 17 +++++----- src/models/index.ts | 1 - src/models/post.model.ts | 51 ++++++++++++++++++++++-------- src/models/posting.model.ts | 46 --------------------------- src/routes/post.route.ts | 2 +- 10 files changed, 81 insertions(+), 97 deletions(-) delete mode 100644 src/models/posting.model.ts diff --git a/frontend/src/apis/post.api.ts b/frontend/src/apis/post.api.ts index 9669e26..4fd7aea 100644 --- a/frontend/src/apis/post.api.ts +++ b/frontend/src/apis/post.api.ts @@ -1,8 +1,9 @@ import axios from "axios"; import baseUrl from "./baseUrl"; -import { PostingType } from "../types"; +import { PostType } from "../types"; -export const posting = async (post: PostingType) => { +export const posting = async (post: PostType) => { const { data } = await axios.post(`${baseUrl}/posts/`, post); + return data; }; diff --git a/frontend/src/post/post.tsx b/frontend/src/post/post.tsx index ed1a46a..7ac0a1b 100644 --- a/frontend/src/post/post.tsx +++ b/frontend/src/post/post.tsx @@ -10,7 +10,7 @@ export default function Post({ handleClick, post }: Props) { return (
-
diff --git a/frontend/src/post/posting.tsx b/frontend/src/post/posting.tsx index 9222ed7..35ef90a 100644 --- a/frontend/src/post/posting.tsx +++ b/frontend/src/post/posting.tsx @@ -1,8 +1,10 @@ import React, { FormEvent, useState } from "react"; +import { useNavigate } from "react-router-dom"; import isLength from "validator/lib/isLength"; import equals from "validator/lib/equals"; +// import { addDataList } from "../board/board"; import { catchErrors } from "../helpers"; -import { PostingType } from "../types"; +import { PostType } from "../types"; import { postApi } from "../apis"; export default function Posting() { @@ -10,13 +12,15 @@ export default function Posting() { const [theme, setTheme] = useState("질문종류"); const [title, setTitle] = useState(""); const [text, setText] = useState(""); + const navigate = useNavigate(); - const [user, setUser] = useState({ + const [user, setUser] = useState({ title: "", text: "", theme: "", city: "", - username: "", + userId: "", + counts: 0, }); const [loading, setLoading] = useState(false); @@ -32,8 +36,10 @@ export default function Posting() { if (postingFormMatch()) { setLoading(true); const res = await postApi.posting(user); - console.log("서버연결됬나요", res); - console.log("user save"); + // addDataList(res); + // console.log("서버연결됬나요", res); + // console.log("user save"); + navigate("/board", { replace: true }); setSuccess(true); setError(""); } diff --git a/frontend/src/types/index.tsx b/frontend/src/types/index.tsx index d160968..e947556 100644 --- a/frontend/src/types/index.tsx +++ b/frontend/src/types/index.tsx @@ -9,18 +9,14 @@ export interface LoginUser { password: string; } -export interface PostType extends PostingType { - date?: string; - counts: number; - id?: string; -} - -export interface PostingType { +export interface PostType { title: string; text?: string; theme: string; city: string; - username: string; + date?: string; + counts: number; + userId: string; } export interface SignupUser { diff --git a/src/controllers/post.controller.ts b/src/controllers/post.controller.ts index 86c182d..a4824f0 100644 --- a/src/controllers/post.controller.ts +++ b/src/controllers/post.controller.ts @@ -1,16 +1,22 @@ import { NextFunction, Request, Response } from "express"; import isLength from "validator/lib/isLength"; import equals from "validator/lib/equals"; -import { requireLogin } from "./auth.controller"; +import { TypedRequestAuth } from "./auth.controller"; import { asyncWrap } from "../helpers"; import { postDb } from "../db"; -export const posting = asyncWrap(async (req, res) => { - const { title, text, theme, city, username, date, counts } = req.body; +export const postCreate = asyncWrap(async (reqExp, res, next) => { + const req = reqExp as TypedRequestAuth<{ userId: string }>; - console.log("body", req.body); + const { title, text, theme, city, date } = req.body as { + title: string; + text: string; + theme: string; + city: string; + date: Date; + }; - // 0) 로그인 했는지 확인 requireLogin + console.log("body", req.body); // 1) title 빈 문자열인지 확인 if (!isLength(title ?? "", { min: 1 })) { @@ -32,16 +38,16 @@ export const posting = asyncWrap(async (req, res) => { return res.status(422).send("도시를 선택해 주세요"); } - // 5) username ref: cookie.token._id -> collection users, "User"-> name + const userId = req.auth.userId; - const newPosting = await postDb.createPosting({ + const newPost = await postDb.createPost({ title, text, theme, city, - username, date, - counts, + user: userId, }); - return res.json(newPosting); + + return res.json(newPost); }); diff --git a/src/db/post.db.ts b/src/db/post.db.ts index 23ecb4a..02eb270 100644 --- a/src/db/post.db.ts +++ b/src/db/post.db.ts @@ -1,14 +1,13 @@ -import { Posting, PostingType } from "../models"; import { Post, PostType } from "../models"; -export const createPosting = async (posting: PostingType) => { - const newPosting = await Posting.create({ - title: posting.title, - text: posting.text, - theme: posting.theme, - city: posting.city, - username: posting.username, - date: posting.date, +export const createPost = async (post: PostType) => { + const newPosting = await Post.create({ + title: post.title, + text: post.text, + theme: post.theme, + city: post.city, + user: post.user, + date: post.date, counts: 0, }); return newPosting; diff --git a/src/models/index.ts b/src/models/index.ts index d90d009..44b5b8a 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -1,3 +1,2 @@ export { default as User, IUser } from "./user.model"; -export { default as Posting, PostingType } from "./posting.model"; export { default as Post, PostType } from "./post.model"; diff --git a/src/models/post.model.ts b/src/models/post.model.ts index e9264ac..f2c7c1d 100644 --- a/src/models/post.model.ts +++ b/src/models/post.model.ts @@ -1,19 +1,42 @@ -import { model, Schema, Types } from "mongoose"; -import { PostingType } from "./posting.model"; +import { Document, model, Schema, Types } from "mongoose"; +import { Posting } from "."; -export interface PostType extends PostingType { - date?: string; - counts: number; - id?: string; +export interface PostType { + title: string; + text?: string; + theme: string; + city: string; + user?: Types.ObjectId | string; + date?: Date; + counts?: number; } -const postSchema = new Schema({ - title: { type: String }, - theme: { type: String }, - city: { type: String }, - username: { type: String }, - date: { type: String }, - counts: { type: Number }, +const PostSchema = new Schema({ + title: { + type: String, + required: true, + }, + text: { + type: String, + required: true, + }, + theme: { + type: String, + }, + city: { + type: String, + }, + user: { + type: Schema.Types.ObjectId, + ref: "User", + }, + date: { + type: Date, + default: Date.now, + }, + counts: { + type: Number, + }, }); -export default model("Post", postSchema); +export default model("Post", PostSchema); diff --git a/src/models/posting.model.ts b/src/models/posting.model.ts deleted file mode 100644 index 3ade8f7..0000000 --- a/src/models/posting.model.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { model, Schema } from "mongoose"; - -export interface PostingType { - title: string; - text?: string; - theme: string; - city: string; - username?: string; - date?: string; - counts?: number; -} - -const postingSchema = new Schema({ - title: { - type: String, - required: true, - }, - text: { - type: String, - required: true, - }, - theme: { - type: String, - }, - city: { - type: String, - }, - username: { - type: String, - // username: travelreport.users.findOne({id: cookie.token._id(Schema.Tpyes.ObjectId)}).name, - }, - date: { - type: Date, - default: Date.now, - }, - counts: { - type: Number, - }, - date: { - type: Date, - dafault: Date.now, - }, - counts: 0, -}); - -export default model("Posting", postingSchema); diff --git a/src/routes/post.route.ts b/src/routes/post.route.ts index 0464fb7..304b834 100644 --- a/src/routes/post.route.ts +++ b/src/routes/post.route.ts @@ -3,6 +3,6 @@ import { postCtrl, authCtrl } from "../controllers"; const router = express.Router(); -router.route("/").post(authCtrl.requireLogin, postCtrl.posting); +router.route("/").post(authCtrl.requireLogin, postCtrl.postCreate); export default router; -- GitLab