From cfca166ac9400604e9faa7dccdc7e2472f86e8a1 Mon Sep 17 00:00:00 2001 From: samnyan <4137880+samnyan@users.noreply.github.com> Date: Wed, 1 Apr 2020 00:51:37 +0900 Subject: [PATCH] [general] Add import and export data --- src/app/api.service.ts | 5 +- src/app/app-routing.module.ts | 2 + src/app/app.component.html | 1 + src/app/app.module.ts | 2 + src/app/importer/importer.module.ts | 22 ++++++++ .../importer/importer/importer.component.css | 23 ++++++++ .../importer/importer/importer.component.html | 30 ++++++++++ .../importer/importer.component.spec.ts | 25 +++++++++ .../importer/importer/importer.component.ts | 55 +++++++++++++++++++ src/app/login/login.component.spec.ts | 6 -- .../amazon-setting.component.html | 8 +++ .../amazon-setting.component.ts | 7 ++- .../ongeki-setting.component.css | 0 .../ongeki-setting.component.html | 12 ++++ .../ongeki-setting.component.spec.ts | 25 +++++++++ .../ongeki-setting.component.ts | 41 ++++++++++++++ src/app/sega/ongeki/ongeki.module.ts | 4 +- src/app/sega/ongeki/ongeki.routing.ts | 2 + 18 files changed, 259 insertions(+), 11 deletions(-) create mode 100644 src/app/importer/importer.module.ts create mode 100644 src/app/importer/importer/importer.component.css create mode 100644 src/app/importer/importer/importer.component.html create mode 100644 src/app/importer/importer/importer.component.spec.ts create mode 100644 src/app/importer/importer/importer.component.ts create mode 100644 src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.css create mode 100644 src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.html create mode 100644 src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.spec.ts create mode 100644 src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.ts diff --git a/src/app/api.service.ts b/src/app/api.service.ts index bfb5b56..267bffb 100644 --- a/src/app/api.service.ts +++ b/src/app/api.service.ts @@ -32,7 +32,10 @@ export class ApiService { } getHost(): string { - return this.authenticationService.currentUserValue.apiServer + '/'; + if (this.authenticationService.currentUserValue) { + return this.authenticationService.currentUserValue.apiServer + '/'; + } + return 'http://localhost:80' + '/'; } show() { diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index d8d2505..3545b0b 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -4,12 +4,14 @@ import {LoginComponent} from './login/login.component'; import {DashboardComponent} from './dashboard/dashboard.component'; import {AuthGuardService} from './auth/auth-guard.service'; import {ChangelogComponent} from './changelog/changelog.component'; +import {ImporterComponent} from './importer/importer/importer.component'; const routes: Routes = [ {path: '', redirectTo: '/login', pathMatch: 'full'}, {path: 'login', component: LoginComponent}, {path: 'dashboard', component: DashboardComponent, canActivate: [AuthGuardService]}, {path: 'changelog', component: ChangelogComponent}, + {path: 'import', component: ImporterComponent}, {path: 'diva', loadChildren: () => import('./sega/diva/diva.module').then(mod => mod.DivaModule), canLoad: [AuthGuardService]}, {path: 'ongeki', loadChildren: () => import('./sega/ongeki/ongeki.module').then(mod => mod.OngekiModule), canLoad: [AuthGuardService]}, { diff --git a/src/app/app.component.html b/src/app/app.component.html index ddefb7d..130efc6 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -21,6 +21,7 @@ fixedTopGap="56"> Dashboard + Import O.N.G.E.K.I diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 94ac170..01f7dfc 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -27,6 +27,7 @@ import {OngekiModule} from './sega/ongeki/ongeki.module'; import {ErrorInterceptorService} from './auth/error-interceptor.service'; import {LoadingInterceptorService} from './auth/loading-interceptor.service'; import {ChangelogComponent} from './changelog/changelog.component'; +import {ImporterModule} from './importer/importer.module'; @NgModule({ declarations: [ @@ -45,6 +46,7 @@ import {ChangelogComponent} from './changelog/changelog.component'; AppRoutingModule, DashboardModule, LoginModule, + ImporterModule, DivaModule, AmazonModule, OngekiModule, diff --git a/src/app/importer/importer.module.ts b/src/app/importer/importer.module.ts new file mode 100644 index 0000000..da051d6 --- /dev/null +++ b/src/app/importer/importer.module.ts @@ -0,0 +1,22 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {ImporterComponent} from './importer/importer.component'; +import {MatCardModule} from '@angular/material/card'; +import {MatButtonModule} from '@angular/material/button'; +import {MatInputModule} from '@angular/material/input'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; + + +@NgModule({ + declarations: [ImporterComponent], + imports: [ + CommonModule, + MatButtonModule, + MatInputModule, + MatCardModule, + ReactiveFormsModule, + FormsModule, + ] +}) +export class ImporterModule { +} diff --git a/src/app/importer/importer/importer.component.css b/src/app/importer/importer/importer.component.css new file mode 100644 index 0000000..8bc5451 --- /dev/null +++ b/src/app/importer/importer/importer.component.css @@ -0,0 +1,23 @@ +.upload-button::-webkit-file-upload-button { + visibility: hidden; +} + +.upload-button::before { + content: 'Select File'; + cursor: pointer; + outline: none; + border: none; + -webkit-tap-highlight-color: transparent; + display: inline-block; + white-space: nowrap; + text-decoration: none; + vertical-align: baseline; + text-align: center; + margin: 0; + min-width: 64px; + line-height: 36px; + padding: 0 16px; + border-radius: 4px; + overflow: visible; + background-color: #595959; +} diff --git a/src/app/importer/importer/importer.component.html b/src/app/importer/importer/importer.component.html new file mode 100644 index 0000000..50c827e --- /dev/null +++ b/src/app/importer/importer/importer.component.html @@ -0,0 +1,30 @@ + + + Import Data + + + + API Server + + + + + + + + + CHUNITHM + + + + + + + + + ONGEKI + + + + + diff --git a/src/app/importer/importer/importer.component.spec.ts b/src/app/importer/importer/importer.component.spec.ts new file mode 100644 index 0000000..80b1877 --- /dev/null +++ b/src/app/importer/importer/importer.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {ImporterComponent} from './importer.component'; + +describe('ImporterComponent', () => { + let component: ImporterComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ImporterComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ImporterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/importer/importer/importer.component.ts b/src/app/importer/importer/importer.component.ts new file mode 100644 index 0000000..1a4f134 --- /dev/null +++ b/src/app/importer/importer/importer.component.ts @@ -0,0 +1,55 @@ +import {Component, OnInit} from '@angular/core'; +import {MessageService} from '../../message.service'; +import {HttpClient} from '@angular/common/http'; +import {AuthenticationService} from '../../auth/authentication.service'; + +@Component({ + selector: 'app-importer', + templateUrl: './importer.component.html', + styleUrls: ['./importer.component.css'] +}) +export class ImporterComponent implements OnInit { + + apiServer: string; + + constructor( + private http: HttpClient, + private messageService: MessageService, + private authenticationService: AuthenticationService + ) { + } + + ngOnInit(): void { + if (this.authenticationService.currentUserValue) { + this.apiServer = this.authenticationService.currentUserValue.apiServer; + } else { + this.apiServer = 'http://localhost:80'; + } + } + + chunithm(event) { + this.uploadDocument(event.target.files[0], 'api/game/chuni/amazon/import', 'SDBT'); + } + + ongeki(event) { + this.uploadDocument(event.target.files[0], 'api/game/ongeki/import', 'SDDT'); + } + + uploadDocument(file: File, path: string, type: string) { + const fileReader = new FileReader(); + fileReader.onload = (e) => { + const j = JSON.parse(fileReader.result.toString()); + console.log(j); + if (j.gameId === type) { + this.http.post(this.apiServer + '/' + path, j).subscribe( + data => this.messageService.notice('OK'), + error => this.messageService.notice(error) + ); + } else { + this.messageService.notice('Wrong Game ID, please check you have select the correct file.'); + } + }; + fileReader.readAsText(file); + this.messageService.notice('Uploading...'); + } +} diff --git a/src/app/login/login.component.spec.ts b/src/app/login/login.component.spec.ts index faedbfc..87c7c27 100644 --- a/src/app/login/login.component.spec.ts +++ b/src/app/login/login.component.spec.ts @@ -8,10 +8,7 @@ import {LoginComponent} from './login.component'; import {AppRoutingModule} from '../app-routing.module'; import {LayoutModule} from '@angular/cdk/layout'; import {DashboardModule} from '../dashboard/dashboard.module'; -import {ContainerModule} from '../container/container.module'; -import {RegisterModule} from '../register/register.module'; import {HttpClientModule} from '@angular/common/http'; -import {PlayerboardListModule} from '../playerboard-list/playerboard-list.module'; describe('LoginComponent', () => { let component: LoginComponent; @@ -27,13 +24,10 @@ describe('LoginComponent', () => { HttpClientModule, DashboardModule, - ContainerModule, - RegisterModule, ReactiveFormsModule, MatButtonModule, MatInputModule, MatCardModule, - PlayerboardListModule ] }).compileComponents(); })); diff --git a/src/app/sega/chunithm/amazon/amazon-setting/amazon-setting.component.html b/src/app/sega/chunithm/amazon/amazon-setting/amazon-setting.component.html index d551b9c..547896f 100644 --- a/src/app/sega/chunithm/amazon/amazon-setting/amazon-setting.component.html +++ b/src/app/sega/chunithm/amazon/amazon-setting/amazon-setting.component.html @@ -22,3 +22,11 @@ + + Export data + +
+ Download +
+
+
diff --git a/src/app/sega/chunithm/amazon/amazon-setting/amazon-setting.component.ts b/src/app/sega/chunithm/amazon/amazon-setting/amazon-setting.component.ts index 2ff6dc1..66f6934 100644 --- a/src/app/sega/chunithm/amazon/amazon-setting/amazon-setting.component.ts +++ b/src/app/sega/chunithm/amazon/amazon-setting/amazon-setting.component.ts @@ -16,6 +16,7 @@ export class AmazonSettingComponent implements OnInit { profile: AmazonProfile; aimeId: string; + apiServer: string; constructor( private api: ApiService, @@ -25,15 +26,15 @@ export class AmazonSettingComponent implements OnInit { ) { } ngOnInit() { - const aimeId = String(this.auth.currentUserValue.extId); - const param = new HttpParams().set('aimeId', aimeId); + this.aimeId = String(this.auth.currentUserValue.extId); + this.apiServer = this.auth.currentUserValue.apiServer; + const param = new HttpParams().set('aimeId', this.aimeId); this.api.get('api/game/chuni/amazon/profile', param).subscribe( data => { this.profile = data; }, error => this.messageService.notice(error) ); - this.aimeId = String(this.auth.currentUserValue.extId); } userName() { diff --git a/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.css b/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.html b/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.html new file mode 100644 index 0000000..9c1f126 --- /dev/null +++ b/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.html @@ -0,0 +1,12 @@ + + ONGEKI Settings + + + + Export data + +
+ Download +
+
+
diff --git a/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.spec.ts b/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.spec.ts new file mode 100644 index 0000000..dfae519 --- /dev/null +++ b/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {OngekiSettingComponent} from './ongeki-setting.component'; + +describe('OngekiSettingComponent', () => { + let component: OngekiSettingComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [OngekiSettingComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(OngekiSettingComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.ts b/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.ts new file mode 100644 index 0000000..0c9bd32 --- /dev/null +++ b/src/app/sega/ongeki/ongeki-setting/ongeki-setting.component.ts @@ -0,0 +1,41 @@ +import {Component, OnInit} from '@angular/core'; +import {ApiService} from '../../../api.service'; +import {AuthenticationService} from '../../../auth/authentication.service'; +import {MessageService} from '../../../message.service'; +import {MatDialog} from '@angular/material/dialog'; +import {HttpParams} from '@angular/common/http'; +import {DisplayOngekiProfile} from '../model/OngekiProfile'; + +@Component({ + selector: 'app-ongeki-setting', + templateUrl: './ongeki-setting.component.html', + styleUrls: ['./ongeki-setting.component.css'] +}) +export class OngekiSettingComponent implements OnInit { + + profile: DisplayOngekiProfile; + + aimeId: string; + apiServer: string; + + constructor( + private api: ApiService, + private auth: AuthenticationService, + private messageService: MessageService, + public dialog: MatDialog + ) { + } + + ngOnInit(): void { + this.aimeId = String(this.auth.currentUserValue.extId); + this.apiServer = this.auth.currentUserValue.apiServer; + const param = new HttpParams().set('aimeId', this.aimeId); + this.api.get('api/game/ongeki/profile', param).subscribe( + data => { + this.profile = data; + }, + error => this.messageService.notice(error) + ); + } + +} diff --git a/src/app/sega/ongeki/ongeki.module.ts b/src/app/sega/ongeki/ongeki.module.ts index 2239add..1746f9c 100644 --- a/src/app/sega/ongeki/ongeki.module.ts +++ b/src/app/sega/ongeki/ongeki.module.ts @@ -23,6 +23,7 @@ import {ToLevelDecimalPipe} from './util/to-level-decimal.pipe'; import {ToBattleSpritePipe} from './util/to-battle-sprite.pipe'; import {ToTechSpritePipe} from './util/to-tech-sprite.pipe'; import {OngekiCardGachaComponent} from './ongeki-card-gacha/ongeki-card-gacha.component'; +import {OngekiSettingComponent} from './ongeki-setting/ongeki-setting.component'; @NgModule({ @@ -38,7 +39,8 @@ import {OngekiCardGachaComponent} from './ongeki-card-gacha/ongeki-card-gacha.co ToLevelDecimalPipe, ToBattleSpritePipe, ToTechSpritePipe, - OngekiCardGachaComponent + OngekiCardGachaComponent, + OngekiSettingComponent ], imports: [ CommonModule, diff --git a/src/app/sega/ongeki/ongeki.routing.ts b/src/app/sega/ongeki/ongeki.routing.ts index 0a2687d..b335ec8 100644 --- a/src/app/sega/ongeki/ongeki.routing.ts +++ b/src/app/sega/ongeki/ongeki.routing.ts @@ -7,6 +7,7 @@ import {OngekiSongListComponent} from './ongeki-song-list/ongeki-song-list.compo import {OngekiBattlePointComponent} from './ongeki-battle-point/ongeki-battle-point.component'; import {OngekiRatingComponent} from './ongeki-rating/ongeki-rating.component'; import {OngekiCardGachaComponent} from './ongeki-card-gacha/ongeki-card-gacha.component'; +import {OngekiSettingComponent} from './ongeki-setting/ongeki-setting.component'; const routes: Routes = [ @@ -18,6 +19,7 @@ const routes: Routes = [ {path: 'card', component: OngekiCardComponent}, {path: 'card/all', component: OngekiCardListComponent}, {path: 'card/gacha', component: OngekiCardGachaComponent}, + {path: 'setting', component: OngekiSettingComponent}, ]; export const OngekiRoutes = RouterModule.forChild(routes);