Browse Source

move trackmania.io to the server

new_auth
Dan 2 years ago
parent
commit
efc8b03bd0
  1. 2481
      package-lock.json
  2. 3
      packages/bridge-server/package.json
  3. 18
      packages/bridge-server/src/races/races.controller.spec.ts
  4. 27
      packages/bridge-server/src/races/races.controller.ts
  5. 4
      packages/bridge-server/src/races/races.module.ts
  6. 5
      packages/bridge-ui/angular.json
  7. 1
      packages/bridge-ui/package.json
  8. 35
      packages/bridge-ui/src/app/components/new-race-dialog/new-race-dialog.component.html
  9. 3
      packages/bridge-ui/src/app/components/new-race-dialog/new-race-dialog.component.scss
  10. 35
      packages/bridge-ui/src/app/components/new-race-dialog/new-race-dialog.component.ts
  11. 4
      packages/bridge-ui/src/app/services/races.service.ts
  12. 4
      packages/bridge-ui/src/app/services/seasons.service.ts

2481
package-lock.json

File diff suppressed because it is too large

3
packages/bridge-server/package.json

@ -30,7 +30,8 @@
"rxjs": "^7.8.1",
"sequelize": "^6.35.1",
"sequelize-typescript": "^2.1.5",
"sqlite3": "^5.1.6"
"sqlite3": "^5.1.6",
"trackmania.io": "^3.2.2"
},
"devDependencies": {
"@nestjs/cli": "^10.0.0",

18
packages/bridge-server/src/races/races.controller.spec.ts

@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { RacesController } from './races.controller';
describe('RacesController', () => {
let controller: RacesController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [RacesController],
}).compile();
controller = module.get<RacesController>(RacesController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
});

27
packages/bridge-server/src/races/races.controller.ts

@ -0,0 +1,27 @@
import { Controller, Get, Param } from '@nestjs/common';
import { from } from 'rxjs';
import * as TMIO from 'trackmania.io';
@Controller('races')
export class RacesController {
TMIO: any;
constructor() {
this.TMIO = new TMIO.Client();
}
@Get('/map/:id')
findOne(@Param() params: any) {
let promise = new Promise((resolve, reject) => {
try{
this.TMIO.maps.get(params.id).then(async mapInfo => {
console.log(mapInfo);
resolve(mapInfo._data);
});
} catch (error) {
reject(error);
}
});
return from(promise);
}
}

4
packages/bridge-server/src/races/races.module.ts

@ -2,10 +2,12 @@ import { Module } from '@nestjs/common';
import { SequelizeModule } from '@nestjs/sequelize';
import { Race } from './race.model';
import { RacesService } from './races.service';
import { RacesController } from './races.controller';
@Module({
imports: [SequelizeModule.forFeature([Race])],
providers: [RacesService],
exports: [SequelizeModule, RacesService]
exports: [SequelizeModule, RacesService],
controllers: [RacesController]
})
export class RacesModule {}

5
packages/bridge-ui/angular.json

@ -141,6 +141,9 @@
}
},
"cli": {
"analytics": "955048a1-2b3d-4c4f-8a58-40798c5b94d1"
"analytics": "955048a1-2b3d-4c4f-8a58-40798c5b94d1",
"cache": {
"enabled": true
}
}
}

1
packages/bridge-ui/package.json

@ -23,7 +23,6 @@
"bridge-shared": "^1.0.0",
"jwt-decode": "^4.0.0",
"rxjs": "~7.8.0",
"trackmania.io": "file:../bridge-shared/trackmania.io-f",
"tslib": "^2.3.0",
"zone.js": "~0.14.2"
},

35
packages/bridge-ui/src/app/components/new-race-dialog/new-race-dialog.component.html

