import { Injectable, HttpException, HttpStatus } from '@nestjs/common'; import { Repository } from 'typeorm'; import { InjectRepository } from '@nestjs/typeorm'; import { PersonEntity } from './user.entity'; import { UserDTO } from './user.dto'; import { GameEntity } from '../game/game.entity'; import { GameDTO } from '../game/game.dto'; @Injectable() export class UserService { constructor( @InjectRepository(PersonEntity) private userRepository: Repository<PersonEntity>, @InjectRepository(GameEntity) private gameRepository: Repository<GameEntity>, ) {} async register(data: UserDTO) { const { name } = data; let user = await this.userRepository.findOne({ where: { name } }); if (user) { throw new HttpException('User already exists', HttpStatus.BAD_REQUEST); } user = await this.userRepository.create(data); await this.userRepository.save(user); return user.tokenObject(); } async login(data: UserDTO) { const { name, password } = data; const user = await this.userRepository.findOne({ where: { name } }); if (!user || !(await user.comparePassword(password))) { throw new HttpException('invalid password', HttpStatus.BAD_REQUEST); } return user.tokenObject(); } // liitytään peliin async joinGame(game: GameDTO, data: UserDTO) { try { // etsi peli valinnan mukaan ja otetaan käyttäjän rooli kyseisestä pelistä talteen const role = await this.gameRepository.findOne(); return role; } catch (error) { return error.message; } } // liitytään factionii async joinFaction(game: GameDTO, data: UserDTO): Promise<boolean> { try { // tarkistetaan factionin salasana return true; } catch (error) { return error; } } }