Alex Ondoa 2 роки тому
джерело
коміт
9fd43967cc
100 змінених файлів з 7415 додано та 21 видалено
  1. 1
    1
      Angular/README.md
  2. 14
    12
      Angular/src/app/app-routing.module.ts
  3. 2
    1
      Angular/src/app/app.menu.component.ts
  4. 1
    0
      Angular/src/app/app.module.ts
  5. 37
    0
      Angular/src/app/pages/candidat/candidat-detail/candidat-detail.component.html
  6. 0
    0
      Angular/src/app/pages/candidat/candidat-detail/candidat-detail.component.scss
  7. 25
    0
      Angular/src/app/pages/candidat/candidat-detail/candidat-detail.component.spec.ts
  8. 35
    0
      Angular/src/app/pages/candidat/candidat-detail/candidat-detail.component.ts
  9. 75
    0
      Angular/src/app/pages/candidat/candidat-list/candidat-list.component.html
  10. 0
    0
      Angular/src/app/pages/candidat/candidat-list/candidat-list.component.scss
  11. 25
    0
      Angular/src/app/pages/candidat/candidat-list/candidat-list.component.spec.ts
  12. 42
    0
      Angular/src/app/pages/candidat/candidat-list/candidat-list.component.ts
  13. 32
    0
      Angular/src/app/pages/candidat/candidat-list/candidat-list.service.ts
  14. 1
    0
      Angular/src/app/pages/candidat/candidat-search/candidat-search.component.html
  15. 0
    0
      Angular/src/app/pages/candidat/candidat-search/candidat-search.component.scss
  16. 25
    0
      Angular/src/app/pages/candidat/candidat-search/candidat-search.component.spec.ts
  17. 15
    0
      Angular/src/app/pages/candidat/candidat-search/candidat-search.component.ts
  18. 39
    0
      Angular/src/app/pages/candidat/candidat.module.ts
  19. 4
    0
      Angular/src/app/pages/pages.routing.module.ts
  20. 2
    2
      Angular/src/app/shared/models/candidate.ts
  21. 18
    0
      Angular/src/app/shared/resolver/candidat-detail.resolver.ts
  22. 14
    0
      Angular/src/app/shared/resolver/candidats.resolver.ts
  23. 27
    1
      Angular/src/app/shared/services/candidate.service.ts
  24. 2
    4
      Angular/src/assets/demo/data/candidates.json
  25. 1
    0
      Angular/src/index.html
  26. BIN
      Angular/ultima-ng-12.2.0.zip
  27. 25
    0
      CQRS/.dockerignore
  28. 23
    0
      CQRS/Backend.API/Backend.API.csproj
  29. 12
    0
      CQRS/Backend.API/Backend.API.csproj.user
  30. 43
    0
      CQRS/Backend.API/Config/DependencyInjectionHandler.cs
  31. 23
    0
      CQRS/Backend.API/Config/DependencyInjectionRepository.cs
  32. 30
    0
      CQRS/Backend.API/Config/DependencyInjectionService.cs
  33. 46
    0
      CQRS/Backend.API/Config/SwaggerExtensions.cs
  34. 167
    0
      CQRS/Backend.API/Controllers/CommandeController.cs
  35. 167
    0
      CQRS/Backend.API/Controllers/LigneCommandeController.cs
  36. 167
    0
      CQRS/Backend.API/Controllers/ProduitController.cs
  37. 167
    0
      CQRS/Backend.API/Controllers/ProprieteController.cs
  38. 166
    0
      CQRS/Backend.API/Controllers/TypeProprieteController.cs
  39. 29
    0
      CQRS/Backend.API/Dockerfile
  40. 26
    0
      CQRS/Backend.API/Program.cs
  41. 36
    0
      CQRS/Backend.API/Properties/launchSettings.json
  42. 68
    0
      CQRS/Backend.API/Startup.cs
  43. 9
    0
      CQRS/Backend.API/appsettings.Development.json
  44. 13
    0
      CQRS/Backend.API/appsettings.json
  45. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll
  46. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/AutoMapper.dll
  47. 5740
    0
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.deps.json
  48. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.dll
  49. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.exe
  50. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.pdb
  51. 8
    0
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.runtimeconfig.dev.json
  52. 13
    0
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.runtimeconfig.json
  53. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.ApplicationCore.dll
  54. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.ApplicationCore.pdb
  55. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Domain.dll
  56. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Domain.pdb
  57. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Infrastructure.dll
  58. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Infrastructure.pdb
  59. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Persistence.dll
  60. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Persistence.pdb
  61. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/BouncyCastle.Crypto.dll
  62. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/EntityFramework.SqlServer.dll
  63. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/EntityFramework.dll
  64. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Google.Protobuf.dll
  65. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/K4os.Compression.LZ4.Streams.dll
  66. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/K4os.Compression.LZ4.dll
  67. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/K4os.Hash.xxHash.dll
  68. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/MediatR.Extensions.Microsoft.DependencyInjection.dll
  69. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/MediatR.dll
  70. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNet.Identity.Core.dll
  71. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNet.Identity.EntityFramework.dll
  72. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNetCore.Cryptography.Internal.dll
  73. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll
  74. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll
  75. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.EntityFrameworkCore.Abstractions.dll
  76. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.EntityFrameworkCore.Relational.dll
  77. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.EntityFrameworkCore.dll
  78. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Caching.Abstractions.dll
  79. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Caching.Memory.dll
  80. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll
  81. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll
  82. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.DependencyInjection.dll
  83. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Identity.Core.dll
  84. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Identity.Stores.dll
  85. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Logging.Abstractions.dll
  86. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Logging.dll
  87. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Options.dll
  88. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Primitives.dll
  89. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.OpenApi.dll
  90. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/MySql.Data.EntityFrameworkCore.dll
  91. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/MySql.Data.dll
  92. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/MySqlConnector.dll
  93. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Pomelo.EntityFrameworkCore.MySql.dll
  94. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Renci.SshNet.dll
  95. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/SshNet.Security.Cryptography.dll
  96. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Swashbuckle.AspNetCore.Swagger.dll
  97. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Swashbuckle.AspNetCore.SwaggerGen.dll
  98. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/Swashbuckle.AspNetCore.SwaggerUI.dll
  99. BIN
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/System.Collections.Immutable.dll
  100. 0
    0
      CQRS/Backend.API/bin/Debug/netcoreapp3.1/System.ComponentModel.Annotations.dll

+ 1
- 1
Angular/README.md Переглянути файл

@@ -1,2 +1,2 @@
1
-# oussamaakallouch
1
+# ANGULAR
2 2
 

+ 14
- 12
Angular/src/app/app-routing.module.ts Переглянути файл

@@ -1,28 +1,30 @@
1 1
 import { NgModule } from '@angular/core';
2 2
 import { RouterModule, Routes } from '@angular/router';
3 3
 import { AppMainComponent } from './app.main.component';
4
+import { CandidatListComponent } from './pages/candidat/candidat-list/candidat-list.component';
5
+import { DashboardComponent } from './pages/dashboard/dashboard/dashboard.component';
4 6
 
5 7
 export const appRouteList: Routes = [
6 8
     {
7 9
         path: 'app', component: AppMainComponent,
8 10
         loadChildren: () => import('./pages/pages.routing.module').then(m => m.PagesRoutingModule)
9
-    },
10
-    {
11
-        path: '**',
12
-        redirectTo: 'app/dashboard/dashboard'
13 11
     }
14 12
 ];
15 13
 
16 14
 @NgModule({
17
-    exports: [
18
-        RouterModule
19
-    ],
20 15
     imports: [
21
-        RouterModule.forRoot(appRouteList, {
22
-            scrollPositionRestoration: 'enabled', // Add options right here
23
-            relativeLinkResolution: 'legacy'
24
-        })
25
-    ]
16
+        RouterModule.forRoot([
17
+            {
18
+                path: '', component: AppMainComponent,
19
+                children: [
20
+                    {path: 'candidat/candidat-list', component: CandidatListComponent},
21
+                    {path: 'dashboard', component: DashboardComponent},
22
+                ]
23
+            },
24
+            {path: '**', redirectTo: '/notfound'},
25
+        ], {scrollPositionRestoration: 'enabled'})
26
+    ],
27
+    exports: [RouterModule]
26 28
 })
27 29
 export class AppRoutingModule {
28 30
 }

+ 2
- 1
Angular/src/app/app.menu.component.ts Переглянути файл

@@ -20,7 +20,8 @@ export class AppMenuComponent implements OnInit {
20 20
             {
21 21
                 label: 'Natan', icon: 'pi pi-fw pi-home',
22 22
                 items: [
23
-                    {label: 'Dashboard', icon: 'pi pi-fw pi-home', routerLink: ['/']},
23
+                    {label: 'Dashboard', icon: 'pi pi-fw pi-home', routerLink: ['/dashboard']},
24
+                    {label: 'Candidates', icon: 'pi pi-fw pi-users', routerLink: ['/candidat/candidat-list']},
24 25
                 ]
25 26
             }
26 27
         ];

+ 1
- 0
Angular/src/app/app.module.ts Переглянути файл

