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

7주차 미션 / 서버 3조 김민석 #4

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
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
68 changes: 68 additions & 0 deletions src/main/java/kuit/server/controller/MenuController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package kuit.server.controller;

import kuit.server.common.exception.UserException;
import kuit.server.common.response.BaseResponse;
import kuit.server.dto.menu.GetMenuResponse;
import kuit.server.dto.menu.PatchPriceRequest;
import kuit.server.dto.menu.PostMenuRequest;
import kuit.server.dto.menu.PostMenuResponse;
import kuit.server.dto.user.GetUserResponse;
import kuit.server.dto.user.PatchNicknameRequest;
import kuit.server.dto.user.PostUserRequest;
import kuit.server.dto.user.PostUserResponse;
import kuit.server.service.MenuService;
import kuit.server.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

import static kuit.server.common.response.status.BaseExceptionResponseStatus.INVALID_USER_STATUS;
import static kuit.server.common.response.status.BaseExceptionResponseStatus.INVALID_USER_VALUE;
import static kuit.server.util.BindingResultUtils.getErrorMessages;

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/menus")
public class MenuController {
private final MenuService menuService;
@PostMapping("")
public BaseResponse<PostMenuResponse> registerMenu(@Validated @RequestBody PostMenuRequest postMenuRequest, BindingResult bindingResult) {
log.info("[MenuController.registerMenu]");
if (bindingResult.hasErrors()) {
throw new UserException(INVALID_USER_VALUE, getErrorMessages(bindingResult));
}
return new BaseResponse<>(menuService.registerMenu(postMenuRequest));
}
@PatchMapping("/{menuId}/price")
public BaseResponse<String> modifyPrice(@PathVariable long menuId,
@Validated @RequestBody PatchPriceRequest patchPriceRequest, BindingResult bindingResult) {
log.info("[MenuController.modifyPrice]");
if (bindingResult.hasErrors()) {
throw new UserException(INVALID_USER_VALUE, getErrorMessages(bindingResult));
}
menuService.modifyPrice(menuId, patchPriceRequest.getPrice());
return new BaseResponse<>(null);
}
@GetMapping("")
public BaseResponse<List<GetMenuResponse>> getMenus(
@RequestParam(required = false, defaultValue = "") String name,
@RequestParam(required = false, defaultValue = "") String category,
@RequestParam(required = false, defaultValue = "") String price) {
log.info("[MenuController.getMenus]");

return new BaseResponse<>(menuService.getMenus(name, category, price));
}

@PatchMapping("/{menuId}/deleted")
public BaseResponse<Object> modifyMenuStatus_deleted(@PathVariable long menuId) {
log.info("[MenuController.modifyMenuStatus_deleted]");
menuService.modifyMenuStatus_deleted(menuId);
return new BaseResponse<>(null);
}

}
11 changes: 11 additions & 0 deletions src/main/java/kuit/server/controller/UserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,15 @@ public BaseResponse<List<GetUserResponse>> getUsers(
return new BaseResponse<>(userService.getUsers(nickname, email, status));
}

@PostMapping("login")
public BaseResponse<PostLoginResponse> login(@Validated @RequestBody PostLoginRequest postLoginRequest, BindingResult bindingResult) {
log.info("[UserController.login]");
if (bindingResult.hasErrors()) {
throw new UserException(INVALID_USER_VALUE, getErrorMessages(bindingResult));
}
return new BaseResponse<>(userService.login(postLoginRequest));
}



}
72 changes: 72 additions & 0 deletions src/main/java/kuit/server/dao/MenuDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package kuit.server.dao;

import kuit.server.dto.menu.GetMenuResponse;
import kuit.server.dto.menu.PostMenuRequest;
import kuit.server.dto.user.GetUserResponse;
import kuit.server.dto.user.PostUserRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Objects;

