Aktualisierung der Angular-Api-Dienste entsprechend dem DTO.

This commit is contained in:
Developer 02 2024-07-02 17:51:35 +02:00
parent 0a0a327e58
commit b548aa796a
15 changed files with 93 additions and 141 deletions

View File

@ -9,10 +9,10 @@ import { ColorModeService, Theme } from 'src/app/services/color-mode.service';
templateUrl: './base-table.component.html',
styleUrl: './base-table.component.css'
})
export class BaseTableComponent<TModel, TApiService extends ApiService<TModel>> implements OnInit, AfterViewInit, OnDestroy {
export class BaseTableComponent<TModel, TApiService extends ApiService<TModel>> implements OnInit, AfterViewInit, OnDestroy {
service: TApiService;
columnMenu: GuiColumnMenu = {
enabled: true,
sort: true,
@ -26,7 +26,7 @@ export class BaseTableComponent<TModel, TApiService extends ApiService<TModel>>
loading: boolean = true;
autoResizeWidth: boolean = true;
rowDetail: GuiRowDetail = {
enabled : true,
enabled: true,
template: (item: TModel) => {
return `
<div></div>`;
@ -59,25 +59,25 @@ export class BaseTableComponent<TModel, TApiService extends ApiService<TModel>>
<div class='title-panel-example' >List of contract workers</div>
`;
}
};
};
theme: GuiTheme = localStorage.getItem('theme') === 'dark'? GuiTheme.DARK : GuiTheme.FABRIC;
theme: GuiTheme = localStorage.getItem('theme') === 'dark' ? GuiTheme.DARK : GuiTheme.FABRIC;
private themeSubscription: Subscription = new Subscription();
constructor(@Inject(ApiService<TModel>) service: TApiService, columns: Array<GuiColumn>, private cModeService: ColorModeService) {
this.service = service;
if(this.columns.length == 0)
if (this.columns.length == 0)
this.columns = columns;
//assign row details
if(this.rowDetailTemplate === null || this.rowDetailTemplate === undefined)
if (this.rowDetailTemplate === null || this.rowDetailTemplate === undefined)
this.rowDetail = {
enabled : false,
enabled: false,
};
else
this.rowDetail = {
enabled : true,
enabled: true,
template: (this.rowDetailTemplate)
};
}
@ -101,40 +101,40 @@ export class BaseTableComponent<TModel, TApiService extends ApiService<TModel>>
@Input() rowSelection: boolean | GuiRowSelection = true;
@Input() onSelectedRows: (rows: Array<GuiSelectedRow>) => void = (rows) => {};
@Input() initData : () => void = this.fetchData;
@Input() onSelectedRows: (rows: Array<GuiSelectedRow>) => void = (rows) => { };
@Input() initData: () => void = this.fetchData;
@Input() columns: Array<GuiColumn> = [];
selected: boolean = false;
safelyUnselectAll() {
this.selected = true
if(this.api?.getSelectedRows() != undefined)
if((this.api?.getSelectedRows().length ?? 0 > 0) && this.selected) {
this.api?.unselectAll()
this.selected = false
}
if (this.api?.getSelectedRows() != undefined)
if ((this.api?.getSelectedRows().length ?? 0 > 0) && this.selected) {
this.api?.unselectAll()
this.selected = false
}
}
@ViewChild('grid', { static: true }) mainGrid!: GuiGridComponent;
private get api() : GuiGridApi {
private get api(): GuiGridApi {
return this.mainGrid.api;
}
set source(data : TModel[]) {
set source(data: TModel[]) {
this.api.setSource(data)
}
get selectedRows(): Array<GuiSelectedRow> {
return this.api.getSelectedRows();
}
ngOnInit(): void {
const subscription = this.cModeService.themeChanges$.subscribe((theme: Theme) => {
this.theme = theme === 'dark'? GuiTheme.DARK : GuiTheme.FABRIC;
this.theme = theme === 'dark' ? GuiTheme.DARK : GuiTheme.FABRIC;
});
this.themeSubscription.add(subscription);
@ -147,17 +147,12 @@ export class BaseTableComponent<TModel, TApiService extends ApiService<TModel>>
ngAfterViewInit(): void {
}
fetchData(): void {
this.service.getAll().subscribe({
next: (response) => {
if (response.isSuccess && response.data) {
this.source = response.data;
this.loading = false;
} else {
// Handle response failure
console.error('Failed to fetch users');
}
this.source = response;
this.loading = false;
},
error: (error) => console.error('Error fetching users:', error)
});

View File

@ -17,17 +17,11 @@ export class DirUserTableComponent extends BaseTableComponent<DirUser, DirUserSe
fetchDataByGroupName(groupName: string): void {
this.service.getAll(groupName).subscribe({
next: (response) => {
if (response.isSuccess && response.data) {
this.source = response.data;
this.loading = false;
} else {
// Handle response failure
this.loading = false;
console.error('Failed to fetch users');
}
next: (response: any) => {
this.source = response;
this.loading = false;
},
error: (error) => console.error('Error fetching users:', error)
error: (error: any) => console.error('Error fetching users:', error)
})
}
}

View File

@ -20,12 +20,7 @@ export class GroupUserTableComponent extends BaseTableComponent<GroupOfUser, Gro
fetchDataWith(withUser: boolean, withGroup: boolean){
this.service.getAll(withUser, withGroup).subscribe ({
next: (response) => {
if (response.isSuccess && response.data) {
this.source = response.data;
} else {
// Handle response failure
console.error('Failed to fetch users');
}
this.source = response;
},
error: (error) => console.error('Error fetching users:', error)
});

View File

@ -1,9 +1,9 @@
import { Component, Inject } from '@angular/core';
import { UserRep } from 'src/app/models/user-management.api.models';
import { UserRepService } from 'src/app/services/user-representation.service';
import { UserRep } from '../../../models/user-management.api.models';
import { UserRepService } from '../../../services/user-representation.service';
import { BaseTableComponent } from '../base-table/base-table.component';
import { GuiColumn } from '@generic-ui/ngx-grid';
import { ColorModeService } from 'src/app/services/color-mode.service';
import { ColorModeService } from '../../../services/color-mode.service';
@Component({
selector: 'app-user-rep-table',
@ -19,16 +19,11 @@ export class UserRepTableComponent extends BaseTableComponent<UserRep, UserRepSe
override fetchData(userId?: number): void {
this.service.getAll(false, true, true, true, userId).subscribe({
next: (response) => {
if (response.isSuccess && response.data) {
this.source = response.data;
this.loading = false;
} else {
// Handle response failure
console.error('Failed to fetch users');
}
next: (response: any) => {
this.source = response;
this.loading = false;
},
error: (error) => console.error('Error fetching users:', error)
error: (error: any) => console.error('Error fetching users:', error)
});
}
}

View File

@ -5,7 +5,7 @@ import { GroupOfUserService } from '../../../services/group-of-user.service';
import { User } from '../../../models/user-management.api.models';
import { GuiColumn } from '@generic-ui/ngx-grid';
import { BaseTableComponent } from '../base-table/base-table.component';
import { ColorModeService } from 'src/app/services/color-mode.service';
import { ColorModeService } from '../../../services/color-mode.service'
@Component({
selector: 'app-user-table',
@ -25,14 +25,8 @@ export class UserTableComponent extends BaseTableComponent<User, UserService> {
fetchDataByModuleId(moduleId: number, assigned: boolean = true): void {
this.service.getByModuleId(moduleId, assigned).subscribe({
next: (response) => {
if (response.isSuccess && response.data) {
this.source = response.data;
} else {
// Handle response failure
console.error('Failed to fetch users');
}
next: (users) => {
this.source = users;
},
error: (error) => console.error('Error fetching users:', error)
});
@ -40,13 +34,8 @@ export class UserTableComponent extends BaseTableComponent<User, UserService> {
fetchDataByGroupId(groupId: number, assigned: boolean = true): void {
this.service.getByGroupId(groupId, assigned).subscribe({
next: (response) => {
if (response.isSuccess && response.data) {
this.source = response.data;
} else {
// Handle response failure
console.error('Failed to fetch users');
}
next: (users) => {
this.source = users;
},
error: (error) => console.error('Error fetching users:', error)
});
@ -55,24 +44,24 @@ export class UserTableComponent extends BaseTableComponent<User, UserService> {
async createModuleOfUsers(moduleId: number, users: User[]): Promise<any[]> {
const creationPromises = users
.filter(user => user.guid && user.guid != null)
.map(user => this.mosService.create({ moduleId: moduleId, userId: user.guid??-1, addedWho:"DEFAULT" }).toPromise());
.map(user => this.mosService.create({ moduleId: moduleId, userId: user.guid ?? -1, addedWho: "DEFAULT" }).toPromise());
return Promise.all(creationPromises);
}
}
async createGroupOfUsers(groupId: number, users: User[]): Promise<any[]> {
const creationPromises = users
.filter(user => user.guid && user.guid != null)
.map(user => this.gosService.create({ groupId: groupId, userId: user.guid??-1, addedWho:"DEFAULT" }).toPromise());
.map(user => this.gosService.create({ groupId: groupId, userId: user.guid ?? -1, addedWho: "DEFAULT" }).toPromise());
return Promise.all(creationPromises);
}
}
async deleteModuleOfUsers(moduleId: number, users: User[]): Promise<void> {
const deletionPromises = users
.filter(user => user.guid)
.map(user => this.mosService.deleteByModuleGroupId(moduleId, user.guid??-1).toPromise());
.map(user => this.mosService.deleteByModuleGroupId(moduleId, user.guid ?? -1).toPromise());
try {
const responses = await Promise.all(deletionPromises);
responses.forEach(response => {
@ -88,8 +77,8 @@ export class UserTableComponent extends BaseTableComponent<User, UserService> {
async deleteGroupOfUsers(groupId: number, users: User[]): Promise<void> {
const deletionPromises = users
.filter(user => user.guid)
.map(user => this.gosService.deleteByGroupUserId(groupId, user.guid??-1).toPromise());
.map(user => this.gosService.deleteByGroupUserId(groupId, user.guid ?? -1).toPromise());
try {
const responses = await Promise.all(deletionPromises);
responses.forEach(response => {
@ -100,5 +89,5 @@ export class UserTableComponent extends BaseTableComponent<User, UserService> {
} catch (error) {
console.error('Error deleting group of users:', error);
}
}
}
}

View File

@ -1,8 +0,0 @@
export interface ApiMessage {
isSuccess: boolean;
messages: string[];
}
export interface ApiResult<T> extends ApiMessage {
data?: T;
}

View File

@ -1,7 +1,6 @@
import { Inject, Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { ApiMessage, ApiResult } from '../models/api.response.model';
import { AuthCheckDto } from '../models/user-management.api.models';
import { Router } from '@angular/router';
import Swal from 'sweetalert2';
@ -50,14 +49,16 @@ export class AuthenticationService {
});
}
logout(): Observable<ApiMessage> {
logout(): Observable<any> {
return new Observable(observer => {
this.http.post<ApiMessage>(this.logoutUrl, {}, { withCredentials: true })
this.http.post<any>(this.logoutUrl, {}, { withCredentials: true })
.subscribe({
next: (response) => {
this.router.navigate(['/']);
_isLogedIn = false;
observer.next(response)
if (response.ok) {
this.router.navigate(['/']);
_isLogedIn = false;
observer.next(response)
}
},
error: (error) => observer.error(error),
complete: () => observer.complete()

View File

@ -1,8 +1,7 @@
import { Injectable, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { DirGroup, DirUser } from '../models/user-management.api.models';
import { DirGroup, } from '../models/user-management.api.models';
import { ApiService } from './user-management.api.service';
import { ApiResult } from '../models/api.response.model';
import { Observable } from 'rxjs/internal/Observable';
import Swal from 'sweetalert2';
@ -14,21 +13,20 @@ export class DirGroupService extends ApiService<DirGroup> {
super(http, userUri);
}
override getAll(): Observable<ApiResult<DirGroup[]>> {
return new Observable(observer => {
//TODO: Swal.fire
override getAll(): Observable<DirGroup[]> {
return new Observable<DirGroup[]>(observer => {
super.getAll()
.subscribe({
next: (response) => {
if(!response.isSuccess || !response.data) {
Swal.fire({
icon: "error",
title: "Oops...",
text: `Active Directory-Verbindung verloren. Bitte melden Sie sich erneut an`,
});
}
observer.next(response)
},
error: (error) => {
Swal.fire({
icon: "error",
title: "Oops...",
text: `Active Directory-Verbindung verloren. Bitte melden Sie sich erneut an`,
});
observer.error(error)
},
complete: () => observer.complete()

View File

@ -3,7 +3,6 @@ import { HttpClient, HttpParams } from '@angular/common/http';
import { DirUser } from '../models/user-management.api.models';
import { ApiService } from './user-management.api.service';
import { Observable } from 'rxjs/internal/Observable';
import { ApiResult } from '../models/api.response.model';
@Injectable({
providedIn: 'root'
@ -13,12 +12,12 @@ export class DirUserService extends ApiService<DirUser> {
super(http, userUri);
}
override getAll(groupName?: string): Observable<ApiResult<DirUser[]>> {
override getAll(groupName?: string): Observable<DirUser[]> {
let params = new HttpParams();
if (groupName) {
params = params.set('groupName', groupName);
}
return this.http.get<ApiResult<DirUser[]>>(this.baseUrl, { params, withCredentials: true });
return this.http.get<DirUser[]>(this.baseUrl, { params, withCredentials: true });
}
}

View File

@ -1,6 +1,5 @@
import { HttpClient, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs';
import { ApiResult } from '../models/api.response.model';
import { Inject, Injectable } from '@angular/core';
import { DirUser } from '../models/user-management.api.models';
@ -12,12 +11,12 @@ export class DirService {
this.http = http;
}
getUser(groupName: string): Observable<ApiResult<DirUser[]>> {
getUser(groupName: string): Observable<DirUser[]> {
let params = new HttpParams();
if (groupName) {
params = params.set('groupName', groupName);
}
return this.http.get<ApiResult<DirUser[]>>(this.baseUrl, { params, withCredentials: true });
return this.http.get<DirUser[]>(this.baseUrl, { params, withCredentials: true });
}
}

View File

@ -2,7 +2,6 @@ import { Injectable, Inject } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { GroupOfUser } from '../models/user-management.api.models';
import { ApiService } from './user-management.api.service';
import { ApiResult } from '../models/api.response.model';
import { Observable } from 'rxjs';
@Injectable({
@ -13,12 +12,12 @@ export class GroupOfUserService extends ApiService<GroupOfUser> {
super(http, userUri);
}
deleteByGroupUserId(groupId: number, userId: number): Observable<ApiResult<any>> {
deleteByGroupUserId(groupId: number, userId: number): Observable<any> {
const url = `${this.baseUrl}?groupId=${groupId}&userId=${userId}`;
return this.http.delete<ApiResult<any>>(url, { withCredentials: true });
return this.http.delete<any>(url, { withCredentials: true });
}
override getAll(withUser: boolean = false, withGroup: boolean = false): Observable<ApiResult<GroupOfUser[]>> {
override getAll(withUser: boolean = false, withGroup: boolean = false): Observable<GroupOfUser[]> {
let params = new HttpParams();
if (withUser) {
params = params.set('withUser', withUser);
@ -27,6 +26,6 @@ export class GroupOfUserService extends ApiService<GroupOfUser> {
params = params.set('withGroup', withGroup);
}
return this.http.get<ApiResult<GroupOfUser[]>>(this.baseUrl, { params, withCredentials: true });
return this.http.get<GroupOfUser[]>(this.baseUrl, { params, withCredentials: true });
}
}

View File

@ -2,7 +2,6 @@ import { Injectable, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { ModuleOfUser } from '../models/user-management.api.models';
import { ApiService } from './user-management.api.service';
import { ApiResult } from '../models/api.response.model';
import { Observable } from 'rxjs';
@Injectable({
@ -13,8 +12,8 @@ export class ModuleOfUserService extends ApiService<ModuleOfUser> {
super(http, userUri);
}
deleteByModuleGroupId(moduleId: number, userId: number): Observable<ApiResult<any>> {
deleteByModuleGroupId(moduleId: number, userId: number): Observable<any> {
const url = `${this.baseUrl}?moduleId=${moduleId}&userId=${userId}`;
return this.http.delete<ApiResult<any>>(url, { withCredentials: true });
return this.http.delete<any>(url, { withCredentials: true });
}
}

View File

@ -1,6 +1,5 @@
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { ApiResult } from '../models/api.response.model';
import { Inject, Injectable } from '@angular/core';
@Injectable({
@ -15,26 +14,26 @@ export class ApiService<Model> {
http: HttpClient;
baseUrl: string;
getAll(): Observable<ApiResult<Model[]>> {
return this.http.get<ApiResult<Model[]>>(this.baseUrl, { withCredentials: true });
getAll(): Observable<Model[]> {
return this.http.get<Model[]>(this.baseUrl, { withCredentials: true });
}
getById(id: number): Observable<ApiResult<Model>> {
getById(id: number): Observable<Model> {
const url = `${this.baseUrl}/${id}`;
return this.http.get<ApiResult<Model>>(url, { withCredentials: true });
return this.http.get<Model>(url, { withCredentials: true });
}
create(createModel: Model): Observable<Model> {
return this.http.post<Model>(this.baseUrl, createModel, { withCredentials: true });
}
update(updateModel: Model): Observable<ApiResult<Model>> {
update(updateModel: Model): Observable<Model> {
const url = `${this.baseUrl}`;
return this.http.put<ApiResult<Model>>(url, updateModel, { withCredentials: true });
return this.http.put<Model>(url, updateModel, { withCredentials: true });
}
delete(id: number): Observable<ApiResult<any>> {
delete(id: number): Observable<any> {
const url = `${this.baseUrl}/${id}`;
return this.http.delete<ApiResult<any>>(url, { withCredentials: true });
return this.http.delete<any>(url, { withCredentials: true });
}
}

View File

@ -2,7 +2,6 @@ import { Inject, Injectable } from "@angular/core";
import { UserRep } from "../models/user-management.api.models";
import { ApiService } from "./user-management.api.service";
import { HttpClient, HttpParams } from "@angular/common/http";
import { ApiResult } from "../models/api.response.model";
import { Observable } from "rxjs";
@Injectable({
@ -13,7 +12,7 @@ export class UserRepService extends ApiService<UserRep> {
super(http, userRepUri)
}
override getAll(withUser: boolean = false, withRepGroup: boolean = false, withRightGroup: boolean = false, withRepUser: boolean = false, userId?: number): Observable<ApiResult<UserRep[]>> {
override getAll(withUser: boolean = false, withRepGroup: boolean = false, withRightGroup: boolean = false, withRepUser: boolean = false, userId?: number): Observable<UserRep[]> {
let params = new HttpParams();
if (withUser) {
params = params.set('withUser', withUser);
@ -31,6 +30,6 @@ export class UserRepService extends ApiService<UserRep> {
params = params.set('userId', userId)
}
return this.http.get<ApiResult<UserRep[]>>(`${this.baseUrl}`, { params: params, withCredentials: true });
return this.http.get<UserRep[]>(`${this.baseUrl}`, { params: params, withCredentials: true });
}
}

View File

@ -3,7 +3,6 @@ import { HttpClient } from '@angular/common/http';
import { DirUser, User } from '../models/user-management.api.models';
import { ApiService } from './user-management.api.service';
import { Observable } from 'rxjs';
import { ApiResult } from '../models/api.response.model';
@Injectable({
providedIn: 'root'
@ -13,14 +12,14 @@ export class UserService extends ApiService<User> {
super(http, userUri);
}
getByModuleId(moduleId: number, assigned: boolean = true): Observable<ApiResult<User[]>> {
getByModuleId(moduleId: number, assigned: boolean = true): Observable<User[]> {
const url = `${this.baseUrl}/ByModuleId/${moduleId}?assigned=${assigned}`;
return this.http.get<ApiResult<User[]>>(url, { withCredentials: true });
return this.http.get<User[]>(url, { withCredentials: true });
}
getByGroupId(groupId: number, assigned: boolean = true): Observable<ApiResult<User[]>> {
getByGroupId(groupId: number, assigned: boolean = true): Observable<User[]> {
const url = `${this.baseUrl}/ByGroupId/${groupId}?assigned=${assigned}`;
return this.http.get<ApiResult<User[]>>(url, { withCredentials: true });
return this.http.get<User[]>(url, { withCredentials: true });
}
createByDir(createModel: DirUser): Observable<DirUser> {