Skip to content
Snippets Groups Projects
user.service.ts 2.06 KiB
Newer Older
L4168's avatar
asd
L4168 committed
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';
Samuli Virtapohja's avatar
Samuli Virtapohja committed
import { GameEntity } from '../game/game.entity';
import { GameDTO } from '../game/game.dto';
L4168's avatar
asd
L4168 committed

@Injectable()
export class UserService {
Samuli Virtapohja's avatar
Samuli Virtapohja committed
    constructor(
L4168's avatar
L4168 committed
        @InjectRepository(PersonEntity)
Samuli Virtapohja's avatar
Samuli Virtapohja committed
        private userRepository: Repository<PersonEntity>,
        @InjectRepository(GameEntity)
        private gameRepository: Repository<GameEntity>
L4168's avatar
L4168 committed
    ) { }
L4168's avatar
asd
L4168 committed

    async register(data: UserDTO) {
        const { name } = data;
L4168's avatar
L4168 committed
        let user = await this.userRepository.findOne({ where: { name } });
L4168's avatar
asd
L4168 committed
        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) {
L4168's avatar
L4168 committed
        try {
Samuli Virtapohja's avatar
Samuli Virtapohja committed
            const { name, password } = data;
L4168's avatar
L4168 committed
            const user = await this.userRepository.findOne({ where: { name } });
Samuli Virtapohja's avatar
Samuli Virtapohja committed
            if (!user || !(await user.comparePassword(password))) {
L4168's avatar
L4168 committed
                throw new HttpException('invalid password', HttpStatus.BAD_REQUEST);
Samuli Virtapohja's avatar
Samuli Virtapohja committed
            }
            return user.tokenObject();
L4168's avatar
L4168 committed
        } catch (error) {
            throw new HttpException(error.message, HttpStatus.BAD_REQUEST);
L4168's avatar
asd
L4168 committed
        }
    }
Samuli Virtapohja's avatar
Samuli Virtapohja committed

Samuli Virtapohja's avatar
Samuli Virtapohja committed
    // liitytään peliin
L4168's avatar
L4168 committed
    async joinGame(game: GameDTO, data: UserDTO) {
Samuli Virtapohja's avatar
Samuli Virtapohja committed
        try {
            // etsi peli valinnan mukaan ja otetaan käyttäjän rooli kyseisestä pelistä talteen
            const role = await this.gameRepository.findOne();
Samuli Virtapohja's avatar
Samuli Virtapohja committed
            return role;
Samuli Virtapohja's avatar
Samuli Virtapohja committed
        } catch (error) {
            return error.message;
        }
    }

    // liitytään factionii
L4168's avatar
L4168 committed
    async joinFaction(game: GameDTO, data: UserDTO): Promise<boolean> {
Samuli Virtapohja's avatar
Samuli Virtapohja committed
        try {
            // tarkistetaan factionin salasana
            return true;
        } catch (error) {
            return error;
        }
    }

L4168's avatar
asd
L4168 committed
}