Skip to content

Commit 439a4dc

Browse files
committed
feature : 이미지 저장
1 parent d4ff041 commit 439a4dc

10 files changed

Lines changed: 218 additions & 12 deletions

File tree

index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ import moviechoiceRouter from "./srcs/moviechoice/moviechoice.route.js";
99
import aichatRouter from "./srcs/aichat/aichat.route.js";
1010
import { mypageRouter } from "./srcs/mypage/mypage.route.js";
1111
import dotenv from "dotenv";
12+
import path from "path";
13+
import { fileURLToPath } from "url";
1214
dotenv.config();
1315

16+
const __filename = fileURLToPath(import.meta.url);
17+
const __dirname = path.dirname(__filename);
18+
1419
const app = express();
1520
const port = 3000;
1621

@@ -20,6 +25,7 @@ app.use(express.urlencoded({ extended: true }));
2025
app.use(express.static("public"));
2126
app.use(cors({origin: 'http://localhost:3000',credentials: true}));
2227

28+
app.use("/uploads", express.static(path.join(__dirname, "uploads")));
2329
app.use("/users", userRouter);
2430
app.use("/auth", authRouter);
2531
app.use("/movies", movieRouter);

package-lock.json

Lines changed: 145 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"http-status-codes": "^2.3.0",
2020
"jsonwebtoken": "^9.0.2",
2121
"morgan": "^1.10.0",
22+
"multer": "^1.4.5-lts.1",
2223
"mysql2": "^3.12.0",
2324
"openai": "^4.83.0",
2425
"socket.io": "^4.8.1"

srcs/auth/auth.controller.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ const handleAuth = async (providerLogin, providerName, req, res) => {
3737
const handleKakaoAuth = async (req, res) => {
3838
try {
3939
const code = req.body.code || req.query.code;
40-
41-
//
4240
if (!code) {
4341
return res.json(response(
4442
{ isSuccess: status.BAD_REQUEST.isSuccess, code: 400, message: "인가 코드가 없습니다." },

srcs/mypage/mypage.controller.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
} from "./mypage.model.js";
88
import { responseData, errorResponse } from "../../config/response.js";
99

10-
10+
import { upload } from "../utils/multer.js";
1111
// 1. 사용자 프로필 조회
1212
export const getProfile = async (req, res) => {
1313
try {
@@ -32,7 +32,11 @@ export const getProfile = async (req, res) => {
3232
export const updateProfile = async (req, res) => {
3333
try {
3434
const userId = req.userId;
35-
const { nickname, profileImage } = req.body;
35+
const { nickname } = req.body;
36+
console.log(nickname);
37+
const profileImage = req.file ? `/uploads/profile/${req.file.filename}` : null; // ✅ 업로드된 이미지 경로 저장
38+
console.log(profileImage);
39+
3640

3741
await updateProfileInDB(userId, nickname, profileImage);
3842

srcs/mypage/mypage.model.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
11
import { pool } from "../../config/db.js";
22
import queries from "./mypage.sql.js";
33

4-
// 1. 사용자 프로필 조회
54
export const fetchProfile = async (userId) => {
65
const [result] = await pool.query(queries.getUserProfile, [userId]);
7-
return result[0]; // 결과는 배열이므로 첫 번째 값을 반환
6+
const user = result[0];
7+
8+
// ✅ 서버에서 이미지 접근 가능하도록 URL 변환
9+
return {
10+
userId: user.user_id,
11+
email: user.email,
12+
nickname: user.nickname,
13+
profileImage: user.profile_image_url
14+
? `${process.env.SERVER_URL}${user.profile_image_url}` // 서버 URL + 파일 경로
15+
: null,
16+
};
817
};
918

10-
// 2. 사용자 프로필 업데이트
19+
1120
export const updateProfileInDB = async (userId, nickname, profileImage) => {
12-
await pool.query(queries.updateUserProfile, [nickname, profileImage, userId]);
21+
const query = profileImage
22+
? "UPDATE user SET nickname = ?, profile_image_url = ? WHERE user_id = ?"
23+
: "UPDATE user SET nickname = ? WHERE user_id = ?";
24+
25+
const params = profileImage ? [nickname, profileImage, userId] : [nickname, userId];
26+
27+
await pool.query(query, params);
1328
};
1429

1530
// 3. 캘린더 데이터 조회

srcs/mypage/mypage.route.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ import {
77
getLikedMovies,
88
} from "./mypage.controller.js";
99
import authenticateToken from "../../config/jwt.middleware.js";
10+
import { upload } from "../utils/multer.js";
1011

1112
const router = express.Router();
1213
router.use(authenticateToken);
1314

1415
router.get("/profile", getProfile);
15-
router.put("/profile", updateProfile);
16+
router.put("/profile", upload.single("profileImage"), updateProfile);
1617
router.get("/calendar", getCalendarData);
1718
router.get("/reviews", getUserReviews);
1819
router.get("/liked-movies", getLikedMovies);

srcs/user/user.controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export const signupUser = async (req, res) => {
7474
try {
7575
const signupInfo = req.body;
7676
const { userId } = await UserService.postUser(signupInfo); // ✅ user_id 받기
77-
77+
7878
// ✅ 회원가입 성공 시 응답 반환 (user_id 포함)
7979
return res.status(201).send(response(
8080
status.SUCCESS,

srcs/user/user.service.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ export const UserService = {
3636
postUser: async (signupInfo) => {
3737
try {
3838
const { email, password, nickname } = signupInfo;
39-
console.log(signupInfo);
40-
console.log("postUser");
39+
40+
// 암호화
41+
// signupInfo.password = await UserModel.encryptPassword(password);
4142
// 🔥 필수 입력값 체크
4243
if (!email || !password || !nickname) {
4344
console.log("필수 정보를 입력해주세요.");

0 commit comments

Comments
 (0)