@@ -106,6 +106,7 @@ import dayGridPlugin from '@fullcalendar/daygrid';
106 106
 import timeGridPlugin from '@fullcalendar/timegrid';
107 107
 import interactionPlugin from '@fullcalendar/interaction';
108 108
 
109
+
109 110
 FullCalendarModule.registerPlugins([
110 111
     dayGridPlugin,
111 112
     timeGridPlugin,

+ 37
- 0
Angular/src/app/pages/candidat/candidat-detail/candidat-detail.component.html Переглянути файл

@@ -0,0 +1,37 @@
1
+<div>
2
+    <div>
3
+        <div class="modal-header">
4
+          <h4 class="modal-title" id="modal-basic-title">Candidate Detail</h4>
5
+          <button type="button" class="close" aria-label="Close">
6
+            <span aria-hidden="true">×</span>
7
+          </button>
8
+        </div>
9
+        <div class="modal-body">
10
+            <form>
11
+                <div class="form-group">
12
+                    <label for="firstName">First Name</label>
13
+                    <input type="text" class="form-control" id="firstName" value="">
14
+                </div>
15
+                <div class="form-group">
16
+                    <label for="LastName">Last Name</label>
17
+                    <input type="text" class="form-control" id="lastName" value="">
18
+                </div>
19
+                <div class="form-group">
20
+                    <label for="type">Emails Type's</label>
21
+                    <select class="form-control" id="type">
22
+                      <option>Professional</option>
23
+                      <option>Personal</option>
24
+                    </select>
25
+                  </div>
26
+                <div class="form-group">
27
+                  <label for="emails">Emails address</label>
28
+                  <input type="emails" class="form-control" id="emails">
29
+                </div>
30
+                
31
+              </form>
32
+        </div>
33
+        <div class="modal-footer">
34
+          <button type="button" class="btn btn-outline-dark">Ok</button>
35
+        </div>
36
+    </div>
37
+</div>>

+ 0
- 0
Angular/src/app/pages/candidat/candidat-detail/candidat-detail.component.scss Переглянути файл


+ 25
- 0
Angular/src/app/pages/candidat/candidat-detail/candidat-detail.component.spec.ts Переглянути файл

@@ -0,0 +1,25 @@
1
+import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+import { CandidatDetailComponent } from './candidat-detail.component';
4
+
5
+describe('CandidatDetailComponent', () => {
6
+  let component: CandidatDetailComponent;
7
+  let fixture: ComponentFixture<CandidatDetailComponent>;
8
+
9
+  beforeEach(async () => {
10
+    await TestBed.configureTestingModule({
11
+      declarations: [ CandidatDetailComponent ]
12
+    })
13
+    .compileComponents();
14
+  });
15
+
16
+  beforeEach(() => {
17
+    fixture = TestBed.createComponent(CandidatDetailComponent);
18
+    component = fixture.componentInstance;
19
+    fixture.detectChanges();
20
+  });
21
+
22
+  it('should create', () => {
23
+    expect(component).toBeTruthy();
24
+  });
25
+});

+ 35
- 0
Angular/src/app/pages/candidat/candidat-detail/candidat-detail.component.ts Переглянути файл

@@ -0,0 +1,35 @@
1
+import { HttpClient } from '@angular/common/http';
2
+import { Component, OnInit } from '@angular/core';
3
+import { ActivatedRoute } from '@angular/router';
4
+import { Observable } from 'rxjs';
5
+import { AppBreadcrumbService } from 'src/app/app.breadcrumb.service';
6
+import { Candidate } from 'src/app/shared/models/candidate';
7
+import { CandidateService } from 'src/app/shared/services/candidate.service';
8
+
9
+@Component({
10
+  selector: 'app-candidat-detail',
11
+  templateUrl: './candidat-detail.component.html',
12
+  styleUrls: ['./candidat-detail.component.scss']
13
+})
14
+export class CandidatDetailComponent implements OnInit {
15
+
16
+  private _candidat: Observable<Candidate> = new Observable<Candidate>() ;
17
+  paramId: string;
18
+  constructor(private breadcrumbService: AppBreadcrumbService,private http: HttpClient, private candidateService: CandidateService, private route: ActivatedRoute) {
19
+    this.breadcrumbService.setItems([
20
+      { label: 'Candidats' },
21
+      { label: 'Detail', routerLink: ['/candidat/:candidatId/candidat-list'] }
22
+    ]);
23
+  }
24
+
25
+  ngOnInit(): void {
26
+  //  this.route.data.subscribe((data: { candidat: Observable<Candidate> }) => this._candidat = data.candidat);
27
+    this.route.paramMap.subscribe(params => {
28
+      if (params.get('candidatId')) {
29
+        this.paramId = params.get('candidatId');
30
+      }
31
+    });
32
+    this._candidat = this.candidateService.candidatGetById(this.paramId);
33
+  }
34
+
35
+}

+ 75
- 0
Angular/src/app/pages/candidat/candidat-list/candidat-list.component.html Переглянути файл

@@ -0,0 +1,75 @@
1
+<div class="card">
2
+    <h5>Candidates List</h5>
3
+    <div><button [routerLink]="'/dasboard/dasboard'" type="button" class="primary">Add</button><br></div>
4
+    <table class="table table-bordered">
5
+        <thead>
6
+          <tr>
7
+            <th scope="col">#</th>
8
+            <th scope="col">First Name</th>
9
+            <th scope="col">Last Name</th>
10
+            <th scope="col">Emails</th>
11
+          </tr>
12
+        </thead>
13
+        <tbody>
14
+          <tr  *ngFor="let candidate of candidates | async">
15
+                <td>{{candidate.id}}</td>
16
+                <td>{{candidate.firstName}}</td>
17
+                <td>{{candidate.lastName}}</td>
18
+                <td>
19
+                    <tr *ngFor="let ml of candidate.emails">
20
+                      <span>{{ml.email}}</span>
21
+                      <span> - {{ml.type}}</span>
22
+                    </tr>
23
+                </td>
24
+                <td>
25
+                  <button  icon="pi pi-pencil" class="p-button-rounded p-button-success mr-2" (click)="show(candidate)">edit</button>
26
+                  <button  icon="pi pi-trash" class="p-button-rounded p-button-warning">delete</button>
27
+               </td>
28
+          </tr>
29
+        </tbody>
30
+      </table>
31
+      <div>
32
+        <form name="editForm" role="form">
33
+            <button>Search</button>
34
+        </form>
35
+      </div>
36
+
37
+      <div *ngIf="isEdit">
38
+        <app-candidat-detail></app-candidat-detail>
39
+    </div>
40
+   <!-- <button [routerLink]="'/candidate/candidate-sidebar'" pButton pRipple type="button" label="Add" class="mr-2 mb-2"></button> -->
41
+   <!--  <p-table #dt  [value]="theCandidates" [paginator]="true" [rows]="5" [showCurrentPageReport]="true" responsiveLayout="scroll"
42
+        currentPageReportTemplate="Showing {first} to {last} of {totalRecords} entries" [rowsPerPageOptions]="[5,10,25,50]">
43
+        <ng-template pTemplate="header">
44
+            <tr>
45
+                <th>Id</th>
46
+                <th>First Name</th>
47
+                <th>Last Name</th>
48
+                <th>Emails</th>
49
+            </tr>
50
+        </ng-template>
51
+        <ng-template pTemplate="body" let-candidate>
52
+            <tr>
53
+                <td>{{candidate.id}}</td>
54
+                <td>{{candidate.firstname}}</td>
55
+                <td>{{candidate.lastname}}</td>
56
+                <td>
57
+                    <tr *ngFor="let ml of candidate.emails">
58
+                      <span>{{ml.email}}</span>
59
+                      <span> - {{ml.type}}</span>
60
+                    </tr>
61
+                </td>
62
+                <td>
63
+                  <button pButton pRipple icon="pi pi-pencil" class="p-button-rounded p-button-success mr-2"></button>
64
+                  <button pButton pRipple icon="pi pi-trash" class="p-button-rounded p-button-warning"></button>
65
+               </td>
66
+            </tr>
67
+        </ng-template>
68
+        <ng-template pTemplate="paginatorleft">
69
+          <span class="p-float-label">
70
+            <input type="text" class="w-full" pInputText>
71
+            <label>Search</label>
72
+          </span>
73
+        </ng-template>
74
+    </p-table> -->
75
+</div>

+ 0
- 0
Angular/src/app/pages/candidat/candidat-list/candidat-list.component.scss Переглянути файл


+ 25
- 0
Angular/src/app/pages/candidat/candidat-list/candidat-list.component.spec.ts Переглянути файл

@@ -0,0 +1,25 @@
1
+import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+import { CandidatListComponent } from './candidat-list.component';
4
+
5
+describe('CandidatListComponent', () => {
6
+  let component: CandidatListComponent;
7
+  let fixture: ComponentFixture<CandidatListComponent>;
8
+
9
+  beforeEach(async () => {
10
+    await TestBed.configureTestingModule({
11
+      declarations: [ CandidatListComponent ]
12
+    })
13
+    .compileComponents();
14
+  });
15
+
16
+  beforeEach(() => {
17
+    fixture = TestBed.createComponent(CandidatListComponent);
18
+    component = fixture.componentInstance;
19
+    fixture.detectChanges();
20
+  });
21
+
22
+  it('should create', () => {
23
+    expect(component).toBeTruthy();
24
+  });
25
+});

+ 42
- 0
Angular/src/app/pages/candidat/candidat-list/candidat-list.component.ts Переглянути файл

@@ -0,0 +1,42 @@
1
+import { HttpClient } from '@angular/common/http';
2
+import { Component, OnInit, ViewChild } from '@angular/core';
3
+import { FormBuilder } from '@angular/forms';
4
+import { ActivatedRoute } from '@angular/router';
5
+import { Table } from 'primeng/table';
6
+import { BehaviorSubject, Observable } from 'rxjs';
7
+import { tap } from 'rxjs/operators';
8
+import { AppBreadcrumbService } from 'src/app/app.breadcrumb.service';
9
+import { Candidate } from 'src/app/shared/models/candidate';
10
+import { candidatListService } from './candidat-list.service';
11
+
12
+@Component({
13
+  selector: 'app-candidat-list',
14
+  templateUrl: './candidat-list.component.html',
15
+  styleUrls: ['./candidat-list.component.scss']
16
+})
17
+export class CandidatListComponent implements OnInit {
18
+    isEdit: boolean = false;
19
+    candidates: Observable<Candidate[]>;
20
+    candidate: Candidate;
21
+    constructor(private breadcrumbService: AppBreadcrumbService,private http: HttpClient, private candidatListService: candidatListService, private route: ActivatedRoute) {
22
+      this.breadcrumbService.setItems([
23
+        { label: 'Candidats' },
24
+        { label: 'List', routerLink: ['/candidat/candidat-list'] }
25
+      ]);
26
+  }
27
+
28
+  ngOnInit() {
29
+    this.route.data.subscribe((data: { candidats: Observable<Candidate[]> }) => this.candidates = data.candidats);
30
+    this.candidates = this.candidatListService.getCandidats();
31
+  }
32
+  show(candidateUI: Candidate){
33
+   // this.route.navigate(); // navigate to other page
34
+    this.isEdit = true;
35
+    this.candidate = new Candidate()
36
+    this.candidate.id = candidateUI.id;
37
+    this.candidate.firstName = candidateUI.firstName;
38
+    this.candidate.lastName = candidateUI.lastName;
39
+    this.candidate.emails = candidateUI.emails;
40
+    
41
+  }
42
+}

+ 32
- 0
Angular/src/app/pages/candidat/candidat-list/candidat-list.service.ts Переглянути файл

@@ -0,0 +1,32 @@
1
+import { HttpClient } from '@angular/common/http';
2
+import { Injectable } from '@angular/core';
3
+import { switchMap, tap } from 'rxjs/operators';
4
+import { TreeNode } from 'primeng/api';
5
+import { BehaviorSubject, Observable } from 'rxjs';
6
+import { Candidate } from 'src/app/shared/models/candidate';
7
+
8
+@Injectable({
9
+    providedIn: 'root'
10
+})
11
+export class candidatListService {
12
+
13
+    private _candidats = new BehaviorSubject<Candidate[]>([]);
14
+    private dataStore: { candidats: Candidate[] } = { candidats: [] };
15
+    readonly candidats = this._candidats.asObservable();
16
+
17
+    constructor(private http: HttpClient) {}
18
+
19
+    loadAll() {
20
+        this.http.get<Candidate[]>('assets/demo/data/candidates.json').subscribe(
21
+          data => {
22
+            this.dataStore.candidats = data;
23
+            this._candidats.next(Object.assign({}, this.dataStore).candidats);
24
+          },
25
+          error => console.log('Could not load Candidats.')
26
+        );
27
+      }
28
+    getCandidats(): Observable<Candidate[]>{
29
+     this.loadAll();
30
+     return this.candidats
31
+    }
32
+}

+ 1
- 0
Angular/src/app/pages/candidat/candidat-search/candidat-search.component.html Переглянути файл

@@ -0,0 +1 @@
1
+<p>candidat-search works!</p>

+ 0
- 0
Angular/src/app/pages/candidat/candidat-search/candidat-search.component.scss Переглянути файл


+ 25
- 0
Angular/src/app/pages/candidat/candidat-search/candidat-search.component.spec.ts Переглянути файл

@@ -0,0 +1,25 @@
1
+import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+import { CandidatSearchComponent } from './candidat-search.component';
4
+
5
+describe('CandidatSearchComponent', () => {
6
+  let component: CandidatSearchComponent;
7
+  let fixture: ComponentFixture<CandidatSearchComponent>;
8
+
9
+  beforeEach(async () => {
10
+    await TestBed.configureTestingModule({
11
+      declarations: [ CandidatSearchComponent ]
12
+    })
13
+    .compileComponents();
14
+  });
15
+
16
+  beforeEach(() => {
17
+    fixture = TestBed.createComponent(CandidatSearchComponent);
18
+    component = fixture.componentInstance;
19
+    fixture.detectChanges();
20
+  });
21
+
22
+  it('should create', () => {
23
+    expect(component).toBeTruthy();
24
+  });
25
+});

+ 15
- 0
Angular/src/app/pages/candidat/candidat-search/candidat-search.component.ts Переглянути файл

@@ -0,0 +1,15 @@
1
+import { Component, OnInit } from '@angular/core';
2
+
3
+@Component({
4
+  selector: 'app-candidat-search',
5
+  templateUrl: './candidat-search.component.html',
6
+  styleUrls: ['./candidat-search.component.scss']
7
+})
8
+export class CandidatSearchComponent implements OnInit {
9
+
10
+  constructor() { }
11
+
12
+  ngOnInit(): void {
13
+  }
14
+
15
+}

+ 39
- 0
Angular/src/app/pages/candidat/candidat.module.ts Переглянути файл

@@ -0,0 +1,39 @@
1
+import { NgModule } from '@angular/core';
2
+import { CommonModule } from '@angular/common';
3
+import { CandidatListComponent } from './candidat-list/candidat-list.component';
4
+import { RouterModule, Routes } from '@angular/router';
5
+import { CandidatSearchComponent } from './candidat-search/candidat-search.component';
6
+import { CandidatsResolver } from 'src/app/shared/resolver/candidats.resolver';
7
+import { CandidatDetailComponent } from './candidat-detail/candidat-detail.component';
8
+import { CandidatDetailResolver } from 'src/app/shared/resolver/candidat-detail.resolver';
9
+
10
+
11
+export const routes: Routes = [
12
+  {
13
+      path: 'candidat/candidat-list',
14
+      component: CandidatListComponent,
15
+      resolve: {
16
+        Candidats: CandidatsResolver 
17
+      },
18
+  },
19
+  {
20
+    path: 'candidat/:candidatId/candidat-detail',
21
+    component: CandidatDetailComponent,
22
+    resolve: {
23
+      Candidat: CandidatDetailResolver 
24
+    },
25
+}
26
+];
27
+
28
+@NgModule({
29
+  declarations: [
30
+    CandidatListComponent,
31
+    CandidatSearchComponent,
32
+    CandidatDetailComponent
33
+  ],
34
+  imports: [
35
+    CommonModule,
36
+    RouterModule.forChild(routes)
37
+  ]
38
+})
39
+export class CandidatModule { }

+ 4
- 0
Angular/src/app/pages/pages.routing.module.ts Переглянути файл

@@ -5,6 +5,10 @@ export const pagesRouteList: Routes = [
5 5
     {
6 6
         path: 'dashboard',
7 7
         loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule)
8
+    },
9
+    {
10
+        path: 'candidat/candidat-list',
11
+        loadChildren: () => import('./candidat/candidat.module').then(m => m.CandidatModule)
8 12
     }
9 13
     
10 14
 ];

+ 2
- 2
Angular/src/app/shared/models/candidate.ts Переглянути файл

@@ -1,7 +1,7 @@
1 1
 export class Candidate {
2 2
     id: string;
3
-    firstname: string;
4
-    lastname: string;
3
+    firstName: string;
4
+    lastName: string;
5 5
     emails: [];
6 6
 }
7 7
 

+ 18
- 0
Angular/src/app/shared/resolver/candidat-detail.resolver.ts Переглянути файл

@@ -0,0 +1,18 @@
1
+import { Injectable } from "@angular/core";
2
+import { ActivatedRoute, ActivatedRouteSnapshot, ParamMap, Resolve } from "@angular/router";
3
+import { HttpClient, HttpHeaders } from "@angular/common/http";
4
+import { Candidate } from "../models/candidate";
5
+import { Observable } from "rxjs";
6
+import { CandidateService } from "../services/candidate.service";
7
+import { filter, map, switchMap, tap } from "rxjs/operators";
8
+
9
+@Injectable()
10
+export class CandidatDetailResolver implements Resolve<Candidate> {
11
+  constructor(public service: CandidateService, private route: ActivatedRoute) {}
12
+  resolve(): Observable<Candidate> {
13
+      return this.route.queryParams.pipe(
14
+        map(params => params['candidatId']),
15
+        switchMap(candidatId => this.service.candidatGetById(candidatId)),
16
+      );
17
+    }
18
+}

+ 14
- 0
Angular/src/app/shared/resolver/candidats.resolver.ts Переглянути файл

@@ -0,0 +1,14 @@
1
+import { Injectable } from "@angular/core";
2
+import { Resolve } from "@angular/router";
3
+import { HttpClient, HttpHeaders } from "@angular/common/http";
4
+import { Candidate } from "../models/candidate";
5
+import { candidatListService } from "src/app/pages/candidat/candidat-list/candidat-list.service";
6
+import { Observable } from "rxjs";
7
+
8
+@Injectable()
9
+export class CandidatsResolver implements Resolve<Candidate[]> {
10
+  constructor(public service: candidatListService) {}
11
+  resolve(): Observable<Candidate[]> {
12
+    return this.service.getCandidats();
13
+  }
14
+}

+ 27
- 1
Angular/src/app/shared/services/candidate.service.ts Переглянути файл

@@ -1,9 +1,35 @@
1
+import { HttpClient } from '@angular/common/http';
1 2
 import { Injectable } from '@angular/core';
3
+import { Observable } from 'rxjs';
4
+import { Candidate } from '../models/candidate';
2 5
 
3 6
 @Injectable({
4 7
   providedIn: 'root'
5 8
 })
6 9
 export class CandidateService {
7 10
 
8
-  constructor() { }
11
+  constructor(private http: HttpClient) { }
12
+
13
+  listOfCandidates() {
14
+    return this.http.get<any>('assets/demo/data/candidates.json')
15
+            .toPromise()
16
+            .then(res => res.data as Candidate[])
17
+            .then(data => data);
18
+  }
19
+  
20
+  candidatGetById(id: string): Observable<Candidate> {
21
+     return null;
22
+  }
23
+  async Search(query: string): Promise<Candidate[]> {
24
+    let candidates = this.listOfCandidates();
25
+    let candidatesFilter: Candidate[] ;
26
+    for (let item of await candidates) 
27
+    {
28
+      if (item.firstName == query || item.lastName == query) 
29
+      {
30
+        candidatesFilter.push(item);
31
+      }
32
+    }  
33
+    return candidatesFilter
34
+  }
9 35
 }

+ 2
- 4
Angular/src/assets/demo/data/candidates.json Переглянути файл

@@ -1,5 +1,4 @@
1
-{
2
-	"data": [
1
+ [
3 2
 		{
4 3
 			"id": "1",
5 4
 			"firstName": "Tom",
@@ -24,5 +23,4 @@
24 23
 			"lastName": "Jackson",
25 24
 			"emails": []
26 25
 		}
27
-	]
28
-}
26
+]

+ 1
- 0
Angular/src/index.html Переглянути файл

@@ -13,6 +13,7 @@
13 13
 
14 14
     <link id="theme-css" rel="stylesheet" type="text/css" href="assets/theme/indigo/theme-light.css">
15 15
     <link id="layout-css" rel="stylesheet" type="text/css" href="assets/layout/css/layout-light.css">
16
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
16 17
 </head>
17 18
 <body>
18 19
     <app-root>

BIN
Angular/ultima-ng-12.2.0.zip Переглянути файл


+ 25
- 0
CQRS/.dockerignore Переглянути файл

@@ -0,0 +1,25 @@
1
+**/.classpath
2
+**/.dockerignore
3
+**/.env
4
+**/.git
5
+**/.gitignore
6
+**/.project
7
+**/.settings
8
+**/.toolstarget
9
+**/.vs
10
+**/.vscode
11
+**/*.*proj.user
12
+**/*.dbmdl
13
+**/*.jfm
14
+**/azds.yaml
15
+**/bin
16
+**/charts
17
+**/docker-compose*
18
+**/Dockerfile*
19
+**/node_modules
20
+**/npm-debug.log
21
+**/obj
22
+**/secrets.dev.yaml
23
+**/values.dev.yaml
24
+LICENSE
25
+README.md

+ 23
- 0
CQRS/Backend.API/Backend.API.csproj Переглянути файл

@@ -0,0 +1,23 @@
1
+<Project Sdk="Microsoft.NET.Sdk.Web">
2
+
3
+  <PropertyGroup>
4
+    <TargetFramework>netcoreapp3.1</TargetFramework>
5
+    <DockerDefaultTargetOS>Windows</DockerDefaultTargetOS>
6
+  </PropertyGroup>
7
+
8
+  <ItemGroup>
9
+    <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" />
10
+    <PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="6.2.3" />
11
+    <PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.2.3" />
12
+    <PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.2.3" />
13
+  </ItemGroup>
14
+
15
+  <ItemGroup>
16
+    <ProjectReference Include="..\Backend.ApplicationCore\Backend.ApplicationCore.csproj" />
17
+    <ProjectReference Include="..\Backend.Domain\Backend.Domain.csproj" />
18
+    <ProjectReference Include="..\Backend.Infrastructure\Backend.Infrastructure.csproj" />
19
+    <ProjectReference Include="..\Backend.Persistence\Backend.Persistence.csproj" />
20
+  </ItemGroup>
21
+
22
+
23
+</Project>

+ 12
- 0
CQRS/Backend.API/Backend.API.csproj.user Переглянути файл

@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <PropertyGroup>
4
+    <Controller_SelectedScaffolderID>MvcControllerEmptyScaffolder</Controller_SelectedScaffolderID>
5
+    <Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
6
+    <ActiveDebugProfile>IIS Express</ActiveDebugProfile>
7
+    <ShowAllFiles>false</ShowAllFiles>
8
+  </PropertyGroup>
9
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
10
+    <DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
11
+  </PropertyGroup>
12
+</Project>

+ 43
- 0
CQRS/Backend.API/Config/DependencyInjectionHandler.cs Переглянути файл

@@ -0,0 +1,43 @@
1
+using Mediator;
2
+using MediatR;
3
+using Microsoft.AspNetCore.Builder;
4
+using Microsoft.Extensions.DependencyInjection;
5
+using System;
6
+using System.Collections.Generic;
7
+using System.IO;
8
+using System.Linq;
9
+using System.Reflection;
10
+using System.Threading.Tasks;
11
+
12
+namespace Backend.API.Config
13
+{
14
+    internal static class DependencyInjectionHandler
15
+    {
16
+        internal static IServiceCollection AddMediaRHandlerDependency(this IServiceCollection services)
17
+        {
18
+            services.AddMediatR(Assembly.GetExecutingAssembly());
19
+            services.AddMediatR(typeof(GetTypeProprieteListHandler).Assembly);
20
+            services.AddMediatR(typeof(AddTypeProprieteHandler).Assembly);
21
+            services.AddMediatR(typeof(RemoveTypeProprieteHandler).Assembly);
22
+
23
+            services.AddMediatR(typeof(GetProprieteListHandler).Assembly);
24
+            services.AddMediatR(typeof(AddProprieteHandler).Assembly);
25
+            services.AddMediatR(typeof(RemoveProprieteHandler).Assembly);
26
+
27
+            services.AddMediatR(typeof(GetProduitListHandler).Assembly);
28
+            services.AddMediatR(typeof(AddProduitHandler).Assembly);
29
+            services.AddMediatR(typeof(RemoveProduitHandler).Assembly);
30
+
31
+            services.AddMediatR(typeof(GetCommandeListHandler).Assembly);
32
+            services.AddMediatR(typeof(AddCommandeHandler).Assembly);
33
+            services.AddMediatR(typeof(RemoveCommandeHandler).Assembly);
34
+
35
+            services.AddMediatR(typeof(GetLigneCommandeListHandler).Assembly);
36
+            services.AddMediatR(typeof(AddLigneCommandeHandler).Assembly);
37
+            services.AddMediatR(typeof(RemoveLigneCommandeHandler).Assembly);
38
+
39
+            return services;
40
+        }
41
+
42
+    }
43
+}

+ 23
- 0
CQRS/Backend.API/Config/DependencyInjectionRepository.cs Переглянути файл

@@ -0,0 +1,23 @@
1
+using Backend.ApplicationCore.Interfaces.IRepositories;
2
+using Backend.Infrastructure.Repositories;
3
+using Backend.Persistence.Config;
4
+using Microsoft.Extensions.DependencyInjection;
5
+
6
+namespace Backend.API.Config
7
+{
8
+    internal static class DependencyInjectionRepository
9
+    {
10
+        internal static IServiceCollection AddDataDependencyInjectionRepository(this IServiceCollection services)
11
+        {
12
+            services.AddScoped<IApplicationDatabaseContext, ApplicationDatabaseContext>();
13
+            services.AddScoped<ICommandeRepository, CommandeRepository>();
14
+            services.AddScoped<ILigneCommandeRepository, LigneCommandeRepository>();
15
+            services.AddScoped<IProduitRepository, ProduitRepository>();
16
+            services.AddScoped<IProprieteRepository, ProprieteRepository>();
17
+            services.AddScoped<ITypeProprieteRepository, TypeProprieteRepository>();
18
+
19
+            return services;
20
+        }
21
+
22
+    }
23
+}

+ 30
- 0
CQRS/Backend.API/Config/DependencyInjectionService.cs Переглянути файл

@@ -0,0 +1,30 @@
1
+using Backend.ApplicationCore.Interfaces.IServices;
2
+using Backend.ApplicationCore.Services;
3
+using Microsoft.AspNetCore.Builder;
4
+using Microsoft.AspNetCore.Http;
5
+using Microsoft.Extensions.DependencyInjection;
6
+using System;
7
+using System.Collections.Generic;
8
+using System.IO;
9
+using System.Linq;
10
+using System.Reflection;
11
+using System.Threading.Tasks;
12
+
13
+namespace Backend.API.Config
14
+{
15
+    internal static class DependencyInjectionService
16
+    {
17
+        internal static IServiceCollection AddDependencyInjectionService(this IServiceCollection services)
18
+        {
19
+            services.AddScoped<ITypeProprieteService, TypeProprieteService>();
20
+            services.AddScoped<IProprieteService, ProprieteService>();
21
+            services.AddScoped<IProduitService, ProduitService>();
22
+            services.AddScoped<ICommandeService, CommandeService>();
23
+            services.AddScoped<ILigneCommandeService, LigneCommandeService>();
24
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
25
+
26
+            return services;
27
+        }
28
+
29
+    }
30
+}

+ 46
- 0
CQRS/Backend.API/Config/SwaggerExtensions.cs Переглянути файл

@@ -0,0 +1,46 @@
1
+using Microsoft.AspNetCore.Builder;
2
+using Microsoft.Extensions.DependencyInjection;
3
+using System;
4
+using System.Collections.Generic;
5
+using System.IO;
6
+using System.Linq;
7
+using System.Reflection;
8
+using System.Threading.Tasks;
9
+
10
+namespace Backend.API.Config
11
+{
12
+    internal static class SwaggerExtensions
13
+    {
14
+        internal static IServiceCollection AddSwaggerDocumentation(this IServiceCollection services)
15
+        {
16
+            services.AddSwaggerGen(options =>
17
+            {
18
+                options.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
19
+                {
20
+                    Title = "Sample CQRS Catalogue.Backend.API",
21
+                    Version = "v1",
22
+                    Description = "Sample .NET Core REST API CQRS implementation using Clean Architecture.",
23
+                });
24
+
25
+                var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
26
+                var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".XML";
27
+                var commentsFile = Path.Combine(baseDirectory, commentsFileName);
28
+               // options.IncludeXmlComments(commentsFile);
29
+            });
30
+
31
+            return services;
32
+        }
33
+
34
+        internal static IApplicationBuilder UseSwaggerDocumentation(this IApplicationBuilder app)
35
+        {
36
+            app.UseSwagger();
37
+
38
+            app.UseSwaggerUI(c =>
39
+            {
40
+                c.SwaggerEndpoint("/swagger/v1/swagger.json", "Sample CQRS API V1");
41
+            });
42
+
43
+            return app;
44
+        }
45
+    }
46
+}

