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, ) {} /** * 授权登录 */ 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; } }