From 1f1ba118e99ebb32b45ca26439d3f42116d0b8f6 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 10 Jun 2021 14:59:36 +0200
Subject: [PATCH] OZG-767 impl user-profile at kommentar; add createdAt at
 kommentar

---
 .../src/lib/kommentar.linkrel.ts              |  3 +-
 ...mentar-list-item-in-vorgang.component.html | 12 +++---
 ...tar-list-item-in-vorgang.component.spec.ts |  4 +-
 .../kommentar/src/lib/kommentar.module.ts     |  4 +-
 .../header/header.component.spec.ts           |  2 +-
 .../src/lib/user-profile.model.ts             |  1 +
 .../src/lib/user-profile.repository.spec.ts   | 10 +++--
 .../src/lib/user-profile.repository.ts        |  7 ++--
 .../src/lib/user-profile.service.spec.ts      | 13 ++++---
 .../src/lib/user-profile.service.ts           | 24 ++++++------
 goofy-client/libs/user-profile/src/index.ts   |  3 +-
 .../user-icon-container.component.ts          |  2 +-
 ...file-in-kommentar-container.component.html |  9 +++++
 ...file-in-kommentar-container.component.scss |  0
 ...e-in-kommentar-container.component.spec.ts | 39 +++++++++++++++++++
 ...rofile-in-kommentar-container.component.ts | 27 +++++++++++++
 .../src/lib/user-profile.module.ts            |  7 +++-
 17 files changed, 127 insertions(+), 40 deletions(-)
 create mode 100644 goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.html
 create mode 100644 goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.scss
 create mode 100644 goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.spec.ts
 create mode 100644 goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.ts

diff --git a/goofy-client/libs/kommentar-shared/src/lib/kommentar.linkrel.ts b/goofy-client/libs/kommentar-shared/src/lib/kommentar.linkrel.ts
index 25191a37d5..6ab9742fd3 100644
--- a/goofy-client/libs/kommentar-shared/src/lib/kommentar.linkrel.ts
+++ b/goofy-client/libs/kommentar-shared/src/lib/kommentar.linkrel.ts
@@ -4,5 +4,6 @@ export enum KommentarListLinkRel {
 }
 
 export enum KommentarLinkRel {
-	EDIT = 'edit'
+	EDIT = 'edit',
+	CREATED_BY = 'createdBy'
 }
\ No newline at end of file
diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html
index 96d8609adb..ffe10301b3 100644
--- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html
+++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.html
@@ -1,16 +1,14 @@
-<p
-		*ngIf="!editMode"
-		[attr.data-test-id]="(kommentar.text | convertForDataTest)"
+<goofy-client-user-profile-in-kommentar-container [kommentar]="kommentar"></goofy-client-user-profile-in-kommentar-container>
+
+<p *ngIf="!editMode" [attr.data-test-id]="(kommentar.text | convertForDataTest)"
 		(click)="editMode = true"
 		tabindex="0"
 		class="plain-text">
 	{{ kommentar.text }}
 </p>
 
-<goofy-client-kommentar-form
-		*ngIf="editMode"
+<goofy-client-kommentar-form *ngIf="editMode" data-test-id="kommentar-list-item-form"
 		[kommentar]="kommentar"
 		(cancel)="editMode = false"
-		class="edit-text"
-		data-test-id="kommentar-list-item-form">
+		class="edit-text">
 </goofy-client-kommentar-form>
diff --git a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.spec.ts b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.spec.ts
index c14003efd9..4e743631de 100644
--- a/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.spec.ts
+++ b/goofy-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-list-in-vorgang/kommentar-list-item-in-vorgang/kommentar-list-item-in-vorgang.component.spec.ts
@@ -1,5 +1,6 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ConvertForDataTestPipe } from '@goofy-client/tech-shared';
+import { UserProfileInKommentarContainerComponent } from '@goofy-client/user-profile';
 import { createKommentarResource } from 'libs/kommentar-shared/test/kommentar';
 import { configureTestSuite } from 'ng-bullet';
 import { MockComponent } from 'ng-mocks';