+ 167
- 0
CQRS/Backend.API/Controllers/CommandeController.cs Переглянути файл

@@ -0,0 +1,167 @@
1
+
2
+using Backend.Domain;
3
+using Backend.Models;
4
+using Mediator;
5
+using MediatR;
6
+using Microsoft.AspNetCore.Http;
7
+using Microsoft.AspNetCore.Mvc;
8
+using Microsoft.Extensions.Logging;
9
+using System;
10
+using System.Collections.Generic;
11
+using System.Linq;
12
+using System.Reflection;
13
+using System.Threading.Tasks;
14
+
15
+namespace Backend.API.Controllers
16
+{
17
+    [ApiController]
18
+    [Route("api/[controller]")]
19
+    public class CommandeController : ControllerBase
20
+    {
21
+        private const string c_getAllCommande = "getAll"; 
22
+        private const string c_postCreateOrUpdate = "createOrUpdate";
23
+        private const string c_deleteById = "deleteById/{id}";
24
+
25
+        private readonly ILogger<CommandeController> _log;
26
+        private readonly IMediator _mediator;
27
+
28
+        public CommandeController(ILogger<CommandeController> log, IMediator mediator)
29
+        {
30
+            _log = log;
31
+            _mediator = mediator;
32
+        }
33
+
34
+        /// <summary>
35
+        /// get all type propriete
36
+        /// </summary>
37
+        /// <returns></returns>
38
+        [HttpGet(c_getAllCommande)]
39
+        [ProducesResponseType(StatusCodes.Status200OK)]
40
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
41
+        public async Task<IActionResult> GetAllAsync()
42
+        {
43
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to get all Type");
44
+            if (_mediator == null)
45
+            {
46
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
47
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
48
+            }
49
+            try
50
+            {
51
+                var query = new GetCommandeListQuery();
52
+                using Task<IEnumerable<CommandeResponse>> typesTask = _mediator.Send(query);
53
+                await typesTask;
54
+                if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
55
+                {
56
+                    return Ok(typesTask.Result);
57
+                }
58
+                else
59
+                {
60
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
61
+                    return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
62
+                }
63
+            }
64
+            catch (Exception ex)
65
+            {
66
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
67
+                return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
68
+            }
69
+
70
+        }
71
+
72
+        /// <summary>
73
+        /// create or update type
74
+        /// </summary>
75
+        /// <param name="cmd"></param>
76
+        /// <returns></returns>
77
+        [HttpPost(c_postCreateOrUpdate)]
78
+        [ProducesResponseType(StatusCodes.Status200OK)]
79
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
80
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
81
+        public async Task<IActionResult> CreateOrUpdateAsync([FromBody] AddCommandeCommand cmd)
82
+        {
83
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to create or update Type");
84
+            if (_mediator == null)
85
+            {
86
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
87
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
88
+            }
89
+            if(cmd != null)
90
+            {
91
+                try
92
+                {
93
+                    using Task<int> typesTask = _mediator.Send(cmd);
94
+                    await typesTask;
95
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
96
+                    {
97
+                        return Ok(typesTask.Result);
98
+                    }
99
+                    else
100
+                    {
101
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
102
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
103
+                    }
104
+                }
105
+                catch (Exception ex)
106
+                {
107
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
108
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
109
+                }
110
+            }
111
+            else
112
+            {
113
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
114
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
115
+            }
116
+           
117
+        }
118
+
119
+        /// <summary>
120
+        /// delete type by id
121
+        /// </summary>
122
+        /// <param name="id"></param>
123
+        /// <returns></returns>
124
+        [HttpDelete(c_deleteById)]
125
+        [ProducesResponseType(StatusCodes.Status200OK)]
126
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
127
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
128
+        public async Task<IActionResult> DeleteByIdAsync([FromRoute] Guid id)
129
+        {
130
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to delete type by: {id}");
131
+            if (_mediator == null)
132
+            {
133
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
134
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
135
+            }
136
+            if (id != null)
137
+            {
138
+                try
139
+                {
140
+                    RemoveCommandeCommand removeCommandeCommand = new RemoveCommandeCommand { Id = id };
141
+                    using Task<int> typesTask = _mediator.Send(removeCommandeCommand);
142
+                    await typesTask;
143
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
144
+                    {
145
+                        return Ok(typesTask.Result);
146
+                    }
147
+                    else
148
+                    {
149
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
150
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
151
+                    }
152
+                }
153
+                catch (Exception ex)
154
+                {
155
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
156
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
157
+                }
158
+            }
159
+            else
160
+            {
161
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
162
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
163
+            }
164
+
165
+        }
166
+    }
167
+}

+ 167
- 0
CQRS/Backend.API/Controllers/LigneCommandeController.cs Переглянути файл

@@ -0,0 +1,167 @@
1
+
2
+using Backend.Domain;
3
+using Backend.Models;
4
+using Mediator;
5
+using MediatR;
6
+using Microsoft.AspNetCore.Http;
7
+using Microsoft.AspNetCore.Mvc;
8
+using Microsoft.Extensions.Logging;
9
+using System;
10
+using System.Collections.Generic;
11
+using System.Linq;
12
+using System.Reflection;
13
+using System.Threading.Tasks;
14
+
15
+namespace Backend.API.Controllers
16
+{
17
+    [ApiController]
18
+    [Route("api/[controller]")]
19
+    public class LigneCommandeController : ControllerBase
20
+    {
21
+        private const string c_getAllLigneCommande = "getAll";
22
+        private const string c_postCreateOrUpdate = "createOrUpdate";
23
+        private const string c_deleteById = "deleteById/{id}";
24
+
25
+        private readonly ILogger<LigneCommandeController> _log;
26
+        private readonly IMediator _mediator;
27
+
28
+        public LigneCommandeController(ILogger<LigneCommandeController> log, IMediator mediator)
29
+        {
30
+            _log = log;
31
+            _mediator = mediator;
32
+        }
33
+
34
+        /// <summary>
35
+        /// get all type propriete
36
+        /// </summary>
37
+        /// <returns></returns>
38
+        [HttpGet(c_getAllLigneCommande)]
39
+        [ProducesResponseType(StatusCodes.Status200OK)]
40
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
41
+        public async Task<IActionResult> GetAllAsync()
42
+        {
43
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to get all Ligne commande");
44
+            if (_mediator == null)
45
+            {
46
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
47
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
48
+            }
49
+            try
50
+            {
51
+                var query = new GetLigneCommandeListQuery();
52
+                using Task<IEnumerable<LigneCommandeResponse>> typesTask = _mediator.Send(query);
53
+                await typesTask;
54
+                if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
55
+                {
56
+                    return Ok(typesTask.Result);
57
+                }
58
+                else
59
+                {
60
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
61
+                    return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
62
+                }
63
+            }
64
+            catch (Exception ex)
65
+            {
66
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
67
+                return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
68
+            }
69
+
70
+        }
71
+
72
+        /// <summary>
73
+        /// create or update ligne commande id?
74
+        /// </summary>
75
+        /// <param name="cmd"></param>
76
+        /// <returns></returns>
77
+        [HttpPost(c_postCreateOrUpdate)]
78
+        [ProducesResponseType(StatusCodes.Status200OK)]
79
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
80
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
81
+        public async Task<IActionResult> CreateOrUpdateAsync([FromBody] AddLigneCommandeCommand cmd)
82
+        {
83
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to create or update Ligne commande");
84
+            if (_mediator == null)
85
+            {
86
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
87
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
88
+            }
89
+            if(cmd != null)
90
+            {
91
+                try
92
+                {
93
+                    using Task<int> typesTask = _mediator.Send(cmd);
94
+                    await typesTask;
95
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
96
+                    {
97
+                        return Ok(typesTask.Result);
98
+                    }
99
+                    else
100
+                    {
101
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
102
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
103
+                    }
104
+                }
105
+                catch (Exception ex)
106
+                {
107
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
108
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
109
+                }
110
+            }
111
+            else
112
+            {
113
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
114
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
115
+            }
116
+           
117
+        }
118
+
119
+        /// <summary>
120
+        /// delete type by id
121
+        /// </summary>
122
+        /// <param name="id"></param>
123
+        /// <returns></returns>
124
+        [HttpDelete(c_deleteById)]
125
+        [ProducesResponseType(StatusCodes.Status200OK)]
126
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
127
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
128
+        public async Task<IActionResult> DeleteByIdAsync([FromRoute] Guid id)
129
+        {
130
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to delete ligne commande by: {id}");
131
+            if (_mediator == null)
132
+            {
133
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
134
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
135
+            }
136
+            if (id != null)
137
+            {
138
+                try
139
+                {
140
+                    RemoveLigneCommandeCommand removeLigneCommandeCommand = new RemoveLigneCommandeCommand { Id = id };
141
+                    using Task<int> typesTask = _mediator.Send(removeLigneCommandeCommand);
142
+                    await typesTask;
143
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
144
+                    {
145
+                        return Ok(typesTask.Result);
146
+                    }
147
+                    else
148
+                    {
149
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
150
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
151
+                    }
152
+                }
153
+                catch (Exception ex)
154
+                {
155
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
156
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
157
+                }
158
+            }
159
+            else
160
+            {
161
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
162
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
163
+            }
164
+
165
+        }
166
+    }
167
+}

+ 167
- 0
CQRS/Backend.API/Controllers/ProduitController.cs Переглянути файл

@@ -0,0 +1,167 @@
1
+
2
+using Backend.Domain;
3
+using Backend.Models;
4
+using Mediator;
5
+using MediatR;
6
+using Microsoft.AspNetCore.Http;
7
+using Microsoft.AspNetCore.Mvc;
8
+using Microsoft.Extensions.Logging;
9
+using System;
10
+using System.Collections.Generic;
11
+using System.Linq;
12
+using System.Reflection;
13
+using System.Threading.Tasks;
14
+
15
+namespace Backend.API.Controllers
16
+{
17
+    [ApiController]
18
+    [Route("api/[controller]")]
19
+    public class ProduitController : ControllerBase
20
+    {
21
+        private const string c_getAllProduit = "getAll";
22
+        private const string c_postCreateOrUpdate = "createOrUpdate";
23
+        private const string c_deleteById = "deleteById/{id}";
24
+
25
+        private readonly ILogger<ProduitController> _log;
26
+        private readonly IMediator _mediator;
27
+
28
+        public ProduitController(ILogger<ProduitController> log, IMediator mediator)
29
+        {
30
+            _log = log;
31
+            _mediator = mediator;
32
+        }
33
+
34
+        /// <summary>
35
+        /// get all type propriete
36
+        /// </summary>
37
+        /// <returns></returns>
38
+        [HttpGet(c_getAllProduit)]
39
+        [ProducesResponseType(StatusCodes.Status200OK)]
40
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
41
+        public async Task<IActionResult> GetAllAsync()
42
+        {
43
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to get all produit");
44
+            if (_mediator == null)
45
+            {
46
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
47
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
48
+            }
49
+            try
50
+            {
51
+                var query = new GetProduitListQuery();
52
+                using Task<IEnumerable<ProduitResponse>> typesTask = _mediator.Send(query);
53
+                await typesTask;
54
+                if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
55
+                {
56
+                    return Ok(typesTask.Result);
57
+                }
58
+                else
59
+                {
60
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
61
+                    return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
62
+                }
63
+            }
64
+            catch (Exception ex)
65
+            {
66
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
67
+                return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
68
+            }
69
+
70
+        }
71
+
72
+        /// <summary>
73
+        /// create or update type
74
+        /// </summary>
75
+        /// <param name="cmd"></param>
76
+        /// <returns></returns>
77
+        [HttpPost(c_postCreateOrUpdate)]
78
+        [ProducesResponseType(StatusCodes.Status200OK)]
79
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
80
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
81
+        public async Task<IActionResult> CreateOrUpdateAsync([FromBody] AddProduitCommand cmd)
82
+        {
83
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to create or update Produit");
84
+            if (_mediator == null)
85
+            {
86
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
87
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
88
+            }
89
+            if(cmd != null)
90
+            {
91
+                try
92
+                {
93
+                    using Task<int> typesTask = _mediator.Send(cmd);
94
+                    await typesTask;
95
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
96
+                    {
97
+                        return Ok(typesTask.Result);
98
+                    }
99
+                    else
100
+                    {
101
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
102
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
103
+                    }
104
+                }
105
+                catch (Exception ex)
106
+                {
107
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
108
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
109
+                }
110
+            }
111
+            else
112
+            {
113
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
114
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
115
+            }
116
+           
117
+        }
118
+
119
+        /// <summary>
120
+        /// delete type by id
121
+        /// </summary>
122
+        /// <param name="id"></param>
123
+        /// <returns></returns>
124
+        [HttpDelete(c_deleteById)]
125
+        [ProducesResponseType(StatusCodes.Status200OK)]
126
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
127
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
128
+        public async Task<IActionResult> DeleteByIdAsync([FromRoute] Guid id)
129
+        {
130
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to delete type by: {id}");
131
+            if (_mediator == null)
132
+            {
133
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
134
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
135
+            }
136
+            if (id != null)
137
+            {
138
+                try
139
+                {
140
+                    RemoveProduitCommand removeProduitCommand = new RemoveProduitCommand { Id = id };
141
+                    using Task<int> typesTask = _mediator.Send(removeProduitCommand);
142
+                    await typesTask;
143
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
144
+                    {
145
+                        return Ok(typesTask.Result);
146
+                    }
147
+                    else
148
+                    {
149
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
150
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
151
+                    }
152
+                }
153
+                catch (Exception ex)
154
+                {
155
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
156
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
157
+                }
158
+            }
159
+            else
160
+            {
161
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
162
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
163
+            }
164
+
165
+        }
166
+    }
167
+}

+ 167
- 0
CQRS/Backend.API/Controllers/ProprieteController.cs Переглянути файл

@@ -0,0 +1,167 @@
1
+
2
+using Backend.Domain;
3
+using Backend.Models;
4
+using Mediator;
5
+using MediatR;
6
+using Microsoft.AspNetCore.Http;
7
+using Microsoft.AspNetCore.Mvc;
8
+using Microsoft.Extensions.Logging;
9
+using System;
10
+using System.Collections.Generic;
11
+using System.Linq;
12
+using System.Reflection;
13
+using System.Threading.Tasks;
14
+
15
+namespace Backend.API.Controllers
16
+{
17
+    [ApiController]
18
+    [Route("api/[controller]")]
19
+    public class ProprieteController : ControllerBase
20
+    {
21
+        private const string c_getAllPropriete = "getAll";
22
+        private const string c_postCreateOrUpdate = "createOrUpdate";
23
+        private const string c_deleteById = "deleteById/{id}";
24
+
25
+        private readonly ILogger<ProprieteController> _log;
26
+        private readonly IMediator _mediator;
27
+
28
+        public ProprieteController(ILogger<ProprieteController> log, IMediator mediator)
29
+        {
30
+            _log = log;
31
+            _mediator = mediator;
32
+        }
33
+
34
+        /// <summary>
35
+        /// get all type propriete
36
+        /// </summary>
37
+        /// <returns></returns>
38
+        [HttpGet(c_getAllPropriete)]
39
+        [ProducesResponseType(StatusCodes.Status200OK)]
40
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
41
+        public async Task<IActionResult> GetAllAsync()
42
+        {
43
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to get all Propriete");
44
+            if (_mediator == null)
45
+            {
46
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
47
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
48
+            }
49
+            try
50
+            {
51
+                var query = new GetProprieteListQuery();
52
+                using Task<IEnumerable<ProprieteResponse>> typesTask = _mediator.Send(query);
53
+                await typesTask;
54
+                if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
55
+                {
56
+                    return Ok(typesTask.Result);
57
+                }
58
+                else
59
+                {
60
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
61
+                    return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
62
+                }
63
+            }
64
+            catch (Exception ex)
65
+            {
66
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
67
+                return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
68
+            }
69
+
70
+        }
71
+
72
+        /// <summary>
73
+        /// create or update propriete
74
+        /// </summary>
75
+        /// <param name="cmd"></param>
76
+        /// <returns></returns>
77
+        [HttpPost(c_postCreateOrUpdate)]
78
+        [ProducesResponseType(StatusCodes.Status200OK)]
79
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
80
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
81
+        public async Task<IActionResult> CreateOrUpdateAsync([FromBody] AddProprieteCommand cmd)
82
+        {
83
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to create or update Type");
84
+            if (_mediator == null)
85
+            {
86
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
87
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
88
+            }
89
+            if(cmd != null)
90
+            {
91
+                try
92
+                {
93
+                    using Task<int> typesTask = _mediator.Send(cmd);
94
+                    await typesTask;
95
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
96
+                    {
97
+                        return Ok(typesTask.Result);
98
+                    }
99
+                    else
100
+                    {
101
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
102
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
103
+                    }
104
+                }
105
+                catch (Exception ex)
106
+                {
107
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
108
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
109
+                }
110
+            }
111
+            else
112
+            {
113
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
114
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
115
+            }
116
+           
117
+        }
118
+
119
+        /// <summary>
120
+        /// delete type by id
121
+        /// </summary>
122
+        /// <param name="id"></param>
123
+        /// <returns></returns>
124
+        [HttpDelete(c_deleteById)]
125
+        [ProducesResponseType(StatusCodes.Status200OK)]
126
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
127
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
128
+        public async Task<IActionResult> DeleteByIdAsync([FromRoute] Guid id)
129
+        {
130
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to delete propriete by: {id}");
131
+            if (_mediator == null)
132
+            {
133
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
134
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
135
+            }
136
+            if (id != null)
137
+            {
138
+                try
139
+                {
140
+                    RemoveProprieteCommand removeProprieteCommand = new RemoveProprieteCommand { Id = id };
141
+                    using Task<int> typesTask = _mediator.Send(removeProprieteCommand);
142
+                    await typesTask;
143
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
144
+                    {
145
+                        return Ok(typesTask.Result);
146
+                    }
147
+                    else
148
+                    {
149
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
150
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
151
+                    }
152
+                }
153
+                catch (Exception ex)
154
+                {
155
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
156
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
157
+                }
158
+            }
159
+            else
160
+            {
161
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
162
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
163
+            }
164
+
165
+        }
166
+    }
167
+}

