From 97f07bc72d04289591ac77d8c3f62f1fb1b9282a Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Fri, 6 Sep 2024 11:32:39 +0200 Subject: [PATCH] =?UTF-8?q?feat(envelope):=20ReceiverStatusTable-Komponent?= =?UTF-8?q?e=20unter=20Envelope-Tabelle=20hinzugef=C3=BCgt=20und=20Backend?= =?UTF-8?q?-Unterst=C3=BCtzung=20integriert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ReceiverStatusTableComponent als Unterkomponente der EnvelopeTable erstellt, um Empfängerstatus anzuzeigen. - ReceiverStatusTable in EnvelopeTable mit Tabs und dynamischem Datenladen integriert. - EnvelopeTable angepasst, um Empfängerdaten über den EnvelopeReceiverService abzurufen und in ReceiverStatusTable anzuzeigen. - Backend aktualisiert, um das Abrufen von Umschlägen nach Benutzer zu unterstützen: - `ReadByUserAsync`-Methode im Envelope-Repository hinzugefügt, um Umschläge für einen bestimmten Benutzer abzufragen. - Servicemethode implementiert, um die abgefragten Umschläge in DTOs zu konvertieren und das Ergebnis zurückzugeben. --- .../Contracts/IEnvelopeService.cs | 3 ++- .../Services/EnvelopeService.cs | 11 +++++--- .../envelope-table.component.ts | 27 ++++++++----------- .../receiver-status-table.component.html | 2 +- .../receiver-status-table.component.ts | 9 +++++-- .../Controllers/EnvelopeController.cs | 2 +- .../Contracts/IEnvelopeRepository.cs | 2 ++ .../Repositories/EnvelopeRepository.cs | 8 +++--- 8 files changed, 37 insertions(+), 27 deletions(-) diff --git a/EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs b/EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs index 4a01e53d..ab3d69af 100644 --- a/EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs +++ b/EnvelopeGenerator.Application/Contracts/IEnvelopeService.cs @@ -2,7 +2,6 @@ using DigitalData.Core.DTO; using EnvelopeGenerator.Application.DTOs; using EnvelopeGenerator.Domain.Entities; -using EnvelopeGenerator.Infrastructure.Contracts; namespace EnvelopeGenerator.Application.Contracts { @@ -11,5 +10,7 @@ namespace EnvelopeGenerator.Application.Contracts Task>> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false); Task> ReadByUuidAsync(string uuid, bool withDocuments = false, bool withHistory = false, bool withDocumentReceiverElement = false, bool withUser = false, bool withAll = false); + + Task>> ReadByUserAsync(int userId); } } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/Services/EnvelopeService.cs b/EnvelopeGenerator.Application/Services/EnvelopeService.cs index c7e373d8..eed74207 100644 --- a/EnvelopeGenerator.Application/Services/EnvelopeService.cs +++ b/EnvelopeGenerator.Application/Services/EnvelopeService.cs @@ -3,16 +3,14 @@ using DigitalData.Core.Application; using DigitalData.Core.DTO; using EnvelopeGenerator.Application.Contracts; using EnvelopeGenerator.Application.DTOs; -using EnvelopeGenerator.Application.Resources; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Infrastructure.Contracts; -using Microsoft.Extensions.Logging; namespace EnvelopeGenerator.Application.Services { public class EnvelopeService : BasicCRUDService, IEnvelopeService { - public EnvelopeService(IEnvelopeRepository repository, IMapper mapper, ILogger logger) + public EnvelopeService(IEnvelopeRepository repository, IMapper mapper) : base(repository, mapper) { } @@ -34,5 +32,12 @@ namespace EnvelopeGenerator.Application.Services var readDto = _mapper.MapOrThrow(envelope); return Result.Success(readDto); } + + public async Task>> ReadByUserAsync(int userId) + { + var users = await _repository.ReadByUserAsync(userId: userId); + var readDto = _mapper.MapOrThrow>(users); + return Result.Success(readDto); + } } } \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.ts index e79219ff..cde803d6 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/envelope-table/envelope-table.component.ts @@ -1,5 +1,4 @@ import { AfterViewInit, Component, Input, ViewChild, inject, viewChild } from '@angular/core'; -import { EnvelopeReceiverService } from '../../../services/envelope-receiver.service'; import { EnvelopeService } from '../../../services/envelope.service'; import { animate, state, style, transition, trigger } from '@angular/animations'; import { ConfigurationService } from '../../../services/configuration.service'; @@ -7,6 +6,7 @@ import { DDTable } from "../dd-table/dd-table.component"; import { ClearableInputComponent } from '../../clearable-input/clearable-input.component' import { MatTabsModule } from '@angular/material/tabs'; import { ReceiverStatusTableComponent } from "../receiver-status-table/receiver-status-table.component"; +import { EnvelopeReceiverService } from '../../../services/envelope-receiver.service'; @Component({ selector: 'envelope-table', @@ -26,24 +26,20 @@ export class EnvelopeTableComponent implements AfterViewInit { @Input() options?: { min_status?: number; max_status?: number; ignore_status?: number[] } - displayedColumns: string[] = ['title', 'status', 'type', 'privateMessage', 'addedWhen']; + displayedColumns: string[] = ['title', 'status', 'type', 'addedWhen']; schema: Record any; }> = { 'title': { header: 'Title', - field: (element: any) => element.envelope.title + field: (element: any) => element.title }, 'status': { header: 'Status', - field: (element: any) => element.envelope.statusName + field: (element: any) => element.statusName }, 'type': { header: 'Type', - field: (element: any) => this.config.envelopeTypeTitles[element.envelope.contractType - 1] - }, - 'privateMessage': { - header: 'Private Message', - field: (element: any) => element.privateMessage + field: (element: any) => this.config.envelopeTypeTitles[element.contractType - 1] }, 'addedWhen': { header: 'Added When', @@ -53,20 +49,19 @@ export class EnvelopeTableComponent implements AfterViewInit { data: any[] = []; - @ViewChild(ClearableInputComponent) input!: ClearableInputComponent + @ViewChild(ReceiverStatusTableComponent) rsTable!: ReceiverStatusTableComponent onToggleExpandedRow(element: any, event: Event) { - console.log(element) } - private erService: EnvelopeReceiverService = inject(EnvelopeReceiverService); - - private envService: EnvelopeService = inject(EnvelopeService); + private eService: EnvelopeService = inject(EnvelopeService); private config: ConfigurationService = inject(ConfigurationService); + private readonly erService: EnvelopeReceiverService = inject(EnvelopeReceiverService); + async ngAfterViewInit() { - this.data = await this.erService.getEnvelopeReceiverAsync(this.options); - await this.envService.getEnvelopeAsync().then(console.log) + this.data = await this.eService.getEnvelopeAsync(); + this.rsTable.data = await this.erService.getEnvelopeReceiverAsync(); } } \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.html b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.html index 5c161b1a..73206709 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.html +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.html @@ -1 +1 @@ -

receiver-status-table works!

+ \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.ts b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.ts index 361e9c79..860f3aaa 100644 --- a/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.ts +++ b/EnvelopeGenerator.GeneratorAPI/ClientApp/envelope-generator-ui/src/app/components/tables/receiver-status-table/receiver-status-table.component.ts @@ -1,12 +1,17 @@ -import { Component } from '@angular/core'; +import { Component, inject } from '@angular/core'; +import { DDTable } from '../dd-table/dd-table.component' @Component({ selector: 'receiver-status-table', standalone: true, - imports: [], + imports: [DDTable], templateUrl: './receiver-status-table.component.html', styleUrl: './receiver-status-table.component.scss' }) export class ReceiverStatusTableComponent { + data: any[] = []; + schema = {}; + + columnsToDisplay: string[] = []; } \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs index 0ebe72d6..16edc7f3 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs @@ -26,7 +26,7 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers try { if (User.GetId() is int intId) - return await _envelopeService.ReadByIdAsync(intId).ThenAsync( + return await _envelopeService.ReadByUserAsync(intId).ThenAsync( Success: Ok, Fail: IActionResult (msg, ntc) => { diff --git a/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeRepository.cs b/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeRepository.cs index d2d1377f..4eaddd94 100644 --- a/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Contracts/IEnvelopeRepository.cs @@ -8,5 +8,7 @@ namespace EnvelopeGenerator.Infrastructure.Contracts Task> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false); Task ReadByUuidAsync(string uuid, bool withDocuments = false, bool withHistory = false, bool withDocumentReceiverElement = false, bool withUser = false, bool withAll = false); + + Task> ReadByUserAsync(int userId); } } \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/Repositories/EnvelopeRepository.cs b/EnvelopeGenerator.Infrastructure/Repositories/EnvelopeRepository.cs index 73ac63a0..ae645c2b 100644 --- a/EnvelopeGenerator.Infrastructure/Repositories/EnvelopeRepository.cs +++ b/EnvelopeGenerator.Infrastructure/Repositories/EnvelopeRepository.cs @@ -1,5 +1,4 @@ using DigitalData.Core.Infrastructure; -using DigitalData.UserManager.Infrastructure.Repositories; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore; @@ -14,7 +13,7 @@ namespace EnvelopeGenerator.Infrastructure.Repositories public async Task> ReadAllWithAsync(bool documents = false, bool history = false, bool documentReceiverElement = false) { - var query = _dbSet.AsQueryable(); + var query = _dbSet.AsNoTracking(); if (documents) if (documentReceiverElement) @@ -30,7 +29,7 @@ namespace EnvelopeGenerator.Infrastructure.Repositories public async Task ReadByUuidAsync(string uuid, bool withDocuments = false, bool withHistory = false, bool withDocumentReceiverElement = false, bool withUser = false, bool withAll = false) { - var query = _dbSet.Where(e => e.Uuid == uuid); + var query = _dbSet.AsNoTracking().Where(e => e.Uuid == uuid); if (withAll || withDocuments) if (withAll || withDocumentReceiverElement) @@ -46,5 +45,8 @@ namespace EnvelopeGenerator.Infrastructure.Repositories return await query.FirstOrDefaultAsync(); } + + public async Task> ReadByUserAsync(int userId) => await _dbSet.AsNoTracking() + .Where(e => e.UserId == userId).ToListAsync(); } } \ No newline at end of file