From c852e05ceb02617e53855df1688c498e8d1a130e Mon Sep 17 00:00:00 2001 From: jack ning Date: Sat, 8 Mar 2025 22:46:58 +0800 Subject: [PATCH] update --- .../ai/model/LlmModelRestService.java | 8 +- .../ai/provider/LlmProviderRestService.java | 8 +- .../bytedesk/ai/robot/RobotRestService.java | 8 +- .../core/action/ActionRestService.java | 8 +- .../bytedesk/core/base/BaseRestService.java | 14 +- .../bytedesk/core/black/BlackRestService.java | 8 +- .../core/category/CategoryRestService.java | 8 +- .../core/clipboard/ClipboardRestService.java | 8 +- .../{crm => customer}/CustomerEntity.java | 2 +- .../CustomerEventListener.java | 2 +- .../core/{crm => customer}/CustomerExcel.java | 2 +- .../{crm => customer}/CustomerRepository.java | 2 +- .../{crm => customer}/CustomerRequest.java | 2 +- .../{crm => customer}/CustomerResponse.java | 2 +- .../CustomerRestController.java | 2 +- .../CustomerRestService.java | 10 +- .../CustomerSpecification.java | 2 +- .../{crm => customer}/CustomerTypeEnum.java | 2 +- .../bytedesk/core/{crm => customer}/readme.md | 0 .../core/{crm => customer}/readme.zh.md | 0 .../bytedesk/core/flow/FlowRestService.java | 8 +- .../bytedesk/core/form/FormRestService.java | 8 +- .../core/ip/access/IpAccessRestService.java | 8 +- .../core/ip/black/IpBlacklistRestService.java | 8 +- .../core/ip/white/IpWhitelistRestService.java | 8 +- .../bytedesk/core/menu/MenuRestService.java | 8 +- .../core/message/MessageRestService.java | 8 +- .../notification/NotificationRestService.java | 8 +- .../bytedesk/core/push/PushRestService.java | 8 +- .../core/push/email/EmailTemplateService.java | 6 + .../core/quartz/QuartzInitializer.java | 6 +- .../core/quartz/QuartzRestController.java | 23 ++- ...rtzService.java => QuartzRestService.java} | 10 +- .../rbac/authority/AuthorityInitializer.java | 2 +- .../authority/AuthorityRestController.java | 2 +- ...Service.java => AuthorityRestService.java} | 10 +- ...ntroller.java => OAuthRestController.java} | 6 +- ...AuthService.java => OAuthRestService.java} | 10 +- .../organization/OrganizationInitializer.java | 2 +- .../OrganizationRestController.java | 2 +- ...vice.java => OrganizationRestService.java} | 10 +- .../core/rbac/role/RoleRestService.java | 10 +- .../core/rbac/user/UserRestService.java | 19 ++ .../com/bytedesk/core/tag/TagRestService.java | 8 +- .../core/thread/ThreadRestService.java | 8 +- .../bytedesk/core/topic/TopicRestService.java | 8 +- .../core/upload/UploadRestService.java | 8 +- .../com/bytedesk/core/url/UrlRestService.java | 8 +- .../kbase/article/ArticleInitializer.java | 4 +- .../kbase/article/ArticleRestService.java | 8 +- .../fixed/AutoReplyFixedInitializer.java | 4 +- .../bytedesk/kbase/faq/FaqInitializer.java | 4 +- .../KbaseInviteRestController.java | 4 +- .../com/bytedesk/team/group/GroupEntity.java | 44 ++--- .../team/group/GroupInviteEntity.java | 47 ----- .../team/group/GroupRestController.java | 3 +- .../GroupInviteRestController.java | 4 +- .../team/OrganizationServiceTests.java | 4 +- .../process/TicketProcessInitializer.java | 8 +- .../ticket/ticket/TicketInitializer.java | 4 +- .../bytedesk/kanban/module/ModuleEntity.java | 91 +++++++++ .../kanban/module/ModuleEntityListener.java | 37 ++++ .../kanban/module/ModuleEventListener.java | 27 +++ .../bytedesk/kanban/module/ModuleExcel.java | 40 ++++ .../kanban/module/ModulePermissions.java | 29 +++ .../kanban/module/ModuleRepository.java | 26 +++ .../bytedesk/kanban/module/ModuleRequest.java | 71 +++++++ .../kanban/module/ModuleResponse.java | 61 ++++++ .../kanban/module/ModuleRestController.java | 89 +++++++++ .../kanban/module/ModuleRestService.java | 179 ++++++++++++++++++ .../kanban/module/ModuleSpecification.java | 43 +++++ .../kanban/module/ModuleTypeEnum.java | 16 +- .../module/event/ModuleCreateEvent.java | 36 ++++ .../module/event/ModuleDeleteEvent.java | 35 ++++ .../module/event/ModuleUpdateEvent.java | 36 ++++ .../bytedesk/kanban/module/package-info.java | 8 + .../kanban/project/ProjectEntity.java | 7 +- .../kanban/project/ProjectRequest.java | 6 +- .../kanban/project/ProjectResponse.java | 8 +- .../kanban/project/ProjectRestController.java | 18 +- .../kanban/project/ProjectRestService.java | 17 +- .../ProjectInviteRestService.java | 8 +- .../kanban/report/ReportRestService.java | 8 +- .../com/bytedesk/kanban/task/TaskEntity.java | 6 +- .../bytedesk/kanban/task/TaskRestService.java | 8 +- .../kanban/todo_list/TodoListEntity.java | 8 +- .../kanban/todo_list/TodoListRequest.java | 2 + .../kanban/todo_list/TodoListResponse.java | 6 +- .../kanban/todo_list/TodoListRestService.java | 8 +- 89 files changed, 1206 insertions(+), 194 deletions(-) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerEntity.java (98%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerEventListener.java (95%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerExcel.java (97%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerRepository.java (97%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerRequest.java (97%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerResponse.java (97%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerRestController.java (98%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerRestService.java (93%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerSpecification.java (97%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/CustomerTypeEnum.java (96%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/readme.md (100%) rename modules/core/src/main/java/com/bytedesk/core/{crm => customer}/readme.zh.md (100%) rename modules/core/src/main/java/com/bytedesk/core/quartz/{QuartzService.java => QuartzRestService.java} (96%) rename modules/core/src/main/java/com/bytedesk/core/rbac/authority/{AuthorityService.java => AuthorityRestService.java} (94%) rename modules/core/src/main/java/com/bytedesk/core/rbac/oauth/{OAuthController.java => OAuthRestController.java} (94%) rename modules/core/src/main/java/com/bytedesk/core/rbac/oauth/{OAuthService.java => OAuthRestService.java} (89%) rename modules/core/src/main/java/com/bytedesk/core/rbac/organization/{OrganizationService.java => OrganizationRestService.java} (95%) delete mode 100644 modules/team/src/main/java/com/bytedesk/team/group/GroupInviteEntity.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEntity.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEntityListener.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEventListener.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleExcel.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModulePermissions.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRepository.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRequest.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleResponse.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRestController.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRestService.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleSpecification.java rename modules/team/src/main/java/com/bytedesk/team/group/GroupInviteStatus.java => plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleTypeEnum.java (70%) create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleCreateEvent.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleDeleteEvent.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleUpdateEvent.java create mode 100644 plugins/kanban/src/main/java/com/bytedesk/kanban/module/package-info.java diff --git a/modules/ai/src/main/java/com/bytedesk/ai/model/LlmModelRestService.java b/modules/ai/src/main/java/com/bytedesk/ai/model/LlmModelRestService.java index d604dc465b..6c0f4502cf 100644 --- a/modules/ai/src/main/java/com/bytedesk/ai/model/LlmModelRestService.java +++ b/modules/ai/src/main/java/com/bytedesk/ai/model/LlmModelRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-09-25 12:19:55 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-02-26 18:21:08 + * @LastEditTime: 2025-03-08 22:31:38 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -167,4 +167,10 @@ public class LlmModelRestService extends BaseRestService { abstract public Page queryByUser(TRequest request); - // abstract public Optional queryByUid(TRequest request); + public TResponse queryByUid(TRequest request) { + Optional optionalEntity = findByUid(getUidFromRequest(request)); + if (optionalEntity.isPresent()) { + return convertToResponse(optionalEntity.get()); + } + return null; + } + + protected String getUidFromRequest(TRequest request) { + throw new UnsupportedOperationException("Method getUidFromRequest needs to be implemented in child class"); + } abstract public Optional findByUid(String uid); diff --git a/modules/core/src/main/java/com/bytedesk/core/black/BlackRestService.java b/modules/core/src/main/java/com/bytedesk/core/black/BlackRestService.java index ccc817453a..0b7dbca6f4 100644 --- a/modules/core/src/main/java/com/bytedesk/core/black/BlackRestService.java +++ b/modules/core/src/main/java/com/bytedesk/core/black/BlackRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-06-27 12:20:55 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-01-17 16:25:30 + * @LastEditTime: 2025-03-08 22:32:25 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -175,4 +175,10 @@ public class BlackRestService extends BaseRestService convertToResponse(city)).collect(Collectors.toList()); } + @Override + public CategoryResponse queryByUid(CategoryRequest request) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'queryByUid'"); + } + } diff --git a/modules/core/src/main/java/com/bytedesk/core/clipboard/ClipboardRestService.java b/modules/core/src/main/java/com/bytedesk/core/clipboard/ClipboardRestService.java index 08f13cf58f..8d71160d4f 100644 --- a/modules/core/src/main/java/com/bytedesk/core/clipboard/ClipboardRestService.java +++ b/modules/core/src/main/java/com/bytedesk/core/clipboard/ClipboardRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-08-05 22:19:45 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2024-12-22 17:58:49 + * @LastEditTime: 2025-03-08 22:32:40 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -133,4 +133,10 @@ public class ClipboardRestService extends BaseRestService { - private QuartzService quartzService; + private QuartzRestService quartzRestService; @Override public ResponseEntity queryByOrg(QuartzRequest request) { - Page pageResult = quartzService.queryByOrg(request); + Page pageResult = quartzRestService.queryByOrg(request); return ResponseEntity.ok(JsonResult.success(pageResult)); } @@ -49,7 +48,7 @@ public class QuartzRestController extends BaseRestController { @Override public ResponseEntity queryByUser(QuartzRequest request) { - Page pageResult = quartzService.queryByUser(request); + Page pageResult = quartzRestService.queryByUser(request); return ResponseEntity.ok(JsonResult.success(pageResult)); } @@ -57,7 +56,7 @@ public class QuartzRestController extends BaseRestController { @Override public ResponseEntity create(@RequestBody QuartzRequest request) { - QuartzResponse response = quartzService.create(request); + QuartzResponse response = quartzRestService.create(request); if (response == null) { return ResponseEntity.badRequest().body(JsonResult.error("jobName already exists")); } @@ -68,7 +67,7 @@ public class QuartzRestController extends BaseRestController { @Override public ResponseEntity update(@RequestBody QuartzRequest request) { - QuartzResponse response = quartzService.update(request); + QuartzResponse response = quartzRestService.update(request); if (response == null) { return ResponseEntity.badRequest().body(JsonResult.error("uid not exists")); } @@ -79,7 +78,7 @@ public class QuartzRestController extends BaseRestController { @Override public ResponseEntity delete(@RequestBody QuartzRequest request) { - quartzService.delete(request); + quartzRestService.delete(request); return ResponseEntity.ok(JsonResult.success()); } @@ -87,25 +86,25 @@ public class QuartzRestController extends BaseRestController { // @PostMapping("/startJob") public ResponseEntity startJob(@RequestBody QuartzRequest request) { - quartzService.startJob(request); + quartzRestService.startJob(request); return ResponseEntity.ok(JsonResult.success(request)); } @PostMapping("/pauseJob") public ResponseEntity pauseJob(@RequestBody QuartzRequest request) { - quartzService.pauseJob(request); + quartzRestService.pauseJob(request); return ResponseEntity.ok(JsonResult.success(request)); } @PostMapping("/resumeJob") public ResponseEntity resumeJob(@RequestBody QuartzRequest request) { - quartzService.resumeJob(request); + quartzRestService.resumeJob(request); return ResponseEntity.ok(JsonResult.success(request)); } @PostMapping("/deleteJob") public ResponseEntity deleteJob(@RequestBody QuartzRequest request) { - quartzService.deleteJob(request); + quartzRestService.deleteJob(request); return ResponseEntity.ok(JsonResult.success(request)); } diff --git a/modules/core/src/main/java/com/bytedesk/core/quartz/QuartzService.java b/modules/core/src/main/java/com/bytedesk/core/quartz/QuartzRestService.java similarity index 96% rename from modules/core/src/main/java/com/bytedesk/core/quartz/QuartzService.java rename to modules/core/src/main/java/com/bytedesk/core/quartz/QuartzRestService.java index 1a6e0eccb7..fd7cfb52d8 100644 --- a/modules/core/src/main/java/com/bytedesk/core/quartz/QuartzService.java +++ b/modules/core/src/main/java/com/bytedesk/core/quartz/QuartzRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-05-14 09:39:46 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2024-11-06 11:03:00 + * @LastEditTime: 2025-03-08 22:34:35 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -47,7 +47,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Service @AllArgsConstructor -public class QuartzService extends BaseRestService { +public class QuartzRestService extends BaseRestService { private Scheduler scheduler; @@ -252,6 +252,12 @@ public class QuartzService extends BaseRestService 0) { diff --git a/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityInitializer.java b/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityInitializer.java index 0ef0082d15..dc322699c6 100644 --- a/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityInitializer.java +++ b/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityInitializer.java @@ -36,7 +36,7 @@ import lombok.AllArgsConstructor; @AllArgsConstructor public class AuthorityInitializer { - private AuthorityService authorityService; + private AuthorityRestService authorityService; public void init() { diff --git a/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityRestController.java b/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityRestController.java index 128adc52b0..6e8d2058eb 100644 --- a/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityRestController.java +++ b/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityRestController.java @@ -30,7 +30,7 @@ import lombok.AllArgsConstructor; @AllArgsConstructor public class AuthorityRestController extends BaseRestController { - private final AuthorityService authorityService; + private final AuthorityRestService authorityService; // @PreAuthorize(AuthorityPermissions.AUTHORITY_READ) @Override diff --git a/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityService.java b/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityRestService.java similarity index 94% rename from modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityService.java rename to modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityRestService.java index 2388d7eda7..96b46fe760 100644 --- a/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityService.java +++ b/modules/core/src/main/java/com/bytedesk/core/rbac/authority/AuthorityRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-01-29 16:21:24 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-06 10:04:45 + * @LastEditTime: 2025-03-08 22:36:04 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -36,7 +36,7 @@ import java.util.Optional; @Service @AllArgsConstructor -public class AuthorityService extends BaseRestService { +public class AuthorityRestService extends BaseRestService { private final AuthorityRepository authorityRepository; private final ModelMapper modelMapper; @@ -154,6 +154,12 @@ public class AuthorityService extends BaseRestService 0) { diff --git a/modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthController.java b/modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthRestController.java similarity index 94% rename from modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthController.java rename to modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthRestController.java index b263eaf4e3..9c68be9149 100644 --- a/modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthController.java +++ b/modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthRestController.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-07-10 23:50:19 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-05 16:37:07 + * @LastEditTime: 2025-03-08 22:38:07 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -27,9 +27,9 @@ import lombok.RequiredArgsConstructor; @RestController @RequestMapping("/oauth/api/v1") @RequiredArgsConstructor -public class OAuthController extends BaseRestController { +public class OAuthRestController extends BaseRestController { - private final OAuthService oauthService; + private final OAuthRestService oauthService; @Override public ResponseEntity queryByOrg(OAuthRequest request) { diff --git a/modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthService.java b/modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthRestService.java similarity index 89% rename from modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthService.java rename to modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthRestService.java index cac8a2e462..f7ea9b03b3 100644 --- a/modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthService.java +++ b/modules/core/src/main/java/com/bytedesk/core/rbac/oauth/OAuthRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-07-10 23:50:29 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2024-10-23 18:14:55 + * @LastEditTime: 2025-03-08 22:36:21 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -22,7 +22,7 @@ import org.springframework.stereotype.Service; import com.bytedesk.core.base.BaseRestService; @Service -public class OAuthService extends BaseRestService { +public class OAuthRestService extends BaseRestService { @Override public Page queryByOrg(OAuthRequest request) { @@ -83,5 +83,11 @@ public class OAuthService extends BaseRestService { - private final OrganizationService organizationService; + private final OrganizationRestService organizationService; @Override public ResponseEntity queryByOrg(OrganizationRequest request) { diff --git a/modules/core/src/main/java/com/bytedesk/core/rbac/organization/OrganizationService.java b/modules/core/src/main/java/com/bytedesk/core/rbac/organization/OrganizationRestService.java similarity index 95% rename from modules/core/src/main/java/com/bytedesk/core/rbac/organization/OrganizationService.java rename to modules/core/src/main/java/com/bytedesk/core/rbac/organization/OrganizationRestService.java index 8796279dfb..84ff7a96ac 100644 --- a/modules/core/src/main/java/com/bytedesk/core/rbac/organization/OrganizationService.java +++ b/modules/core/src/main/java/com/bytedesk/core/rbac/organization/OrganizationRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-01-29 16:20:17 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2024-11-22 12:24:17 + * @LastEditTime: 2025-03-08 22:38:38 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -40,7 +40,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Service @AllArgsConstructor -public class OrganizationService extends BaseRestService { +public class OrganizationRestService extends BaseRestService { private final AuthService authService; @@ -189,6 +189,12 @@ public class OrganizationService extends BaseRestService { diff --git a/modules/team/src/main/java/com/bytedesk/team/group/GroupEntity.java b/modules/team/src/main/java/com/bytedesk/team/group/GroupEntity.java index 0ed6d8bcab..bd1b4832e4 100644 --- a/modules/team/src/main/java/com/bytedesk/team/group/GroupEntity.java +++ b/modules/team/src/main/java/com/bytedesk/team/group/GroupEntity.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-01-29 16:20:17 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-03 23:58:03 + * @LastEditTime: 2025-03-08 17:10:55 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -174,27 +174,27 @@ public class GroupEntity extends BaseEntity { } // 处理邀请 - public void handleInvite(GroupInviteEntity invite, boolean accept) { - // if (invite.getStatus() != GroupInviteStatus.PENDING) { - // throw new GroupOperationException("Invite is not pending"); - // } + // public void handleInvite(GroupInviteEntity invite, boolean accept) { + // // if (invite.getStatus() != GroupInviteStatus.PENDING) { + // // throw new GroupOperationException("Invite is not pending"); + // // } - // if (accept) { - // // 接受邀请 - // if (members.size() >= maxMembers) { - // throw new GroupOperationException("Group is full"); - // } + // // if (accept) { + // // // 接受邀请 + // // if (members.size() >= maxMembers) { + // // throw new GroupOperationException("Group is full"); + // // } - // MemberEntity member = MemberEntity.builder() - // .user(invite.getInvitee()) - // .group(this) - // .joinTime(LocalDateTime.now()) - // .build(); - // members.add(member); - // invite.setStatus(GroupInviteStatus.ACCEPTED); - // } else { - // // 拒绝邀请 - // invite.setStatus(GroupInviteStatus.REJECTED); - // } - } + // // MemberEntity member = MemberEntity.builder() + // // .user(invite.getInvitee()) + // // .group(this) + // // .joinTime(LocalDateTime.now()) + // // .build(); + // // members.add(member); + // // invite.setStatus(GroupInviteStatus.ACCEPTED); + // // } else { + // // // 拒绝邀请 + // // invite.setStatus(GroupInviteStatus.REJECTED); + // // } + // } } diff --git a/modules/team/src/main/java/com/bytedesk/team/group/GroupInviteEntity.java b/modules/team/src/main/java/com/bytedesk/team/group/GroupInviteEntity.java deleted file mode 100644 index cea4f159f2..0000000000 --- a/modules/team/src/main/java/com/bytedesk/team/group/GroupInviteEntity.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @Author: jackning 270580156@qq.com - * @Date: 2024-12-28 11:20:15 - * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2024-12-28 12:27:34 - * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk - * Please be aware of the BSL license restrictions before installing Bytedesk IM – - * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. - * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE - * contact: 270580156@qq.com - * 联系:270580156@qq.com - * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. - */ -package com.bytedesk.team.group; - -import java.time.LocalDateTime; - -import com.bytedesk.core.base.BaseEntity; -import com.bytedesk.core.rbac.user.UserEntity; - -import jakarta.persistence.Entity; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@Entity -@Data -@EqualsAndHashCode(callSuper = false) -@Table(name = "bytedesk_team_group_invites") -public class GroupInviteEntity extends BaseEntity { - - @ManyToOne - private GroupEntity group; - - @ManyToOne - private UserEntity inviter; - - @ManyToOne - private UserEntity invitee; - - private GroupInviteStatus status = GroupInviteStatus.PENDING; - - private LocalDateTime expireTime; - - private String message; // 邀请消息 -} \ No newline at end of file diff --git a/modules/team/src/main/java/com/bytedesk/team/group/GroupRestController.java b/modules/team/src/main/java/com/bytedesk/team/group/GroupRestController.java index efe0942cfd..d9eab17808 100644 --- a/modules/team/src/main/java/com/bytedesk/team/group/GroupRestController.java +++ b/modules/team/src/main/java/com/bytedesk/team/group/GroupRestController.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-01-29 16:20:17 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-05 16:51:54 + * @LastEditTime: 2025-03-08 17:11:10 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -17,7 +17,6 @@ import java.util.List; import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/modules/team/src/main/java/com/bytedesk/team/group_invite/GroupInviteRestController.java b/modules/team/src/main/java/com/bytedesk/team/group_invite/GroupInviteRestController.java index cd130345d4..f17b1fcd30 100644 --- a/modules/team/src/main/java/com/bytedesk/team/group_invite/GroupInviteRestController.java +++ b/modules/team/src/main/java/com/bytedesk/team/group_invite/GroupInviteRestController.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-05-11 18:25:36 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-05 16:37:26 + * @LastEditTime: 2025-03-08 17:12:01 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -27,7 +27,7 @@ import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; @RestController -@RequestMapping("/api/v1/group_invite") +@RequestMapping("/api/v1/group/invite") @AllArgsConstructor public class GroupInviteRestController extends BaseRestController { diff --git a/modules/team/src/test/java/com/bytedesk/team/OrganizationServiceTests.java b/modules/team/src/test/java/com/bytedesk/team/OrganizationServiceTests.java index 9e45566118..88b4aaee50 100644 --- a/modules/team/src/test/java/com/bytedesk/team/OrganizationServiceTests.java +++ b/modules/team/src/test/java/com/bytedesk/team/OrganizationServiceTests.java @@ -22,7 +22,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import com.bytedesk.core.rbac.auth.AuthService; import com.bytedesk.core.rbac.organization.OrganizationRepository; -import com.bytedesk.core.rbac.organization.OrganizationService; +import com.bytedesk.core.rbac.organization.OrganizationRestService; @ExtendWith(MockitoExtension.class) public class OrganizationServiceTests { @@ -34,7 +34,7 @@ public class OrganizationServiceTests { private OrganizationRepository organizationRepository; @InjectMocks - private OrganizationService organizationService; + private OrganizationRestService organizationService; @BeforeEach public void setUp() { diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/process/TicketProcessInitializer.java b/modules/ticket/src/main/java/com/bytedesk/ticket/process/TicketProcessInitializer.java index 60e7201a8b..759a545216 100644 --- a/modules/ticket/src/main/java/com/bytedesk/ticket/process/TicketProcessInitializer.java +++ b/modules/ticket/src/main/java/com/bytedesk/ticket/process/TicketProcessInitializer.java @@ -29,9 +29,9 @@ import org.springframework.stereotype.Component; import com.bytedesk.core.constant.I18Consts; import com.bytedesk.core.enums.PermissionEnum; import com.bytedesk.core.rbac.authority.AuthorityRequest; -import com.bytedesk.core.rbac.authority.AuthorityService; +import com.bytedesk.core.rbac.authority.AuthorityRestService; import com.bytedesk.core.rbac.organization.OrganizationEntity; -import com.bytedesk.core.rbac.organization.OrganizationService; +import com.bytedesk.core.rbac.organization.OrganizationRestService; import com.bytedesk.core.utils.Utils; import com.bytedesk.ticket.consts.TicketConsts; @@ -44,9 +44,9 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class TicketProcessInitializer implements SmartInitializingSingleton { - private final AuthorityService authorityService; + private final AuthorityRestService authorityService; - private final OrganizationService organizationService; + private final OrganizationRestService organizationService; private final TicketProcessRestService ticketProcessRestService; diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketInitializer.java b/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketInitializer.java index 7518e5525c..6061eb8c53 100644 --- a/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketInitializer.java +++ b/modules/ticket/src/main/java/com/bytedesk/ticket/ticket/TicketInitializer.java @@ -24,7 +24,7 @@ import com.bytedesk.core.constant.I18Consts; import com.bytedesk.core.enums.LevelEnum; import com.bytedesk.core.enums.PermissionEnum; import com.bytedesk.core.rbac.authority.AuthorityRequest; -import com.bytedesk.core.rbac.authority.AuthorityService; +import com.bytedesk.core.rbac.authority.AuthorityRestService; import com.bytedesk.core.utils.Utils; import lombok.AllArgsConstructor; @@ -35,7 +35,7 @@ import lombok.extern.slf4j.Slf4j; @AllArgsConstructor public class TicketInitializer implements SmartInitializingSingleton { - private final AuthorityService authorityService; + private final AuthorityRestService authorityService; private final CategoryRestService categoryService; diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEntity.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEntity.java new file mode 100644 index 0000000000..42e4726480 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEntity.java @@ -0,0 +1,91 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2024-05-11 18:14:28 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-08 21:15:48 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * 联系:270580156@qq.com + * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import java.util.ArrayList; +import java.util.List; + +import com.bytedesk.core.base.BaseEntity; +import com.bytedesk.core.constant.I18Consts; +import com.bytedesk.core.enums.LevelEnum; +import com.bytedesk.core.enums.PlatformEnum; +import com.bytedesk.kanban.todo_list.TodoListEntity; +import com.bytedesk.team.member.MemberEntity; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.FetchType; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Entity +@Data +@Builder +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +@AllArgsConstructor +@NoArgsConstructor +@EntityListeners({ModuleEntityListener.class}) +@Table(name = "bytedesk_plugin_kanban_module") +public class ModuleEntity extends BaseEntity { + + private String name; + + @Builder.Default + private String description = I18Consts.I18N_DESCRIPTION; + + @Builder.Default + @Column(name = "module_type") + private String type = ModuleTypeEnum.CUSTOMER.name(); + + @Builder.Default + @Column(name = "module_color", nullable = false) + private String color = "red"; + + @Builder.Default + @Column(name = "module_order", nullable = false) + private int order = 0; + + @Builder.Default + private String level = LevelEnum.ORGANIZATION.name(); + + @Builder.Default + private String platform = PlatformEnum.BYTEDESK.name(); + + @Builder.Default + @ManyToMany(cascade = CascadeType.DETACH, fetch = FetchType.LAZY) + private List members = new ArrayList<>(); + + @Builder.Default + @OneToMany(cascade = CascadeType.DETACH, fetch = FetchType.LAZY) + private List todoLists = new ArrayList<>(); + + // 是否公开,公开后,对外匿名可见 + @Builder.Default + @Column(name = "is_public") + private boolean isPublic = false; + + private String projectUid; + + private String userUid; +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEntityListener.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEntityListener.java new file mode 100644 index 0000000000..302500ed6b --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEntityListener.java @@ -0,0 +1,37 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-02-25 09:52:34 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-06 18:14:18 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import org.springframework.stereotype.Component; + +import jakarta.persistence.PostPersist; +import jakarta.persistence.PostUpdate; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +public class ModuleEntityListener { + + @PostPersist + public void onPostPersist(ModuleEntity module) { + log.info("onPostPersist: {}", module); + } + + @PostUpdate + public void onPostUpdate(ModuleEntity module) { + log.info("onPostUpdate: {}", module); + } + +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEventListener.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEventListener.java new file mode 100644 index 0000000000..f19bd37f69 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleEventListener.java @@ -0,0 +1,27 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-02-25 09:44:18 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-02-25 09:54:17 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import org.springframework.stereotype.Component; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +@AllArgsConstructor +public class ModuleEventListener { + +} + diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleExcel.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleExcel.java new file mode 100644 index 0000000000..789ba7502c --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleExcel.java @@ -0,0 +1,40 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2024-08-01 06:18:10 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-03 23:09:02 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * 联系:270580156@qq.com + * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; + +import lombok.Data; + +/** + * https://github.com/alibaba/easyexcel + */ +@Data +public class ModuleExcel { + + @ExcelProperty(index = 0, value = "Name") + @ColumnWidth(20) + private String name; + + @ExcelProperty(index = 1, value = "Type") + @ColumnWidth(20) + private String type; + + @ExcelProperty(index = 2, value = "Color") + @ColumnWidth(20) + private String color; + + +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModulePermissions.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModulePermissions.java new file mode 100644 index 0000000000..7f5c30d78d --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModulePermissions.java @@ -0,0 +1,29 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2024-11-05 16:58:18 + * @LastEditors: jack ning github@bytedesk.com + * @LastEditTime: 2025-03-08 10:32:22 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * 联系:270580156@qq.com + * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +public class ModulePermissions { + + public static final String MODULE_PREFIX = "MODULE_"; + // Module permissions + public static final String MODULE_CREATE = "hasAuthority('MODULE_CREATE')"; + public static final String MODULE_READ = "hasAuthority('MODULE_READ')"; + public static final String MODULE_UPDATE = "hasAuthority('MODULE_UPDATE')"; + public static final String MODULE_DELETE = "hasAuthority('MODULE_DELETE')"; + public static final String MODULE_EXPORT = "hasAuthority('MODULE_EXPORT')"; + + // + public static final String MODULE_ANY = "hasAnyAuthority('MODULE_CREATE', 'MODULE_READ', 'MODULE_UPDATE', 'MODULE_EXPORT', 'MODULE_DELETE')"; + +} \ No newline at end of file diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRepository.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRepository.java new file mode 100644 index 0000000000..09e1eca5f1 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRepository.java @@ -0,0 +1,26 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2024-05-11 18:25:55 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2024-10-24 18:20:39 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * 联系:270580156@qq.com + * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +public interface ModuleRepository extends JpaRepository, JpaSpecificationExecutor { + + Optional findByUid(String uid); + + // Boolean existsByPlatform(String platform); +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRequest.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRequest.java new file mode 100644 index 0000000000..5034beecdd --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRequest.java @@ -0,0 +1,71 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2024-05-11 18:26:04 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-08 21:15:56 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * 联系:270580156@qq.com + * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import java.util.List; +import java.util.ArrayList; + +import com.bytedesk.core.base.BaseRequest; +import com.bytedesk.core.constant.I18Consts; +import com.bytedesk.core.enums.LevelEnum; +import com.bytedesk.core.enums.PlatformEnum; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Data +@Builder +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@AllArgsConstructor +@NoArgsConstructor +public class ModuleRequest extends BaseRequest { + + private String name; + + @Builder.Default + private String description = I18Consts.I18N_DESCRIPTION; + + // @Builder.Default + // private String type = ModuleTypeEnum.CUSTOMER.name(); + + @Builder.Default + private String color = "red"; + + @Builder.Default + private Integer order = 0; + + @Builder.Default + private String level = LevelEnum.ORGANIZATION.name(); + + @Builder.Default + private String platform = PlatformEnum.BYTEDESK.name(); + + @Builder.Default + private List memberUids = new ArrayList<>(); + + @Builder.Default + private List todoListUids = new ArrayList<>(); + + private String projectUid; + + // 是否公开,公开后,对外匿名可见 + @Builder.Default + private Boolean isPublic = false; + +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleResponse.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleResponse.java new file mode 100644 index 0000000000..15ddd782fb --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleResponse.java @@ -0,0 +1,61 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2024-05-11 18:26:12 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-08 21:16:05 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * 联系:270580156@qq.com + * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import java.time.LocalDateTime; +import java.util.List; + +import com.bytedesk.core.base.BaseResponse; +import com.bytedesk.kanban.todo_list.TodoListResponse; +import com.bytedesk.team.member.MemberResponseSimple; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +@Data +@Builder +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@AllArgsConstructor +@NoArgsConstructor +public class ModuleResponse extends BaseResponse { + + private String name; + + private String description; + + private String type; + + // private String color; + + private Integer order; + + private List members; + + private List todoLists; + + private String projectUid; + + private String userUid; + + private Boolean isPublic; + + private LocalDateTime createdAt; + + private LocalDateTime updatedAt; +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRestController.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRestController.java new file mode 100644 index 0000000000..7c14ae4871 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRestController.java @@ -0,0 +1,89 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2024-05-11 18:25:36 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-05 16:37:26 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * 联系:270580156@qq.com + * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import org.springframework.data.domain.Page; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.bytedesk.core.base.BaseRestController; +import com.bytedesk.core.rbac.role.RolePermissions; +import com.bytedesk.core.utils.JsonResult; + +import jakarta.servlet.http.HttpServletResponse; +import lombok.AllArgsConstructor; + +@RestController +@RequestMapping("/api/v1/module") +@AllArgsConstructor +public class ModuleRestController extends BaseRestController { + + private final ModuleRestService moduleService; + + @PreAuthorize(RolePermissions.ROLE_ADMIN) + @Override + public ResponseEntity queryByOrg(ModuleRequest request) { + + Page modules = moduleService.queryByOrg(request); + + return ResponseEntity.ok(JsonResult.success(modules)); + } + + @Override + public ResponseEntity queryByUser(ModuleRequest request) { + + Page modules = moduleService.queryByUser(request); + + return ResponseEntity.ok(JsonResult.success(modules)); + } + + @Override + public ResponseEntity create(ModuleRequest request) { + + ModuleResponse module = moduleService.create(request); + + return ResponseEntity.ok(JsonResult.success(module)); + } + + @Override + public ResponseEntity update(ModuleRequest request) { + + ModuleResponse module = moduleService.update(request); + + return ResponseEntity.ok(JsonResult.success(module)); + } + + @Override + public ResponseEntity delete(ModuleRequest request) { + + moduleService.delete(request); + + return ResponseEntity.ok(JsonResult.success()); + } + + @Override + public Object export(ModuleRequest request, HttpServletResponse response) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'export'"); + } + + @Override + public ResponseEntity queryByUid(ModuleRequest request) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'queryByUid'"); + } + +} \ No newline at end of file diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRestService.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRestService.java new file mode 100644 index 0000000000..c81ef25764 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleRestService.java @@ -0,0 +1,179 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2024-05-11 18:25:45 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-08 22:27:25 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * 联系:270580156@qq.com + * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import java.util.Optional; + +import org.modelmapper.ModelMapper; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.orm.ObjectOptimisticLockingFailureException; +import org.springframework.stereotype.Service; +import org.springframework.retry.annotation.Backoff; +import org.springframework.retry.annotation.Recover; +import org.springframework.retry.annotation.Retryable; + +import com.bytedesk.core.base.BaseRestService; +import com.bytedesk.core.rbac.auth.AuthService; +import com.bytedesk.core.rbac.user.UserEntity; +import com.bytedesk.core.uid.UidUtils; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@AllArgsConstructor +public class ModuleRestService extends BaseRestService { + + private final ModuleRepository moduleRepository; + + private final ModelMapper modelMapper; + + private final UidUtils uidUtils; + + private final AuthService authService; + + @Override + public Page queryByOrg(ModuleRequest request) { + Pageable pageable = request.getPageable(); + Specification spec = ModuleSpecification.search(request); + Page page = moduleRepository.findAll(spec, pageable); + return page.map(this::convertToResponse); + } + + @Override + public Page queryByUser(ModuleRequest request) { + UserEntity user = authService.getUser(); + if (user == null) { + throw new RuntimeException("user not found"); + } + request.setUserUid(user.getUid()); + // + return queryByOrg(request); + } + + @Cacheable(value = "module", key = "#uid", unless="#result==null") + @Override + public Optional findByUid(String uid) { + return moduleRepository.findByUid(uid); + } + + @Override + public ModuleResponse create(ModuleRequest request) { + UserEntity user = authService.getUser(); + if (user == null) { + throw new RuntimeException("user not found"); + } + request.setUserUid(user.getUid()); + + // ModuleEntity entity = modelMapper.map(request, ModuleEntity.class); + ModuleEntity entity = ModuleEntity.builder() + .name(request.getName()) + .description(request.getDescription()) + .build(); + entity.setUid(uidUtils.getUid()); + // + entity.setOrgUid(user.getOrgUid()); + + ModuleEntity savedEntity = save(entity); + if (savedEntity == null) { + throw new RuntimeException("Create module failed"); + } + return convertToResponse(savedEntity); + } + + @Override + public ModuleResponse update(ModuleRequest request) { + Optional optional = moduleRepository.findByUid(request.getUid()); + if (optional.isPresent()) { + ModuleEntity entity = optional.get(); + modelMapper.map(request, entity); + // + ModuleEntity savedEntity = save(entity); + if (savedEntity == null) { + throw new RuntimeException("Update module failed"); + } + return convertToResponse(savedEntity); + } + else { + throw new RuntimeException("Module not found"); + } + } + + /** + * 保存标签,失败时自动重试 + * maxAttempts: 最大重试次数(包括第一次尝试) + * backoff: 重试延迟,multiplier是延迟倍数 + * recover: 当重试次数用完后的回调方法 + */ + @Retryable( + value = { Exception.class }, + maxAttempts = 3, + backoff = @Backoff(delay = 1000, multiplier = 2) + ) + @Override + public ModuleEntity save(ModuleEntity entity) { + log.info("Attempting to save module: {}", entity.getName()); + return moduleRepository.save(entity); + } + + /** + * 重试失败后的回调方法 + */ + @Recover + public ModuleEntity recover(Exception e, ModuleEntity entity) { + log.error("Failed to save module after 3 attempts: {}", entity.getName(), e); + // 可以在这里添加告警通知 + throw new RuntimeException("Failed to save module after retries: " + e.getMessage()); + } + + @Override + public void deleteByUid(String uid) { + Optional optional = moduleRepository.findByUid(uid); + if (optional.isPresent()) { + optional.get().setDeleted(true); + save(optional.get()); + // moduleRepository.delete(optional.get()); + } + else { + throw new RuntimeException("Module not found"); + } + } + + @Override + public void delete(ModuleRequest request) { + deleteByUid(request.getUid()); + } + + @Override + public void handleOptimisticLockingFailureException(ObjectOptimisticLockingFailureException e, ModuleEntity entity) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'handleOptimisticLockingFailureException'"); + } + + @Override + public ModuleResponse convertToResponse(ModuleEntity entity) { + return modelMapper.map(entity, ModuleResponse.class); + } + + @Override + public ModuleResponse queryByUid(ModuleRequest request) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'queryByUid'"); + } + +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleSpecification.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleSpecification.java new file mode 100644 index 0000000000..21c4f1a479 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleSpecification.java @@ -0,0 +1,43 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2024-07-09 22:19:21 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-03 14:25:07 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * 联系:270580156@qq.com + * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.data.jpa.domain.Specification; +import org.springframework.util.StringUtils; + +import com.bytedesk.core.base.BaseSpecification; + +import jakarta.persistence.criteria.Predicate; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class ModuleSpecification extends BaseSpecification { + + public static Specification search(ModuleRequest request) { + log.info("request: {}", request); + return (root, query, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + predicates.addAll(getBasicPredicates(root, criteriaBuilder, request.getOrgUid())); + // + if (StringUtils.hasText(request.getUserUid())) { + predicates.add(criteriaBuilder.equal(root.get("userUid"), request.getUserUid())); + } + // + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + }; + } +} diff --git a/modules/team/src/main/java/com/bytedesk/team/group/GroupInviteStatus.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleTypeEnum.java similarity index 70% rename from modules/team/src/main/java/com/bytedesk/team/group/GroupInviteStatus.java rename to plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleTypeEnum.java index 9cb39f49ed..f2e4e2e4da 100644 --- a/modules/team/src/main/java/com/bytedesk/team/group/GroupInviteStatus.java +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/ModuleTypeEnum.java @@ -1,8 +1,8 @@ /* * @Author: jackning 270580156@qq.com - * @Date: 2024-12-28 11:20:13 + * @Date: 2024-07-23 17:02:46 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2024-12-28 12:28:37 + * @LastEditTime: 2024-07-23 17:02:48 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -11,11 +11,9 @@ * 联系:270580156@qq.com * Copyright (c) 2024 by bytedesk.com, All Rights Reserved. */ -package com.bytedesk.team.group; +package com.bytedesk.kanban.module; -public enum GroupInviteStatus { - PENDING, // 待处理 - ACCEPTED, // 已接受 - REJECTED, // 已拒绝 - EXPIRED // 已过期 -} \ No newline at end of file +public enum ModuleTypeEnum { + THREAD, + CUSTOMER +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleCreateEvent.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleCreateEvent.java new file mode 100644 index 0000000000..6d44beb0e2 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleCreateEvent.java @@ -0,0 +1,36 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-02-25 09:59:29 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-08 10:52:30 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module.event; + +import org.springframework.context.ApplicationEvent; + +import com.bytedesk.kanban.module.ModuleEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class ModuleCreateEvent extends ApplicationEvent { + + private static final long serialVersionUID = 1L; + + private ModuleEntity report; + + public ModuleCreateEvent(ModuleEntity report) { + super(report); + this.report = report; + } + +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleDeleteEvent.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleDeleteEvent.java new file mode 100644 index 0000000000..d5a3358002 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleDeleteEvent.java @@ -0,0 +1,35 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-02-25 12:31:16 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-02-25 12:31:19 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module.event; + +import org.springframework.context.ApplicationEvent; + +import com.bytedesk.kanban.module.ModuleEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class ModuleDeleteEvent extends ApplicationEvent { + + private static final long serialVersionUID = 1L; + + private ModuleEntity report; + + public ModuleDeleteEvent(ModuleEntity report) { + super(report); + this.report = report; + } +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleUpdateEvent.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleUpdateEvent.java new file mode 100644 index 0000000000..8a7a9fb4e2 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/event/ModuleUpdateEvent.java @@ -0,0 +1,36 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-02-25 09:59:29 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-02-25 10:01:00 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.kanban.module.event; + +import org.springframework.context.ApplicationEvent; + +import com.bytedesk.kanban.module.ModuleEntity; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = false) +public class ModuleUpdateEvent extends ApplicationEvent { + + private static final long serialVersionUID = 1L; + + private ModuleEntity report; + + public ModuleUpdateEvent(ModuleEntity report) { + super(report); + this.report = report; + } + +} diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/module/package-info.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/package-info.java new file mode 100644 index 0000000000..f860656530 --- /dev/null +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/module/package-info.java @@ -0,0 +1,8 @@ +/** + * ByteDesk 标签管理包 + * 提供标签的CRUD、搜索等功能 + */ +@NonNullApi +package com.bytedesk.kanban.module; + +import org.springframework.lang.NonNullApi; diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectEntity.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectEntity.java index fbea8f2335..85a6e6e70a 100644 --- a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectEntity.java +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectEntity.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-05-11 18:14:28 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-08 17:01:21 + * @LastEditTime: 2025-03-08 21:19:03 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -20,6 +20,7 @@ import com.bytedesk.core.base.BaseEntity; import com.bytedesk.core.constant.I18Consts; import com.bytedesk.core.enums.LevelEnum; import com.bytedesk.core.enums.PlatformEnum; +import com.bytedesk.kanban.module.ModuleEntity; import com.bytedesk.kanban.todo_list.TodoListEntity; import com.bytedesk.team.member.MemberEntity; @@ -78,14 +79,14 @@ public class ProjectEntity extends BaseEntity { @Builder.Default @OneToMany(cascade = CascadeType.DETACH, fetch = FetchType.LAZY) - private List todoLists = new ArrayList<>(); + private List modules = new ArrayList<>(); // 是否公开,公开后,对外匿名可见 @Builder.Default @Column(name = "is_public") private boolean isPublic = false; - private String parentUid; + // private String parentUid; private String userUid; } diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRequest.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRequest.java index 704d027680..2064c37e32 100644 --- a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRequest.java +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRequest.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-05-11 18:26:04 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-08 16:45:07 + * @LastEditTime: 2025-03-08 21:19:08 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -60,9 +60,9 @@ public class ProjectRequest extends BaseRequest { private List memberUids = new ArrayList<>(); @Builder.Default - private List todoListUids = new ArrayList<>(); + private List modulesUids = new ArrayList<>(); - private String parentUid; + // private String parentUid; // private String userUid; diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectResponse.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectResponse.java index ae08249c9f..6a1968ef1a 100644 --- a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectResponse.java +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectResponse.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-05-11 18:26:12 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-08 16:45:20 + * @LastEditTime: 2025-03-08 21:19:12 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -17,7 +17,7 @@ import java.time.LocalDateTime; import java.util.List; import com.bytedesk.core.base.BaseResponse; -import com.bytedesk.kanban.todo_list.TodoListResponse; +import com.bytedesk.kanban.module.ModuleResponse; import com.bytedesk.team.member.MemberResponseSimple; import lombok.AllArgsConstructor; @@ -47,9 +47,9 @@ public class ProjectResponse extends BaseResponse { private List members; - private List todoLists; + private List modules; - private String parentUid; + // private String parentUid; private String userUid; diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRestController.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRestController.java index e8aa003d96..7dbc31af07 100644 --- a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRestController.java +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRestController.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-05-11 18:25:36 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-05 16:37:26 + * @LastEditTime: 2025-03-08 22:15:48 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -50,6 +50,16 @@ public class ProjectRestController extends BaseRestController { return ResponseEntity.ok(JsonResult.success(projects)); } + @Override + public ResponseEntity queryByUid(ProjectRequest request) { + + ProjectResponse project = projectService.queryByUid(request); + if (project == null) { + return ResponseEntity.ok(JsonResult.error("项目不存在")); + } + return ResponseEntity.ok(JsonResult.success(project)); + } + @Override public ResponseEntity create(ProjectRequest request) { @@ -80,10 +90,6 @@ public class ProjectRestController extends BaseRestController { throw new UnsupportedOperationException("Unimplemented method 'export'"); } - @Override - public ResponseEntity queryByUid(ProjectRequest request) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'queryByUid'"); - } + } \ No newline at end of file diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRestService.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRestService.java index 6fd5935629..df43dc54b5 100644 --- a/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRestService.java +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/project/ProjectRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-05-11 18:25:45 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-06 18:16:43 + * @LastEditTime: 2025-03-08 22:16:37 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -66,6 +66,15 @@ public class ProjectRestService extends BaseRestService optional = findByUid(request.getUid()); + if (optional.isPresent()) { + return convertToResponse(optional.get()); + } + return null; + } + @Cacheable(value = "project", key = "#uid", unless="#result==null") @Override public Optional findByUid(String uid) { @@ -80,7 +89,11 @@ public class ProjectRestService extends BaseRestService taskUids = new ArrayList<>(); diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/todo_list/TodoListResponse.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/todo_list/TodoListResponse.java index 6d2d21bed4..601893d61d 100644 --- a/plugins/kanban/src/main/java/com/bytedesk/kanban/todo_list/TodoListResponse.java +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/todo_list/TodoListResponse.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-05-11 18:26:12 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-08 12:34:50 + * @LastEditTime: 2025-03-08 21:17:38 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -46,6 +46,10 @@ public class TodoListResponse extends BaseResponse { private List tasks; + private String projectUid; + + private String moduleUid; + private LocalDateTime updatedAt; private LocalDateTime createdAt; diff --git a/plugins/kanban/src/main/java/com/bytedesk/kanban/todo_list/TodoListRestService.java b/plugins/kanban/src/main/java/com/bytedesk/kanban/todo_list/TodoListRestService.java index 3a99729e67..89bb3cea65 100644 --- a/plugins/kanban/src/main/java/com/bytedesk/kanban/todo_list/TodoListRestService.java +++ b/plugins/kanban/src/main/java/com/bytedesk/kanban/todo_list/TodoListRestService.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-05-11 18:25:45 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-06 18:16:43 + * @LastEditTime: 2025-03-08 22:27:17 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -165,5 +165,11 @@ public class TodoListRestService extends BaseRestService