+ 166
- 0
CQRS/Backend.API/Controllers/TypeProprieteController.cs Переглянути файл

@@ -0,0 +1,166 @@
1
+using Backend.Domain;
2
+using Backend.Models;
3
+using Mediator;
4
+using MediatR;
5
+using Microsoft.AspNetCore.Http;
6
+using Microsoft.AspNetCore.Mvc;
7
+using Microsoft.Extensions.Logging;
8
+using System;
9
+using System.Collections.Generic;
10
+using System.Linq;
11
+using System.Reflection;
12
+using System.Threading.Tasks;
13
+
14
+namespace Backend.API.Controllers
15
+{
16
+    [ApiController]
17
+    [Route("api/[controller]")]
18
+    public class TypeProprieteController : ControllerBase
19
+    {
20
+        private const string c_getAllTypePropriete = "getAll";
21
+        private const string c_postCreateOrUpdate = "createOrUpdate";
22
+        private const string c_deleteById = "deleteById/{id}"; 
23
+
24
+        private readonly ILogger<TypeProprieteController> _log;
25
+        private readonly IMediator _mediator;
26
+
27
+        public TypeProprieteController(ILogger<TypeProprieteController> log, IMediator mediator)
28
+        {
29
+            _log = log;
30
+            _mediator = mediator;
31
+        }
32
+
33
+        /// <summary>
34
+        /// get all type propriete
35
+        /// </summary>
36
+        /// <returns></returns>
37
+        [HttpGet(c_getAllTypePropriete)]
38
+        [ProducesResponseType(StatusCodes.Status200OK)]
39
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
40
+        public async Task<IActionResult> GetAllAsync()
41
+        {
42
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to get all TypePropriete");
43
+            if (_mediator == null)
44
+            {
45
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
46
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
47
+            }
48
+            try
49
+            {
50
+                var query = new GetTypeProprieteListQuery();
51
+                using Task<IEnumerable<TypeProprieteResponse>> typesTask = _mediator.Send(query);
52
+                await typesTask;
53
+                if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
54
+                {
55
+                    return Ok(typesTask.Result);
56
+                }
57
+                else
58
+                {
59
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
60
+                    return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
61
+                }
62
+            }
63
+            catch (Exception ex)
64
+            {
65
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
66
+                return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
67
+            }
68
+
69
+        }
70
+
71
+        /// <summary>
72
+        /// create or update typePropriete
73
+        /// </summary>
74
+        /// <param name="cmd"></param>
75
+        /// <returns></returns>
76
+        [HttpPost(c_postCreateOrUpdate)] 
77
+        [ProducesResponseType(StatusCodes.Status200OK)]
78
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
79
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
80
+        public async Task<IActionResult> CreateOrUpdateAsync([FromBody] AddTypeProprieteCommand cmd)
81
+        {
82
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to create or update Type");
83
+            if (_mediator == null)
84
+            {
85
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
86
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
87
+            }
88
+            if (cmd != null)
89
+            {
90
+                try
91
+                {
92
+                    using Task<int> typesTask = _mediator.Send(cmd);
93
+                    await typesTask;
94
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
95
+                    {
96
+                        return Ok(typesTask.Result);
97
+                    }
98
+                    else
99
+                    {
100
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
101
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
102
+                    }
103
+                }
104
+                catch (Exception ex)
105
+                {
106
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
107
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
108
+                }
109
+            }
110
+            else
111
+            {
112
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
113
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
114
+            }
115
+
116
+        }
117
+
118
+        /// <summary>
119
+        /// delete type by id
120
+        /// </summary>
121
+        /// <param name="id"></param>
122
+        /// <returns></returns>
123
+        [HttpDelete(c_deleteById)]
124
+        [ProducesResponseType(StatusCodes.Status200OK)]
125
+        [ProducesResponseType(StatusCodes.Status400BadRequest)]
126
+        [ProducesResponseType(StatusCodes.Status500InternalServerError)]
127
+        public async Task<IActionResult> DeleteByIdAsync([FromRoute] Guid id)
128
+        {
129
+            _log.LogDebug($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Request to delete type by: {id}");
130
+            if (_mediator == null)
131
+            {
132
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
133
+                return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
134
+            }
135
+            if (id != null)
136
+            {
137
+                try
138
+                {
139
+                    RemoveTypeProprieteCommand removeTypeProprieteCommand = new RemoveTypeProprieteCommand { Id = id };
140
+                    using Task<int> typesTask = _mediator.Send(removeTypeProprieteCommand);
141
+                    await typesTask;
142
+                    if (typesTask.IsCompleted && typesTask.IsCompletedSuccessfully)
143
+                    {
144
+                        return Ok(typesTask.Result);
145
+                    }
146
+                    else
147
+                    {
148
+                        _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_5XX}");
149
+                        return StatusCode(StatusCodes.Status500InternalServerError, ErrorsConstants.S_HTTP_ERROR_5XX);
150
+                    }
151
+                }
152
+                catch (Exception ex)
153
+                {
154
+                    _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - Exception:{ex.Message}");
155
+                    return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
156
+                }
157
+            }
158
+            else
159
+            {
160
+                _log.LogError($"{this.GetType().Name} -> {MethodBase.GetCurrentMethod()} - {ErrorsConstants.S_HTTP_ERROR_4XX}");
161
+                return StatusCode(StatusCodes.Status400BadRequest, ErrorsConstants.S_HTTP_ERROR_4XX);
162
+            }
163
+
164
+        }
165
+    }
166
+}

+ 29
- 0
CQRS/Backend.API/Dockerfile Переглянути файл

@@ -0,0 +1,29 @@
1
+#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
2
+
3
+#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
4
+#For more information, please see https://aka.ms/containercompat
5
+
6
+FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
7
+WORKDIR /app
8
+EXPOSE 80
9
+
10
+FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
11
+WORKDIR /src
12
+COPY ["Backend.API/Backend.API.csproj", "Backend.API/"]
13
+COPY ["Backend.Common/Backend.Common.csproj", "Backend.Common/"]
14
+COPY ["Mediator/Mediator.csproj", "Mediator/"]
15
+COPY ["Backend.Models/Backend.Models.csproj", "Backend.Models/"]
16
+COPY ["Backend.Services/Backend.Services.csproj", "Backend.Services/"]
17
+COPY ["Backend.Data/Backend.Data.csproj", "Backend.Data/"]
18
+RUN dotnet restore "Backend.API/Backend.API.csproj"
19
+COPY . .
20
+WORKDIR "/src/Backend.API"
21
+RUN dotnet build "Backend.API.csproj" -c Release -o /app/build
22
+
23
+FROM build AS publish
24
+RUN dotnet publish "Backend.API.csproj" -c Release -o /app/publish
25
+
26
+FROM base AS final
27
+WORKDIR /app
28
+COPY --from=publish /app/publish .
29
+ENTRYPOINT ["dotnet", "Backend.API.dll"]

