feat(router): API 路径规范化,统一 admin/member 前缀

- 后台管理 API 统一前缀 /api/admin/**
- 前台会员 API 统一前缀 /api/member/**
- 签到路由从 /api/checkIn 迁移到 /api/member/checkIn
- 会员卡/交易路由统一到 /api/admin/ 下
This commit is contained in:
张翔
2026-06-03 11:43:09 +08:00
parent c822719f51
commit 244c599a82
@@ -34,7 +34,7 @@ import static org.springframework.web.reactive.function.server.RouterFunctions.r
*
* 文件定义:配置WebFlux函数式路由,将HTTP请求映射到对应的Handler方法
* 涉及业务:用户、角色、字典、菜单、公告、文件等所有RESTful API路由
* 算法:使用RouterFunctions.route()构建函数式路由规则
* 路由规范:后台管理 API 统一前缀 /api/admin/**,前台会员 API 统一前缀 /api/member/**
*
* @author 张翔
* @date 2026-03-13
@@ -67,151 +67,151 @@ public class SystemRouter {
CheckInHandler checkInHandler) {
return route()
// ========== 诊断路由 ==========
.GET("/api/diagnostic/password", passwordDiagnosticHandler::diagnose)
// ========== 诊断路由(管理端) ==========
.GET("/api/admin/diagnostic/password", passwordDiagnosticHandler::diagnose)
// ========== 字典路由 ==========
.GET("/api/dictionaries", dictionaryHandler::getAllDictionaries)
.GET("/api/dictionaries/{id}", dictionaryHandler::getDictionaryById)
.GET("/api/dictionaries/type/{type}", dictionaryHandler::getDictionariesByType)
.GET("/api/dictionaries/check/exists", dictionaryHandler::checkTypeAndCodeExists)
.POST("/api/dictionaries", dictionaryHandler::createDictionary)
.PUT("/api/dictionaries/{id}", dictionaryHandler::updateDictionary)
.DELETE("/api/dictionaries/{id}", dictionaryHandler::deleteDictionary)
// ========== 字典路由(管理端) ==========
.GET("/api/admin/dictionaries", dictionaryHandler::getAllDictionaries)
.GET("/api/admin/dictionaries/{id}", dictionaryHandler::getDictionaryById)
.GET("/api/admin/dictionaries/type/{type}", dictionaryHandler::getDictionariesByType)
.GET("/api/admin/dictionaries/check/exists", dictionaryHandler::checkTypeAndCodeExists)
.POST("/api/admin/dictionaries", dictionaryHandler::createDictionary)
.PUT("/api/admin/dictionaries/{id}", dictionaryHandler::updateDictionary)
.DELETE("/api/admin/dictionaries/{id}", dictionaryHandler::deleteDictionary)
// ========== 用户路由 ==========
.GET("/api/users", userHandler::getAllUsers)
.GET("/api/users/page", userHandler::getUsersByPage)
.GET("/api/users/count", userHandler::getUserCount)
.GET("/api/users/username/{username}", userHandler::getUserByUsername)
.GET("/api/users/check/username", userHandler::checkUsernameExists)
.GET("/api/users/check/email", userHandler::checkEmailExists)
.POST("/api/users", userHandler::createUser)
.GET("/api/users/{id}", userHandler::getUserById)
.PUT("/api/users/{id}", userHandler::updateUser)
.DELETE("/api/users/{id}", userHandler::deleteUser)
.POST("/api/users/{id}/action/change-password", userHandler::changePassword)
.POST("/api/users/{id}/action/logical-delete", userHandler::logicalDeleteUser)
.POST("/api/users/logical-delete", userHandler::logicalDeleteUsers)
.POST("/api/users/action/restore", userHandler::restoreUsers)
.POST("/api/users/{id}/action/restore", userHandler::restoreUser)
.GET("/api/users/{id}/roles", userHandler::getUserRoles)
.POST("/api/users/{id}/roles", userHandler::assignRoles)
// ========== 用户路由(管理端) ==========
.GET("/api/admin/users", userHandler::getAllUsers)
.GET("/api/admin/users/page", userHandler::getUsersByPage)
.GET("/api/admin/users/count", userHandler::getUserCount)
.GET("/api/admin/users/username/{username}", userHandler::getUserByUsername)
.GET("/api/admin/users/check/username", userHandler::checkUsernameExists)
.GET("/api/admin/users/check/email", userHandler::checkEmailExists)
.POST("/api/admin/users", userHandler::createUser)
.GET("/api/admin/users/{id}", userHandler::getUserById)
.PUT("/api/admin/users/{id}", userHandler::updateUser)
.DELETE("/api/admin/users/{id}", userHandler::deleteUser)
.POST("/api/admin/users/{id}/action/change-password", userHandler::changePassword)
.POST("/api/admin/users/{id}/action/logical-delete", userHandler::logicalDeleteUser)
.POST("/api/admin/users/logical-delete", userHandler::logicalDeleteUsers)
.POST("/api/admin/users/action/restore", userHandler::restoreUsers)
.POST("/api/admin/users/{id}/action/restore", userHandler::restoreUser)
.GET("/api/admin/users/{id}/roles", userHandler::getUserRoles)
.POST("/api/admin/users/{id}/roles", userHandler::assignRoles)
// ========== 菜单路由 ==========
.GET("/api/menus", menuHandler::getAllMenus)
.GET("/api/menus/tree", menuHandler::getMenuTree)
.GET("/api/menus/{id}", menuHandler::getMenuById)
.POST("/api/menus", menuHandler::createMenu)
.PUT("/api/menus/{id}", menuHandler::updateMenu)
.DELETE("/api/menus/{id}", menuHandler::deleteMenu)
// ========== 菜单路由(管理端) ==========
.GET("/api/admin/menus", menuHandler::getAllMenus)
.GET("/api/admin/menus/tree", menuHandler::getMenuTree)
.GET("/api/admin/menus/{id}", menuHandler::getMenuById)
.POST("/api/admin/menus", menuHandler::createMenu)
.PUT("/api/admin/menus/{id}", menuHandler::updateMenu)
.DELETE("/api/admin/menus/{id}", menuHandler::deleteMenu)
// ========== 角色路由 ==========
.GET("/api/roles", roleHandler::getAllRoles)
.GET("/api/roles/page", roleHandler::getRolesByPage)
.GET("/api/roles/count", roleHandler::getRoleCount)
.GET("/api/roles/name/{roleName}", roleHandler::getRoleByName)
.GET("/api/roles/check-name", roleHandler::checkNameExists)
.GET("/api/roles/{id}", roleHandler::getRoleById)
.POST("/api/roles", roleHandler::createRole)
.PUT("/api/roles/{id}", roleHandler::updateRole)
.DELETE("/api/roles/{id}", roleHandler::deleteRole)
.POST("/api/roles/{id}/restore", roleHandler::restoreRole)
.GET("/api/roles/{id}/permissions", permissionHandler::getPermissionsByRoleId)
.POST("/api/roles/{id}/permissions", permissionHandler::assignPermissionsToRole)
// ========== 角色路由(管理端) ==========
.GET("/api/admin/roles", roleHandler::getAllRoles)
.GET("/api/admin/roles/page", roleHandler::getRolesByPage)
.GET("/api/admin/roles/count", roleHandler::getRoleCount)
.GET("/api/admin/roles/name/{roleName}", roleHandler::getRoleByName)
.GET("/api/admin/roles/check-name", roleHandler::checkNameExists)
.GET("/api/admin/roles/{id}", roleHandler::getRoleById)
.POST("/api/admin/roles", roleHandler::createRole)
.PUT("/api/admin/roles/{id}", roleHandler::updateRole)
.DELETE("/api/admin/roles/{id}", roleHandler::deleteRole)
.POST("/api/admin/roles/{id}/restore", roleHandler::restoreRole)
.GET("/api/admin/roles/{id}/permissions", permissionHandler::getPermissionsByRoleId)
.POST("/api/admin/roles/{id}/permissions", permissionHandler::assignPermissionsToRole)
// ========== 配置路由 ==========
.GET("/api/config", configHandler::getAllConfigs)
.GET("/api/config/{id}", configHandler::getConfigById)
.GET("/api/config/key/{configKey}", configHandler::getConfigByKey)
.POST("/api/config", configHandler::createConfig)
.PUT("/api/config/{id}", configHandler::updateConfig)
.DELETE("/api/config/{id}", configHandler::deleteConfig)
// ========== 配置路由(管理端) ==========
.GET("/api/admin/config", configHandler::getAllConfigs)
.GET("/api/admin/config/{id}", configHandler::getConfigById)
.GET("/api/admin/config/key/{configKey}", configHandler::getConfigByKey)
.POST("/api/admin/config", configHandler::createConfig)
.PUT("/api/admin/config/{id}", configHandler::updateConfig)
.DELETE("/api/admin/config/{id}", configHandler::deleteConfig)
// ========== 日志路由 ==========
.GET("/api/logs/login", logHandler::getAllLoginLogs)
.GET("/api/logs/login/page", logHandler::getLoginLogsByPage)
.GET("/api/logs/login/count", logHandler::getLoginLogCount)
.GET("/api/logs/login/today/count", logHandler::getTodayLoginCount)
.GET("/api/logs/login/recent", logHandler::getRecentLoginLogs)
.GET("/api/logs/login/{id}", logHandler::getLoginLogById)
.POST("/api/logs/login", logHandler::createLoginLog)
.GET("/api/logs/exception", logHandler::getAllExceptionLogs)
.GET("/api/logs/exception/page", logHandler::getExceptionLogsByPage)
.GET("/api/logs/exception/count", logHandler::getExceptionLogCount)
.GET("/api/logs/exception/{id}", logHandler::getExceptionLogById)
.POST("/api/logs/exception", logHandler::createExceptionLog)
.GET("/api/logs/operation", operationLogHandler::getAllOperationLogs)
.GET("/api/logs/operation/export", operationLogHandler::exportOperationLogs)
.GET("/api/logs/operation/page", operationLogHandler::getOperationLogsByPage)
.GET("/api/logs/operation/count", operationLogHandler::getOperationLogCount)
.GET("/api/logs/operation/{id}", operationLogHandler::getOperationLogById)
.POST("/api/logs/operation", operationLogHandler::createOperationLog)
// ========== 日志路由(管理端) ==========
.GET("/api/admin/logs/login", logHandler::getAllLoginLogs)
.GET("/api/admin/logs/login/page", logHandler::getLoginLogsByPage)
.GET("/api/admin/logs/login/count", logHandler::getLoginLogCount)
.GET("/api/admin/logs/login/today/count", logHandler::getTodayLoginCount)
.GET("/api/admin/logs/login/recent", logHandler::getRecentLoginLogs)
.GET("/api/admin/logs/login/{id}", logHandler::getLoginLogById)
.POST("/api/admin/logs/login", logHandler::createLoginLog)
.GET("/api/admin/logs/exception", logHandler::getAllExceptionLogs)
.GET("/api/admin/logs/exception/page", logHandler::getExceptionLogsByPage)
.GET("/api/admin/logs/exception/count", logHandler::getExceptionLogCount)
.GET("/api/admin/logs/exception/{id}", logHandler::getExceptionLogById)
.POST("/api/admin/logs/exception", logHandler::createExceptionLog)
.GET("/api/admin/logs/operation", operationLogHandler::getAllOperationLogs)
.GET("/api/admin/logs/operation/export", operationLogHandler::exportOperationLogs)
.GET("/api/admin/logs/operation/page", operationLogHandler::getOperationLogsByPage)
.GET("/api/admin/logs/operation/count", operationLogHandler::getOperationLogCount)
.GET("/api/admin/logs/operation/{id}", operationLogHandler::getOperationLogById)
.POST("/api/admin/logs/operation", operationLogHandler::createOperationLog)
// ========== 认证路由 ==========
.POST("/api/auth/login", authHandler::login)
.POST("/api/auth/register", authHandler::register)
.POST("/api/auth/logout", authHandler::logout)
// ========== 认证路由(管理端) ==========
.POST("/api/admin/auth/login", authHandler::login)
.POST("/api/admin/auth/register", authHandler::register)
.POST("/api/admin/auth/logout", authHandler::logout)
// ========== 统计路由 ==========
.GET("/api/stats/overview", statsHandler::getOverview)
// ========== 统计路由(管理端) ==========
.GET("/api/admin/stats/overview", statsHandler::getOverview)
// ========== 数据字典路由 ==========
.GET("/api/dict/types", dictHandler::getAllDictTypes)
.GET("/api/dict/types/{id}", dictHandler::getDictTypeById)
.GET("/api/dict/types/type/{dictType}", dictHandler::getDictTypeByType)
.POST("/api/dict/types", dictHandler::createDictType)
.PUT("/api/dict/types/{id}", dictHandler::updateDictType)
.DELETE("/api/dict/types/{id}", dictHandler::deleteDictType)
.GET("/api/dict/data", dictHandler::getAllDictData)
.GET("/api/dict/data/type/{dictType}", dictHandler::getDictDataByType)
.GET("/api/dict/data/{id}", dictHandler::getDictDataById)
.POST("/api/dict/data", dictHandler::createDictData)
.PUT("/api/dict/data/{id}", dictHandler::updateDictData)
.DELETE("/api/dict/data/{id}", dictHandler::deleteDictData)
// ========== 数据字典路由(管理端) ==========
.GET("/api/admin/dict/types", dictHandler::getAllDictTypes)
.GET("/api/admin/dict/types/{id}", dictHandler::getDictTypeById)
.GET("/api/admin/dict/types/type/{dictType}", dictHandler::getDictTypeByType)
.POST("/api/admin/dict/types", dictHandler::createDictType)
.PUT("/api/admin/dict/types/{id}", dictHandler::updateDictType)
.DELETE("/api/admin/dict/types/{id}", dictHandler::deleteDictType)
.GET("/api/admin/dict/data", dictHandler::getAllDictData)
.GET("/api/admin/dict/data/type/{dictType}", dictHandler::getDictDataByType)
.GET("/api/admin/dict/data/{id}", dictHandler::getDictDataById)
.POST("/api/admin/dict/data", dictHandler::createDictData)
.PUT("/api/admin/dict/data/{id}", dictHandler::updateDictData)
.DELETE("/api/admin/dict/data/{id}", dictHandler::deleteDictData)
// ========== 公告路由 ==========
.GET("/api/notices", noticeHandler::getAllNotices)
.GET("/api/notices/{id}", noticeHandler::getNoticeById)
.GET("/api/notices/status/{status}", noticeHandler::getNoticesByStatus)
.POST("/api/notices", noticeHandler::createNotice)
.PUT("/api/notices/{id}", noticeHandler::updateNotice)
.DELETE("/api/notices/{id}", noticeHandler::deleteNotice)
// ========== 公告路由(管理端) ==========
.GET("/api/admin/notices", noticeHandler::getAllNotices)
.GET("/api/admin/notices/{id}", noticeHandler::getNoticeById)
.GET("/api/admin/notices/status/{status}", noticeHandler::getNoticesByStatus)
.POST("/api/admin/notices", noticeHandler::createNotice)
.PUT("/api/admin/notices/{id}", noticeHandler::updateNotice)
.DELETE("/api/admin/notices/{id}", noticeHandler::deleteNotice)
// ========== 消息路由 ==========
.GET("/api/messages/user/{userId}", messageHandler::getMessagesByUser)
.GET("/api/messages/user/{userId}/unread", messageHandler::getUnreadCount)
.GET("/api/messages/user/{userId}/unread/list", messageHandler::getUnreadList)
.POST("/api/messages", messageHandler::createMessage)
.PUT("/api/messages/{id}/read", messageHandler::markAsRead)
.DELETE("/api/messages/{id}", messageHandler::deleteMessage)
// ========== 消息路由(管理端) ==========
.GET("/api/admin/messages/user/{userId}", messageHandler::getMessagesByUser)
.GET("/api/admin/messages/user/{userId}/unread", messageHandler::getUnreadCount)
.GET("/api/admin/messages/user/{userId}/unread/list", messageHandler::getUnreadList)
.POST("/api/admin/messages", messageHandler::createMessage)
.PUT("/api/admin/messages/{id}/read", messageHandler::markAsRead)
.DELETE("/api/admin/messages/{id}", messageHandler::deleteMessage)
// ========== 文件路由 ==========
.GET("/api/files", fileHandler::getAllFiles)
.GET("/api/files/{id}", fileHandler::getFileById)
.POST("/api/files/upload", fileHandler::uploadFile)
.GET("/api/files/{id}/download", fileHandler::downloadFile)
.GET("/api/files/download/{fileName}", fileHandler::downloadFileByName)
.GET("/api/files/{id}/preview", fileHandler::previewFile)
.GET("/api/files/preview/{fileName}", fileHandler::previewFileByName)
.DELETE("/api/files/{id}", fileHandler::deleteFile)
// ========== 文件路由(管理端) ==========
.GET("/api/admin/files", fileHandler::getAllFiles)
.GET("/api/admin/files/{id}", fileHandler::getFileById)
.POST("/api/admin/files/upload", fileHandler::uploadFile)
.GET("/api/admin/files/{id}/download", fileHandler::downloadFile)
.GET("/api/admin/files/download/{fileName}", fileHandler::downloadFileByName)
.GET("/api/admin/files/{id}/preview", fileHandler::previewFile)
.GET("/api/admin/files/preview/{fileName}", fileHandler::previewFileByName)
.DELETE("/api/admin/files/{id}", fileHandler::deleteFile)
// ========== 权限路由 ==========
.GET("/api/permissions", permissionHandler::getAllPermissions)
.GET("/api/permissions/{id}", permissionHandler::getPermissionById)
.GET("/api/permissions/code/{code}", permissionHandler::getPermissionByCode)
.GET("/api/permissions/check-code", permissionHandler::checkCodeExists)
.GET("/api/permissions/count", permissionHandler::getPermissionCount)
.POST("/api/permissions", permissionHandler::createPermission)
.PUT("/api/permissions/{id}", permissionHandler::updatePermission)
.DELETE("/api/permissions/{id}", permissionHandler::deletePermission)
// ========== 权限路由(管理端) ==========
.GET("/api/admin/permissions", permissionHandler::getAllPermissions)
.GET("/api/admin/permissions/{id}", permissionHandler::getPermissionById)
.GET("/api/admin/permissions/code/{code}", permissionHandler::getPermissionByCode)
.GET("/api/admin/permissions/check-code", permissionHandler::checkCodeExists)
.GET("/api/admin/permissions/count", permissionHandler::getPermissionCount)
.POST("/api/admin/permissions", permissionHandler::createPermission)
.PUT("/api/admin/permissions/{id}", permissionHandler::updatePermission)
.DELETE("/api/admin/permissions/{id}", permissionHandler::deletePermission)
// ========== 会员模块路由 - 微信认证 ==========
// ========== 会员模块路由 - 微信认证(前台公开) ==========
.POST("/api/member/auth/miniapp/login", wechatAuthHandler::miniappLogin)
.GET("/api/member/auth/mp/callback", wechatAuthHandler::verifyMpSignature)
.POST("/api/member/auth/mp/callback", wechatAuthHandler::mpCallback)
// ========== 会员模块路由 - 会员信息 ==========
// ========== 会员模块路由 - 会员信息(前台) ==========
.GET("/api/member/info", memberHandler::getMemberInfo)
.PUT("/api/member/info", memberHandler::updateMemberInfo)
.POST("/api/member/phone/bind", memberHandler::bindPhone)
@@ -226,35 +226,35 @@ public class SystemRouter {
// ========================================
// ========== 会员卡管理路由 ==============
// ========== 会员卡管理路由(管理端) ==============
// ========================================
// ===== 会员卡类型管理 =====
.GET("/api/member-cards/active", memberCardHandler::getActiveCards)
.GET("/api/member-cards/{memberCardId}", memberCardHandler::getMemberCardById)
.POST("/api/member-cards", memberCardHandler::createMemberCard)
.GET("/api/admin/member-cards/active", memberCardHandler::getActiveCards)
.GET("/api/admin/member-cards/{memberCardId}", memberCardHandler::getMemberCardById)
.POST("/api/admin/member-cards", memberCardHandler::createMemberCard)
// ===== 会员卡记录管理(核心业务)=====
.POST("/api/member-card-records/purchase", memberCardRecordHandler::purchaseCard)
.POST("/api/member-card-records/{recordId}/renew", memberCardRecordHandler::renewCard)
.POST("/api/member-card-records/{recordId}/use", memberCardRecordHandler::useCard)
.POST("/api/member-card-records/{recordId}/refund", memberCardRecordHandler::refundCard)
.GET("/api/member-card-records/my-cards/{memberId}", memberCardRecordHandler::getMyCards)
.GET("/api/member-card-records/{recordId}", memberCardRecordHandler::getMemberCardRecordById)
.POST("/api/member-card-records/process-expired", memberCardRecordHandler::processExpiredCards)
.POST("/api/admin/member-card-records/purchase", memberCardRecordHandler::purchaseCard)
.POST("/api/admin/member-card-records/{recordId}/renew", memberCardRecordHandler::renewCard)
.POST("/api/admin/member-card-records/{recordId}/use", memberCardRecordHandler::useCard)
.POST("/api/admin/member-card-records/{recordId}/refund", memberCardRecordHandler::refundCard)
.GET("/api/admin/member-card-records/my-cards/{memberId}", memberCardRecordHandler::getMyCards)
.GET("/api/admin/member-card-records/{recordId}", memberCardRecordHandler::getMemberCardRecordById)
.POST("/api/admin/member-card-records/process-expired", memberCardRecordHandler::processExpiredCards)
// ===== 会员卡交易流水管理 =====
.POST("/api/member-card-transactions", memberCardTransactionHandler::insertTransaction)
.GET("/api/member-card-transactions", memberCardTransactionHandler::getTransactionsWithConditions)
.GET("/api/member-card-transactions/member/{memberId}", memberCardTransactionHandler::getMemberTransactions)
.GET("/api/member-card-transactions/card/{cardId}", memberCardTransactionHandler::getTransactionsByCardId)
.GET("/api/member-card-transactions/statistics/deduct/{cardId}", memberCardTransactionHandler::getDeductCountByCardId)
.GET("/api/member-card-transactions/statistics/renew", memberCardTransactionHandler::getRenewAmountByTimeRange)
.GET("/api/member-card-transactions/statistics/purchase/{memberId}", memberCardTransactionHandler::getPurchaseAmountByMember)
.POST("/api/admin/member-card-transactions", memberCardTransactionHandler::insertTransaction)
.GET("/api/admin/member-card-transactions", memberCardTransactionHandler::getTransactionsWithConditions)
.GET("/api/admin/member-card-transactions/member/{memberId}", memberCardTransactionHandler::getMemberTransactions)
.GET("/api/admin/member-card-transactions/card/{cardId}", memberCardTransactionHandler::getTransactionsByCardId)
.GET("/api/admin/member-card-transactions/statistics/deduct/{cardId}", memberCardTransactionHandler::getDeductCountByCardId)
.GET("/api/admin/member-card-transactions/statistics/renew", memberCardTransactionHandler::getRenewAmountByTimeRange)
.GET("/api/admin/member-card-transactions/statistics/purchase/{memberId}", memberCardTransactionHandler::getPurchaseAmountByMember)
// ========= 签到路由 ==========
.POST("/api/checkIn", checkInHandler::checkIn )
.GET("/api/checkIn/qrcode", checkInHandler::getQRCode)
// ========= 签到路由(前台会员) ==========
.POST("/api/member/checkIn", checkInHandler::checkIn)
.GET("/api/member/checkIn/qrcode", checkInHandler::getQRCode)
.build();
}
}