diff --git a/src/app/features/contact/contact.module.ts b/src/app/features/contact/contact.module.ts
new file mode 100644
index 0000000..af23967
--- /dev/null
+++ b/src/app/features/contact/contact.module.ts
@@ -0,0 +1,30 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import {RouterModule, Routes} from "@angular/router";
+import {ContactListComponent} from "./page/contact-list/contact-list.component";
+import {ContactEditComponent} from "./page/contact-edit/contact-edit.component";
+import {ContactViewComponent} from "./page/contact-view/contact-view.component";
+
+const routes: Routes=[
+ {
+ path: "",
+ component:ContactListComponent
+ },
+ {
+ path: "edit",
+ component: ContactEditComponent
+ },
+ {
+ path: "view",
+ component: ContactViewComponent
+ }
+]
+
+@NgModule({
+ declarations: [],
+ imports: [
+ CommonModule,
+ RouterModule.forChild(routes)
+ ]
+})
+export class ContactModule { }
diff --git a/src/app/features/contact/page/contact-edit/contact-edit.component.html b/src/app/features/contact/page/contact-edit/contact-edit.component.html
new file mode 100644
index 0000000..65be22a
--- /dev/null
+++ b/src/app/features/contact/page/contact-edit/contact-edit.component.html
@@ -0,0 +1,18 @@
+
+
diff --git a/src/app/features/contact/page/contact-edit/contact-edit.component.scss b/src/app/features/contact/page/contact-edit/contact-edit.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/features/contact/page/contact-edit/contact-edit.component.spec.ts b/src/app/features/contact/page/contact-edit/contact-edit.component.spec.ts
new file mode 100644
index 0000000..1875134
--- /dev/null
+++ b/src/app/features/contact/page/contact-edit/contact-edit.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ContactEditComponent } from './contact-edit.component';
+
+describe('ContactEditComponent', () => {
+ let component: ContactEditComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ContactEditComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ContactEditComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/features/contact/page/contact-edit/contact-edit.component.ts b/src/app/features/contact/page/contact-edit/contact-edit.component.ts
new file mode 100644
index 0000000..b71f3de
--- /dev/null
+++ b/src/app/features/contact/page/contact-edit/contact-edit.component.ts
@@ -0,0 +1,35 @@
+import {Component, OnInit} from '@angular/core';
+import {ButtonDirective} from "primeng/button";
+import {FormsModule} from "@angular/forms";
+import {InputTextModule} from "primeng/inputtext";
+import {ContactServiceService} from "../../service/contact.service.service";
+import {Router} from "@angular/router";
+
+@Component({
+ selector: 'app-contact-edit',
+ standalone: true,
+ imports: [
+ ButtonDirective,
+ FormsModule,
+ InputTextModule
+ ],
+ templateUrl: './contact-edit.component.html',
+ styleUrl: './contact-edit.component.scss'
+})
+export class ContactEditComponent implements OnInit{
+ contact:any={}
+
+ constructor(private contactService: ContactServiceService,private router: Router) {}
+ ngOnInit() {
+ }
+
+ save() {
+ this.contactService.create(this.contact).subscribe( {
+ next: (res)=>{
+ if(res.success){
+ this.router.navigateByUrl("/app/contact").then();
+ }
+ }
+ })
+ }
+}
diff --git a/src/app/features/contact/page/contact-list/contact-list.component.html b/src/app/features/contact/page/contact-list/contact-list.component.html
new file mode 100644
index 0000000..806edcc
--- /dev/null
+++ b/src/app/features/contact/page/contact-list/contact-list.component.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+ Nom |
+ Prénom |
+ Téléphone |
+ Email |
+ Actions |
+
+
+
+
+ {{contact.lastname}} |
+ {{contact.firstname}} |
+ {{contact.phone}} |
+ {{contact.mail}} |
+
+
+
+
+ |
+
+
+
+
diff --git a/src/app/features/contact/page/contact-list/contact-list.component.scss b/src/app/features/contact/page/contact-list/contact-list.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/features/contact/page/contact-list/contact-list.component.spec.ts b/src/app/features/contact/page/contact-list/contact-list.component.spec.ts
new file mode 100644
index 0000000..910a800
--- /dev/null
+++ b/src/app/features/contact/page/contact-list/contact-list.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ContactListComponent } from './contact-list.component';
+
+describe('ContactListComponent', () => {
+ let component: ContactListComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ContactListComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ContactListComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/features/contact/page/contact-list/contact-list.component.ts b/src/app/features/contact/page/contact-list/contact-list.component.ts
new file mode 100644
index 0000000..ff9754a
--- /dev/null
+++ b/src/app/features/contact/page/contact-list/contact-list.component.ts
@@ -0,0 +1,41 @@
+import {Component, OnInit} from '@angular/core';
+import {ButtonDirective} from "primeng/button";
+import {PrimeTemplate} from "primeng/api";
+import {TableModule} from "primeng/table";
+import {ContactServiceService} from "../../service/contact.service.service";
+import {Router} from "@angular/router";
+
+@Component({
+ selector: 'app-contact-list',
+ standalone: true,
+ imports: [
+ ButtonDirective,
+ PrimeTemplate,
+ TableModule
+ ],
+ templateUrl: './contact-list.component.html',
+ styleUrl: './contact-list.component.scss'
+})
+export class ContactListComponent implements OnInit{
+ contacts: any[]=[]
+
+ constructor(private contactService: ContactServiceService,private router: Router) {
+ }
+ ngOnInit() {
+ this.getServices()
+ }
+ getServices() {
+ this.contactService.getAll().subscribe({
+ next: (res) => {
+ if (res.success) {
+ this.contacts = res.data;
+ }
+ }
+ })
+ }
+ edit(): void{
+ this.router.navigateByUrl('/app/contact/edit').then()
+ }
+}
+
+
diff --git a/src/app/features/contact/page/contact-view/contact-view.component.html b/src/app/features/contact/page/contact-view/contact-view.component.html
new file mode 100644
index 0000000..f50ab5c
--- /dev/null
+++ b/src/app/features/contact/page/contact-view/contact-view.component.html
@@ -0,0 +1 @@
+contact-view works!
diff --git a/src/app/features/contact/page/contact-view/contact-view.component.scss b/src/app/features/contact/page/contact-view/contact-view.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/features/contact/page/contact-view/contact-view.component.spec.ts b/src/app/features/contact/page/contact-view/contact-view.component.spec.ts
new file mode 100644
index 0000000..adfa576
--- /dev/null
+++ b/src/app/features/contact/page/contact-view/contact-view.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ContactViewComponent } from './contact-view.component';
+
+describe('ContactViewComponent', () => {
+ let component: ContactViewComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ContactViewComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ContactViewComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/features/contact/page/contact-view/contact-view.component.ts b/src/app/features/contact/page/contact-view/contact-view.component.ts
new file mode 100644
index 0000000..f0bdcb9
--- /dev/null
+++ b/src/app/features/contact/page/contact-view/contact-view.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-contact-view',
+ standalone: true,
+ imports: [],
+ templateUrl: './contact-view.component.html',
+ styleUrl: './contact-view.component.scss'
+})
+export class ContactViewComponent {
+
+}
diff --git a/src/app/features/contact/service/contact.service.service.spec.ts b/src/app/features/contact/service/contact.service.service.spec.ts
new file mode 100644
index 0000000..c5ccaad
--- /dev/null
+++ b/src/app/features/contact/service/contact.service.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { ContactServiceService } from './contact.service.service';
+
+describe('ContactServiceService', () => {
+ let service: ContactServiceService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(ContactServiceService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/src/app/features/contact/service/contact.service.service.ts b/src/app/features/contact/service/contact.service.service.ts
new file mode 100644
index 0000000..cb60b36
--- /dev/null
+++ b/src/app/features/contact/service/contact.service.service.ts
@@ -0,0 +1,45 @@
+import { Injectable } from '@angular/core';
+import {HttpClient} from "@angular/common/http";
+import {Observable} from "rxjs";
+import {apiRoute} from "../../../core/routes/api.route";
+
+
+@Injectable({
+ providedIn: 'root'
+})
+export class ContactServiceService {
+ url:string="contact";
+
+ constructor(private http: HttpClient) { }
+
+ //getAll :
+ getAll():Observable{
+ return this.http.get(apiRoute+this.url);
+}
+
+//getById :
+
+ getById(id:string):Observable{
+ return this.http.get(apiRoute+this.url+"/"+id)
+ }
+
+
+//create :
+
+ create(contact: any):Observable{
+ return this.http.post(apiRoute+this.url,contact)
+ }
+
+
+//update :
+update(contact: any):Observable{
+ return this.http.put(apiRoute+this.url+"/"+contact.id,contact)
+}
+
+//delete :
+
+ delete(id:string):Observable{
+ return this.http.delete(apiRoute+this.url+"/"+id)
+ }
+
+}
diff --git a/src/app/features/problem/page/problem-edit/problem-edit.component.html b/src/app/features/problem/page/problem-edit/problem-edit.component.html
new file mode 100644
index 0000000..1d1c207
--- /dev/null
+++ b/src/app/features/problem/page/problem-edit/problem-edit.component.html
@@ -0,0 +1,15 @@
+
diff --git a/src/app/features/problem/page/problem-edit/problem-edit.component.scss b/src/app/features/problem/page/problem-edit/problem-edit.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/features/problem/page/problem-edit/problem-edit.component.spec.ts b/src/app/features/problem/page/problem-edit/problem-edit.component.spec.ts
new file mode 100644
index 0000000..269772a
--- /dev/null
+++ b/src/app/features/problem/page/problem-edit/problem-edit.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ProblemEditComponent } from './problem-edit.component';
+
+describe('ProblemEditComponent', () => {
+ let component: ProblemEditComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ProblemEditComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ProblemEditComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/features/problem/page/problem-edit/problem-edit.component.ts b/src/app/features/problem/page/problem-edit/problem-edit.component.ts
new file mode 100644
index 0000000..457c1d7
--- /dev/null
+++ b/src/app/features/problem/page/problem-edit/problem-edit.component.ts
@@ -0,0 +1,38 @@
+import {Component, OnInit} from '@angular/core';
+import {ButtonDirective} from "primeng/button";
+import {PrimeTemplate} from "primeng/api";
+import {TableModule} from "primeng/table";
+import {InputTextModule} from "primeng/inputtext";
+import {FormsModule, ReactiveFormsModule} from "@angular/forms";
+import {ProblemServiceService} from "../../service/problem.service.service";
+import {Router} from "@angular/router";
+
+@Component({
+ selector: 'app-problem-edit',
+ standalone: true,
+ imports: [
+ ButtonDirective,
+ PrimeTemplate,
+ TableModule,
+ InputTextModule,
+ ReactiveFormsModule,
+ FormsModule
+ ],
+ templateUrl: './problem-edit.component.html',
+ styleUrl: './problem-edit.component.scss'
+})
+export class ProblemEditComponent implements OnInit{
+ problem:any={}
+
+ constructor(private problemService: ProblemServiceService, private router: Router) {
+ }
+ngOnInit() {
+}
+save():void{
+ this.problemService.create(this.problem).subscribe({
+ next: (res)=>{
+ this.router.navigateByUrl("app/problem").then();
+ }
+ })
+}
+}
diff --git a/src/app/features/problem/page/problem-list/problem-list.component.html b/src/app/features/problem/page/problem-list/problem-list.component.html
new file mode 100644
index 0000000..6728d18
--- /dev/null
+++ b/src/app/features/problem/page/problem-list/problem-list.component.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+ Description |
+ Date |
+ Statut |
+ Actions |
+
+
+
+
+ {{problems.description}} |
+ {{problems.date}} |
+ {{problems.status}} |
+
+
+
+
+ |
+
+
+
+
diff --git a/src/app/features/problem/page/problem-list/problem-list.component.scss b/src/app/features/problem/page/problem-list/problem-list.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/features/problem/page/problem-list/problem-list.component.spec.ts b/src/app/features/problem/page/problem-list/problem-list.component.spec.ts
new file mode 100644
index 0000000..0be2e85
--- /dev/null
+++ b/src/app/features/problem/page/problem-list/problem-list.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ProblemListComponent } from './problem-list.component';
+
+describe('ProblemListComponent', () => {
+ let component: ProblemListComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ProblemListComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ProblemListComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/features/problem/page/problem-list/problem-list.component.ts b/src/app/features/problem/page/problem-list/problem-list.component.ts
new file mode 100644
index 0000000..6e1c6f9
--- /dev/null
+++ b/src/app/features/problem/page/problem-list/problem-list.component.ts
@@ -0,0 +1,39 @@
+import {Component, OnInit} from '@angular/core';
+import {ButtonDirective} from "primeng/button";
+import {PrimeTemplate} from "primeng/api";
+import {TableModule} from "primeng/table";
+import {ProblemServiceService} from "../../service/problem.service.service";
+import {Router} from "@angular/router";
+
+@Component({
+ selector: 'app-problem-list',
+ standalone: true,
+ imports: [
+ ButtonDirective,
+ PrimeTemplate,
+ TableModule
+ ],
+ templateUrl: './problem-list.component.html',
+ styleUrl: './problem-list.component.scss'
+})
+export class ProblemListComponent implements OnInit{
+ problems:any[]=[]
+ constructor(private problemService: ProblemServiceService,private router: Router) {
+ }
+ ngOnInit() {
+ this.getProblems()
+ }
+
+ getProblems():void{
+ this.problemService.getAll().subscribe({
+ next: (res)=>{
+ if(res.success){
+ this.problems=res.data
+ }
+ }
+ })
+ }
+ edit():void{
+ this.router.navigateByUrl("app/problem/edit").then()
+ }
+}
diff --git a/src/app/features/problem/page/problem-view/problem-view.component.html b/src/app/features/problem/page/problem-view/problem-view.component.html
new file mode 100644
index 0000000..9fea102
--- /dev/null
+++ b/src/app/features/problem/page/problem-view/problem-view.component.html
@@ -0,0 +1 @@
+problem-view works!
diff --git a/src/app/features/problem/page/problem-view/problem-view.component.scss b/src/app/features/problem/page/problem-view/problem-view.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/features/problem/page/problem-view/problem-view.component.spec.ts b/src/app/features/problem/page/problem-view/problem-view.component.spec.ts
new file mode 100644
index 0000000..292e95b
--- /dev/null
+++ b/src/app/features/problem/page/problem-view/problem-view.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ProblemViewComponent } from './problem-view.component';
+
+describe('ProblemViewComponent', () => {
+ let component: ProblemViewComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ProblemViewComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(ProblemViewComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/features/problem/page/problem-view/problem-view.component.ts b/src/app/features/problem/page/problem-view/problem-view.component.ts
new file mode 100644
index 0000000..b1a35c1
--- /dev/null
+++ b/src/app/features/problem/page/problem-view/problem-view.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-problem-view',
+ standalone: true,
+ imports: [],
+ templateUrl: './problem-view.component.html',
+ styleUrl: './problem-view.component.scss'
+})
+export class ProblemViewComponent {
+
+}
diff --git a/src/app/features/problem/problem.module.ts b/src/app/features/problem/problem.module.ts
new file mode 100644
index 0000000..a3d7186
--- /dev/null
+++ b/src/app/features/problem/problem.module.ts
@@ -0,0 +1,31 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import {ProblemListComponent} from "./page/problem-list/problem-list.component";
+import {ProblemEditComponent} from "./page/problem-edit/problem-edit.component";
+import {ProblemViewComponent} from "./page/problem-view/problem-view.component";
+import {RouterModule, Routes} from "@angular/router";
+
+const routes : Routes=[
+ {
+ path: '',
+ component: ProblemListComponent
+ },
+ {
+ path: 'edit',
+ component: ProblemEditComponent
+ },
+ {
+ path: 'view',
+ component: ProblemViewComponent
+ }
+]
+
+
+@NgModule({
+ declarations: [],
+ imports: [
+ CommonModule,
+ RouterModule.forChild(routes)
+ ]
+})
+export class ProblemModule { }
diff --git a/src/app/features/problem/service/problem.service.service.spec.ts b/src/app/features/problem/service/problem.service.service.spec.ts
new file mode 100644
index 0000000..58e5a56
--- /dev/null
+++ b/src/app/features/problem/service/problem.service.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { ProblemServiceService } from './problem.service.service';
+
+describe('ProblemServiceService', () => {
+ let service: ProblemServiceService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(ProblemServiceService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/src/app/features/problem/service/problem.service.service.ts b/src/app/features/problem/service/problem.service.service.ts
new file mode 100644
index 0000000..a889000
--- /dev/null
+++ b/src/app/features/problem/service/problem.service.service.ts
@@ -0,0 +1,49 @@
+import { Injectable } from '@angular/core';
+import {Observable} from "rxjs";
+import {apiRoute} from "../../../core/routes/api.route";
+import {HttpClient} from "@angular/common/http";
+
+@Injectable({
+ providedIn: 'root'
+})
+export class ProblemServiceService {
+ url="problem"
+
+ constructor(private http: HttpClient) { }
+
+ //getAll :
+
+ getAll(): Observable{
+ return this.http.get(apiRoute+this.url);
+ }
+
+
+ //getById :
+
+ getById(id: string): Observable{
+ return this.http.get(apiRoute+this.url+"/"+id);
+ }
+
+
+ //create :
+
+ create(problem: any): Observable{
+ return this.http.post(apiRoute+this.url,problem);
+ }
+
+
+ //update :
+
+ update(problem: any): Observable{
+ return this.http.put(apiRoute+this.url+"/"+problem.id,problem);
+ }
+
+
+ //delete :
+
+ delete(id: string): Observable{
+ return this.http.delete(apiRoute+this.url+"/"+id);
+ }
+
+
+}