Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
05735ac
feat: swagger.config 추가
Jjiggu Jul 1, 2025
445c409
Merge pull request #46 from GTable/feature/#45-swagger-config
Jjiggu Jul 1, 2025
c4efe35
feat(Order): order 틀 생성
HyemIin Jul 2, 2025
e62cd18
Merge pull request #48 from GTable/feat/#47_관리자페이지주문조회
HyemIin Jul 2, 2025
a186e78
feat(Order): order 틀 생성
HyemIin Jul 2, 2025
11938f6
Merge pull request #49 from GTable/feat/#47_관리자페이지주문조회
HyemIin Jul 2, 2025
2399095
refactor(Oauth): 로그인 후 리다이렉트 주소 변경
HyemIin Jul 2, 2025
dda0a30
Merge pull request #50 from GTable/feat/#47_관리자페이지주문조회
HyemIin Jul 2, 2025
6e01b59
feat(user): 슈퍼계정 생성
HyemIin Jul 3, 2025
e8351c0
fix(Bookmark,user):오타 및 구체적 에러로그 처리
HyemIin Jul 3, 2025
cfc6cc8
Merge pull request #51 from GTable/feat/#47_관리자페이지주문조회
HyemIin Jul 3, 2025
4d432d3
feat(order): 관리자 주문조회/수정 구현
HyemIin Jul 3, 2025
9828345
fix: 중복 디렉토리 삭제
HyemIin Jul 3, 2025
acce3f9
Merge pull request #53 from GTable/feat/#47_관리자페이지주문조회
HyemIin Jul 3, 2025
b9bb8cb
Update and rename 백엔드-이슈.md to needdelete.md
HyemIin Jul 3, 2025
37d824b
Merge branch 'develop' into fix/#44-multi-module-refactor-conflict
Jjiggu Jul 4, 2025
48cc4fc
refactor: 멀티모듈 구조 리팩토링으로 인한 배포 스크립트 수정
Jjiggu Jul 4, 2025
28ba7b8
feat(order): 관리자 Order 서비스 구현
Jjiggu Jul 4, 2025
012c9f6
refactor: 멀티모듈 구조 변경
Jjiggu Jul 4, 2025
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
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/needdelete.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

16 changes: 8 additions & 8 deletions .github/workflows/deploy-admin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ on:
branches:
- develop
paths:
- 'nowait-app-admin-api/**'
- 'nowait-common/**'
- 'nowait-domain/domain-core-rdb/**'
- 'nowait-domain/domain-admin-rdb/**'
- 'nowait-infra/**'
- 'build.gradle'
- 'settings.gradle'
- 'gradle/**'
- 'nowait-app-admin-api/**'
- 'nowait-common/**'
- 'nowait-domain/domain-core-rdb/**'
- 'nowait-domain/domain-admin-rdb/**'
- 'nowait-infra/**'
- 'build.gradle'
- 'settings.gradle'
- 'gradle/**'

env:
PROJECT_NAME: NoWait
Expand Down
16 changes: 8 additions & 8 deletions .github/workflows/deploy-user.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ on:
branches:
- develop
paths:
- 'nowait-app-user-api/**'
- 'nowait-common/**'
- 'nowait-domain/domain-core-rdb/**'
- 'nowait-domain/domain-user-rdb/**'
- 'nowait-infra/**'
- 'build.gradle'
- 'settings.gradle'
- 'gradle/**'
- 'nowait-app-user-api/**'
- 'nowait-common/**'
- 'nowait-domain/domain-core-rdb/**'
- 'nowait-domain/domain-user-rdb/**'
- 'nowait-infra/**'
- 'build.gradle'
- 'settings.gradle'
- 'gradle/**'

