Teamlinker/code/server/user/service/user.ts
sx1989827 490cd96425 add
2021-09-05 20:36:51 +08:00

87 lines
2.9 KiB
TypeScript

import { EServer_Common_User_Type } from './../../common/types/user';
import { ICommon_Model_User } from './../../../common/model/user';
import {Entity} from "../../common/entity/entity"
import { userMapper } from '../mapper/user';
import { Err } from '../../../common/status/error';
import { generateSnowId } from '../../common/util/sql';
import { emitServiceEvent } from '../../common/rpc/rpc';
import { EServer_Common_Event_Types } from '../../common/event/types';
import * as jwt from "jsonwebtoken"
import { getNacosInstance } from '../../common/nacos/nacos';
import {REDIS_USER} from "../../common/cache/keys/user"
export default class User extends Entity<ICommon_Model_User> {
async create():Promise<ICommon_Model_User>{
if(!this.item) {
throw new Err.User.UserNotFound;
} else if(this.item.id) {
throw new Err.User.UserExists;
}
this.item.id=await generateSnowId()
await userMapper.createUser(this.item)
await this.loadItem();
return this.item;
}
async update():Promise<ICommon_Model_User>{
if(!this.item || !this.item.id) {
throw new Err.User.UserNotFound;
}
await userMapper.updateUser(this.item)
return this.item;
}
async delete(){
await userMapper.deleteUser(this.item.id);
emitServiceEvent(EServer_Common_Event_Types.User.DELETE,this.item.id);
}
async loadItem():Promise<ICommon_Model_User> {
if(!this.item || !this.item.id) {
throw new Err.User.UserNotFound;
}
let obj = await userMapper.getUserById(this.item.id);
this.item=obj;
return this.item;
}
static async getItemById(id:bigint):Promise<InstanceType<typeof User>>{
let obj = await userMapper.getUserById(id);
if(obj) {
let user = new User;
user.setItem(obj);
return user;
} else {
return null;
}
}
static async getItemByName(name:string):Promise<InstanceType<typeof User>>{
let obj = await userMapper.getUserByName(name);
if(obj) {
let user = new User;
user.setItem(obj);
return user;
} else {
return null;
}
}
async startSession():Promise<string>{
let secret=getNacosInstance().globalConfig.jwt;
if(!this.item || !this.item.id) {
throw new Err.User.UserNotFound
}
return new Promise(async (resolve,reject)=>{
jwt.sign({
userId:this.item.id,
type:EServer_Common_User_Type.USER
},secret,async (err,token)=>{
if(err) {
reject(err)
return
} else {
let session=REDIS_USER.token(this.item.id)
await session.set(token,3600);
resolve(token)
}
})
})
}
}