From 8fb026f59cffe3c28566abc69631b2c38661aacc Mon Sep 17 00:00:00 2001 From: "Kim, MinGyu" Date: Sat, 23 Jul 2022 17:13:57 +0900 Subject: [PATCH] Avatar -> fileInfo --- frontend/src/App.tsx | 12 +------ frontend/src/auth/RequireAuth.tsx | 4 +-- frontend/src/auth/admin.tsx | 2 +- frontend/src/auth/index.tsx | 1 - frontend/src/auth/search.tsx | 12 ------- frontend/src/types/index.tsx | 2 +- src/app.ts | 1 - src/controllers/fileinfo.controller.ts | 45 ++++++++++++++++++++++++++ src/controllers/index.ts | 3 +- src/controllers/mainimg.controller.ts | 2 +- src/db/mainimg.db.ts | 6 ++-- src/models/fileinfo.model.ts | 6 ++-- src/models/index.ts | 2 +- src/models/mainimg.model.ts | 4 +-- src/models/user.model.ts | 4 +-- src/routes/user.route.ts | 9 ++++-- 16 files changed, 70 insertions(+), 45 deletions(-) delete mode 100644 frontend/src/auth/search.tsx create mode 100644 src/controllers/fileinfo.controller.ts diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 887c7a3..938be3a 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -2,15 +2,7 @@ import React from "react"; import { BrowserRouter, Route, Routes } from "react-router-dom"; import "tailwindcss/tailwind.css"; import { IntoPost } from "./post/intopost"; -import { - Login, - Profile, - RequireAuth, - Signup, - Admin, - ImgRewrite, - Search, -} from "./auth"; +import { Login, Profile, RequireAuth, Signup, Admin, ImgRewrite } from "./auth"; import { Header, Body } from "./home"; import { Board } from "./board"; import Posting from "./post/posting"; @@ -37,7 +29,6 @@ export const App = () => { } /> } /> } /> - {/* */} { /> } /> } /> - } /> diff --git a/frontend/src/auth/RequireAuth.tsx b/frontend/src/auth/RequireAuth.tsx index 3556a62..10268d2 100644 --- a/frontend/src/auth/RequireAuth.tsx +++ b/frontend/src/auth/RequireAuth.tsx @@ -7,9 +7,7 @@ export const RequireAuth: FC<{ children: JSX.Element }> = ({ children }) => { const location = useLocation(); if (!user.isLoggedIn) { - return ( - - ); + return ; } return children; }; diff --git a/frontend/src/auth/admin.tsx b/frontend/src/auth/admin.tsx index b138153..85c9497 100644 --- a/frontend/src/auth/admin.tsx +++ b/frontend/src/auth/admin.tsx @@ -1,7 +1,7 @@ import React, { FormEvent, useEffect, useState, MouseEvent } from "react"; import { Link } from "react-router-dom"; import { mainimgApi } from "../apis"; -import { picture } from "../apis/profile.api"; +import { profileUpload } from "../apis/profile.api"; import { catchErrors } from "../helpers"; import { MainimgType } from "../types"; import { MySlide } from "./adminslide"; diff --git a/frontend/src/auth/index.tsx b/frontend/src/auth/index.tsx index a69d6e8..78cfc55 100644 --- a/frontend/src/auth/index.tsx +++ b/frontend/src/auth/index.tsx @@ -4,4 +4,3 @@ export { default as Profile } from "./profile"; export { RequireAuth } from "./RequireAuth"; export { default as Admin } from "./admin"; export { default as ImgRewrite } from "./imgrewrite"; -export { default as Search } from "./search"; diff --git a/frontend/src/auth/search.tsx b/frontend/src/auth/search.tsx deleted file mode 100644 index 2a53bae..0000000 --- a/frontend/src/auth/search.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from "react"; -import { useLocation } from "react-router-dom"; - -export default function Search() { - const a = useLocation().state; - - return ( -
-
-
- ); -} diff --git a/frontend/src/types/index.tsx b/frontend/src/types/index.tsx index c95f450..5628a4f 100644 --- a/frontend/src/types/index.tsx +++ b/frontend/src/types/index.tsx @@ -31,7 +31,7 @@ export interface SignupUser { export interface Profile { _id: string; email: string; - avatar: { + fileInfo: { originalfilename: string; newfilename: string; picturepath: string; diff --git a/src/app.ts b/src/app.ts index 365b117..b1c55bf 100644 --- a/src/app.ts +++ b/src/app.ts @@ -12,7 +12,6 @@ app.use(cookieParser()); app.use("/api", router); app.use("/images", express.static(path.join(__dirname, "..", "/uploads"))); -app.use("/images", express.static(path.join(__dirname, "..", "/adminpics"))); app.use((err: any, req: Request, res: Response, next: NextFunction) => { console.log("익스프레스 에러: ", err); diff --git a/src/controllers/fileinfo.controller.ts b/src/controllers/fileinfo.controller.ts new file mode 100644 index 0000000..a3d1c43 --- /dev/null +++ b/src/controllers/fileinfo.controller.ts @@ -0,0 +1,45 @@ +import formidable from "formidable"; +import { asyncWrap } from "../helpers/asyncWrap"; +import { TypedRequest } from "../types"; + +export const uploadFile = asyncWrap(async (reqExp, res, next) => { + const req = reqExp as TypedRequest; + const form = formidable({ multiples: false, uploadDir: "uploads" }); + + await new Promise((resolve, reject) => { + form.parse(req, (err, fields, files) => { + if (err) { + reject(err); + return; + } + console.log("fields", fields); + console.log("files", files); + req.body = fields; + req.files = files; + resolve(files); + }); + }); + next(); + return; +}); + +export const uploadFiles = asyncWrap(async (reqExp, res, next) => { + const req = reqExp as TypedRequest; + const form = formidable({ multiples: true, uploadDir: "uploads" }); + + await new Promise((resolve, reject) => { + form.parse(req, (err, fields, files) => { + if (err) { + reject(err); + return; + } + console.log("fields", fields); + console.log("files", files); + req.body = fields; + req.files = files; + resolve(files); + }); + }); + next(); + return; +}); diff --git a/src/controllers/index.ts b/src/controllers/index.ts index cf8e06e..547b880 100644 --- a/src/controllers/index.ts +++ b/src/controllers/index.ts @@ -2,4 +2,5 @@ export * as authCtrl from "./auth.controller"; export * as postCtrl from "./post.controller"; export * as roleCtrl from "./role.controller"; export * as userCtrl from "./user.controller"; -export * as mainimgCtrl from "./mainimg.controller"; \ No newline at end of file +export * as mainimgCtrl from "./mainimg.controller"; +export * as fileInfoCtrl from "./fileinfo.controller"; diff --git a/src/controllers/mainimg.controller.ts b/src/controllers/mainimg.controller.ts index 83836e0..4fbfbd7 100644 --- a/src/controllers/mainimg.controller.ts +++ b/src/controllers/mainimg.controller.ts @@ -12,7 +12,7 @@ export const createMainimg = asyncWrap(async (reqExp, res) => { const { userId } = req.auth; const form = formidable({ - uploadDir: "adminpics", + uploadDir: "uploads", keepExtensions: true, multiples: false, }); diff --git a/src/db/mainimg.db.ts b/src/db/mainimg.db.ts index 6da5569..ac4011e 100644 --- a/src/db/mainimg.db.ts +++ b/src/db/mainimg.db.ts @@ -1,8 +1,8 @@ import { ObjectId } from "mongoose"; -import { Avatar, IAvatar, Mainimg, MainimgType } from "../models"; +import { FileInfo, IFileInfo, Mainimg, MainimgType } from "../models"; -export const createMainimg = async (mainimg: MainimgType, pic: IAvatar) => { - const newPic = await Avatar.create({ +export const createMainimg = async (mainimg: MainimgType, pic: IFileInfo) => { + const newPic = await FileInfo.create({ originalfilename: pic.originalfilename, newfilename: pic.newfilename, pictureauth: pic.picturepath, diff --git a/src/models/fileinfo.model.ts b/src/models/fileinfo.model.ts index b6a071f..24fbf3f 100644 --- a/src/models/fileinfo.model.ts +++ b/src/models/fileinfo.model.ts @@ -1,17 +1,17 @@ import { model, Schema } from "mongoose"; -export interface IAvatar { +export interface IFileInfo { originalfilename?: string; newfilename?: string; picturepath?: string; nickname?: string; } -const Avatarschema = new Schema({ +const schema = new Schema({ originalfilename: { type: String, unique: true }, newfilename: { type: String }, nickname: { type: String }, picturepath: { type: String }, }); -export default model("Avatar", Avatarschema); +export default model("FileInfo", schema); diff --git a/src/models/index.ts b/src/models/index.ts index 821cab3..9154562 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -1,5 +1,5 @@ export { default as User, IUser } from "./user.model"; export { default as Post, PostType } from "./post.model"; export { default as Role } from "./role.model"; -export { default as Avatar, IAvatar } from "./fileinfo.model"; +export { default as FileInfo, IFileInfo } from "./fileinfo.model"; export { default as Mainimg, MainimgType } from "./mainimg.model"; diff --git a/src/models/mainimg.model.ts b/src/models/mainimg.model.ts index da24530..3b6c943 100644 --- a/src/models/mainimg.model.ts +++ b/src/models/mainimg.model.ts @@ -4,7 +4,7 @@ export interface MainimgType { theme: string; city: string; title: string; - pic?: Types.ObjectId; + fileInfo?: Types.ObjectId; } const MainimgSchema = new Schema({ @@ -18,7 +18,7 @@ const MainimgSchema = new Schema({ type: String, required: true, }, - pic: { type: Schema.Types.ObjectId, ref: "Avatar" }, + fileInfo: { type: Schema.Types.ObjectId, ref: "Fileinfo" }, }); export default model("Mainimg", MainimgSchema); diff --git a/src/models/user.model.ts b/src/models/user.model.ts index 95181da..ac1676b 100644 --- a/src/models/user.model.ts +++ b/src/models/user.model.ts @@ -5,7 +5,7 @@ export interface IUser { name?: string; password: string; role?: Types.ObjectId; - avatar?: Types.ObjectId; + fileInfo?: Types.ObjectId; } const validateEmail = (email: string) => { @@ -22,7 +22,7 @@ const schema = new Schema( validate: [validateEmail, "이메일을 입력해주세요"], }, name: { type: String }, - avatar: { type: Schema.Types.ObjectId, ref: "Avatar" }, + fileInfo: { type: Schema.Types.ObjectId, ref: "FileInfo" }, password: { type: String, required: true, select: false }, role: { type: Schema.Types.ObjectId, ref: "Role" }, }, diff --git a/src/routes/user.route.ts b/src/routes/user.route.ts index af3669b..5e5cd62 100644 --- a/src/routes/user.route.ts +++ b/src/routes/user.route.ts @@ -1,11 +1,16 @@ import express from "express"; -import { userCtrl, authCtrl } from "../controllers"; +import { userCtrl, authCtrl, fileInfoCtrl } from "../controllers"; const router = express.Router(); router .route("/") .get(authCtrl.requireLogin, userCtrl.getUsers) - .post(authCtrl.requireLogin, authCtrl.hasRole("admin"), userCtrl.createUser); + .post( + authCtrl.requireLogin, + authCtrl.hasRole("admin"), + fileInfoCtrl.uploadFile, + userCtrl.createUser + ); export default router; -- GitLab