env:
PROJECT_NAME: NoWait
Expand Down
4 changes: 3 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ subprojects {
apply plugin: "java"
apply plugin: 'java-library'
apply plugin: "io.spring.dependency-management"
apply plugin: "org.springframework.boot"
if (project.name.startsWith('nowait-app-')) {
apply plugin: "org.springframework.boot"
}

repositories {
mavenCentral()
Expand Down
9 changes: 4 additions & 5 deletions nowait-app-admin-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ plugins {
id 'java'
}

bootJar {
enabled = true
}
jar {
enabled = false
}
bootJar {
enabled = true
}

group = 'com.nowait'
version = '0.0.1-SNAPSHOT'
Expand All @@ -16,10 +16,9 @@ repositories {
mavenCentral()
}

// api-admin에서 사용하는 도메인, 인프라 모듈만 추가
dependencies {
implementation project(':nowait-common')
implementation project(':nowait-infra') // aws 관련 도메인
implementation project(':nowait-infra')
implementation project(':nowait-domain:domain-admin-rdb')
implementation project(':nowait-domain:domain-core-rdb')

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,61 @@
package com.nowait.applicationadmin.order.controller;

import java.util.List;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.nowait.applicationadmin.order.dto.OrderResponseDto;
import com.nowait.applicationadmin.order.dto.OrderStatusUpdateRequestDto;
import com.nowait.applicationadmin.order.dto.OrderStatusUpdateResponseDto;
import com.nowait.applicationadmin.order.service.OrderService;
import com.nowait.common.api.ApiUtils;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

@Tag(name = "Order API", description = "주문 API")
@RestController
@RequestMapping("admin/orders")
@RequestMapping("/admin/orders")
@RequiredArgsConstructor
public class OrderController {

private final OrderService orderService;

@GetMapping("/{storeId}")
@Operation(summary = "주점별 주문리스트 조회", description = "특정 주점에 대한 예약리스트 조회")
@ApiResponse(responseCode = "200", description = "주리스트 조회")
public ResponseEntity<?> getOrderListByStoreId(@PathVariable Long storeId) {
List<OrderResponseDto> response = orderService.findAllOrders(storeId);
return ResponseEntity
.status(HttpStatus.OK)
.body(
ApiUtils.success(
response
)
);
}

@PatchMapping("/status/{orderId}")
@Operation(summary = "주문 상태 변경", description = "특정 주문의 상태를 변경.")
@ApiResponse(responseCode = "200", description = "주문 상태 변경 성공")
@ApiResponse(responseCode = "400", description = "주문을 찾을 수 없음")
public ResponseEntity<?> updateOrderStatus(
@PathVariable Long orderId,
@RequestBody@Valid OrderStatusUpdateRequestDto requestDto
) {
OrderStatusUpdateResponseDto response = orderService.updateOrderStatus(orderId, requestDto.getOrderStatus());
return ResponseEntity
.status(HttpStatus.OK)
.body(ApiUtils.success(response));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.nowait.applicationadmin.order.dto;

import java.time.LocalDateTime;

import com.nowait.domaincorerdb.order.entity.OrderStatus;
import com.nowait.domaincorerdb.order.entity.UserOrder;

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class OrderResponseDto {
private Long id;
private Long tableId;
private String depositorName;
private Integer totalPrice;
private OrderStatus status;
private LocalDateTime createdAt;

public static OrderResponseDto fromEntity(UserOrder userOrder) {
return OrderResponseDto.builder()
.id(userOrder.getId())
.tableId(userOrder.getTableId())
.depositorName(userOrder.getDepositorName())
.totalPrice(userOrder.getTotalPrice())
.status(userOrder.getStatus())
.createdAt(userOrder.getCreatedAt())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.nowait.applicationadmin.order.dto;

import com.nowait.domaincorerdb.order.entity.OrderStatus;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class OrderStatusUpdateRequestDto {
@Schema(description = "주문 상태", example = "WAITING_FOR_PAYMENT", allowableValues = {"WAITING_FOR_PAYMENT", "COOKING", "COOKED"})
@NotNull(message = "주문상태는 필수입니다")
private final OrderStatus orderStatus;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.nowait.applicationadmin.order.dto;

import com.nowait.domaincorerdb.order.entity.OrderStatus;
import com.nowait.domaincorerdb.order.entity.UserOrder;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class OrderStatusUpdateResponseDto {
private final OrderStatus orderStatus;

public static OrderStatusUpdateResponseDto fromEntity(UserOrder userOrder) {
return new OrderStatusUpdateResponseDto(userOrder.getStatus());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.nowait.applicationadmin.order.service;

import java.util.List;
import java.util.stream.Collectors;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.nowait.applicationadmin.order.dto.OrderResponseDto;
import com.nowait.applicationadmin.order.dto.OrderStatusUpdateResponseDto;
import com.nowait.domaincorerdb.order.entity.OrderStatus;
import com.nowait.domaincorerdb.order.entity.UserOrder;
import com.nowait.domaincorerdb.order.repository.OrderRepository;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class OrderService {
private final OrderRepository orderRepository;

@Transactional(readOnly = true)
public List<OrderResponseDto> findAllOrders(Long storeId) {
return orderRepository.findAllByStore_StoreId(storeId).stream()
.map(OrderResponseDto::fromEntity)
.collect(Collectors.toList());
}

@Transactional
public OrderStatusUpdateResponseDto updateOrderStatus(Long orderId, OrderStatus newStatus) {
UserOrder userOrder = orderRepository.findById(orderId)
.orElseThrow(() -> new IllegalArgumentException("Order not found with id: " + orderId));
userOrder.updateStatus(newStatus);
return OrderStatusUpdateResponseDto.fromEntity(userOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,29 +23,29 @@ public class TokenService {
private final JwtUtil jwtUtil;

@Transactional
public Boolean validateToken(String token, Long userId){
public boolean validateToken(String token, Long userId){
// DB에서 해당 userId와 일치하는 리프레시토큰을 찾는다.
Optional<Token> savedToken = tokenRepository.findByUserId(userId);

// DB에서 userId에 대응되는 리프레시토큰 없으면, 유효하지 않음
if (savedToken.isEmpty()){
log.info("여기에 걸렸니 ? -- 1 ");
log.debug("DB에 현재 userId에 대응되는 리프레시 토큰이 없습니다");
return false;
}

// 리프레시 토큰이 DB에 저장된 토큰과 일치하는지 확인
if (!savedToken.get().getRefreshToken().equals(token)){
log.info("여기에 걸렸니 ? -- 2 ");
log.debug("DB에 저장된 리프레시 토큰와 현재 전달받은 리프레시 토큰 일치하지 않습니다");
return false;
}

// 리프레시 토큰의 만료여부 확인
if(jwtUtil.isExpired(token)){
log.info("여기에 걸렸니 ? -- 3 ");
log.debug("리프레시 토큰이 만료된 토큰입니다");
return false; // 만료된 토큰은 유효하지 않음
}

log.info("여기에 걸렸니 ? -- 4 ");
log.info("리프레시 토큰이 유효한 토큰입니다");
return true; // 모든 조건 만족 시, 유효한 토큰
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,13 @@ public ManagerLoginResponseDto login(ManagerLoginRequestDto managerLoginRequestD
);
MemberDetails memberDetails = (MemberDetails) authentication.getPrincipal();
User user = userRepository.getReferenceById(memberDetails.getId());
String accessToken = jwtUtil.createAccessToken("accessToken", user.getId(), String.valueOf(user.getRole()), accessTokenExpiration);

long currentAccessTokenExpiration = accessTokenExpiration;
if (user.getRole() == com.nowait.common.enums.Role.SUPER_ADMIN) {
currentAccessTokenExpiration = 7L * 24 * 60 * 60 * 1000L; // 7일
}

String accessToken = jwtUtil.createAccessToken("accessToken", user.getId(), String.valueOf(user.getRole()), currentAccessTokenExpiration);
return ManagerLoginResponseDto.fromEntity(user,accessToken);
}
}
7 changes: 3 additions & 4 deletions nowait-app-user-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ plugins {
id 'java'
}

bootJar {
enabled = true
}
jar {
enabled = false
}
bootJar {
enabled = true
}

group = 'com.nowait'
version = '0.0.1-SNAPSHOT'
Expand All @@ -30,7 +30,6 @@ dependencies {
// SPRING SECURITY
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

// jwt
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.nowait.applicationuser.bookmark.service;

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

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -59,7 +60,7 @@ public String deleteBookmark(Long bookmarkId, CustomOAuth2User customOAuth2User)
parameterValidation(bookmarkId, customOAuth2User);
Bookmark bookmark = bookmarkRepository.findById(bookmarkId)
.orElseThrow(() -> new EntityNotFoundException(bookmarkId + " bookmark not found."));
if (bookmark.getUser().getId() != customOAuth2User.getUserId()) {
if (!Objects.equals(bookmark.getUser().getId(), customOAuth2User.getUserId())) {
throw new IllegalArgumentException("you can only delete your own bookmark");
}
bookmarkRepository.delete(bookmark);
Expand Down
Loading