From b421df52ed0406c5b0b90c22320cb1550b0b70b6 Mon Sep 17 00:00:00 2001
From: "alec.schmidt" <alec.schmidt@etu.hesge.ch>
Date: Mon, 5 Jun 2023 16:35:04 +0200
Subject: [PATCH] MERCI RICHARD

---
 frontend/src/app/Types/types.ts               | 26 ++++++++++
 .../src/app/admin/admin-routing.module.ts     | 10 ++++
 frontend/src/app/admin/admin.component.css    |  0
 frontend/src/app/admin/admin.component.html   | 26 ++++++++++
 .../src/app/admin/admin.component.spec.ts     | 21 +++++++++
 frontend/src/app/admin/admin.component.ts     | 47 +++++++++++++++++++
 frontend/src/app/admin/admin.module.ts        | 14 ++++++
 frontend/src/app/app-routing.module.ts        |  8 +++-
 frontend/src/app/app.module.ts                | 12 +++--
 frontend/src/app/login/login.component.ts     |  2 +-
 frontend/src/app/login/login.module.ts        |  5 --
 .../authentication.service.spec.ts            |  0
 .../{ => services}/authentication.service.ts  |  0
 .../src/app/services/users.service.spec.ts    | 16 +++++++
 frontend/src/app/services/users.service.ts    | 19 ++++++++
 15 files changed, 195 insertions(+), 11 deletions(-)
 create mode 100644 frontend/src/app/Types/types.ts
 create mode 100644 frontend/src/app/admin/admin-routing.module.ts
 create mode 100644 frontend/src/app/admin/admin.component.css
 create mode 100644 frontend/src/app/admin/admin.component.html
 create mode 100644 frontend/src/app/admin/admin.component.spec.ts
 create mode 100644 frontend/src/app/admin/admin.component.ts
 create mode 100644 frontend/src/app/admin/admin.module.ts
 rename frontend/src/app/{ => services}/authentication.service.spec.ts (100%)
 rename frontend/src/app/{ => services}/authentication.service.ts (100%)
 create mode 100644 frontend/src/app/services/users.service.spec.ts
 create mode 100644 frontend/src/app/services/users.service.ts

