From 0676a31cfdc4d912f8e461bcee8774b3ea00145b Mon Sep 17 00:00:00 2001 From: joungmin Date: Tue, 16 Jun 2026 19:34:58 +0900 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=96=B4=EB=93=9C=EB=AF=BC=20=EA=B6=8C=ED=95=9C=20=ED=86=A0?= =?UTF-8?q?=EA=B8=80=20backend=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AdminUserController.updateAdmin이 호출하던 service/mapper 미커밋 상태였음 - CORS allowedMethods에 PATCH 추가 (PATCH /api/admin/users/{id}/admin) - UserMapper.updateAdmin + XML (is_admin 0/1) - UserService.updateAdmin (트랜잭션 + 404 가드) - findAllWithCounts에 is_admin 컬럼 SELECT 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 --- .../src/main/java/com/tasteby/config/WebConfig.java | 2 +- .../src/main/java/com/tasteby/mapper/UserMapper.java | 2 ++ .../src/main/java/com/tasteby/service/UserService.java | 10 ++++++++++ .../src/main/resources/mybatis/mapper/UserMapper.xml | 6 +++++- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/backend-java/src/main/java/com/tasteby/config/WebConfig.java b/backend-java/src/main/java/com/tasteby/config/WebConfig.java index dd8a53c..b762735 100644 --- a/backend-java/src/main/java/com/tasteby/config/WebConfig.java +++ b/backend-java/src/main/java/com/tasteby/config/WebConfig.java @@ -21,7 +21,7 @@ public class WebConfig implements WebMvcConfigurer { public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration config = new CorsConfiguration(); config.setAllowedOrigins(Arrays.asList(allowedOrigins.split(","))); - config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS")); + config.setAllowedMethods(List.of("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS")); config.setAllowedHeaders(List.of("*")); config.setAllowCredentials(true); diff --git a/backend-java/src/main/java/com/tasteby/mapper/UserMapper.java b/backend-java/src/main/java/com/tasteby/mapper/UserMapper.java index 81bb90a..e95c540 100644 --- a/backend-java/src/main/java/com/tasteby/mapper/UserMapper.java +++ b/backend-java/src/main/java/com/tasteby/mapper/UserMapper.java @@ -21,4 +21,6 @@ public interface UserMapper { List findAllWithCounts(@Param("limit") int limit, @Param("offset") int offset); int countAll(); + + int updateAdmin(@Param("id") String id, @Param("admin") int admin); } diff --git a/backend-java/src/main/java/com/tasteby/service/UserService.java b/backend-java/src/main/java/com/tasteby/service/UserService.java index d3c5ebb..71b52e1 100644 --- a/backend-java/src/main/java/com/tasteby/service/UserService.java +++ b/backend-java/src/main/java/com/tasteby/service/UserService.java @@ -3,8 +3,10 @@ package com.tasteby.service; import com.tasteby.domain.UserInfo; import com.tasteby.mapper.UserMapper; import com.tasteby.util.IdGenerator; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.server.ResponseStatusException; import java.util.List; @@ -47,4 +49,12 @@ public class UserService { public int countAll() { return mapper.countAll(); } + + @Transactional + public void updateAdmin(String userId, boolean admin) { + int rows = mapper.updateAdmin(userId, admin ? 1 : 0); + if (rows == 0) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "User not found"); + } + } } diff --git a/backend-java/src/main/resources/mybatis/mapper/UserMapper.xml b/backend-java/src/main/resources/mybatis/mapper/UserMapper.xml index f3764b9..1abee66 100644 --- a/backend-java/src/main/resources/mybatis/mapper/UserMapper.xml +++ b/backend-java/src/main/resources/mybatis/mapper/UserMapper.xml @@ -37,7 +37,7 @@ + + UPDATE tasteby_users SET is_admin = #{admin,jdbcType=NUMERIC} WHERE id = #{id} + +