Skip to content
Snippets Groups Projects
Commit 1a6bc9c4 authored by Samuli Virtapohja's avatar Samuli Virtapohja
Browse files

Merge branch 'tracking' into HEAD

parents b54b5f11 c9ec226e
No related branches found
No related tags found
3 merge requests!59Development to master,!31Development,!30Tracking
...@@ -2,7 +2,6 @@ import { Module } from '@nestjs/common'; ...@@ -2,7 +2,6 @@ import { Module } from '@nestjs/common';
import { APP_FILTER, APP_INTERCEPTOR, APP_GUARD } from '@nestjs/core'; import { APP_FILTER, APP_INTERCEPTOR, APP_GUARD } from '@nestjs/core';
import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeOrmModule } from '@nestjs/typeorm';
import { Connection } from 'typeorm'; import { Connection } from 'typeorm';
import { AppController } from './app.controller'; import { AppController } from './app.controller';
import { AppService } from './app.service'; import { AppService } from './app.service';
import { UserModule } from './user/user.module'; import { UserModule } from './user/user.module';
...@@ -14,6 +13,8 @@ import { RolesGuard } from './shared/roles.guard'; ...@@ -14,6 +13,8 @@ import { RolesGuard } from './shared/roles.guard';
import { TaskModule } from './task/task.module'; import { TaskModule } from './task/task.module';
import { DrawModule } from './draw/draw.module'; import { DrawModule } from './draw/draw.module';
import { FactionModule } from './faction/faction.module'; import { FactionModule } from './faction/faction.module';
import { TrackingModule } from './tracking/tracking.module';
@Module({ @Module({
imports: [ imports: [
...@@ -24,6 +25,7 @@ import { FactionModule } from './faction/faction.module'; ...@@ -24,6 +25,7 @@ import { FactionModule } from './faction/faction.module';
TaskModule, TaskModule,
DrawModule, DrawModule,
FactionModule, FactionModule,
TrackingModule,
], ],
controllers: [AppController], controllers: [AppController],
providers: [ providers: [
......
...@@ -18,7 +18,8 @@ export class DrawService { ...@@ -18,7 +18,8 @@ export class DrawService {
if (data.mapDrawingId == null || data.mapDrawingId == '') { if (data.mapDrawingId == null || data.mapDrawingId == '') {
// luo uuden instanssin. // luo uuden instanssin.
return this.mapDrawingRepository.insert(drawing)[0]; const mapdrawing = await this.mapDrawingRepository.insert(drawing);
return mapdrawing.identifiers;
} else { } else {
//päivittää mapDrawingin //päivittää mapDrawingin
return await this.mapDrawingRepository.save(drawing); return await this.mapDrawingRepository.save(drawing);
......
import {
Controller,
Get,
Post,
Param,
UseGuards,
UsePipes,
Body,
} from '@nestjs/common';
import { TrackingService } from './tracking.service';
import { Roles } from '../shared/roles.decorator';
import { AuthGuard } from '../shared/auth.guard';
import { ValidationPipe } from '../shared/validation.pipe';
import { TrackingDTO } from './tracking.dto';
import { User } from 'src/user/user.decorator';
@Controller('tracking')
export class TrackingController {
constructor(private trackingservice: TrackingService) {}
@Post('location/:id')
@UseGuards(new AuthGuard())
@UsePipes(new ValidationPipe())
@Roles('soldier')
async trackLocation(
@User('id') userId,
@Param('id') id,
@Body() trackdata: TrackingDTO,
) {
return this.trackingservice.trackLocation(userId, id, trackdata);
}
}
import { Game_PersonEntity } from '../game/game.entity';
export class TrackingDTO {
data: JSON;
gamepersonId: Game_PersonEntity;
}
import {
Entity,
PrimaryGeneratedColumn,
Column,
ManyToOne,
OneToOne,
JoinColumn,
} from 'typeorm';
import { Game_PersonEntity, GameEntity } from '../game/game.entity';
@Entity('Tracking')
export class TrackingEntity {
@PrimaryGeneratedColumn('uuid') id: string;
@Column({ type: 'json', nullable: true }) data: JSON;
@ManyToOne(type => Game_PersonEntity, person => person.gamepersonId)
gamepersonId: Game_PersonEntity;
}
import { Module } from '@nestjs/common';
import { TrackingController } from './tracking.controller';
import { TrackingService } from './tracking.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Game_PersonEntity } from 'src/game/game.entity';
import { TrackingEntity } from './tracking.entity';
@Module({
imports: [TypeOrmModule.forFeature([TrackingEntity, Game_PersonEntity])],
controllers: [TrackingController],
providers: [TrackingService],
})
export class TrackingModule {}
import { Injectable, HttpStatus, HttpException } from '@nestjs/common';
import { Repository } from 'typeorm';
import { Game_PersonEntity } from '../game/game.entity';
import { InjectRepository } from '@nestjs/typeorm';
import { TrackingEntity } from './tracking.entity';
import { TrackingDTO } from './tracking.dto';
@Injectable()
export class TrackingService {
constructor(
@InjectRepository(TrackingEntity)
private trackingrepository: Repository<TrackingEntity>,
@InjectRepository(Game_PersonEntity)
private gamepersonrepository: Repository<Game_PersonEntity>,
) {}
async trackLocation(personId, gameId, trackdata: TrackingDTO) {
// find player
let gameperson = await this.gamepersonrepository.findOne({
game: gameId,
person: personId,
});
if (!gameperson) {
throw new HttpException(
'You have not joined this game',
HttpStatus.BAD_REQUEST,
);
}
let trackedperson = await this.trackingrepository.findOne({
gamepersonId: gameperson,
});
// if player has pushed tracking data, update entry
if (trackedperson) {
//add coordinates
trackedperson.data['geometry']['coordinates'].push(
await this.mapFunction(trackdata.data['geometry']['coordinates']),
);
//add timestamp
trackedperson.data['geometry']['properties']['time'].push(
new Date(Date.now()),
);
return await this.trackingrepository.save(trackedperson);
} else {
// first entry will be empty
// initialize coordinates
trackdata.data['geometry']['coordinates'] = [];
// initialize timestamp
trackdata.data['geometry']['properties']['time'] = [];
trackedperson = await this.trackingrepository.create(trackdata);
trackedperson.gamepersonId = gameperson;
return await this.trackingrepository.save(trackedperson);
}
}
private async mapFunction(data): Promise<Number> {
return await data.map(type => {
return type;
});
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment