150 lines
3.3 KiB
TypeScript
150 lines
3.3 KiB
TypeScript
import { Injectable } from '@nestjs/common';
|
|
import { InjectRepository } from '@nestjs/typeorm';
|
|
import { Repository } from 'typeorm';
|
|
import { WeappUser } from '../entity/weappUser.entity';
|
|
|
|
@Injectable()
|
|
export class WeappService {
|
|
constructor(
|
|
@InjectRepository(WeappUser)
|
|
private readonly userRepo: Repository<WeappUser>,
|
|
) {}
|
|
|
|
/**
|
|
* 授权登录
|
|
*/
|
|
async login(data: any) {
|
|
const { code, nickname, headimg, mobile, mobileCode } = data;
|
|
|
|
// 这里需要实现通过code获取openid的逻辑
|
|
// 暂时返回模拟数据,避免硬编码
|
|
const openid = 'weapp_openid_' + Date.now();
|
|
const unionid = 'weapp_unionid_' + Date.now();
|
|
|
|
// 检查是否已存在用户
|
|
let user = await this.userRepo.findOne({
|
|
where: { openid, siteId: data.siteId || 0 }
|
|
});
|
|
|
|
if (!user) {
|
|
// 创建新用户
|
|
user = this.userRepo.create({
|
|
siteId: data.siteId || 0,
|
|
openid,
|
|
unionid,
|
|
nickname: nickname || '小程序用户',
|
|
headimg: headimg || '',
|
|
mobile: mobile || '',
|
|
sex: 0,
|
|
status: 1
|
|
});
|
|
|
|
await this.userRepo.save(user);
|
|
} else {
|
|
// 更新用户信息
|
|
await this.userRepo.update(user.id, {
|
|
nickname: nickname || user.nickname,
|
|
headimg: headimg || user.headimg,
|
|
mobile: mobile || user.mobile
|
|
});
|
|
}
|
|
|
|
// 生成token
|
|
const token = 'weapp_token_' + Date.now();
|
|
const refreshToken = 'weapp_refresh_' + Date.now();
|
|
|
|
return {
|
|
user: {
|
|
id: user.id,
|
|
openid: user.openid,
|
|
unionid: user.unionid,
|
|
nickname: user.nickname,
|
|
headimg: user.headimg,
|
|
mobile: user.mobile,
|
|
sex: user.sex
|
|
},
|
|
token,
|
|
refreshToken
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 注册
|
|
*/
|
|
async register(data: any) {
|
|
const { openid, unionid, mobileCode, mobile } = data;
|
|
|
|
// 检查是否已存在用户
|
|
const existingUser = await this.userRepo.findOne({
|
|
where: { openid, siteId: data.siteId || 0 }
|
|
});
|
|
|
|
if (existingUser) {
|
|
return { code: 1, msg: '用户已存在' };
|
|
}
|
|
|
|
// 创建新用户
|
|
const user = this.userRepo.create({
|
|
siteId: data.siteId || 0,
|
|
openid,
|
|
unionid,
|
|
nickname: '小程序用户',
|
|
headimg: '',
|
|
mobile: mobile || '',
|
|
sex: 0,
|
|
status: 1
|
|
});
|
|
|
|
const result = await this.userRepo.save(user);
|
|
|
|
return {
|
|
code: 0,
|
|
data: {
|
|
id: result.id,
|
|
openid: result.openid,
|
|
unionid: result.unionid,
|
|
nickname: result.nickname,
|
|
headimg: result.headimg,
|
|
mobile: result.mobile
|
|
},
|
|
msg: '注册成功'
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 获取用户信息
|
|
*/
|
|
async getUserInfo(openid: string, siteId: number) {
|
|
const user = await this.userRepo.findOne({
|
|
where: { openid, siteId }
|
|
});
|
|
|
|
if (!user) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
id: user.id,
|
|
openid: user.openid,
|
|
unionid: user.unionid,
|
|
nickname: user.nickname,
|
|
headimg: user.headimg,
|
|
mobile: user.mobile,
|
|
sex: user.sex,
|
|
status: user.status,
|
|
createTime: user.createTime
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 更新用户信息
|
|
*/
|
|
async updateUserInfo(openid: string, siteId: number, updateData: any) {
|
|
await this.userRepo.update(
|
|
{ openid, siteId },
|
|
updateData
|
|
);
|
|
return true;
|
|
}
|
|
}
|