diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/component/IUserAdded.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/component/IUserAdded.kt new file mode 100644 index 0000000..49dc12b --- /dev/null +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/component/IUserAdded.kt @@ -0,0 +1,5 @@ +package com.synebula.zeus.app.component + +interface IUserAdded { + fun added(userId: String) +} \ No newline at end of file diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/SignInOutApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/SignInOutApp.kt new file mode 100644 index 0000000..33a0e1d --- /dev/null +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/SignInOutApp.kt @@ -0,0 +1,29 @@ +package com.synebula.zeus.app.controller + +import com.synebula.gaea.app.IApplication +import com.synebula.gaea.app.ISignInOut +import com.synebula.gaea.app.component.HttpMessage +import com.synebula.gaea.extension.toMd5 +import com.synebula.gaea.log.ILogger +import com.synebula.zeus.query.contr.IUserQuery +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/sign") +class SignInOutApp(var query: IUserQuery, override var logger: ILogger) : ISignInOut, IApplication { + override var name: String = "用户登录管理" + + @PostMapping("/in") + override fun signIn(name: String, password: String): HttpMessage { + return this.safeExecute("用户登录出现错误") { + it.load(this.query.signIn(name, password.toMd5())) + } + } + + @PostMapping("/out") + override fun signOut(user: String): HttpMessage { + return HttpMessage() + } +} \ No newline at end of file diff --git a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/UserApp.kt b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/UserApp.kt index 37b5b4f..638f821 100644 --- a/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/UserApp.kt +++ b/src/zeus.app/src/main/kotlin/com/synebula/zeus/app/controller/UserApp.kt @@ -1,21 +1,46 @@ package com.synebula.zeus.app.controller import com.synebula.gaea.app.UnionTypedApp +import com.synebula.gaea.app.component.HttpMessage import com.synebula.gaea.log.ILogger import com.synebula.gaea.query.IQueryTyped -import com.synebula.zeus.domain.service.cmd.UserCmd +import com.synebula.zeus.app.component.IUserAdded +import com.synebula.zeus.domain.service.cmd.rbac.UserCmd import com.synebula.zeus.domain.service.contr.rbac.IUserService import com.synebula.zeus.query.view.UserView +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/users") class UserApp( - service: IUserService, - query: IQueryTyped, - logger: ILogger + service: IUserService, + query: IQueryTyped, + logger: ILogger ) : UnionTypedApp( - "用户信息", UserView::class.java, - service, query, logger -) \ No newline at end of file + "用户信息", UserView::class.java, + service, query, logger +) { + @Autowired + lateinit var userAdded: IUserAdded + + override fun add(command: UserCmd): HttpMessage { + val msg = super.add(command) + userAdded.added(msg.data.toString()) + return msg + } + + /** + * 激活用户 + * + * @param key 用户ID + */ + @GetMapping("/{key}/active") + fun active(key: String) { + this.safeExecute("激活用户出现异常") { + (this.service as IUserService).active(key) + } + } +} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/RoleCmd.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/RoleCmd.kt similarity index 71% rename from src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/RoleCmd.kt rename to src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/RoleCmd.kt index c0ca0c7..589a389 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/RoleCmd.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/RoleCmd.kt @@ -1,4 +1,4 @@ -package com.synebula.zeus.domain.service.cmd +package com.synebula.zeus.domain.service.cmd.rbac import com.synebula.gaea.domain.service.Command diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/UserCmd.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/UserCmd.kt similarity index 80% rename from src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/UserCmd.kt rename to src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/UserCmd.kt index bed03c2..2cdd45a 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/UserCmd.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/cmd/rbac/UserCmd.kt @@ -1,4 +1,4 @@ -package com.synebula.zeus.domain.service.cmd +package com.synebula.zeus.domain.service.cmd.rbac import com.synebula.gaea.domain.service.Command diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/IUserService.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/IUserService.kt index 60213b9..d03fda9 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/IUserService.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/contr/rbac/IUserService.kt @@ -2,4 +2,11 @@ package com.synebula.zeus.domain.service.contr.rbac import com.synebula.gaea.domain.service.IService -interface IUserService : IService \ No newline at end of file +interface IUserService : IService { + /** + * 激活用户 + * + * @param key 用户ID + */ + fun active(key: String) +} \ No newline at end of file diff --git a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/UserService.kt b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/UserService.kt index 87c3d8b..71d1db9 100644 --- a/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/UserService.kt +++ b/src/zeus.domain/src/main/kotlin/com/synebula/zeus/domain/service/impl/rbac/UserService.kt @@ -1,13 +1,35 @@ package com.synebula.zeus.domain.service.impl.rbac import com.synebula.gaea.data.IObjectConverter +import com.synebula.gaea.data.message.Message import com.synebula.gaea.domain.repository.IRepository +import com.synebula.gaea.domain.service.ICommand import com.synebula.gaea.domain.service.Service +import com.synebula.gaea.extension.toMd5 import com.synebula.gaea.log.ILogger import com.synebula.zeus.domain.model.rbac.User import com.synebula.zeus.domain.service.contr.rbac.IUserService class UserService(repository: IRepository, converter: IObjectConverter, logger: ILogger) : - Service(User::class.java, repository, converter, logger), IUserService { + Service(User::class.java, repository, converter, logger), IUserService { + override fun add(command: ICommand): Message { + val user = this.convert(command) + user.password = user.password.toMd5() + user.alive = false + this.repository.add(user) + return Message(user.id!!) + } + /** + * 激活用户 + * + * @param key 用户ID + */ + override fun active(key: String) { + val user = this.repository.get(key) + if (!user.alive) { + user.alive = true + this.repository.update(user) + } + } } \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/IUserQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/IUserQuery.kt new file mode 100644 index 0000000..d48ddf2 --- /dev/null +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/contr/IUserQuery.kt @@ -0,0 +1,15 @@ +package com.synebula.zeus.query.contr + +import com.synebula.gaea.data.message.Message + +interface IUserQuery { + /** + * 登录接口 + * + * @param name 用户名 + * @param password 密码 + * + * @return 返回消息体, 200为登录成功, data为用户ID + */ + fun signIn(name: String, password: String): Message +} \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/UserQuery.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/UserQuery.kt new file mode 100644 index 0000000..89f6bb2 --- /dev/null +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/impl/UserQuery.kt @@ -0,0 +1,29 @@ +package com.synebula.zeus.query.impl + +import com.synebula.gaea.data.message.Message +import com.synebula.gaea.data.message.Status +import com.synebula.gaea.extension.toMd5 +import com.synebula.gaea.mongo.query.MongoQuery +import com.synebula.zeus.query.contr.IUserQuery +import com.synebula.zeus.query.view.UserView +import org.springframework.data.mongodb.core.MongoTemplate +import org.springframework.data.mongodb.core.query.Criteria +import org.springframework.data.mongodb.core.query.Query +import org.springframework.data.mongodb.core.query.isEqualTo + +class UserQuery(template: MongoTemplate) + : MongoQuery("user", UserView::class.java, template), IUserQuery { + + override fun signIn(name: String, password: String): Message { + this.check() + val query = Query.query( + Criteria.where("name").isEqualTo(name) + .and("password").isEqualTo(password) + .and("alive").isEqualTo(true)) + val user = this.template.findOne(query, this.clazz!!) + return if (user != null) + Message(user.id) + else + Message(Status.Failure, "用户名或密码错误") + } +} \ No newline at end of file diff --git a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/RoleCmd.kt b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/RoleView.kt similarity index 67% rename from src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/RoleCmd.kt rename to src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/RoleView.kt index fbb5908..5b89fa0 100644 --- a/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/RoleCmd.kt +++ b/src/zeus.query/src/main/kotlin/com/synebula/zeus/query/view/RoleView.kt @@ -1,7 +1,5 @@ package com.synebula.zeus.query.view -import com.synebula.gaea.domain.service.Command - class RoleView { var id: String? = null var name = ""