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

tracking done, waiting timestamp confirmations

parent d51d000b
No related branches found
No related tags found
3 merge requests!59Development to master,!31Development,!30Tracking
import { Controller } from '@nestjs/common'; 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';
@Controller('tracking') @Controller('tracking')
export class TrackingController {} export class TrackingController {
constructor(private trackingservice: TrackingService) {}
@Post('location/:id')
@UseGuards(new AuthGuard())
@UsePipes(new ValidationPipe())
@Roles('soldier')
async trackLocation(@Param('id') id, @Body() trackdata: TrackingDTO) {
return this.trackingservice.trackLocation(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 { Module } from '@nestjs/common';
import { TrackingController } from './tracking.controller'; import { TrackingController } from './tracking.controller';
import { TrackingService } from './tracking.service'; import { TrackingService } from './tracking.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Game_PersonEntity } from 'src/game/game.entity';
import { TrackingEntity } from './tracking.entity';
@Module({ @Module({
imports: [TypeOrmModule.forFeature([TrackingEntity])],
controllers: [TrackingController], controllers: [TrackingController],
providers: [TrackingService] providers: [TrackingService],
}) })
export class TrackingModule {} export class TrackingModule {}
import { Injectable } from '@nestjs/common'; import { Injectable } 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() @Injectable()
export class TrackingService {} export class TrackingService {
constructor(
@InjectRepository(TrackingEntity)
private trackingrepository: Repository<TrackingEntity>,
) {}
async trackLocation(trackdata: TrackingDTO) {
// find player
let trackedperson = await this.trackingrepository.findOne({
gamepersonId: trackdata.gamepersonId,
});
// 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);
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