@@ -15,7 +16,8 @@ describe('KommentarListItemInVorgangComponent', () => {
 			declarations: [
 				KommentarListItemInVorgangComponent,
 				ConvertForDataTestPipe,
-				MockComponent(KommentarFormComponent)
+				MockComponent(KommentarFormComponent),
+				MockComponent(UserProfileInKommentarContainerComponent)
 			]
 		})
 	})
diff --git a/goofy-client/libs/kommentar/src/lib/kommentar.module.ts b/goofy-client/libs/kommentar/src/lib/kommentar.module.ts
index 2a80bc985d..90373963a6 100644
--- a/goofy-client/libs/kommentar/src/lib/kommentar.module.ts
+++ b/goofy-client/libs/kommentar/src/lib/kommentar.module.ts
@@ -3,6 +3,7 @@ import { NgModule } from '@angular/core';
 import { KommentarSharedModule } from '@goofy-client/kommentar-shared';
 import { TechSharedModule } from '@goofy-client/tech-shared';
 import { UiModule } from '@goofy-client/ui';
+import { UserProfileModule } from '@goofy-client/user-profile';
 import { VorgangSharedModule } from '@goofy-client/vorgang-shared';
 import { KommentarFormComponent } from './kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component';
 import { KommentarListInVorgangContainerComponent } from './kommentar-list-in-vorgang-container/kommentar-list-in-vorgang-container.component';
@@ -15,7 +16,8 @@ import { KommentarListItemInVorgangComponent } from './kommentar-list-in-vorgang
 		VorgangSharedModule,
 		UiModule,
 		KommentarSharedModule,
