From b5031afce0773fde6957c7c72ba5cc453e851e34 Mon Sep 17 00:00:00 2001 From: Bernd Heidemann Date: Wed, 4 Sep 2024 12:05:49 +0200 Subject: [PATCH] first --- README.md | 6 +- angular.json | 3 + docker/docker-compose.yml | 31 ++ getBearerToken.http | 4 + package.json | 2 +- src/app/Employee.ts | 10 + src/app/app.component.html | 336 +----------------- src/app/app.component.spec.ts | 6 +- src/app/app.component.ts | 6 +- src/app/app.config.ts | 4 +- .../employee-list/employee-list.component.css | 0 .../employee-list.component.html | 9 + .../employee-list.component.spec.ts | 23 ++ .../employee-list/employee-list.component.ts | 30 ++ src/assets/.gitkeep | 0 src/favicon.ico | Bin 0 -> 15086 bytes src/index.html | 2 +- src/proxy.conf.json | 11 + 18 files changed, 136 insertions(+), 347 deletions(-) create mode 100644 docker/docker-compose.yml create mode 100644 getBearerToken.http create mode 100644 src/app/Employee.ts create mode 100644 src/app/employee-list/employee-list.component.css create mode 100644 src/app/employee-list/employee-list.component.html create mode 100644 src/app/employee-list/employee-list.component.spec.ts create mode 100644 src/app/employee-list/employee-list.component.ts create mode 100644 src/assets/.gitkeep create mode 100644 src/favicon.ico create mode 100644 src/proxy.conf.json diff --git a/README.md b/README.md index df08c33..3806a0b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Lf10Starter2024 +# Lf10StarterNew -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.2. +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.0.3. ## Development server @@ -24,4 +24,4 @@ Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To u ## Further help -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/angular.json b/angular.json index 64f0edf..988421e 100644 --- a/angular.json +++ b/angular.json @@ -92,5 +92,8 @@ } } } + }, + "cli": { + "analytics": "33c8483f-3876-4eb5-9c9b-1001cab9b273" } } diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..a83a1d8 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3' + +volumes: + employee_postgres_data: + driver: local + +services: + postgres-employee: + container_name: postgres_employee + image: postgres:13.3 + volumes: + - employee_postgres_data:/var/lib/postgresql/data + environment: + POSTGRES_DB: employee_db + POSTGRES_USER: employee + POSTGRES_PASSWORD: secret + ports: + - "5432:5432" + + employee: + container_name: employee + image: berndheidemann/employee-management-service:1.0.4 + # image: berndheidemann/employee-management-service_without_keycloak:1.1 + environment: + spring.datasource.url: jdbc:postgresql://postgres-employee:5432/employee_db + spring.datasource.username: employee + spring.datasource.password: secret + ports: + - "8089:8089" + depends_on: + - postgres-employee diff --git a/getBearerToken.http b/getBearerToken.http new file mode 100644 index 0000000..e0429d9 --- /dev/null +++ b/getBearerToken.http @@ -0,0 +1,4 @@ +POST http://authproxy.szut.dev +Content-Type: application/x-www-form-urlencoded + +grant_type=password&client_id=employee-management-service&username=user&password=test diff --git a/package.json b/package.json index a8fa32a..68757f0 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "scripts": { "ng": "ng", - "start": "ng serve", + "start": "ng serve --proxy-config src/proxy.conf.json", "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test" diff --git a/src/app/Employee.ts b/src/app/Employee.ts new file mode 100644 index 0000000..1debefc --- /dev/null +++ b/src/app/Employee.ts @@ -0,0 +1,10 @@ +export class Employee { + constructor(public id?: number, + public lastName?: string, + public firstName?: string, + public street?: string, + public postcode?: string, + public city?: string, + public phone?: string) { + } +} diff --git a/src/app/app.component.html b/src/app/app.component.html index 36093e1..7e4c070 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,336 +1,2 @@ - - - - - - - - + - - -
-
-
- -