@ -1,11 +1,6 @@
<div class="signInForm">
<h1 mat-dialog-title>Login</h1>
<div mat-dialog-content>
<mat-form-field class="full-width">
<mat-label>Map UID</mat-label>
<input matInput type="text" id="mapUID" [formControl]="mapUID" name="mapUID" required>
</mat-form-field>
<br/>
<mat-form-field class="full-width">
<mat-label>Start Date</mat-label>
<input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="picker" [formControl]="startDate" name="startDate" id="startDate" required>
@ -20,6 +15,36 @@
<mat-datepicker-toggle matIconSuffix [for]="endpicker"></mat-datepicker-toggle>
<mat-datepicker #endpicker></mat-datepicker>
</mat-form-field>
<br/>
<mat-form-field class="full-width">
<mat-label>Map UID</mat-label>
<input matInput type="text" id="mapUID" [formControl]="mapUID" name="mapUID" required>
</mat-form-field>
<button mat-icon-button class="example-icon" aria-label="Example icon-button with share icon" (click)="onQueryMapInfo()">
<mat-icon>map</mat-icon>
</button>
@if(hasMapDetails == true){
<mat-grid-list cols="3" rowHeight="50px">
<mat-grid-tile [colspan]="2" [rowspan]="1">
<h1>{{mapDetails.name}} by {{mapDetails.authorplayer.name}}</h1>
</mat-grid-tile>
<mat-grid-tile [colspan]="1" [rowspan]="5">
<img src={{mapDetails.thumbnailUrl}} class="img-thumbnail shadow-2-strong"/>
</mat-grid-tile>
<mat-grid-tile [colspan]="2" [rowspan]="1">
{{formatMilliseconds(mapDetails.authorScore)}}
</mat-grid-tile>
<mat-grid-tile [colspan]="2" [rowspan]="1">
{{formatMilliseconds(mapDetails.goldScore)}}
</mat-grid-tile>
<mat-grid-tile [colspan]="2" [rowspan]="1">
{{formatMilliseconds(mapDetails.silverScore)}}
</mat-grid-tile>
<mat-grid-tile [colspan]="2" [rowspan]="1">
{{formatMilliseconds(mapDetails.bronzeScore)}}
</mat-grid-tile>
</mat-grid-list>
}
</div>
<mat-dialog-actions align="end">
<button mat-button mat-dialog-close>Cancel</button>

3
packages/bridge-ui/src/app/components/new-race-dialog/new-race-dialog.component.scss

@ -0,0 +1,3 @@
.img-thumbnail {
max-width: 12rem;
}

35
packages/bridge-ui/src/app/components/new-race-dialog/new-race-dialog.component.ts

@ -9,10 +9,13 @@ import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatNativeDateModule } from '@angular/material/core';
import { MatIconModule } from '@angular/material/icon';
import { MatGridListModule } from '@angular/material/grid-list';
import { MatDialog, MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';
import { RacesService } from '../../services/races.service';
import * as TMIO from 'trackmania.io';
//import * as TMIO from 'trackmania.io';
@Component({
selector: 'app-new-race-dialog',
@ -30,7 +33,9 @@ import * as TMIO from 'trackmania.io';
MatDialogActions,
MatDialogClose,
MatDatepickerModule,
MatNativeDateModule
MatNativeDateModule,
MatIconModule,
MatGridListModule
],
providers: [
MatDatepickerModule, MatNativeDateModule
@ -49,18 +54,40 @@ export class NewRaceDialogComponent {
seasonId: string;
tmio: any;
mapDetails: any;
hasMapDetails: boolean = false;
lightblue: string ='lightblue'
lightgreen: string = 'lightgreen'
imgcolour: string = 'lightpink'
constructor(
@Inject(MAT_DIALOG_DATA) additionalData: any,
private racesService: RacesService
)
{
this.seasonId = additionalData.seasonId;
const currentYear = new Date().getFullYear();
this.minDate = new Date(Date.now());
this.maxDate = new Date(currentYear + 1, 11, 31);
//this.tmio = new TMIO.Client();
}
onQueryMapInfo() {
let mapUID = this.mapUID.value != undefined ? this.mapUID.value : "";
this.racesService.getMapInfo(mapUID).subscribe( data => {
console.log(data);
this.mapDetails = data;
this.hasMapDetails = true;
})
}
formatMilliseconds(milliseconds: number)
{
const minutes = Math.floor(milliseconds / (1000 * 60));
const seconds = Math.floor((milliseconds % (1000 * 60)) / 1000);
const remainingMilliseconds = milliseconds % 1000;
//this.mapUID.registerOnChange()
return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}:${String(remainingMilliseconds).padStart(3, '0')}`;
}
submit() {

4
packages/bridge-ui/src/app/services/races.service.ts

@ -29,4 +29,8 @@ export class RacesService {
});
return from(promise);
}
getMapInfo(mapUID: string) {
return this.httpClient.get("http://localhost:3000/races/map/"+mapUID);
}
}

4
packages/bridge-ui/src/app/services/seasons.service.ts

@ -27,7 +27,11 @@ export class SeasonsService {
} else {
_season.races = [];
}
if ("standings" in Object.keys(data)) {
_season.standings = data.standings;
} else {
_season.standings = [];
}
return _season;
}

Loading…
Cancel
Save