@Slf4j
@Repository
public class MenuDao {

private final NamedParameterJdbcTemplate jdbcTemplate;

public MenuDao(NamedParameterJdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

public long createMenu(PostMenuRequest postMenuRequest) {
String sql = "insert into menu(storeId, category, name, price, menuPictureUrl) " +
"values(:storeId, :category, :name, :price, :menuPictureUrl)";

SqlParameterSource param = new BeanPropertySqlParameterSource(postMenuRequest);
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(sql, param, keyHolder);

return Objects.requireNonNull(keyHolder.getKey()).longValue();
}

public int modifyPrice(long menuId, int price) {
String sql = "update menu set price=:price where menuId=:menuId";
Map<String, Object> param = Map.of(
"price", price,
"menuId", menuId);
return jdbcTemplate.update(sql, param);
}
public List<GetMenuResponse> getMenus(String name, String category, String price) {
String sql = "select name, category, price, menuPictureUrl, status from menu ";

Map<String, Object> param = Map.of(
"name", "%" + name + "%",
"category", "%" + category + "%",
"price", price);

return jdbcTemplate.query(sql, param,
(rs, rowNum) -> new GetMenuResponse(
rs.getString("name"),
rs.getString("category"),
rs.getInt("price"),
rs.getString("menuPictureUrl"),
rs.getString("status"))
);
}

public int modifyMenuStatus_deleted(long menuId) {
String sql = "update menu set status=:status where menuId=:menuId";
Map<String, Object> param = Map.of(
"status", "deleted",
"menuId", menuId);
return jdbcTemplate.update(sql, param);
}
}
22 changes: 19 additions & 3 deletions src/main/java/kuit/server/dao/UserDao.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package kuit.server.dao;

import kuit.server.dto.user.GetUserResponse;
import kuit.server.dto.user.PostLoginRequest;
import kuit.server.dto.user.PostLoginResponse;
import kuit.server.dto.user.PostUserRequest;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
Expand Down Expand Up @@ -51,7 +55,7 @@ public long createUser(PostUserRequest postUserRequest) {
public int modifyUserStatus_dormant(long userId) {
String sql = "update user set status=:status where user_id=:user_id";
Map<String, Object> param = Map.of(
"status", "dormant",
"status", "휴먼",
"user_id", userId);
return jdbcTemplate.update(sql, param);
}
Expand All @@ -73,8 +77,7 @@ public int modifyNickname(long userId, String nickname) {
}

public List<GetUserResponse> getUsers(String nickname, String email, String status) {
String sql = "select email, phone_number, nickname, profile_image, status from user " +
"where nickname like :nickname and email like :email and status=:status";
String sql = "select email, phone_number, nickname, profile_image, status from user ";

Map<String, Object> param = Map.of(
"nickname", "%" + nickname + "%",
Expand Down Expand Up @@ -103,4 +106,17 @@ public String getPasswordByUserId(long userId) {
return jdbcTemplate.queryForObject(sql, param, String.class);
}

public long login(PostLoginRequest postLoginRequest) {
String sql = "select user_id from user where email=:email and status='일반'";
Map<String, Object> param = Map.of(
"email", postLoginRequest.getEmail()
);
Long userId = jdbcTemplate.queryForObject(sql, param, Long.class);
return userId;
}
//로그인 현재 해싱된 Password를 가지고 데이터베이스에 있는 값과 비교하는 방법을 잘 모르겠어서 email로만 확인하였습니다




}
18 changes: 18 additions & 0 deletions src/main/java/kuit/server/dto/menu/GetMenuResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package kuit.server.dto.menu;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class GetMenuResponse {
private String name;
private String category;
private int price;
private String menuPictureUrl;
private String status;
}
13 changes: 13 additions & 0 deletions src/main/java/kuit/server/dto/menu/PatchPriceRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package kuit.server.dto.menu;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class PatchPriceRequest {
private int price;

}
16 changes: 16 additions & 0 deletions src/main/java/kuit/server/dto/menu/PostMenuRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package kuit.server.dto.menu;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class PostMenuRequest {
private Long storeId;
private String category;
private String name;
private int price;
private String menuPictureUrl;
}
10 changes: 10 additions & 0 deletions src/main/java/kuit/server/dto/menu/PostMenuResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package kuit.server.dto.menu;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class PostMenuResponse {
private long menuId;
}
56 changes: 56 additions & 0 deletions src/main/java/kuit/server/service/MenuService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package kuit.server.service;

import kuit.server.common.exception.DatabaseException;
import kuit.server.dao.MenuDao;
import kuit.server.dao.UserDao;
import kuit.server.dto.menu.GetMenuResponse;
import kuit.server.dto.menu.PostMenuRequest;
import kuit.server.dto.menu.PostMenuResponse;
import kuit.server.dto.user.GetUserResponse;
import kuit.server.dto.user.PostUserRequest;
import kuit.server.dto.user.PostUserResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;

import static kuit.server.common.response.status.BaseExceptionResponseStatus.DATABASE_ERROR;

@Slf4j
@Service
@RequiredArgsConstructor
public class MenuService {
private final MenuDao menuDao;

public PostMenuResponse registerMenu(PostMenuRequest postMenuRequest) {
log.info("[MenuService.registerMenu]");

long menuId = menuDao.createMenu(postMenuRequest);

return new PostMenuResponse(menuId);
}

public void modifyPrice(long menuId, int price) {
log.info("[MenuService.modifyPrice]");

int affectedRows = menuDao.modifyPrice(menuId, price);
if (affectedRows != 1) {
throw new DatabaseException(DATABASE_ERROR);
}
}
public List<GetMenuResponse> getMenus(String name, String category, String price) {
log.info("[MenuService.getMenus]");
return menuDao.getMenus(name, category, price);
}

public void modifyMenuStatus_deleted(long menuId) {
log.info("[MenuService.modifyMenuStatus_deleted]");

int affectedRows = menuDao.modifyMenuStatus_deleted(menuId);
if (affectedRows != 1) {
throw new DatabaseException(DATABASE_ERROR);
}
}

}
12 changes: 12 additions & 0 deletions src/main/java/kuit/server/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,16 @@ private void validateNickname(String nickname) {
}
}

public PostLoginResponse login(PostLoginRequest postLoginRequest) {
log.info("[UserService.login]");


long userId = userDao.login(postLoginRequest);

// TODO: 4. JWT 토큰 생성
String jwt = jwtTokenProvider.createToken(postLoginRequest.getEmail(), userId);

return new PostLoginResponse(userId, jwt);
}

}
1 change: 1 addition & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
spring:
profiles:
active: "local"
group:
"local": "localDB, devPort, secret, web-mvc"
"dev": "devDB, devPort, secret, web-mvc"
Expand Down