-		TechSharedModule
+		TechSharedModule,
+		UserProfileModule
 	],
 	declarations: [
 		KommentarListInVorgangContainerComponent,
diff --git a/goofy-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts
index e7708d9066..6412f14e79 100644
--- a/goofy-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts
+++ b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.spec.ts
@@ -1,8 +1,8 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { RouterTestingModule } from '@angular/router/testing';
 import { UiModule } from '@goofy-client/ui';
+import { UserIconComponent } from '@goofy-client/user-profile';
 import { VorgangSearchContainerComponent } from '@goofy-client/vorgang-shared-ui';
-import { UserIconComponent } from 'libs/user-profile/src/lib/user-icon-container/user-icon/user-icon.component';
 import { configureTestSuite } from 'ng-bullet';
 import { MockComponent } from 'ng-mocks';
 import { HeaderComponent } from './header.component';
diff --git a/goofy-client/libs/user-profile-shared/src/lib/user-profile.model.ts b/goofy-client/libs/user-profile-shared/src/lib/user-profile.model.ts
index dd39120d4f..112c3da82e 100644
--- a/goofy-client/libs/user-profile-shared/src/lib/user-profile.model.ts
+++ b/goofy-client/libs/user-profile-shared/src/lib/user-profile.model.ts
@@ -2,6 +2,7 @@ import { ListResource } from "@goofy-client/tech-shared";
 import { Resource } from "@ngxp/rest";
 
 export interface UserProfile {
+	createdAt: Date;
 	firstName: string;
 	lastName: string;
 }
diff --git a/goofy-client/libs/user-profile-shared/src/lib/user-profile.repository.spec.ts b/goofy-client/libs/user-profile-shared/src/lib/user-profile.repository.spec.ts
index a062387a90..bdcd8466b9 100644
--- a/goofy-client/libs/user-profile-shared/src/lib/user-profile.repository.spec.ts
+++ b/goofy-client/libs/user-profile-shared/src/lib/user-profile.repository.spec.ts
@@ -32,20 +32,22 @@ describe('OzgFileRepository', () => {
 
 	describe('get user profile', () => {
 
+		const linkRel: string = VorgangHeaderLinkRel.ASSIGNED_TO;
+
 		it('should call resource factory', () => {
-			repository.getUserProfile(vorgang);
+			repository.getUserProfile(vorgang, linkRel);
 
 			expect(resourceFactory.from).toHaveBeenCalledWith(vorgang);
 		})
 
 		it('should get', () => {
-			repository.getUserProfile(vorgang);
+			repository.getUserProfile(vorgang, linkRel);
 
-			expect(resourceWrapper.get).toHaveBeenCalledWith(VorgangHeaderLinkRel.ASSIGNED_TO);
+			expect(resourceWrapper.get).toHaveBeenCalledWith(linkRel);
 		})
 
 		it('should return result', () => {
-			const result = repository.getUserProfile(vorgang);
+			const result = repository.getUserProfile(vorgang, linkRel);
 
 			expect(result).not.toBeNull();
 			expect(result).toBeObservable(hot('a', { a: userProfile }));
diff --git a/goofy-client/libs/user-profile-shared/src/lib/user-profile.repository.ts b/goofy-client/libs/user-profile-shared/src/lib/user-profile.repository.ts
index 2560d5452d..e25aea0fd2 100644
--- a/goofy-client/libs/user-profile-shared/src/lib/user-profile.repository.ts
+++ b/goofy-client/libs/user-profile-shared/src/lib/user-profile.repository.ts
@@ -1,7 +1,6 @@
 import { Injectable } from '@angular/core';
 import { ApiRootLinkRel, ApiRootResource } from '@goofy-client/api-root-shared';
-import { VorgangHeaderLinkRel, VorgangResource } from '@goofy-client/vorgang-shared';
-import { getUrl, ResourceFactory, ResourceUri } from '@ngxp/rest';
+import { getUrl, Resource, ResourceFactory, ResourceUri } from '@ngxp/rest';
 import { Observable } from 'rxjs';
 import { UserProfileListResource, UserProfileResource } from './user-profile.model';
 
@@ -12,8 +11,8 @@ export class UserProfileRepository {
 
 	constructor(private resourceFactory: ResourceFactory) { }
 
-	public getUserProfile(vorgang: VorgangResource): Observable<UserProfileResource> {
-		return this.resourceFactory.from(vorgang).get(VorgangHeaderLinkRel.ASSIGNED_TO);
+	public getUserProfile(resource: Resource, linkRel: string): Observable<UserProfileResource> {
+		return this.resourceFactory.from(resource).get(linkRel);
 	}
 
 	public search(apiRoot: ApiRootResource, searchBy: string): Observable<UserProfileListResource> {
diff --git a/goofy-client/libs/user-profile-shared/src/lib/user-profile.service.spec.ts b/goofy-client/libs/user-profile-shared/src/lib/user-profile.service.spec.ts
index eaace993a5..f6e4ba9068 100644
--- a/goofy-client/libs/user-profile-shared/src/lib/user-profile.service.spec.ts
+++ b/goofy-client/libs/user-profile-shared/src/lib/user-profile.service.spec.ts
@@ -23,7 +23,6 @@ describe('UserProfileService', () => {
 	const userProfileList: UserProfileListResource = createUserProfileListResource();
 	const apiRoot: ApiRootResource = createApiRootResource();
 
-
 	beforeEach(() => {
 		repository = mock(UserProfileRepository);
 		apiRootService = mock(ApiRootService);
@@ -40,22 +39,24 @@ describe('UserProfileService', () => {
 
 	describe('load user profile', () => {
 
+		const linkRel: string = VorgangHeaderLinkRel.ASSIGNED_TO;
+
 		beforeEach(() => {
 			repository.getUserProfile.mockReturnValue(of(userProfile));
-			service.createIfNotExist(getLink(vorgang, VorgangHeaderLinkRel.ASSIGNED_TO).href);
+			service.createIfNotExist(getLink(vorgang, linkRel).href);
 			service.updateUserProfile = jest.fn();
 		})
 
 		it('should call repository', () => {
-			service.loadUserProfile(vorgang);
+			service.loadUserProfile(vorgang, VorgangHeaderLinkRel.ASSIGNED_TO);
 
-			expect(repository.getUserProfile).toHaveBeenCalledWith(vorgang);
+			expect(repository.getUserProfile).toHaveBeenCalledWith(vorgang, linkRel);
 		})
 
 		it('should update value', () => {
-			service.loadUserProfile(vorgang);
+			service.loadUserProfile(vorgang, VorgangHeaderLinkRel.ASSIGNED_TO);
 
-			expect(service.updateUserProfile).toHaveBeenCalledWith(vorgang, userProfile);
+			expect(service.updateUserProfile).toHaveBeenCalledWith(vorgang, linkRel, userProfile);
 		})
 	})
 
diff --git a/goofy-client/libs/user-profile-shared/src/lib/user-profile.service.ts b/goofy-client/libs/user-profile-shared/src/lib/user-profile.service.ts
index be36b4bf39..1aed527daa 100644
--- a/goofy-client/libs/user-profile-shared/src/lib/user-profile.service.ts
+++ b/goofy-client/libs/user-profile-shared/src/lib/user-profile.service.ts
@@ -2,9 +2,9 @@ import { Injectable } from '@angular/core';
 import { Params } from '@angular/router';
 import { ApiRootService } from '@goofy-client/api-root-shared';
 import { createEmptyStateResource, createStateResource, doIfLoadingRequired, NavigationService, StateResource } from '@goofy-client/tech-shared';
-import { VorgangHeaderLinkRel, VorgangResource } from '@goofy-client/vorgang-shared';
+import { VorgangService } from '@goofy-client/vorgang-shared';
 import { getLink } from '@ngxp/rest';
-import { ResourceUri } from '@ngxp/rest/lib/resource.model';
+import { Resource, ResourceUri } from '@ngxp/rest/lib/resource.model';
 import { isNil } from 'lodash-es';
 import { BehaviorSubject, Observable, Subscription } from 'rxjs';
 import { filter, first, flatMap } from 'rxjs/operators';
@@ -35,6 +35,8 @@ export class UserProfileService {
 		if (NavigationService.isVorgangListPage(params)) {
 			this.userProfiles = <any>{};
 			this.hideUserProfileSearch();
+		} else if (NavigationService.isVorgangDetailPage(params, VorgangService.VORGANG_WITH_EINGANG_URL)) {
+			this.userProfiles = <any>{};
 		}
 	}
 
@@ -51,14 +53,14 @@ export class UserProfileService {
 		this.userProfileSearchList.next(createEmptyStateResource());
 	}
 
-	public getAssignedUserProfile(vorgang: VorgangResource): Observable<StateResource<UserProfileResource>> {
-		const uri: ResourceUri = this.getUserProfileUri(vorgang);
+	public getAssignedUserProfile(vorgang: Resource, linkRel: string): Observable<StateResource<UserProfileResource>> {
+		const uri: ResourceUri = this.getUserProfileUri(vorgang, linkRel);
 
 		this.createIfNotExist(uri);
 
 		doIfLoadingRequired(this.userProfiles[uri].value, () => {
 			this.userProfiles[uri].next({ ...this.userProfiles[uri].value, loading: true });
-			this.loadUserProfile(vorgang)
+			this.loadUserProfile(vorgang, linkRel)
 		});
 		return this.userProfiles[uri].asObservable();
 	}
@@ -67,16 +69,16 @@ export class UserProfileService {
 		if (isNil(this.userProfiles[uri])) this.userProfiles[uri] = new BehaviorSubject(createEmptyStateResource<UserProfileResource>());
 	}
 
-	loadUserProfile(vorgang: VorgangResource): void {
-		this.repository.getUserProfile(vorgang).pipe(first()).subscribe((userProfile: UserProfileResource) => this.updateUserProfile(vorgang, userProfile));
+	loadUserProfile(vorgang: Resource, linkRel: string): void {
+		this.repository.getUserProfile(vorgang, linkRel).pipe(first()).subscribe((userProfile: UserProfileResource) => this.updateUserProfile(vorgang, linkRel, userProfile));
 	}
 
-	updateUserProfile(vorgang: VorgangResource, userProfile: UserProfileResource): void {
-		this.userProfiles[this.getUserProfileUri(vorgang)].next(createStateResource(userProfile));
+	updateUserProfile(vorgang: Resource, linkRel: string, userProfile: UserProfileResource): void {
+		this.userProfiles[this.getUserProfileUri(vorgang, linkRel)].next(createStateResource(userProfile));
 	}
 
-	private getUserProfileUri(vorgang: VorgangResource): ResourceUri {
-		return getLink(vorgang, VorgangHeaderLinkRel.ASSIGNED_TO).href;
+	private getUserProfileUri(vorgang: Resource, linkRel: string): ResourceUri {
+		return getLink(vorgang, linkRel).href;
 	}
 
 	public getSearchedUserProfiles(): Observable<StateResource<UserProfileListResource>> {
diff --git a/goofy-client/libs/user-profile/src/index.ts b/goofy-client/libs/user-profile/src/index.ts
index 53cc4bd833..facb99e49b 100644
--- a/goofy-client/libs/user-profile/src/index.ts
+++ b/goofy-client/libs/user-profile/src/index.ts
@@ -1,4 +1,5 @@
 export * from './lib/assign-user-profile-button-container/assign-user-profile-button-container.component';
 export * from './lib/user-icon-container/user-icon-container.component';
+export * from './lib/user-icon-container/user-icon/user-icon.component';
+export * from './lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component';
 export * from './lib/user-profile.module';
-
diff --git a/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.ts b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.ts
index 3d33150259..0f079815cd 100644
--- a/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.ts
+++ b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.ts
@@ -46,7 +46,7 @@ export class UserIconContainerComponent implements OnChanges, AfterContentInit {
 
 	ngOnChanges(changes: SimpleChanges): void {
 		if (changes.vorgang && !isNil(this.vorgang) && hasLink(this.vorgang, VorgangHeaderLinkRel.ASSIGNED_TO)) {
-			this.userProfile$ = this.userProfileService.getAssignedUserProfile(this.vorgang);
+			this.userProfile$ = this.userProfileService.getAssignedUserProfile(this.vorgang, VorgangHeaderLinkRel.ASSIGNED_TO);
 		}
 	}
 
diff --git a/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.html b/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.html
new file mode 100644
index 0000000000..748d1d823f
--- /dev/null
+++ b/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.html
@@ -0,0 +1,9 @@
+<ng-container *ngIf="userProfileStateResource$ | async as userProfileStateResource">
+	<goofy-client-user-icon [userProfileStateResource]="userProfileStateResource"></goofy-client-user-icon>
+
+	<div *ngIf="userProfileStateResource.resource">
+		<span>{{userProfileStateResource.resource.firstName}} {{userProfileStateResource.resource.lastName}}</span>
+		<span>{{userProfileStateResource.resource.createdAt }}</span>
+	</div>
+
+</ng-container>
\ No newline at end of file
diff --git a/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.scss b/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.spec.ts b/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.spec.ts
new file mode 100644
index 0000000000..3a05a3d3f9
--- /dev/null
+++ b/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.spec.ts
@@ -0,0 +1,39 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { mock } from '@goofy-client/test-utils';
+import { UserProfileService } from '@goofy-client/user-profile-shared';
+import { configureTestSuite } from 'ng-bullet';
+import { MockComponent } from 'ng-mocks';
+import { UserIconComponent } from '../user-icon-container/user-icon/user-icon.component';
+import { UserProfileInKommentarContainerComponent } from './user-profile-in-kommentar-container.component';
+
+describe('UserProfileInKommentarContainerComponent', () => {
+	let component: UserProfileInKommentarContainerComponent;
+	let fixture: ComponentFixture<UserProfileInKommentarContainerComponent>;
+
+	const userProfileService = mock(UserProfileService);
+
+	configureTestSuite(() => {
+		TestBed.configureTestingModule({
+			declarations: [
+				UserProfileInKommentarContainerComponent,
+				MockComponent(UserIconComponent)
+			],
+			providers: [
+				{
+					provide: UserProfileService,
+					useValue: userProfileService
+				}
+			]
+		})
+	})
+
+	beforeEach(() => {
+		fixture = TestBed.createComponent(UserProfileInKommentarContainerComponent);
+		component = fixture.componentInstance;
+		fixture.detectChanges();
+	});
+
+	it('should create', () => {
+		expect(component).toBeTruthy();
+	});
+});
\ No newline at end of file
diff --git a/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.ts b/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.ts
new file mode 100644
index 0000000000..6d7331ed09
--- /dev/null
+++ b/goofy-client/libs/user-profile/src/lib/user-profile-in-kommentar-container/user-profile-in-kommentar-container.component.ts
@@ -0,0 +1,27 @@
+import { Component, Input, OnChanges } from '@angular/core';
+import { KommentarResource } from '@goofy-client/kommentar-shared';
+import { StateResource } from '@goofy-client/tech-shared';
+import { UserProfileResource, UserProfileService } from '@goofy-client/user-profile-shared';
+import { KommentarLinkRel } from 'libs/kommentar-shared/src/lib/kommentar.linkrel';
+import { isNil } from 'lodash-es';
+import { Observable } from 'rxjs';
+
+@Component({
+	selector: 'goofy-client-user-profile-in-kommentar-container',
+	templateUrl: './user-profile-in-kommentar-container.component.html',
+	styleUrls: ['./user-profile-in-kommentar-container.component.scss']
+})
+export class UserProfileInKommentarContainerComponent implements OnChanges {
+
+	@Input() kommentar: KommentarResource;
+
+	userProfileStateResource$: Observable<StateResource<UserProfileResource>>;
+
+	constructor(private userProfileService: UserProfileService) { }
+
+	ngOnChanges(): void {
+		if (!isNil(this.kommentar)) {
+			this.userProfileStateResource$ = this.userProfileService.getAssignedUserProfile(this.kommentar, KommentarLinkRel.CREATED_BY);
+		}
+	}
+}
\ No newline at end of file
diff --git a/goofy-client/libs/user-profile/src/lib/user-profile.module.ts b/goofy-client/libs/user-profile/src/lib/user-profile.module.ts
index f7e615ee55..4c5b4d2b46 100644
--- a/goofy-client/libs/user-profile/src/lib/user-profile.module.ts
+++ b/goofy-client/libs/user-profile/src/lib/user-profile.module.ts
@@ -6,6 +6,7 @@ import { UserProfileSharedModule } from '@goofy-client/user-profile-shared';
 import { AssignUserProfileButtonContainerComponent } from './assign-user-profile-button-container/assign-user-profile-button-container.component';
 import { UserIconContainerComponent } from './user-icon-container/user-icon-container.component';
 import { UserIconComponent } from './user-icon-container/user-icon/user-icon.component';
+import { UserProfileInKommentarContainerComponent } from './user-profile-in-kommentar-container/user-profile-in-kommentar-container.component';
 import { UserProfileSearchContainerComponent } from './user-profile-search-container/user-profile-search-container.component';
 import { UserProfileSearchComponent } from './user-profile-search-container/user-profile-search/user-profile-search.component';
 
@@ -21,12 +22,14 @@ import { UserProfileSearchComponent } from './user-profile-search-container/user
 		UserIconContainerComponent,
 		UserProfileSearchComponent,
 		UserProfileSearchContainerComponent,
-		AssignUserProfileButtonContainerComponent
+		AssignUserProfileButtonContainerComponent,
+		UserProfileInKommentarContainerComponent
 	],
 	exports: [
 		UserIconContainerComponent,
 		UserIconComponent,
-		AssignUserProfileButtonContainerComponent
+		AssignUserProfileButtonContainerComponent,
+		UserProfileInKommentarContainerComponent
 	]
 })
 export class UserProfileModule { }
-- 
GitLab