Browse Source

WIP upload controller

new_auth
Dan 2 years ago
parent
commit
f3d08f82f5
  1. 10
      package-lock.json
  2. 1
      packages/bridge-server/package.json
  3. 3
      packages/bridge-server/src/app.module.ts
  4. 18
      packages/bridge-server/src/upload/upload.controller.spec.ts
  5. 14
      packages/bridge-server/src/upload/upload.controller.ts
  6. 32
      packages/bridge-ui/src/app/components/upload-replay-dialog/upload-replay-dialog.component.ts
  7. 5
      packages/bridge-ui/src/app/pages/season-details/season-details.component.ts
  8. 16
      packages/bridge-ui/src/app/services/replays.service.spec.ts
  9. 19
      packages/bridge-ui/src/app/services/replays.service.ts

10
package-lock.json

@ -7469,6 +7469,15 @@
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
"integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
},
"node_modules/@types/multer": {
"version": "1.4.11",
"resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz",
"integrity": "sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==",
"dev": true,
"dependencies": {
"@types/express": "*"
}
},
"node_modules/@types/node": {
"version": "20.9.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.2.tgz",
@ -23420,6 +23429,7 @@
"@nestjs/testing": "^10.0.0",
"@types/express": "^4.17.17",
"@types/jest": "^29.5.2",
"@types/multer": "^1.4.11",
"@types/node": "^20.3.1",
"@types/sequelize": "^4.28.18",
"@types/supertest": "^2.0.12",

1
packages/bridge-server/package.json

@ -38,6 +38,7 @@
"@nestjs/testing": "^10.0.0",
"@types/express": "^4.17.17",
"@types/jest": "^29.5.2",
"@types/multer": "^1.4.11",
"@types/node": "^20.3.1",
"@types/sequelize": "^4.28.18",
"@types/supertest": "^2.0.12",

3
packages/bridge-server/src/app.module.ts

@ -9,6 +9,7 @@ import { UsersModule } from './users/users.module';
import { LoggerMiddleware } from './auth/logger.middleware';
import { SeasonsController } from './seasons/seasons.controller';
import { UploadController } from './upload/upload.controller';
@Module({
imports: [
@ -21,7 +22,7 @@ import { SeasonsController } from './seasons/seasons.controller';
AuthModule,
UsersModule,
],
controllers: [AppController, SeasonsController],
controllers: [AppController, SeasonsController, UploadController],
providers: [AppService, UsersService],
})
export class AppModule {

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

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

14
packages/bridge-server/src/upload/upload.controller.ts

@ -0,0 +1,14 @@
import { Controller, Post, UseInterceptors } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { Body, UploadedFile } from '@nestjs/common/decorators';
import { Express } from 'express'
@Controller('upload')
export class UploadController {
@Post('replay')
@UseInterceptors(FileInterceptor('file'))
uploadFile(@UploadedFile() file: Express.Multer.File, @Body() body: any) {
console.log(body);
console.log(file);
}
}

32
packages/bridge-ui/src/app/components/upload-replay-dialog/upload-replay-dialog.component.ts

@ -1,4 +1,4 @@
import { Component } from '@angular/core';
import { Component, Inject } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ReactiveFormsModule, FormControl } from '@angular/forms';
import { FormsModule } from '@angular/forms';
@ -12,6 +12,8 @@ import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { ReplaysService } from '../../services/replays.service';
@Component({
selector: 'app-upload-replay-dialog',
standalone: true,
@ -35,6 +37,14 @@ import { MatIconModule } from '@angular/material/icon';
export class UploadReplayDialogComponent {
fileName: string = "";
file?: File;
seasonId: string;
constructor(
private replaysService: ReplaysService,
@Inject(MAT_DIALOG_DATA) additionalData: any,
) {
this.seasonId = additionalData.seasonId;
}
onFileSelected(event: any) {
const file: File = event.target.files[0];
@ -45,14 +55,16 @@ export class UploadReplayDialogComponent {
}
}
onClickSubmit() {
/*
let formData = new FormData();
formData.append("file", file);
let local = this.seasonId.seasonId;
formData.append("seasonId", local);
const upload$ = this.apiService.postReplayUpload(formData);
upload$.subscribe();
*/
onClickSubmit() {
if(this.file == undefined) {
return;
}
let formData = new FormData();
formData.append("file", this.file);
let local = this.seasonId;
formData.append("seasonId", local);
const upload$ = this.replaysService.uploadReplay(formData);
upload$.subscribe();
}
}

5
packages/bridge-ui/src/app/pages/season-details/season-details.component.ts

@ -62,6 +62,9 @@ export class SeasonDetailsComponent {
}
openUploadReplayDialog(id: string) {
this.dialog.open(UploadReplayDialogComponent);
this.dialog.open(UploadReplayDialogComponent,
{
data: { seasonId: id }
});
}
}

16
packages/bridge-ui/src/app/services/replays.service.spec.ts

@ -0,0 +1,16 @@
import { TestBed } from '@angular/core/testing';
import { ReplaysService } from './replays.service';
describe('ReplaysService', () => {
let service: ReplaysService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(ReplaysService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
});

19
packages/bridge-ui/src/app/services/replays.service.ts

@ -0,0 +1,19 @@
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from "@angular/common/http";
import { Observable } from "rxjs";
@Injectable({
providedIn: 'root'
})
export class ReplaysService {
server_route: string = "http://localhost:3000/"
constructor(private httpClient: HttpClient) {
}
uploadReplay(newReplay: FormData) {
const headers = new HttpHeaders();
headers.append('Content-Type', 'multipart/form-data');
return this.httpClient.post(this.server_route+'upload/replay', newReplay, { headers });
}
}
Loading…
Cancel
Save