diff --git a/packages/bridge-server/src/users/users.controller.ts b/packages/bridge-server/src/users/users.controller.ts
index dd45dbc..09460e7 100644
--- a/packages/bridge-server/src/users/users.controller.ts
+++ b/packages/bridge-server/src/users/users.controller.ts
@@ -18,4 +18,11 @@ export class UsersController {
updateLastLogin(@Body() body: any) {
return this.usersService.updateLastLogin(body.id, body.nickname, body.picture, body.time);
}
+
+ @UseGuards(JwtAuthGuard)
+ @Post(':id/update')
+ async updateUserDetails(@Body() body: any) {
+ await this.usersService.updateUserDetails(body.id, body.nickname, body.realname);
+ return this.usersService.findOne(body.id);
+ }
}
diff --git a/packages/bridge-server/src/users/users.service.ts b/packages/bridge-server/src/users/users.service.ts
index 59006ec..e6af245 100644
--- a/packages/bridge-server/src/users/users.service.ts
+++ b/packages/bridge-server/src/users/users.service.ts
@@ -28,6 +28,29 @@ export class UsersService {
this.userModel.upsert({auth0id: id, nickname: nickname, picture: picture, lastLogin: time});
}
+ async updateUserDetails(id, nickname, realname) {
+ try {
+ await this.sequelize.transaction( async t => {
+ const transactionHost = { transaction: t };
+ let target_user = await this.userModel.findOne(
+ { where: {auth0id: id} }
+ );
+
+ if(!target_user)
+ {
+ throw new Error();
+ }
+
+ target_user.nickname = nickname;
+ target_user.realName = realname;
+
+ target_user.save();
+ });
+ } catch (error) {
+
+ }
+ }
+
async claimRacer(user, racer: Racer) {
try {
await this.sequelize.transaction( async t => {
diff --git a/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.html b/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.html
new file mode 100644
index 0000000..97680f8
--- /dev/null
+++ b/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.html
@@ -0,0 +1,16 @@
+
+
Edit
+
+ Nickname
+
+
+
+
+ Real Name
+
+
+
+
+
+
+
diff --git a/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.scss b/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.scss
new file mode 100644
index 0000000..b13d97b
--- /dev/null
+++ b/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.scss
@@ -0,0 +1,12 @@
+.signInForm {
+ width: 400px;
+ padding: 12px 24px 24px;
+
+ igx-input-group + igx-input-group {
+ margin-top: 24px;
+ }
+ }
+
+ .full-width {
+ width: 100%;
+ }
\ No newline at end of file
diff --git a/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.spec.ts b/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.spec.ts
new file mode 100644
index 0000000..25c0712
--- /dev/null
+++ b/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { EditUserDetailsDialogComponent } from './edit-user-details-dialog.component';
+
+describe('EditUserDetailsDialogComponent', () => {
+ let component: EditUserDetailsDialogComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [EditUserDetailsDialogComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(EditUserDetailsDialogComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.ts b/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.ts
new file mode 100644
index 0000000..816d0b4
--- /dev/null
+++ b/packages/bridge-ui/src/app/components/edit-user-details-dialog/edit-user-details-dialog.component.ts
@@ -0,0 +1,62 @@
+import { Component, Inject } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { ReactiveFormsModule, FormControl } from '@angular/forms';
+import { FormsModule } from '@angular/forms';
+
+import { MatDialog, MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle,
+ MatDialogContent, MatDialogActions, MatDialogClose,} from '@angular/material/dialog';
+
+import { MatButtonModule } from '@angular/material/button';
+import { MatDialogModule } from '@angular/material/dialog';
+import { MatInputModule } from '@angular/material/input';
+import { MatFormFieldModule } from '@angular/material/form-field';
+import { MatIconModule } from '@angular/material/icon';
+import { UsersService } from '../../services/users.service';
+
+@Component({
+ selector: 'app-edit-user-details-dialog',
+ standalone: true,
+ imports: [
+ CommonModule,
+ ReactiveFormsModule,
+ MatButtonModule,
+ MatDialogModule,
+ MatInputModule,
+ MatFormFieldModule,
+ FormsModule,
+ MatDialogTitle,
+ MatDialogContent,
+ MatDialogActions,
+ MatDialogClose,
+ MatIconModule,
+ ],
+ templateUrl: './edit-user-details-dialog.component.html',
+ styleUrl: './edit-user-details-dialog.component.scss'
+})
+export class EditUserDetailsDialogComponent {
+ nickname = new FormControl('');
+ realname = new FormControl('');
+ additionalData: any;
+
+ constructor(
+ @Inject(MAT_DIALOG_DATA) additionalData: any,
+ private usersService: UsersService
+ )
+ {
+ this.additionalData = additionalData;
+ }
+
+ ngOnInit() {
+ this.nickname.setValue(this.additionalData.currentNickName);
+ this.realname.setValue(this.additionalData.currentRealName);
+ }
+
+ onClickSubmit() {
+ let nickname = this.nickname.value != undefined ? this.nickname.value : "";
+ let realname = this.realname.value != undefined ? this.realname.value : "";
+
+ this.usersService.updateUserDetails(nickname, realname).subscribe(data =>{
+ console.log(data);
+ });
+ }
+}
diff --git a/packages/bridge-ui/src/app/pages/user/user.component.html b/packages/bridge-ui/src/app/pages/user/user.component.html
index 96dc2c8..5a91e68 100644
--- a/packages/bridge-ui/src/app/pages/user/user.component.html
+++ b/packages/bridge-ui/src/app/pages/user/user.component.html
@@ -11,7 +11,7 @@
@if(this.usersService.isLocalUser(this.userId)) {
-
+
}
diff --git a/packages/bridge-ui/src/app/pages/user/user.component.ts b/packages/bridge-ui/src/app/pages/user/user.component.ts
index 8b4d949..7ec186d 100644
--- a/packages/bridge-ui/src/app/pages/user/user.component.ts
+++ b/packages/bridge-ui/src/app/pages/user/user.component.ts
@@ -8,6 +8,7 @@ import { MatDialog } from '@angular/material/dialog';
import { UsersService } from '../../services/users.service';
import { ClaimRacerDialogComponent } from '../../components/claim-racer-dialog/claim-racer-dialog.component';
+import { EditUserDetailsDialogComponent } from '../../components/edit-user-details-dialog/edit-user-details-dialog.component';
import { ActivatedRoute } from '@angular/router';
import { User } from '../../models/user.model';
@@ -54,6 +55,15 @@ export class UserComponent {
this.dialog.open(ClaimRacerDialogComponent);
}
+ openEditUserDetailsDialog() {
+ this.dialog.open(EditUserDetailsDialogComponent, {
+ data: {
+ currentNickName: this.getUserName(),
+ currentRealName: this.getUserRealName()
+ }
+ });
+ }
+
getUserName() : string {
if(!this.user) {return ""}
@@ -81,7 +91,7 @@ export class UserComponent {
getUserRealName() : string {
if(!this.user) {return "??? ???"}
- return "??? ???";
+ return this.user.realName;
}
}
diff --git a/packages/bridge-ui/src/app/services/users.service.ts b/packages/bridge-ui/src/app/services/users.service.ts
index 14cba9b..70091a2 100644
--- a/packages/bridge-ui/src/app/services/users.service.ts
+++ b/packages/bridge-ui/src/app/services/users.service.ts
@@ -66,6 +66,11 @@ export class UsersService {
return from(promise);
}
+ updateUserDetails(nickname: string, realname: string) {
+ let id = this.localUser.sub;
+ return this.httpClient.post(this.serverEndpointService.getCurrentEndpoint()+"users/"+id+"/update", {id, nickname, realname});
+ }
+
reportLogin() {
if(!this.localUser) { return }
let id = this.localUser.sub;