Hello, {{ title }}

-

Congratulations! Your app is running. 🎉

-
- -
-
- @for (item of [ - { title: 'Explore the Docs', link: 'https://angular.dev' }, - { title: 'Learn with Tutorials', link: 'https://angular.dev/tutorials' }, - { title: 'CLI Docs', link: 'https://angular.dev/tools/cli' }, - { title: 'Angular Language Service', link: 'https://angular.dev/tools/language-service' }, - { title: 'Angular DevTools', link: 'https://angular.dev/tools/devtools' }, - ]; track item.title) { - - {{ item.title }} - - - - - } -
- -
-
-
- - - - - - - - - - - diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index 9610d39..bc98df0 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -14,16 +14,16 @@ describe('AppComponent', () => { expect(app).toBeTruthy(); }); - it(`should have the 'lf10Starter2024' title`, () => { + it(`should have the 'lf10StarterNew' title`, () => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.componentInstance; - expect(app.title).toEqual('lf10Starter2024'); + expect(app.title).toEqual('lf10StarterNew'); }); it('should render title', () => { const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('h1')?.textContent).toContain('Hello, lf10Starter2024'); + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, lf10StarterNew'); }); }); diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 5e08f6e..593c1d8 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,13 +1,15 @@ import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { RouterOutlet } from '@angular/router'; +import {EmployeeListComponent} from "./employee-list/employee-list.component"; @Component({ selector: 'app-root', standalone: true, - imports: [RouterOutlet], + imports: [CommonModule, EmployeeListComponent], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { - title = 'lf10Starter2024'; + title = 'lf10StarterNew'; } diff --git a/src/app/app.config.ts b/src/app/app.config.ts index a1e7d6f..6c6ef60 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -1,8 +1,8 @@ -import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; +import { ApplicationConfig } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { - providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)] + providers: [provideRouter(routes)] }; diff --git a/src/app/employee-list/employee-list.component.css b/src/app/employee-list/employee-list.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/employee-list/employee-list.component.html b/src/app/employee-list/employee-list.component.html new file mode 100644 index 0000000..217b9d0 --- /dev/null +++ b/src/app/employee-list/employee-list.component.html @@ -0,0 +1,9 @@ +

LF10-Starter

+Wenn Sie in der EmployeeListComponent.ts ein gültiges Bearer-Token eintragen, sollten hier die Namen der in der Datenbank gespeicherten Mitarbeiter angezeigt werden! + diff --git a/src/app/employee-list/employee-list.component.spec.ts b/src/app/employee-list/employee-list.component.spec.ts new file mode 100644 index 0000000..081f497 --- /dev/null +++ b/src/app/employee-list/employee-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EmployeeListComponent } from './employee-list.component'; + +describe('EmployeeListComponent', () => { + let component: EmployeeListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [EmployeeListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(EmployeeListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/employee-list/employee-list.component.ts b/src/app/employee-list/employee-list.component.ts new file mode 100644 index 0000000..b9684f0 --- /dev/null +++ b/src/app/employee-list/employee-list.component.ts @@ -0,0 +1,30 @@ +import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import {Observable, of} from "rxjs"; +import {HttpClient, HttpClientModule, HttpHeaders} from "@angular/common/http"; +import {Employee} from "../Employee"; + +@Component({ + selector: 'app-employee-list', + standalone: true, + imports: [CommonModule, HttpClientModule], + templateUrl: './employee-list.component.html', + styleUrl: './employee-list.component.css' +}) +export class EmployeeListComponent { + bearer = 'eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIzUFQ0dldiNno5MnlQWk1EWnBqT1U0RjFVN0lwNi1ELUlqQWVGczJPbGU0In0.eyJleHAiOjE3MjU0NDQ5ODYsImlhdCI6MTcyNTQ0MTM4NiwianRpIjoiYzVhOTg4YzgtMWM0OC00MWRmLWIyODYtZjIzMTdkMmMwZjA4IiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay5zenV0LmRldi9hdXRoL3JlYWxtcy9zenV0IiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjU1NDZjZDIxLTk4NTQtNDMyZi1hNDY3LTRkZTNlZWRmNTg4OSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImVtcGxveWVlLW1hbmFnZW1lbnQtc2VydmljZSIsInNlc3Npb25fc3RhdGUiOiIyYmNlZTA0Zi1lNmUwLTQxM2MtYWE4OS02Yzc4NTJhNTk2OWQiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbImh0dHA6Ly9sb2NhbGhvc3Q6NDIwMCJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsicHJvZHVjdF9vd25lciIsIm9mZmxpbmVfYWNjZXNzIiwiZGVmYXVsdC1yb2xlcy1zenV0IiwidW1hX2F1dGhvcml6YXRpb24iLCJ1c2VyIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJlbWFpbCBwcm9maWxlIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInByZWZlcnJlZF91c2VybmFtZSI6InVzZXIifQ.UGHmGv2-sLLoHIuTusQ1OrPk0Jh_guDNtCREHsDntw49OvRamRYR8LvPp6GjXduyknY2HtFRTomWSWYItCRFfCoeyg9s4Umbo79uVJ7RYsNvMKYmM_6vyCHIOqT-5wEgECQzjR_F5aaa5F5IJERBcRuyf3BXfypS2w0yGqb7TLN99x8JF54J1DR_p9ejJJTKdrN19917a0WiQugh4Oj_xrRjjphwKGgfNkxSmVnpaPtHu1xHcIp-1BtSQx-2S_kSUMTCDURsI7brGAyRfhjRAgXi4GCDqz6-lbh7UZE2v8jEuZ1UR3RSipYJpdVRSTRD-VNdfqm9J4fsz_jtDOvCIg'; + employees$: Observable; + + constructor(private http: HttpClient) { + this.employees$ = of([]); + this.fetchData(); + } + + fetchData() { + this.employees$ = this.http.get('/backend/employees', { + headers: new HttpHeaders() + .set('Content-Type', 'application/json') + .set('Authorization', `Bearer ${this.bearer}`) + }); + } +} diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 zcmd^G33O9Omi+`8$@{|M-I6TH3wzF-p5CV8o}7f~KxR60LK+ApEFB<$bcciv%@SmA zV{n>g85YMFFeU*Uvl=i4v)C*qgnb;$GQ=3XTe9{Y%c`mO%su)noNCCQ*@t1WXn|B(hQ7i~ zrUK8|pUkD6#lNo!bt$6)jR!&C?`P5G(`e((P($RaLeq+o0Vd~f11;qB05kdbAOm?r zXv~GYr_sibQO9NGTCdT;+G(!{4Xs@4fPak8#L8PjgJwcs-Mm#nR_Z0s&u?nDX5^~@ z+A6?}g0|=4e_LoE69pPFO`yCD@BCjgKpzMH0O4Xs{Ahc?K3HC5;l=f zg>}alhBXX&);z$E-wai+9TTRtBX-bWYY@cl$@YN#gMd~tM_5lj6W%8ah4;uZ;jP@Q zVbuel1rPA?2@x9Y+u?e`l{Z4ngfG5q5BLH5QsEu4GVpt{KIp1?U)=3+KQ;%7ec8l* zdV=zZgN5>O3G(3L2fqj3;oBbZZw$Ij@`Juz@?+yy#OPw)>#wsTewVgTK9BGt5AbZ&?K&B3GVF&yu?@(Xj3fR3n+ZP0%+wo)D9_xp>Z$`A4 zfV>}NWjO#3lqumR0`gvnffd9Ka}JJMuHS&|55-*mCD#8e^anA<+sFZVaJe7{=p*oX zE_Uv?1>e~ga=seYzh{9P+n5<+7&9}&(kwqSaz;1aD|YM3HBiy<))4~QJSIryyqp| z8nGc(8>3(_nEI4n)n7j(&d4idW1tVLjZ7QbNLXg;LB ziHsS5pXHEjGJZb59KcvS~wv;uZR-+4qEqow`;JCfB*+b^UL^3!?;-^F%yt=VjU|v z39SSqKcRu_NVvz!zJzL0CceJaS6%!(eMshPv_0U5G`~!a#I$qI5Ic(>IONej@aH=f z)($TAT#1I{iCS4f{D2+ApS=$3E7}5=+y(rA9mM#;Cky%b*Gi0KfFA`ofKTzu`AV-9 znW|y@19rrZ*!N2AvDi<_ZeR3O2R{#dh1#3-d%$k${Rx42h+i&GZo5!C^dSL34*AKp z27mTd>k>?V&X;Nl%GZ(>0s`1UN~Hfyj>KPjtnc|)xM@{H_B9rNr~LuH`Gr5_am&Ep zTjZA8hljNj5H1Ipm-uD9rC}U{-vR!eay5&6x6FkfupdpT*84MVwGpdd(}ib)zZ3Ky z7C$pnjc82(W_y_F{PhYj?o!@3__UUvpX)v69aBSzYj3 zdi}YQkKs^SyXyFG2LTRz9{(w}y~!`{EuAaUr6G1M{*%c+kP1olW9z23dSH!G4_HSK zzae-DF$OGR{ofP*!$a(r^5Go>I3SObVI6FLY)N@o<*gl0&kLo-OT{Tl*7nCz>Iq=? zcigIDHtj|H;6sR?or8Wd_a4996GI*CXGU}o;D9`^FM!AT1pBY~?|4h^61BY#_yIfO zKO?E0 zJ{Pc`9rVEI&$xxXu`<5E)&+m(7zX^v0rqofLs&bnQT(1baQkAr^kEsk)15vlzAZ-l z@OO9RF<+IiJ*O@HE256gCt!bF=NM*vh|WVWmjVawcNoksRTMvR03H{p@cjwKh(CL4 z7_PB(dM=kO)!s4fW!1p0f93YN@?ZSG` z$B!JaAJCtW$B97}HNO9(x-t30&E}Mo1UPi@Av%uHj~?T|!4JLwV;KCx8xO#b9IlUW zI6+{a@Wj|<2Y=U;a@vXbxqZNngH8^}LleE_4*0&O7#3iGxfJ%Id>+sb;7{L=aIic8 z|EW|{{S)J-wr@;3PmlxRXU8!e2gm_%s|ReH!reFcY8%$Hl4M5>;6^UDUUae?kOy#h zk~6Ee_@ZAn48Bab__^bNmQ~+k=02jz)e0d9Z3>G?RGG!65?d1>9}7iG17?P*=GUV-#SbLRw)Hu{zx*azHxWkGNTWl@HeWjA?39Ia|sCi{e;!^`1Oec zb>Z|b65OM*;eC=ZLSy?_fg$&^2xI>qSLA2G*$nA3GEnp3$N-)46`|36m*sc#4%C|h zBN<2U;7k>&G_wL4=Ve5z`ubVD&*Hxi)r@{4RCDw7U_D`lbC(9&pG5C*z#W>8>HU)h z!h3g?2UL&sS!oY5$3?VlA0Me9W5e~V;2jds*fz^updz#AJ%G8w2V}AEE?E^=MK%Xt z__Bx1cr7+DQmuHmzn*|hh%~eEc9@m05@clWfpEFcr+06%0&dZJH&@8^&@*$qR@}o3 z@Tuuh2FsLz^zH+dN&T&?0G3I?MpmYJ;GP$J!EzjeM#YLJ!W$}MVNb0^HfOA>5Fe~UNn%Zk(PT@~9}1dt)1UQ zU*B5K?Dl#G74qmg|2>^>0WtLX#Jz{lO4NT`NYB*(L#D|5IpXr9v&7a@YsGp3vLR7L zHYGHZg7{ie6n~2p$6Yz>=^cEg7tEgk-1YRl%-s7^cbqFb(U7&Dp78+&ut5!Tn(hER z|Gp4Ed@CnOPeAe|N>U(dB;SZ?NU^AzoD^UAH_vamp6Ws}{|mSq`^+VP1g~2B{%N-!mWz<`)G)>V-<`9`L4?3dM%Qh6<@kba+m`JS{Ya@9Fq*m6$$ zA1%Ogc~VRH33|S9l%CNb4zM%k^EIpqY}@h{w(aBcJ9c05oiZx#SK9t->5lSI`=&l~ z+-Ic)a{FbBhXV$Xt!WRd`R#Jk-$+_Z52rS>?Vpt2IK<84|E-SBEoIw>cs=a{BlQ7O z-?{Fy_M&84&9|KM5wt~)*!~i~E=(6m8(uCO)I=)M?)&sRbzH$9Rovzd?ZEY}GqX+~ zFbEbLz`BZ49=2Yh-|<`waK-_4!7`ro@zlC|r&I4fc4oyb+m=|c8)8%tZ-z5FwhzDt zL5kB@u53`d@%nHl0Sp)Dw`(QU&>vujEn?GPEXUW!Wi<+4e%BORl&BIH+SwRcbS}X@ z01Pk|vA%OdJKAs17zSXtO55k!;%m9>1eW9LnyAX4uj7@${O6cfii`49qTNItzny5J zH&Gj`e}o}?xjQ}r?LrI%FjUd@xflT3|7LA|ka%Q3i}a8gVm<`HIWoJGH=$EGClX^C0lysQJ>UO(q&;`T#8txuoQ_{l^kEV9CAdXuU1Ghg8 zN_6hHFuy&1x24q5-(Z7;!poYdt*`UTdrQOIQ!2O7_+AHV2hgXaEz7)>$LEdG z<8vE^Tw$|YwZHZDPM!SNOAWG$?J)MdmEk{U!!$M#fp7*Wo}jJ$Q(=8>R`Ats?e|VU?Zt7Cdh%AdnfyN3MBWw{ z$OnREvPf7%z6`#2##_7id|H%Y{vV^vWXb?5d5?a_y&t3@p9t$ncHj-NBdo&X{wrfJ zamN)VMYROYh_SvjJ=Xd!Ga?PY_$;*L=SxFte!4O6%0HEh%iZ4=gvns7IWIyJHa|hT z2;1+e)`TvbNb3-0z&DD_)Jomsg-7p_Uh`wjGnU1urmv1_oVqRg#=C?e?!7DgtqojU zWoAB($&53;TsXu^@2;8M`#z{=rPy?JqgYM0CDf4v@z=ZD|ItJ&8%_7A#K?S{wjxgd z?xA6JdJojrWpB7fr2p_MSsU4(R7=XGS0+Eg#xR=j>`H@R9{XjwBmqAiOxOL` zt?XK-iTEOWV}f>Pz3H-s*>W z4~8C&Xq25UQ^xH6H9kY_RM1$ch+%YLF72AA7^b{~VNTG}Tj#qZltz5Q=qxR`&oIlW Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html index dc60a3f..dfd88fd 100644 --- a/src/index.html +++ b/src/index.html @@ -2,7 +2,7 @@ - Lf10Starter2024 + Lf10StarterNew diff --git a/src/proxy.conf.json b/src/proxy.conf.json new file mode 100644 index 0000000..a1f39ee --- /dev/null +++ b/src/proxy.conf.json @@ -0,0 +1,11 @@ +{ + "/backend": { + "target": "http://localhost:8089/", + "secure": false, + "logLevel": "debug", + "pathRewrite": { + "^/backend": "" + }, + "changeOrigin": true + } +}