增加用户注册,登录,激活逻辑

This commit is contained in:
2020-05-21 16:51:31 +08:00
parent 26f3e72f7c
commit be7c844dfb
10 changed files with 143 additions and 13 deletions

View File

@@ -0,0 +1,5 @@
package com.synebula.zeus.app.component
interface IUserAdded {
fun added(userId: String)
}

View File

@@ -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()
}
}

View File

@@ -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<UserCmd, UserView, String>(
"用户信息", UserView::class.java,
service, query, logger
)
"用户信息", 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)
}
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -2,4 +2,11 @@ package com.synebula.zeus.domain.service.contr.rbac
import com.synebula.gaea.domain.service.IService
interface IUserService : IService<String>
interface IUserService : IService<String> {
/**
* 激活用户
*
* @param key 用户ID
*/
fun active(key: String)
}

View File

@@ -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<User, String>, converter: IObjectConverter, logger: ILogger) :
Service<User, String>(User::class.java, repository, converter, logger), IUserService {
Service<User, String>(User::class.java, repository, converter, logger), IUserService {
override fun add(command: ICommand): Message<String> {
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)
}
}
}

View File

@@ -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<String>
}

View File

@@ -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<UserView>("user", UserView::class.java, template), IUserQuery {
override fun signIn(name: String, password: String): Message<String> {
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, "用户名或密码错误")
}
}

View File

@@ -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 = ""