Refactor tutorial and user models to replace fileName with id, update related components and services for consistency

This commit is contained in:
liosha84
2025-08-10 11:27:22 +03:00
parent d45fd83593
commit c840adb229
23 changed files with 112 additions and 456 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ import { provideRouter } from '@angular/router';
import { routes } from './app.routes';
import { provideClientHydration, withEventReplay } from '@angular/platform-browser';
import {AppModule} from './app.module';
import Aura from '@primeng/themes/aura';
import {provideAnimations} from '@angular/platform-browser/animations';
import {provideMarkdown} from 'ngx-markdown';
+1 -1
View File
@@ -1,4 +1,4 @@
export class Role {
fileName?:any;
id?:any;
name?:string;
}
+1 -1
View File
@@ -1,5 +1,5 @@
export class Setting {
fileName?:any;
id?:any;
name?:string;
value?:boolean;
}
@@ -1,6 +1,6 @@
export class Tutorial {
isSelected?: boolean;
fileName?: any;
id?: any;
title?: string;
description?: string;
published?: boolean;
+1 -1
View File
@@ -1,5 +1,5 @@
export class User {
fileName?:any;
id?:any;
username?:string;
email?:string;
password?:string;
@@ -85,7 +85,7 @@ export class UsersComponent {
}
saveUserRoles(user:User){
this.adminService.updateUserRoles(user.fileName, user).subscribe(
this.adminService.updateUserRoles(user.id, user).subscribe(
(data:any) => {
console.log(data);
user.isEdit = false
@@ -98,13 +98,13 @@ export class UsersComponent {
isChecked(element: User, role: Role) {
let userRoles: Role[] = element.roles;
return element.roles.some((r:Role) => r.fileName === role.fileName);
return element.roles.some((r:Role) => r.id === role.id);
}
onValChange(element:User, role: Role) {
let userRoles: Role[] = element.roles;
if (this.isChecked(element, role)) {
userRoles = userRoles.filter((r:Role) => r.fileName !== role.fileName);
userRoles = userRoles.filter((r:Role) => r.id !== role.id);
}else {
userRoles.push(role);
}
@@ -19,12 +19,12 @@ export class ModeratorApiService {
return this.http.get<Tutorial[]>(`${this.baseUrl}/tutorials`);
}
getTutorial(fileName: string | null | undefined): Observable<Tutorial> {
return this.http.get<Tutorial>(`${this.baseUrl}/tutorial-get/${fileName}`);
getTutorial(id: string | null | undefined): Observable<Tutorial> {
return this.http.get<Tutorial>(`${this.baseUrl}/tutorial-get/${id}`);
}
publish(fileName: any,data: any): Observable<any> {
return this.http.put(`${this.baseUrl}/tutorial-update/${fileName}`, data);
publish(id: any,data: any): Observable<any> {
return this.http.put(`${this.baseUrl}/tutorial-update/${id}`, data);
}
}
@@ -10,11 +10,11 @@
</mat-form-field>
<mat-tab-group>
<mat-tab label="Preview">
<markdown class="preview" [data]="tutorial.description"></markdown>
<markdown class="preview" [data]="tutorial.body"></markdown>
</mat-tab>
<mat-tab label="Edit">
<textarea class="variable-textarea" [(ngModel)]="tutorial.description"></textarea>
<markdown class="variable-binding" [data]="tutorial.description"></markdown>
<textarea class="variable-textarea" [(ngModel)]="tutorial.body"></textarea>
<markdown class="variable-binding" [data]="tutorial.body"></markdown>
</mat-tab>
<mat-tab label="Example">
@@ -55,18 +55,18 @@ const language = 'typescript';
### Blockquote
> Blockquote to the max`;
private fileName: string | null | undefined;
private id: string | null | undefined;
constructor(private moderatorApiService: ModeratorApiService, private route: ActivatedRoute) {
this.route.queryParams
.subscribe(params => {
console.log(params);
this.fileName = params['fileName'];
console.log(this.fileName);
this.id = params['id'];
console.log(this.id);
});
this.moderatorApiService.getTutorial(this.fileName).subscribe(
this.moderatorApiService.getTutorial(this.id).subscribe(
data=>{
this.tutorial = data;
}
@@ -75,7 +75,7 @@ const language = 'typescript';
publishTutorial(): void {
this.tutorial.published = true;
this.moderatorApiService.publish(this.fileName, this.tutorial)
this.moderatorApiService.publish(this.id, this.tutorial)
.subscribe(
response => {
console.log(response);
@@ -9,7 +9,7 @@
@case('isEdit') {
<div class="btn-edit" >
<button mat-button routerLink='../tutorial-preview' [queryParams]="{fileName:element.fileName}" (click)="element.isEdit = !element.isEdit">
<button mat-button routerLink='../tutorial-preview' [queryParams]="{id:element.id}" (click)="element.isEdit = !element.isEdit">
Preview
</button>
@@ -78,7 +78,7 @@ export class TutorialsListComponent {
publish(element: any, checked: boolean){
element.published = checked;
this.moderatorApiService.publish(element.fileName, element).subscribe(
this.moderatorApiService.publish(element.id, element).subscribe(
response => {
console.log(response);
},
@@ -14,7 +14,7 @@ import {MarkdownComponent} from 'ngx-markdown';
styleUrl: './tutorial-view.component.scss'
})
export class TutorialViewComponent {
private fileName: string | null | undefined;
private id: string | null | undefined;
tutorial: Tutorial = new Tutorial();
constructor(private tutorialsApiService: TutorialsApiService, private route: ActivatedRoute) {
@@ -22,11 +22,11 @@ export class TutorialViewComponent {
this.route.queryParams
.subscribe(params => {
console.log(params);
this.fileName = params['fileName'];
console.log(this.fileName);
this.id = params['id'];
console.log(this.id);
});
this.tutorialsApiService.getTutorial(this.fileName).subscribe(
this.tutorialsApiService.getTutorial(this.id).subscribe(
data => {
this.tutorial = data;
}
@@ -17,6 +17,6 @@ export class TutorialsApiService {
return this.http.get<Tutorial[]>(`${this.baseUrl}/tutorials`);
}
getTutorial(fileName: string | null | undefined): Observable<Tutorial> {
return this.http.get<Tutorial>(`${this.baseUrl}/tutorial-get/${fileName}`);
getTutorial(id: string | null | undefined): Observable<Tutorial> {
return this.http.get<Tutorial>(`${this.baseUrl}/tutorial-get/${id}`);
}}
@@ -4,7 +4,7 @@
<img mat-card-image [src]="tutorial.titleimage" alt="Photo of a" />
<mat-card-actions>
<button mat-button routerLink="../tutorial-view" [queryParams]="{fileName:tutorial.fileName}" target="_blank">{{tutorial.title}}</button>
<button mat-button routerLink="../tutorial-view" [queryParams]="{id:tutorial.id}" target="_blank">{{tutorial.title}}</button>
</mat-card-actions>
</mat-card>
@@ -70,7 +70,7 @@
<mat-divider></mat-divider>
<mat-tab-group>
<mat-tab label="Markdown text | Result">
<textarea class="variable-textarea" [(ngModel)]="markdown"></textarea>
<textarea class="variable-textarea" [(ngModel)]="tutorial.body"></textarea>
<markdown class="variable-binding" [data]="tutorial.body"></markdown>
</mat-tab>
<mat-tab label="Editor">
@@ -70,7 +70,7 @@ const language = 'typescript';
### Blockquote
> Blockquote to the max`;
private fileName: string | null | undefined;
private id: string | null | undefined;
constructor(private userApiService: UserApiService,
private route: ActivatedRoute,
@@ -81,11 +81,11 @@ const language = 'typescript';
this.route.queryParams
.subscribe(params => {
console.log(params);
this.fileName = params['fileName'];
console.log(this.fileName);
this.id = params['id'];
console.log(this.id);
});
this.userApiService.getTutorial(this.fileName).subscribe(
this.userApiService.getTutorial(this.id).subscribe(
data=>{
this.tutorial = data;
}
@@ -148,7 +148,7 @@ const language = 'typescript';
}
updateTutorial(): void {
this.userApiService.update(this.fileName, this.tutorial)
this.userApiService.update(this.id, this.tutorial)
.subscribe(
response => {
console.log(response);
@@ -37,13 +37,13 @@
}
@case('isEdit') {
<div class="btn-edit" >
<button mat-button routerLink='../tutorial-edit' [queryParams]="{fileName:element.fileName}" (click)="element.isEdit = !element.isEdit">
<button mat-button routerLink='../tutorial-edit' [queryParams]="{id:element.id}" (click)="element.isEdit = !element.isEdit">
Edit
</button>
<button
mat-button
class="button-remove"
(click)="removeRow(element.fileName)"
(click)="removeRow(element.id)"
>
Delete
</button>
@@ -125,17 +125,17 @@ import {MatSlideToggle} from '@angular/material/slide-toggle';
// })
}
removeRow(fileName: number) {
this.userApiService.deleteTutorial(fileName).subscribe(() => {
removeRow(id: number) {
this.userApiService.deleteTutorial(id).subscribe(() => {
this.dataSource.data = this.dataSource.data.filter(
(u: Tutorial) => u.fileName !== fileName,
(u: Tutorial) => u.id !== id,
)
})
}
publish(element: any, checked: boolean){
element.tobepublished = checked;
this.userApiService.update(element.fileName, element).subscribe(
this.userApiService.update(element.id, element).subscribe(
response => {
console.log(response);
},
@@ -52,28 +52,28 @@ export class UserApiService {
return this.http.get<Tutorial[]>(`${this.baseUrl}/tutorials`);
}
getTutorial(fileName: string | null | undefined): Observable<Tutorial> {
return this.http.get<Tutorial>(`${this.baseUrl}/tutorial-get/${fileName}`);
getTutorial(id: string | null | undefined): Observable<Tutorial> {
return this.http.get<Tutorial>(`${this.baseUrl}/tutorial-get/${id}`);
}
create(data: any): Observable<any> {
return this.http.post(`${this.baseUrl}/tutorial-add`, data);
}
update(fileName: any,data: any): Observable<any> {
return this.http.put(`${this.baseUrl}/tutorial-update/${fileName}`, data);
update(id: any,data: any): Observable<any> {
return this.http.put(`${this.baseUrl}/tutorial-update/${id}`, data);
}
deleteTutorials(tutorials: Tutorial[]): Observable<Tutorial[]> {
return forkJoin(
tutorials.map((tutorial) =>
this.http.delete<Tutorial>(`${this.baseUrl}/tutorials/${tutorial.fileName}`)
this.http.delete<Tutorial>(`${this.baseUrl}/tutorials/${tutorial.id}`)
)
);
}
deleteTutorial(fileName: number): Observable<Tutorial> {
return this.http.delete<Tutorial>(`${this.baseUrl}/tutorials/${fileName}`);
deleteTutorial(id: number): Observable<Tutorial> {
return this.http.delete<Tutorial>(`${this.baseUrl}/tutorials/${id}`);
}
}