+ 26
- 0
CQRS/Backend.API/Program.cs Переглянути файл

@@ -0,0 +1,26 @@
1
+using Microsoft.AspNetCore.Hosting;
2
+using Microsoft.Extensions.Configuration;
3
+using Microsoft.Extensions.Hosting;
4
+using Microsoft.Extensions.Logging;
5
+using System;
6
+using System.Collections.Generic;
7
+using System.Linq;
8
+using System.Threading.Tasks;
9
+
10
+namespace Backend.API
11
+{
12
+    public class Program
13
+    {
14
+        public static void Main(string[] args)
15
+        {
16
+            CreateHostBuilder(args).Build().Run();
17
+        }
18
+
19
+        public static IHostBuilder CreateHostBuilder(string[] args) =>
20
+            Host.CreateDefaultBuilder(args)
21
+                .ConfigureWebHostDefaults(webBuilder =>
22
+                {
23
+                    webBuilder.UseStartup<Startup>();
24
+                });
25
+    }
26
+}

+ 36
- 0
CQRS/Backend.API/Properties/launchSettings.json Переглянути файл

@@ -0,0 +1,36 @@
1
+{
2
+  "iisSettings": {
3
+    "windowsAuthentication": false,
4
+    "anonymousAuthentication": true,
5
+    "iisExpress": {
6
+      "applicationUrl": "http://localhost:43012/",
7
+      "sslPort": 0
8
+    }
9
+  },
10
+  "$schema": "http://json.schemastore.org/launchsettings.json",
11
+  "profiles": {
12
+    "IIS Express": {
13
+      "commandName": "IISExpress",
14
+      "launchBrowser": true,
15
+      "launchUrl": "swagger",
16
+      "environmentVariables": {
17
+        "ASPNETCORE_ENVIRONMENT": "Development"
18
+      }
19
+    },
20
+    "Backend.API": {
21
+      "commandName": "Project",
22
+      "launchBrowser": true,
23
+      "launchUrl": "swagger",
24
+      "environmentVariables": {
25
+        "ASPNETCORE_ENVIRONMENT": "Development"
26
+      },
27
+      "applicationUrl": "http://localhost:5000"
28
+    },
29
+    "Docker (1)": {
30
+      "commandName": "Docker",
31
+      "launchBrowser": true,
32
+      "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
33
+      "publishAllPorts": true
34
+    }
35
+  }
36
+}

+ 68
- 0
CQRS/Backend.API/Startup.cs Переглянути файл

@@ -0,0 +1,68 @@
1
+using Backend.API.Config;
2
+using Backend.ApplicationCore.Mapper;
3
+using Backend.Persistence.Config;
4
+using Microsoft.AspNetCore.Builder;
5
+using Microsoft.AspNetCore.Hosting;
6
+using Microsoft.Extensions.Configuration;
7
+using Microsoft.Extensions.DependencyInjection;
8
+using Microsoft.Extensions.Hosting;
9
+using System;
10
+
11
+namespace Backend.API
12
+{
13
+    public class Startup
14
+    {
15
+        private readonly IConfiguration _configuration = null;
16
+        private readonly IHostEnvironment _appEnvironment = null;
17
+        public Startup(IConfiguration configuration, IHostEnvironment appEnvironment)
18
+        {
19
+            _configuration = configuration;
20
+            _appEnvironment = appEnvironment;
21
+        }
22
+
23
+        // This method gets called by the runtime. Use this method to add services to the container.
24
+        public void ConfigureServices(IServiceCollection services)
25
+        {
26
+            services.AddControllers();
27
+            services.AddOptions();
28
+            services.AddDependencyInjectionService();
29
+            services.AddDataDependencyInjectionRepository();
30
+            services.AddMediaRHandlerDependency();
31
+            services.AddAutoMapperConfig();
32
+            services.AddSwaggerDocumentation();
33
+            AddDatabase(services);
34
+        }
35
+
36
+
37
+
38
+        protected virtual void AddDatabase(IServiceCollection services)
39
+        {
40
+            if (services != null)
41
+            {
42
+                services.AddDatabaseModule(_configuration);
43
+            }
44
+        }
45
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
46
+        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
47
+        {
48
+            if (env.IsDevelopment())
49
+            {
50
+                app.UseDeveloperExceptionPage();
51
+            }
52
+
53
+            app.UseRouting();
54
+
55
+            app.UseAuthorization();
56
+
57
+            app.UseEndpoints(endpoints =>
58
+            {
59
+                endpoints.MapControllers();
60
+            });
61
+            app.UseApplicationDatabase(serviceProvider);
62
+            app.UseSwaggerDocumentation();
63
+        }
64
+
65
+    
66
+
67
+    }
68
+}

+ 9
- 0
CQRS/Backend.API/appsettings.Development.json Переглянути файл

@@ -0,0 +1,9 @@
1
+{
2
+  "Logging": {
3
+    "LogLevel": {
4
+      "Default": "Information",
5
+      "Microsoft": "Warning",
6
+      "Microsoft.Hosting.Lifetime": "Information"
7
+    }
8
+  }
9
+}

+ 13
- 0
CQRS/Backend.API/appsettings.json Переглянути файл

@@ -0,0 +1,13 @@
1
+{
2
+  "Logging": {
3
+    "LogLevel": {
4
+      "Default": "Information",
5
+      "Microsoft": "Warning",
6
+      "Microsoft.Hosting.Lifetime": "Information"
7
+    }
8
+  },
9
+  "ConnectionStrings": {
10
+    "AppDbContext": "server=localhost; port=3306; database=cataloguedb; user=root; password=Password123*; Persist Security Info=False; Connect Timeout=300"
11
+  },
12
+  "AllowedHosts": "*"
13
+}

BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/AutoMapper.dll Переглянути файл


+ 5740
- 0
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.deps.json
Різницю між файлами не показано, бо вона завелика
Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.exe Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.pdb Переглянути файл


+ 8
- 0
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.runtimeconfig.dev.json Переглянути файл

@@ -0,0 +1,8 @@
1
+{
2
+  "runtimeOptions": {
3
+    "additionalProbingPaths": [
4
+      "C:\\Users\\Alex ONDOA BALEGNAMA\\.dotnet\\store\\|arch|\\|tfm|",
5
+      "C:\\Users\\Alex ONDOA BALEGNAMA\\.nuget\\packages"
6
+    ]
7
+  }
8
+}

+ 13
- 0
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.API.runtimeconfig.json Переглянути файл

@@ -0,0 +1,13 @@
1
+{
2
+  "runtimeOptions": {
3
+    "tfm": "netcoreapp3.1",
4
+    "framework": {
5
+      "name": "Microsoft.AspNetCore.App",
6
+      "version": "3.1.0"
7
+    },
8
+    "configProperties": {
9
+      "System.GC.Server": true,
10
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
11
+    }
12
+  }
13
+}

BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.ApplicationCore.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.ApplicationCore.pdb Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Domain.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Domain.pdb Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Infrastructure.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Infrastructure.pdb Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Persistence.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Backend.Persistence.pdb Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/BouncyCastle.Crypto.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/EntityFramework.SqlServer.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/EntityFramework.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Google.Protobuf.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/K4os.Compression.LZ4.Streams.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/K4os.Compression.LZ4.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/K4os.Hash.xxHash.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/MediatR.Extensions.Microsoft.DependencyInjection.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/MediatR.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNet.Identity.Core.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNet.Identity.EntityFramework.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNetCore.Cryptography.Internal.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNetCore.Cryptography.KeyDerivation.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.AspNetCore.Identity.EntityFrameworkCore.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.EntityFrameworkCore.Abstractions.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.EntityFrameworkCore.Relational.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.EntityFrameworkCore.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Caching.Abstractions.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Caching.Memory.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.DependencyInjection.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Identity.Core.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Identity.Stores.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Logging.Abstractions.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Logging.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Options.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Primitives.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Microsoft.OpenApi.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/MySql.Data.EntityFrameworkCore.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/MySql.Data.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/MySqlConnector.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Pomelo.EntityFrameworkCore.MySql.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Renci.SshNet.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/SshNet.Security.Cryptography.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Swashbuckle.AspNetCore.Swagger.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Swashbuckle.AspNetCore.SwaggerGen.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/Swashbuckle.AspNetCore.SwaggerUI.dll Переглянути файл


BIN
CQRS/Backend.API/bin/Debug/netcoreapp3.1/System.Collections.Immutable.dll Переглянути файл


+ 0
- 0
CQRS/Backend.API/bin/Debug/netcoreapp3.1/System.ComponentModel.Annotations.dll Переглянути файл


Деякі файли не було показано, через те що забагато файлів було змінено

Powered by TurnKey Linux.