diff --git a/src/main/java/xyz/playedu/api/checks/AdminPermissionCheck.java b/src/main/java/xyz/playedu/api/checks/AdminPermissionCheck.java index edcfac8..3662cae 100644 --- a/src/main/java/xyz/playedu/api/checks/AdminPermissionCheck.java +++ b/src/main/java/xyz/playedu/api/checks/AdminPermissionCheck.java @@ -26,11 +26,6 @@ import xyz.playedu.api.service.AdminPermissionService; import java.util.*; -/** - * @Author 杭州白书科技有限公司 - * - * @create 2023/2/20 14:31 - */ @Component public class AdminPermissionCheck implements ApplicationRunner { @@ -122,6 +117,15 @@ public class AdminPermissionCheck implements ApplicationRunner { .RESOURCE_DESTROY); } }, + new AdminPermission() { + { + setSort(10); + setName("编辑"); + setSlug( + BPermissionConstant + .RESOURCE_UPDATE); + } + }, }); // 学员 put( diff --git a/src/main/java/xyz/playedu/api/constant/BPermissionConstant.java b/src/main/java/xyz/playedu/api/constant/BPermissionConstant.java index ec06642..c70af39 100644 --- a/src/main/java/xyz/playedu/api/constant/BPermissionConstant.java +++ b/src/main/java/xyz/playedu/api/constant/BPermissionConstant.java @@ -35,8 +35,6 @@ public class BPermissionConstant { public static final String DEPARTMENT_CUD = "department-cud"; public static final String DEPARTMENT_USER_LEARN = "department-user-learn"; - public static final String RESOURCE_CATEGORY = "resource-category"; - public static final String USER_INDEX = "user-index"; public static final String USER_STORE = "user-store"; public static final String USER_UPDATE = "user-update"; @@ -48,7 +46,9 @@ public class BPermissionConstant { public static final String COURSE_USER = "course-user"; public static final String COURSE_USER_DESTROY = "course-user-destroy"; + public static final String RESOURCE_CATEGORY = "resource-category"; public static final String RESOURCE_DESTROY = "resource-destroy"; + public static final String RESOURCE_UPDATE = "resource-update"; public static final String SYSTEM_CONFIG = "system-config"; diff --git a/src/main/java/xyz/playedu/api/controller/backend/LoginController.java b/src/main/java/xyz/playedu/api/controller/backend/LoginController.java index e8e20d0..e37fc7b 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/LoginController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/LoginController.java @@ -25,7 +25,6 @@ import xyz.playedu.api.bus.BackendBus; import xyz.playedu.api.constant.BPermissionConstant; import xyz.playedu.api.domain.AdminUser; import xyz.playedu.api.event.AdminUserLoginEvent; -import xyz.playedu.api.exception.JwtLogoutException; import xyz.playedu.api.middleware.BackendPermissionMiddleware; import xyz.playedu.api.middleware.ImageCaptchaCheckMiddleware; import xyz.playedu.api.request.backend.LoginRequest; @@ -84,7 +83,7 @@ public class LoginController { } @PostMapping("/logout") - public JsonResponse logout() throws JwtLogoutException { + public JsonResponse logout() { authService.logout(); return JsonResponse.success("success"); } diff --git a/src/main/java/xyz/playedu/api/controller/backend/ResourceController.java b/src/main/java/xyz/playedu/api/controller/backend/ResourceController.java index f021797..3234486 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/ResourceController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/ResourceController.java @@ -15,9 +15,12 @@ */ package xyz.playedu.api.controller.backend; +import lombok.SneakyThrows; + import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import xyz.playedu.api.BCtx; @@ -29,8 +32,8 @@ import xyz.playedu.api.domain.Resource; import xyz.playedu.api.domain.ResourceVideo; import xyz.playedu.api.exception.NotFoundException; import xyz.playedu.api.middleware.BackendPermissionMiddleware; -import xyz.playedu.api.request.backend.ResourceCategoryChangeRequest; import xyz.playedu.api.request.backend.ResourceDestroyMultiRequest; +import xyz.playedu.api.request.backend.ResourceUpdateRequest; import xyz.playedu.api.service.AdminUserService; import xyz.playedu.api.service.MinioService; import xyz.playedu.api.service.ResourceService; @@ -147,30 +150,14 @@ public class ResourceController { return JsonResponse.success(); } - @BackendPermissionMiddleware(slug = BPermissionConstant.RESOURCE_DESTROY) - @PutMapping("/category") - public JsonResponse categoryChange(@RequestBody ResourceCategoryChangeRequest req) { - if (req.getIds().size() == 0) { - return JsonResponse.error("请选择需要删除的资源"); - } - if (req.getCategoryId() <= 0) { - return JsonResponse.error("请选择分类"); - } - - List ids = req.getIds(); - if (!backendBus.isSuperAdmin()) { // 非超管校验owner - ids = - resourceService.chunks(req.getIds()).stream() - .filter(r -> r.getAdminId().equals(BCtx.getId())) - .map(Resource::getId) - .toList(); - if (ids.size() == 0) { - return JsonResponse.error("无权限操作"); - } - } - - resourceService.categoryChange(ids, req.getCategoryId()); - + @PutMapping("/{id}") + @SneakyThrows + public JsonResponse update( + @RequestBody @Validated ResourceUpdateRequest req, + @PathVariable(name = "id") Integer id) { + Resource resource = resourceService.findOrFail(id); + resourceService.updateNameAndCategoryId( + resource.getId(), req.getName(), req.getCategoryId()); return JsonResponse.success(); } } diff --git a/src/main/java/xyz/playedu/api/exception/JwtLogoutException.java b/src/main/java/xyz/playedu/api/exception/JwtLogoutException.java deleted file mode 100644 index 3f2cd32..0000000 --- a/src/main/java/xyz/playedu/api/exception/JwtLogoutException.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2023 杭州白书科技有限公司 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package xyz.playedu.api.exception; - -public class JwtLogoutException extends Exception { - public JwtLogoutException() { - super(); - } - - public JwtLogoutException(String message) { - super(message); - } - - public JwtLogoutException(String message, Throwable cause) { - super(message, cause); - } - - public JwtLogoutException(Throwable cause) { - super(cause); - } - - protected JwtLogoutException( - String message, - Throwable cause, - boolean enableSuppression, - boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } -} diff --git a/src/main/java/xyz/playedu/api/request/backend/ResourceDestroyMultiRequest.java b/src/main/java/xyz/playedu/api/request/backend/ResourceDestroyMultiRequest.java index dae5bb5..d488a30 100644 --- a/src/main/java/xyz/playedu/api/request/backend/ResourceDestroyMultiRequest.java +++ b/src/main/java/xyz/playedu/api/request/backend/ResourceDestroyMultiRequest.java @@ -19,13 +19,7 @@ import lombok.Data; import java.util.List; -/** - * @Author 杭州白书科技有限公司 - * - * @create 2023/3/13 10:41 - */ @Data public class ResourceDestroyMultiRequest { - private List ids; } diff --git a/src/main/java/xyz/playedu/api/request/backend/ResourceUpdateRequest.java b/src/main/java/xyz/playedu/api/request/backend/ResourceUpdateRequest.java new file mode 100644 index 0000000..88125e3 --- /dev/null +++ b/src/main/java/xyz/playedu/api/request/backend/ResourceUpdateRequest.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2023 杭州白书科技有限公司 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package xyz.playedu.api.request.backend; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +import lombok.Data; + +import org.hibernate.validator.constraints.Length; + +@Data +public class ResourceUpdateRequest { + + @NotBlank(message = "请输入资源名") + @Length(min = 1, max = 254, message = "资源名长度在1-254个字符之间") + private String name; + + @NotNull(message = "category_id参数不存在") + @JsonProperty("category_id") + private Integer categoryId; +} diff --git a/src/main/java/xyz/playedu/api/service/ResourceService.java b/src/main/java/xyz/playedu/api/service/ResourceService.java index 9fdaa79..9bb4dd1 100644 --- a/src/main/java/xyz/playedu/api/service/ResourceService.java +++ b/src/main/java/xyz/playedu/api/service/ResourceService.java @@ -54,5 +54,5 @@ public interface ResourceService extends IService { Integer duration(Integer id); - void categoryChange(List ids, Integer categoryId); + void updateNameAndCategoryId(Integer id, String name, Integer categoryId); } diff --git a/src/main/java/xyz/playedu/api/service/impl/ResourceServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/ResourceServiceImpl.java index 129dfc8..944258b 100644 --- a/src/main/java/xyz/playedu/api/service/impl/ResourceServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/ResourceServiceImpl.java @@ -157,7 +157,19 @@ public class ResourceServiceImpl extends ServiceImpl } @Override - public void categoryChange(List ids, Integer categoryId) { - relationService.rebuild(ids, categoryId); + @Transactional + public void updateNameAndCategoryId(Integer id, String name, Integer categoryId) { + Resource resource = new Resource(); + resource.setId(id); + resource.setName(name); + updateById(resource); + + relationService.rebuild( + id, + new ArrayList<>() { + { + add(categoryId); + } + }); } } diff --git a/src/main/java/xyz/playedu/api/service/impl/internal/ResourceCategoryRelationServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/internal/ResourceCategoryRelationServiceImpl.java index 9630d1f..450c064 100644 --- a/src/main/java/xyz/playedu/api/service/impl/internal/ResourceCategoryRelationServiceImpl.java +++ b/src/main/java/xyz/playedu/api/service/impl/internal/ResourceCategoryRelationServiceImpl.java @@ -31,18 +31,21 @@ public class ResourceCategoryRelationServiceImpl extends ServiceImpl implements ResourceCategoryRelationService { @Override - public void rebuild(List ids, Integer categoryId) { - remove(query().getWrapper().in("rid", ids)); + public void rebuild(Integer resourceId, List categoryIds) { + remove(query().getWrapper().eq("rid", resourceId)); + List data = new ArrayList<>(); - ids.forEach( - (item) -> - data.add( - new ResourceCategoryRelation() { - { - setCid(categoryId); - setRid(item); - } - })); + categoryIds.forEach( + categoryId -> { + data.add( + new ResourceCategoryRelation() { + { + setCid(categoryId); + setRid(resourceId); + } + }); + }); + saveBatch(data); } } diff --git a/src/main/java/xyz/playedu/api/service/internal/ResourceCategoryRelationService.java b/src/main/java/xyz/playedu/api/service/internal/ResourceCategoryRelationService.java index f5833d9..d29395c 100644 --- a/src/main/java/xyz/playedu/api/service/internal/ResourceCategoryRelationService.java +++ b/src/main/java/xyz/playedu/api/service/internal/ResourceCategoryRelationService.java @@ -22,5 +22,5 @@ import xyz.playedu.api.domain.ResourceCategoryRelation; import java.util.List; public interface ResourceCategoryRelationService extends IService { - public void rebuild(List ids, Integer categoryId); + void rebuild(Integer resourceId, List categoryIds); }