Skip to content
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
12 changes: 12 additions & 0 deletions src/controllers/user.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,18 @@ class UserController {
next(error);
}
}
// 프로필 수정
async updateProfile(req, res, next) {
try {
const userId = req.user.id; // 토큰에서 내 ID 추출
const body = req.body; // 클라이언트가 보낸 수정할 데이터
const result = await userService.updateProfile(userId, body);

return res.success(result, "프로필 수정 성공");
} catch (error) {
next(error);
}
}
}

export default new UserController();
38 changes: 30 additions & 8 deletions src/dtos/user.dto.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,39 @@
export const bodyToProfileDto = (body) => {
return {
nickname: body.nickname,
phoneNum: body.phoneNum,
email: body.email,
profileImage: body.profileImage,
};
};

export const responseFromUser = (user) => {
return {
userId: user.id,
nickname: user.nickname,
phoneNum: user.phoneNum,
email: user.email,
profileImage: user.profileImage, // 프로필 이미지 추가
phoneNumber: user.phoneNumber,
profileImage: user.profileImage,
phoneNum: user.phoneNum,
deadlineAlarm: user.deadlineAlarm,
taskAlarm: user.taskAlarm,
folders: user.folders.map((folder) => ({
folderId: folder.id,
name: folder.folderTitle,
color: folder.color,

})),
folders: user.folders
? user.folders.map((folder) => ({
folderId: folder.id,
name: folder.folderTitle,
color: folder.color,
}))
: [],
};
};

export const responseFromUpdatedUser = (user) => {
return {
userId: user.id,
nickname: user.nickname,
phoneNum: user.phoneNum || user.phoneNumber,
email: user.email,
profileImage: user.profileImage,
updatedAt: user.updatedAt,
};
};
16 changes: 15 additions & 1 deletion src/repositories/user.repository.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,18 @@ export const getUserData = async (userId) => {
});

return user;
};
};

export const updateProfile = async (userId, data) => {
const updatedUser = await prisma.user.update({
where: { id: userId },
data: {
nickname: data.nickname,
phoneNum: data.phoneNum,
email: data.email,
profileImage: data.profileImage,
},
});

return updatedUser;
}
2 changes: 2 additions & 0 deletions src/routes/user.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ const userRouter = express.Router();

userRouter.get('/me', authenticate, userController.getMyInfo);

userRouter.patch('/profile', authenticate, userController.updateProfile);

export default userRouter;
36 changes: 31 additions & 5 deletions src/services/user.service.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,42 @@
import { NotFoundError } from "../errors/custom.error.js";
import { responseFromUser } from "../dtos/user.dto.js";
import { getUserData } from "../repositories/user.repository.js";
import { NotFoundError, BadRequestError } from "../errors/custom.error.js";
import { responseFromUser, responseFromUpdatedUser, bodyToProfileDto } from "../dtos/user.dto.js";
import { getUserData, updateProfile } from "../repositories/user.repository.js";

class UserService {
async getMyInfo(userId) {
const user = await getUserData(userId);

if (!user) {
throw new NotFoundError("USER_NOT_FOUND", "해당 사용자를 찾을 수 없습니다.");
throw new NotFoundError(
"USER_NOT_FOUND",
"해당 사용자를 찾을 수 없습니다."
);
}
return responseFromUser(user);
}


// 프로필 수정
async updateProfile(userId, body) {
if (body.nickname && body.nickname.length > 10) {
throw new BadRequestError(
"INVALID_NICKNAME",
"닉네임은 최대 10자까지만 가능합니다."
);
}

const isUserExist = await getUserData(userId);
if (!isUserExist) {
throw new NotFoundError(
"USER_NOT_FOUND",
"해당 사용자를 찾을 수 없습니다."
);
}
const updateData = bodyToProfileDto(body);
const updatedUser = await updateProfile(userId, updateData);
return responseFromUpdatedUser(updatedUser);
}
}

export default new UserService();
export default new UserService();