diff --git a/frontend/src/app/Types/types.ts b/frontend/src/app/Types/types.ts
new file mode 100644
index 0000000..405dfe2
--- /dev/null
+++ b/frontend/src/app/Types/types.ts
@@ -0,0 +1,26 @@
+export type User = {
+    id: number;
+    username: string;
+    password: string;
+    type: string;
+};
+
+export type QandA = {
+    QUESTIONS: Question[];
+    ANSWERS: Answer[];
+};
+
+export type Question = {
+    question: string;
+    category: string;
+}
+
+export type Answer = {
+    CORRECT: string;
+    WRONG: string[];
+}
+
+export type Category = {
+    id: number;
+    category: string;
+};
\ No newline at end of file
diff --git a/frontend/src/app/admin/admin-routing.module.ts b/frontend/src/app/admin/admin-routing.module.ts
new file mode 100644
index 0000000..f413300
--- /dev/null
+++ b/frontend/src/app/admin/admin-routing.module.ts
@@ -0,0 +1,10 @@
+import { NgModule } from '@angular/core';
+import { RouterModule, Routes } from '@angular/router';
+
+const routes: Routes = [];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule]
+})
+export class AdminRoutingModule { }
diff --git a/frontend/src/app/admin/admin.component.css b/frontend/src/app/admin/admin.component.css
new file mode 100644
index 0000000..e69de29
diff --git a/frontend/src/app/admin/admin.component.html b/frontend/src/app/admin/admin.component.html
new file mode 100644
index 0000000..3e2ff7b
--- /dev/null
+++ b/frontend/src/app/admin/admin.component.html
@@ -0,0 +1,26 @@
+<table>
+    <thead>
+        <th>Username</th>
+        <th>Type</th>
+    </thead>
+    <tbody>
+        <tr *ngFor="let user of users">
+            <td>{{user.username}}</td>
+            <td>{{user.user_type}}</td>
+            <td><button (click)="deleteUser(user)">DELETE</button></td>
+        </tr>
+    </tbody>
+</table>
+
+<table>
+    <thead>
+        <th>Question</th>
+        <th>Catégorie</th>
+    </thead>
+    <tbody>
+        <tr *ngFor="let question of questions">
+            <td>{{question.question}}</td>
+            <td>{{question.category}}</td>
+        </tr>
+    </tbody>
+</table>
\ No newline at end of file
diff --git a/frontend/src/app/admin/admin.component.spec.ts b/frontend/src/app/admin/admin.component.spec.ts
new file mode 100644
index 0000000..830d8ef
--- /dev/null
+++ b/frontend/src/app/admin/admin.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { AdminComponent } from './admin.component';
+
+describe('AdminComponent', () => {
+  let component: AdminComponent;
+  let fixture: ComponentFixture<AdminComponent>;
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      declarations: [AdminComponent]
+    });
+    fixture = TestBed.createComponent(AdminComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/frontend/src/app/admin/admin.component.ts b/frontend/src/app/admin/admin.component.ts
new file mode 100644
index 0000000..2ae1f47
--- /dev/null
+++ b/frontend/src/app/admin/admin.component.ts
@@ -0,0 +1,47 @@
+import { Component, OnInit } from '@angular/core';
+import { Router } from '@angular/router';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { Answer, QandA, Question, User } from '../Types/types';
+import { UsersService } from '../services/users.service';
+
+
+@Component({
+  selector: 'app-admin',
+  templateUrl: './admin.component.html',
+  styleUrls: ['./admin.component.css']
+})
+export class AdminComponent implements OnInit {
+    public data;
+    public users: User[] = [];
+    public questions: Question[] = [];
+    public answers: Answer[] = [];
+
+    constructor(
+      private router: Router,
+      private http: HttpClient,
+      private userController: UsersService) { }
+
+    ngOnInit(): void {
+      
+
+      let header = new HttpHeaders().set(
+        "Authorization", localStorage.getItem("token")
+      );
+
+      console.log(header);
+      
+      this.http.get("http://0.0.0.0:30992/API/v1/user", {headers:header})
+      .subscribe(users => {
+        this.users = users as User[];
+      });
+
+      this.http.get("http://0.0.0.0:30992/API/v1/question", {headers:header})
+      .subscribe(res => {
+        let questions = res as QandA;
+        this.questions = questions.QUESTIONS;
+        this.answers = questions.ANSWERS;
+      });
+    }
+
+    deleteUser(user:User) {this.userController.deleteUser(user)}
+}
diff --git a/frontend/src/app/admin/admin.module.ts b/frontend/src/app/admin/admin.module.ts
new file mode 100644
index 0000000..e1c2632
--- /dev/null
+++ b/frontend/src/app/admin/admin.module.ts
@@ -0,0 +1,14 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+import { AdminRoutingModule } from './admin-routing.module';
+
+
+@NgModule({
+  declarations: [],
+  imports: [
+    CommonModule,
+    AdminRoutingModule
+  ]
+})
+export class AdminModule { }
diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts
index c2cf113..137a71c 100644
--- a/frontend/src/app/app-routing.module.ts
+++ b/frontend/src/app/app-routing.module.ts
@@ -1,10 +1,14 @@
 import { NgModule } from '@angular/core';
 import { RouterModule, Routes } from '@angular/router';
+import { LoginComponent } from './login/login.component';
+import { AdminComponent } from './admin/admin.component';
 
 const routes: Routes = [
   {
-    path: 'login',
-    loadChildren: () => import('./login/login.module').then(m => m.LoginModule)
+    path: 'login', component: LoginComponent
+  },
+  {
+    path: 'admin', component: AdminComponent
   }
 ];
 
diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts
index 7137eee..d7be40c 100644
--- a/frontend/src/app/app.module.ts
+++ b/frontend/src/app/app.module.ts
@@ -3,16 +3,22 @@ import { BrowserModule } from '@angular/platform-browser';
 
 import { AppRoutingModule } from './app-routing.module';
 import { AppComponent } from './app.component';
-import {HttpClientModule} from '@angular/common/http'; 
+import {HttpClientModule} from '@angular/common/http';
+import { AdminComponent } from './admin/admin.component'; 
+import { LoginComponent } from './login/login.component';
+import { ReactiveFormsModule } from '@angular/forms';
 
 @NgModule({
   declarations: [
-    AppComponent
+    AppComponent,
+    AdminComponent,
+    LoginComponent
   ],
   imports: [
     BrowserModule,
     AppRoutingModule,
-    HttpClientModule
+    HttpClientModule,
+    ReactiveFormsModule
   ],
   providers: [],
   bootstrap: [AppComponent]
diff --git a/frontend/src/app/login/login.component.ts b/frontend/src/app/login/login.component.ts
index 0caa4f7..64e2754 100644
--- a/frontend/src/app/login/login.component.ts
+++ b/frontend/src/app/login/login.component.ts
@@ -1,7 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { FormControl, FormGroup, Validators } from '@angular/forms';
 import { Router } from '@angular/router';
-import { AuthenticationService } from '../authentication.service';
+import { AuthenticationService } from '../services/authentication.service';
 
 @Component({
   selector: 'app-login',
diff --git a/frontend/src/app/login/login.module.ts b/frontend/src/app/login/login.module.ts
index 9064214..9e04d47 100644
--- a/frontend/src/app/login/login.module.ts
+++ b/frontend/src/app/login/login.module.ts
@@ -2,17 +2,12 @@ import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
 
 import { LoginRoutingModule } from './login-routing.module';
-import { LoginComponent } from './login.component';
-
-import { ReactiveFormsModule } from '@angular/forms';
 
 @NgModule({
   declarations: [
-    LoginComponent
   ],
   imports: [
     CommonModule,
-    ReactiveFormsModule,
     LoginRoutingModule
   ]
 })
diff --git a/frontend/src/app/authentication.service.spec.ts b/frontend/src/app/services/authentication.service.spec.ts
similarity index 100%
rename from frontend/src/app/authentication.service.spec.ts
rename to frontend/src/app/services/authentication.service.spec.ts
diff --git a/frontend/src/app/authentication.service.ts b/frontend/src/app/services/authentication.service.ts
similarity index 100%
rename from frontend/src/app/authentication.service.ts
rename to frontend/src/app/services/authentication.service.ts
diff --git a/frontend/src/app/services/users.service.spec.ts b/frontend/src/app/services/users.service.spec.ts
new file mode 100644
index 0000000..f81244a
--- /dev/null
+++ b/frontend/src/app/services/users.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { UsersService } from './users.service';
+
+describe('UsersService', () => {
+  let service: UsersService;
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({});
+    service = TestBed.inject(UsersService);
+  });
+
+  it('should be created', () => {
+    expect(service).toBeTruthy();
+  });
+});
diff --git a/frontend/src/app/services/users.service.ts b/frontend/src/app/services/users.service.ts
new file mode 100644
index 0000000..6dfed51
--- /dev/null
+++ b/frontend/src/app/services/users.service.ts
@@ -0,0 +1,19 @@
+import { Injectable } from '@angular/core';
+import { User } from '../Types/types';
+import { HttpClient } from '@angular/common/http';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class UsersService {
+
+  constructor(private http: HttpClient) { }
+
+  deleteUser(user: User) {
+    console.log("DELETE START")
+    this.http.delete("http://0.0.0.0:30992/API/v1/user", {body:user}).subscribe(res => {
+      console.log("PLZ REFRESH")
+    });
+  }
+
+}
-- 
GitLab