From c90f87918b1239df21002eebb7583cdd9d47f672 Mon Sep 17 00:00:00 2001
From: FERGUI SAMY <samy.fergui@etu.unistra.fr>
Date: Sun, 10 Apr 2022 05:45:01 +0200
Subject: [PATCH] =?UTF-8?q?finalisation=20de=20front,=20ajout=20de=20fonct?=
 =?UTF-8?q?ionnalit=C3=A9=20en=20back=20et=20gestion=20de=20la=20session?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Controllers/API/ArticleController.php     | 128 ++++++++++++++++
 .../Http/Controllers/API/UserController.php   |  86 +++++++++--
 backend/app/Models/User.php                   |   3 +-
 backend/app/Models/article.php                |  20 +++
 backend/database/factories/UserFactory.php    |   1 +
 .../2014_10_12_000000_create_users_table.php  |   4 +-
 ...022_03_29_101303_create_articles_table.php |  35 +++++
 backend/routes/api.php                        |  27 ++++
 frontend/package-lock.json                    |  32 +++-
 frontend/package.json                         |   2 +
 frontend/src/components/navbar.vue            |  24 ++-
 frontend/src/main.js                          |   2 +
 frontend/src/router/index.js                  |   7 +
 frontend/src/views/affich_article.vue         | 129 ++++++++++++++++
 frontend/src/views/ajout_article.vue          |  51 ++++++-
 frontend/src/views/article.vue                | 138 ++++++++++++++++++
 frontend/src/views/home.vue                   |  52 +++++--
 frontend/src/views/info.vue                   | 112 ++++++++++++++
 frontend/src/views/login.vue                  |  43 +++++-
 frontend/src/views/sign_up.vue                |  38 ++++-
 20 files changed, 893 insertions(+), 41 deletions(-)
 create mode 100644 backend/app/Http/Controllers/API/ArticleController.php
 create mode 100644 backend/app/Models/article.php
 create mode 100644 backend/database/migrations/2022_03_29_101303_create_articles_table.php
 create mode 100644 frontend/src/views/affich_article.vue

diff --git a/backend/app/Http/Controllers/API/ArticleController.php b/backend/app/Http/Controllers/API/ArticleController.php
new file mode 100644
index 0000000..9b0d1e6
--- /dev/null
+++ b/backend/app/Http/Controllers/API/ArticleController.php
@@ -0,0 +1,128 @@
+<?php
+
+namespace App\Http\Controllers\API;
+
+use App\Http\Controllers\Controller;
+use App\Models\article;
+
+use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Hash;
+use Illuminate\Support\Facades\Cookie;
+use Illuminate\Support\Facades\Session;
+
+class ArticleController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        $article = DB::select('select * from articles' );
+        return response()->json($article, 201);
+
+      
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+    
+        $article = [
+            'title' => $request->titre,
+            'description' => $request->description,
+            'text' => $request->text,
+            'IDuser' => $request->IDuser,
+            
+        ];
+        $art = article::create($article);
+        return response()->json($art, 201);
+        //return $request;
+    
+
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\Models\User  $use
+     * @return \Illuminate\Http\Response
+     */
+    public function show($article)
+    {
+        //
+        // return article::find($user);
+        $arc = DB::select('select * from articles WHERE IDuser = :IDuser',['IDuser' => $article] );
+        return response()->json($arc, 201);
+
+    }
+
+    public function get_article(Request $request, $id)
+    {
+        //
+        // return article::find($user);
+        try {
+        $arc = DB::select('select * from articles WHERE id = :id',['id' => $id] );
+        return response()->json($arc, 201);
+        } catch(e) {
+
+        }
+
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\Models\User  $user
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, $artic)
+    {
+        //
+        $ar = article::find($artic);
+        $ar->title = $request->title;
+        $ar->description = $request->description;
+        $ar->text = $request->text;
+
+        $ar->save();
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\Models\User  $user
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy($user)
+    {
+        $artic = article::find($user);
+        $result = $artic->delete() ;
+        if ($result) return ["result"=>"test"];
+
+        //
+        //$user->delete();
+
+    }
+
+    public function deleteall(User $user) {
+        $user->delete();
+    }
+
+
+
+
+
+
+    
+
+    
+}
diff --git a/backend/app/Http/Controllers/API/UserController.php b/backend/app/Http/Controllers/API/UserController.php
index 313fcae..deea472 100644
--- a/backend/app/Http/Controllers/API/UserController.php
+++ b/backend/app/Http/Controllers/API/UserController.php
@@ -5,6 +5,13 @@
 use App\Http\Controllers\Controller;
 use App\Models\User;
 use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Hash;
+use Illuminate\Support\Facades\Cookie;
+use Illuminate\Support\Facades\Session;
+
+
 
 class UserController extends Controller
 {
@@ -15,11 +22,20 @@ class UserController extends Controller
      */
     public function index()
     {
-        //
-        $users = User::all();
+        //Session::flash('clef', 'valeurs');
+        
+        dd(Session::get('clef'));
+        //$users = DB::select('select * from users' );
+
+
+       // dd($users);
+        // $user = DB::select('select * from users where name = "sdqdqdqdqdqdsq"');
+        // dd($user);
+       
+        //return redirect()->route('check');
 
     // On retourne les informations des utilisateurs en JSON
-        return response()->json($users);
+        
     //return 'test';
     }
 
@@ -32,11 +48,22 @@ public function index()
     public function store(Request $request)
     {
         //
-        $user = User::create([
+       
+        // $validated = $request->validate([
+        //     'name' => 'required|max:255',
+        //     'prenom' => 'required|max:255',
+        //     'email' => 'required|email',
+        //     'password' => 'required'
+
+        // ]);
+        //dd(Cookie::get('user'));
+        $user = [
             'name' => $request->name,
+            'prenom' => $request->prenom,
             'email' => $request->email,
-            'password' => $request->password
-        ]);
+            'password'=> Hash::make($request->password),
+        ];
+        $user = User::create($user);
         return response()->json($user, 201);
         //return $request;
     
@@ -49,9 +76,11 @@ public function store(Request $request)
      * @param  \App\Models\User  $user
      * @return \Illuminate\Http\Response
      */
-    public function show(User $user)
+    public function show($user)
     {
-        //
+        //affichage des article dun utilisateur specifique
+        $arc = DB::select('select * from users WHERE id = :id',['id' => $user] );
+        return response()->json($arc, 201);
     }
 
     /**
@@ -61,8 +90,15 @@ public function show(User $user)
      * @param  \App\Models\User  $user
      * @return \Illuminate\Http\Response
      */
-    public function update(Request $request, User $user)
+    public function update(Request $request, $user)
     {
+        $usr = User::find($user);
+        $usr->email = $request->email;
+        $usr->name = $request->name;
+        $usr->prenom = $request->prenom;
+
+        $usr->save();
+
         //
     }
 
@@ -76,11 +112,41 @@ public function destroy(User $user)
     {
 
         //
-        $user->delete();
+        //$user->delete();
 
     }
 
     public function deleteall(User $user) {
         $user->delete();
     }
+
+    public function checkuser(Request $request) {
+
+            //if (empty($user)) dd("fail"); else dd($user);
+        $hachpassword = DB::select('select password from users WHERE email = :email',['email' => $request->email] );
+        $id = DB::select('select id from users WHERE email = :email',['email' => $request->email] );
+        $name = DB::select('select name from users WHERE email = :email',['email' => $request->email] );
+        //$kk = Hash::make($hachpassword[0]->password);
+        $combin = [
+            $id,
+            $name,
+        ];
+        if (Hash::check($request->password, $hachpassword[0]->password )) {
+            // $minute = 5;
+            // $response = new Response('Hello World');
+            // $response->withCookie(cookie()->forever('user', 'love u'));
+            return response($combin, 200);
+            
+        }
+        return response('erreur', 504);
+       
+        
+        
+    }
+
+  
+
+    
+
+    
 }
diff --git a/backend/app/Models/User.php b/backend/app/Models/User.php
index 8996368..d49ada9 100644
--- a/backend/app/Models/User.php
+++ b/backend/app/Models/User.php
@@ -11,14 +11,15 @@
 class User extends Authenticatable
 {
     use HasApiTokens, HasFactory, Notifiable;
-
     /**
      * The attributes that are mass assignable.
      *
      * @var array<int, string>
      */
     protected $fillable = [
+        
         'name',
+        'prenom',
         'email',
         'password',
     ];
diff --git a/backend/app/Models/article.php b/backend/app/Models/article.php
new file mode 100644
index 0000000..560cb0b
--- /dev/null
+++ b/backend/app/Models/article.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class article extends Model
+{
+    use HasFactory;
+
+    protected $fillable = [
+        'title',
+        'description',
+        'text',
+        'IDuser'
+
+
+    ];
+}
diff --git a/backend/database/factories/UserFactory.php b/backend/database/factories/UserFactory.php
index 23b61d2..49dba51 100644
--- a/backend/database/factories/UserFactory.php
+++ b/backend/database/factories/UserFactory.php
@@ -18,6 +18,7 @@ class UserFactory extends Factory
     public function definition()
     {
         return [
+            'prenom' => $this->faker->prenom(),
             'name' => $this->faker->name(),
             'email' => $this->faker->unique()->safeEmail(),
             'email_verified_at' => now(),
diff --git a/backend/database/migrations/2014_10_12_000000_create_users_table.php b/backend/database/migrations/2014_10_12_000000_create_users_table.php
index 3d856ea..1b1f797 100644
--- a/backend/database/migrations/2014_10_12_000000_create_users_table.php
+++ b/backend/database/migrations/2014_10_12_000000_create_users_table.php
@@ -16,11 +16,13 @@ public function up()
         Schema::create('users', function (Blueprint $table) {
             $table->id();
             $table->string('name');
+            $table->string('prenom');
+
             $table->string('email')->unique();
             //$table->timestamp('email_verified_at')->nullable();
             $table->string('password');
             //$table->rememberToken();
-            //$table->timestamps();
+            $table->timestamps();
         });
     }
 
diff --git a/backend/database/migrations/2022_03_29_101303_create_articles_table.php b/backend/database/migrations/2022_03_29_101303_create_articles_table.php
new file mode 100644
index 0000000..b01f6d6
--- /dev/null
+++ b/backend/database/migrations/2022_03_29_101303_create_articles_table.php
@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('articles', function (Blueprint $table) {
+            $table->id();
+            $table->timestamps();
+            $table->string('title');
+            $table->string('text');
+            $table->string('description');
+            $table->integer('IDuser');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('articles');
+    }
+};
diff --git a/backend/routes/api.php b/backend/routes/api.php
index a925c1a..71fb004 100644
--- a/backend/routes/api.php
+++ b/backend/routes/api.php
@@ -3,6 +3,8 @@
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Route;
 use App\Http\Controllers\API\UserController;
+use App\Http\Controllers\API\ArticleController;
+
 
 /*
 |--------------------------------------------------------------------------
@@ -20,9 +22,34 @@
 });
 
 Route::apiResource('/loginApi', UserController::class );
+
+Route::apiResource('/articleApi', ArticleController::class );
+
 // Route::post('/register', [UserController::class, 'store']);
 
 Route::delete('/delete', [UserController::class, 'deleteall']);
+
+Route::post('/check', [UserController::class, 'checkuser']);
+
+Route::get('/get_article/{id}', [ArticleController::class, 'get_article']);
+
+
 // Route::get('/user', function() {
 //     return 'test';
+// });
+
+// Route::get('/set-cookie', function() {
+//     $response = new Illuminate\Http\Response();
+
+//     $response->cookie('test5', 'zz',5, '/', '   127.0.0.1'); // this will last five years
+//     dd($response);
+//     return $response;
+// });
+
+// Route::get('/get-cookie', function() {
+//    //
+//    $res = new Response("test");
+
+//    $res->data = "qsdq"; // showing you different ways to set / get the cookie
+//    return $res;
 // });
\ No newline at end of file
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 7b9069a..59ba852 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -8,8 +8,10 @@
       "name": "frontend",
       "version": "0.1.0",
       "dependencies": {
+        "axios": "^0.26.1",
         "core-js": "^3.8.3",
         "vue": "^2.6.14",
+        "vue-cookies": "^1.8.0",
         "vue-router": "^3.1.3",
         "vuetify": "^2.6.0"
       },
@@ -3226,6 +3228,14 @@
         "postcss": "^8.1.0"
       }
     },
+    "node_modules/axios": {
+      "version": "0.26.1",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
+      "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
+      "dependencies": {
+        "follow-redirects": "^1.14.8"
+      }
+    },
     "node_modules/babel-loader": {
       "version": "8.2.3",
       "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
@@ -5914,7 +5924,6 @@
       "version": "1.14.9",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
       "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
-      "dev": true,
       "funding": [
         {
           "type": "individual",
@@ -10660,6 +10669,11 @@
         "node": ">=10"
       }
     },
+    "node_modules/vue-cookies": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/vue-cookies/-/vue-cookies-1.8.0.tgz",
+      "integrity": "sha512-5nxAwW4kIS6uP0G9UnWcmSj2NlFpV1wkvAAwGgkWqyPDVCP1IEzFZfg7YUBLiYowZ/cFnxaXqS1nWPIBwfXGRw=="
+    },
     "node_modules/vue-eslint-parser": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz",
@@ -14073,6 +14087,14 @@
         "postcss-value-parser": "^4.2.0"
       }
     },
+    "axios": {
+      "version": "0.26.1",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
+      "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
+      "requires": {
+        "follow-redirects": "^1.14.8"
+      }
+    },
     "babel-loader": {
       "version": "8.2.3",
       "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
@@ -16079,8 +16101,7 @@
     "follow-redirects": {
       "version": "1.14.9",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
-      "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
-      "dev": true
+      "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w=="
     },
     "forwarded": {
       "version": "0.2.0",
@@ -19554,6 +19575,11 @@
         }
       }
     },
+    "vue-cookies": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/vue-cookies/-/vue-cookies-1.8.0.tgz",
+      "integrity": "sha512-5nxAwW4kIS6uP0G9UnWcmSj2NlFpV1wkvAAwGgkWqyPDVCP1IEzFZfg7YUBLiYowZ/cFnxaXqS1nWPIBwfXGRw=="
+    },
     "vue-eslint-parser": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 8368abb..7163954 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -8,8 +8,10 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
+    "axios": "^0.26.1",
     "core-js": "^3.8.3",
     "vue": "^2.6.14",
+    "vue-cookies": "^1.8.0",
     "vue-router": "^3.1.3",
     "vuetify": "^2.6.0"
   },
diff --git a/frontend/src/components/navbar.vue b/frontend/src/components/navbar.vue
index 797f67d..9c3556f 100644
--- a/frontend/src/components/navbar.vue
+++ b/frontend/src/components/navbar.vue
@@ -4,7 +4,7 @@
         <div class="menu-item"><a href="/home">Home</a></div>
         <dropdown title="Article" :items="services"/>
         <div class="menu-item"><a href="/info">info</a></div>
-        <div class="menu-item"><a href="/logout">Logout</a></div>
+        <div  class="menu-item"><a @click = "logout()">Logout</a></div>
         
     </nav>
     
@@ -12,6 +12,10 @@
 
 <script>
 import dropdown from './dropdown.vue'
+import router from '../router/index'
+import Vue from 'vue'
+import VueCookies from 'vue-cookies'
+Vue.use(VueCookies)
 
 export default {
     name : "navbar",
@@ -31,10 +35,28 @@ data () {
             },
         ]
     }
+},
+methods : {
+     logout() {
+    router.push({ path: '/' });
+    this.$cookies.remove("IDuser");  // return this
+    this.$cookies.remove("username");  // return this
+    this.$cookies.remove("tmp");  // return this
+    this.$cookies.remove("nameuser");  // return this
+
+
+
+    //suppression de la session
 }
 }
+
+}
+
+
 </script>
 
+
+
 <style>
 
 
diff --git a/frontend/src/main.js b/frontend/src/main.js
index c91889b..bcd17ac 100644
--- a/frontend/src/main.js
+++ b/frontend/src/main.js
@@ -2,7 +2,9 @@ import Vue from 'vue'
 import App from './App.vue'
 import vuetify from './plugins/vuetify'
 import router from './router'
+import VueCookies from 'vue-cookies';
 
+Vue.use(VueCookies);
 Vue.config.productionTip = false
 
 new Vue({
diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js
index 1a7a7e0..8d5c16a 100644
--- a/frontend/src/router/index.js
+++ b/frontend/src/router/index.js
@@ -7,6 +7,8 @@ import login from '../views/login.vue'
 import signup from '../views/sign_up.vue'
 import info from '../views/info.vue'
 import add_article from '../views/ajout_article.vue'
+import affich_article from '../views/affich_article.vue'
+
 
 Vue.use(VueRouter)
 // eslint-disable-next-line 
@@ -53,6 +55,11 @@ const routes = [
         name: 'add_article',
         component: add_article
     },
+    {
+        path: '/affich_article',
+        name: 'affich_article',
+        component: affich_article
+    },
 
 ]
 
diff --git a/frontend/src/views/affich_article.vue b/frontend/src/views/affich_article.vue
new file mode 100644
index 0000000..ecc63f2
--- /dev/null
+++ b/frontend/src/views/affich_article.vue
@@ -0,0 +1,129 @@
+<template>
+<v-app>
+  <v-main>
+      <div class="top1">
+      <Navbar/>
+      </div>
+      <div class="top2">
+      <v-img 
+          src="../assets/blog2.jpg"
+          max-height="200"
+          max-width="100%"
+        >
+        </v-img>
+      </div>
+    </v-main>
+  <v-card
+  width="80%"
+  class="mx-auto my-15">
+  <v-img
+    height="150"
+    src="../assets/blog.jpg">
+    
+    </v-img>
+        <v-card-title></v-card-title>
+        <v-card-text>
+        <v-form>
+            <h5 >Auteur : {{auteur}}</h5>
+            <v-text-field  label="Titre" v-model="object.title" ></v-text-field>
+            <v-text-field label="Description" v-model="object.description" ></v-text-field>
+            <v-text-field label="Texte" v-model="object.text" ></v-text-field>
+            
+
+
+            
+
+
+
+
+            
+            
+           
+        </v-form>
+        </v-card-text>
+        <v-card-actions>
+            <v-btn outlined color="orange" @click="up()">
+                        <v-icon >mdi-plus</v-icon>
+                        
+                        <span>modifier article</span>
+            </v-btn>
+        </v-card-actions>
+    </v-card>
+    <Footer/>
+</v-app>
+</template>
+
+<script>
+
+import router from '../router/index'
+import Footer from '../components/footer.vue'
+import Navbar from '../components/navbar.vue'
+import axios from 'axios';
+import Vue from 'vue'
+import VueCookies from 'vue-cookies'
+Vue.use(VueCookies)
+
+export default {
+  name: "signup",
+  components: {Navbar, Footer},
+  data(){
+        return {
+            object: "",
+            auteur : this.$cookies.get("username"),
+        }
+    },
+
+          methods: {
+                        async up()  {
+          try   {
+            console.log(this.$cookies.get("IDuser"));
+    res = axios.put('http://127.0.0.1:8000/api/articleApi/' + this.$cookies.get("tmp"), this.object,
+    {
+      // headers : {
+      //   'Authorization' : 'Bearear ' + localStorage.getItem('token')
+      // },
+    })
+    console.log(res);
+  
+          }
+           catch(e) {
+
+           }
+
+  }
+    // 
+
+
+  },
+
+  async mounted () {
+        try {
+            let res1 = await axios.get('http://127.0.0.1:8000/api/get_article/' + this.$cookies.get("tmp") )
+            //
+            
+            this.object = res1.data[0];
+            
+
+        } catch(e) {
+            console.log(e);
+        }
+    },
+
+  
+
+
+}
+
+
+</script>
+
+<style>
+.top1 {
+  position: relative;
+  z-index: 2;
+}
+.top2 {
+  position: relative;
+  z-index: 1;
+}
+</style>
\ No newline at end of file
diff --git a/frontend/src/views/ajout_article.vue b/frontend/src/views/ajout_article.vue
index d950cc9..d6fb578 100644
--- a/frontend/src/views/ajout_article.vue
+++ b/frontend/src/views/ajout_article.vue
@@ -24,7 +24,9 @@
         <v-card-title>Fascine nous avec ta créativité ! </v-card-title>
         <v-card-text>
         <v-form>
-            <v-text-field label="Titre pour ton blog" v-model="object.nom" required :rules="[v => !!v || 'veuillez saisir votre nom']"></v-text-field>
+            <v-text-field label="Titre pour ton blog" v-model="object.titre" required :rules="[v => !!v || 'veuillez saisir le titre']"></v-text-field>
+            <v-text-field label="Description" v-model="object.description" required :rules="[v => !!v || 'veuillez saisir le titre']"></v-text-field>
+
            
   <v-container fluid>
     <v-textarea
@@ -32,6 +34,7 @@
       clear-icon="mdi-close-circle"
       label="Allez, balance tes idées !"
       value="You can do it"
+      v-model="object.text"
     ></v-textarea>
   </v-container>
 
@@ -57,6 +60,9 @@
 import router from '../router/index'
 import Footer from '../components/footer.vue'
 import Navbar from '../components/navbar.vue'
+import axios from 'axios';
+
+
 export default {
   name: "signup",
   components: {Navbar, Footer},
@@ -64,14 +70,47 @@ export default {
         return {
             object: {
               
-                nom : '',
-                prenom : '',
-                email: '',
-                password: '',
-                type_profil: ''
+                titre:'',
+                description:'',
+                text:'',
+                IDuser:this.$cookies.get("IDuser"),
+
             }
         }
     },
+
+          methods: {
+    async ajouter_article() {
+      try {
+        // const res1 = await axios.get('http://127.0.0.1:8000/api/get-cookie',this.object)
+        //     console.log(res1)
+        const res = await axios.post('http://127.0.0.1:8000/api/articleApi',this.object, {
+            Headers : {
+                'Content-Type' : 'multipart/form-data; boundary=<calculated when request is sent>',
+                'Content-Length' : '<calculated when request is sent>',
+                'Connection' : 'keep-alive'
+            }
+        }
+
+    )
+      router.push({ path: '/home' });
+
+      console.log(res)
+      //router.push({ name: 'acceuil' });
+      } catch(e) {
+          console.log(e);
+        //alert('une erreur est servenu, veuillez refaire linscription a nouveau');
+        //router.push({ name: 'inscription' });
+
+      }
+      
+
+
+    },
+    // 
+    
+    
+  },
   
 
 
diff --git a/frontend/src/views/article.vue b/frontend/src/views/article.vue
index e69de29..c2af8c3 100644
--- a/frontend/src/views/article.vue
+++ b/frontend/src/views/article.vue
@@ -0,0 +1,138 @@
+<template>
+<v-app>
+  
+        <div class="top1">
+      <Navbar/>
+      </div>
+      <div class="top2">
+      <v-img 
+          src="../assets/blog2.jpg"
+          max-height="200"
+          max-width="100%"
+        >
+        </v-img>
+      </div>
+
+    <v-container class="my-5">
+      <v-layout row wrap max-width="344">
+        <v-flex xs12 sm6 md4 lg3 v-for="blog in blogs" :key="blog.name" >
+        <v-card
+      :loading="loading"
+      class=" ma-3"
+      max-width = "375"
+      >
+    <template >
+      <v-progress-linear
+        color="black"
+        height="5"
+        
+      > 
+      </v-progress-linear>
+
+    </template>
+
+    <v-img
+    height="150"
+    src="../assets/blog.jpg">
+    
+    </v-img>
+
+   <v-card-title>{{blog.title}}</v-card-title>
+   <v-divider class="mx-4"></v-divider>
+  <v-card-text>
+      <v-row
+        align="center"
+        class="mx-0"
+      >
+       
+
+        
+      </v-row>
+
+      <div class="my-4 text-subtitle-1">
+         {{blog.description}}
+      </div>
+
+      <!-- <div>{{blog.text}}</div> -->
+    </v-card-text>
+  <v-divider class="mx-4"></v-divider>
+  <v-card-actions>
+      <v-btn
+        color="deep-purple lighten-2"
+        text
+        @click="lire(blog.id)"
+      >
+        Lire article
+      </v-btn>
+    </v-card-actions>
+    
+
+
+      
+    </v-card> 
+        </v-flex>
+      </v-layout>
+    </v-container>
+
+
+      <Footer/>
+    
+</v-app>
+
+</template>
+
+<script>
+import router from '../router/index'
+
+import Footer from '../components/footer.vue'
+import Navbar from '../components/navbar.vue'
+import axios from 'axios'
+import Vue from 'vue'
+import VueCookies from 'vue-cookies'
+Vue.use(VueCookies)
+export default {
+  components: { Footer,
+  Navbar },
+  
+  data(){
+        return {
+             
+            blogs:
+            [
+  
+            ]
+        }
+    },
+    methods : {
+      async lire(id) {
+                  this.$cookies.set("tmp", id);
+                  router.push({ name: 'affich_article' });
+
+      }
+    },
+    mounted ()  {
+      console.log(this.$cookies.get("username")); // gowtham
+    axios.get('http://127.0.0.1:8000/api/articleApi/'+ this.$cookies.get("IDuser"),
+    {
+      // headers : {
+      //   'Authorization' : 'Bearear ' + localStorage.getItem('token')
+      // },
+    })
+    .then(res => this.blogs = res.data);
+    
+
+  },
+}
+
+</script>
+
+<style>
+.top1 {
+  position: relative;
+  z-index: 2;
+}
+.top2 {
+  position: relative;
+  z-index: 1;
+}
+</style>
diff --git a/frontend/src/views/home.vue b/frontend/src/views/home.vue
index 4b84d96..39005c4 100644
--- a/frontend/src/views/home.vue
+++ b/frontend/src/views/home.vue
@@ -1,7 +1,7 @@
 <template>
 <v-app>
-    <v-main>
-      <div class="top1">
+  
+        <div class="top1">
       <Navbar/>
       </div>
       <div class="top2">
@@ -12,11 +12,13 @@
         >
         </v-img>
       </div>
-    </v-main>
 
-    <v-card
+    <v-container class="my-5">
+      <v-layout row wrap max-width="344">
+        <v-flex xs12 sm6 md4 lg3 v-for="blog in blogs" :key="blog.name" >
+        <v-card
       :loading="loading"
-      class="mx-auto my-12"
+      class=" ma-3"
       max-width = "375"
       >
     <template >
@@ -24,19 +26,18 @@
         color="black"
         height="5"
         
-      >
-        
+      > 
       </v-progress-linear>
 
     </template>
 
     <v-img
-    height="250"
-    src="../assets/avion.png">
+    height="150"
+    src="../assets/blog.jpg">
     
     </v-img>
 
-   <v-card-title>Article 1</v-card-title>
+   <v-card-title>{{blog.title}}</v-card-title>
    <v-divider class="mx-4"></v-divider>
   <v-card-text>
       <v-row
@@ -49,10 +50,10 @@
       </v-row>
 
       <div class="my-4 text-subtitle-1">
-        $ • Machin Machin
+         {{blog.description}}
       </div>
 
-      <div>machin machin machin machin machin machin machin machin machin machin machin machin machin machin</div>
+      <!-- <div>{{blog.text}}</div> -->
     </v-card-text>
   <v-divider class="mx-4"></v-divider>
   <v-card-actions>
@@ -68,7 +69,11 @@
 
 
       
-    </v-card>
+    </v-card> 
+        </v-flex>
+      </v-layout>
+    </v-container>
+
 
       <Footer/>
     
@@ -79,12 +84,33 @@
 <script>
 import Footer from '../components/footer.vue'
 import Navbar from '../components/navbar.vue'
+import axios from 'axios'
 export default {
   components: { Footer,
   Navbar },
   
+  data(){
+        return {
+             
+            blogs:
+            [
+  
+            ]
+        }
+    },
+    mounted ()  {
+    axios.get('http://127.0.0.1:8000/api/articleApi',
+    {
+      // headers : {
+      //   'Authorization' : 'Bearear ' + localStorage.getItem('token')
+      // },
+    })
+    .then(res => this.blogs = res.data);
+    
 
+  },
 }
+
 </script>
 
 <style>
diff --git a/frontend/src/views/info.vue b/frontend/src/views/info.vue
index e69de29..26d0e81 100644
--- a/frontend/src/views/info.vue
+++ b/frontend/src/views/info.vue
@@ -0,0 +1,112 @@
+<template>
+<v-app>
+  <v-main>
+      <div class="top1">
+      <Navbar/>
+      </div>
+      <div class="top2">
+      <v-img 
+          src="../assets/blog2.jpg"
+          max-height="200"
+          max-width="100%"
+        >
+        </v-img>
+      </div>
+    </v-main>
+  <v-card
+  width="80%"
+  class="mx-auto my-15">
+  <v-img
+    height="150"
+    src="../assets/blog.jpg">
+    
+    </v-img>
+        <v-card-title>Vos informations YES </v-card-title>
+        <v-card-text>
+        <v-form>
+            <v-text-field  label="nouvelle adresse email" v-model="object.email" ></v-text-field>
+            <v-text-field label=" changer Nom" v-model="object.name" ></v-text-field>
+            <v-text-field label="changer Prénom" v-model="object.prenom" ></v-text-field>
+
+
+
+
+            
+            
+           
+        </v-form>
+        </v-card-text>
+        <v-card-actions>
+            <v-btn outlined color="orange" @click="up()">
+                        <v-icon >mdi-plus</v-icon>
+                        
+                        <span>modifier info</span>
+            </v-btn>
+        </v-card-actions>
+    </v-card>
+    <Footer/>
+</v-app>
+</template>
+
+<script>
+
+import router from '../router/index'
+import Footer from '../components/footer.vue'
+import Navbar from '../components/navbar.vue'
+import axios from 'axios';
+import Vue from 'vue'
+import VueCookies from 'vue-cookies'
+Vue.use(VueCookies)
+
+export default {
+  name: "signup",
+  components: {Navbar, Footer},
+  data(){
+        return {
+            object: {
+                email:'',
+                name:'',
+                prenom:'',
+                
+            },
+        }
+    },
+
+          methods: {
+    // 
+          async up()  {
+          try   {
+            console.log(this.$cookies.get("IDuser"));
+    res = axios.put('http://127.0.0.1:8000/api/loginApi/' + this.$cookies.get("IDuser"), this.object,
+    {
+      // headers : {
+      //   'Authorization' : 'Bearear ' + localStorage.getItem('token')
+      // },
+    })
+    console.log(res);
+  
+          }
+           catch(e) {
+
+           }
+
+  }
+    
+  },
+
+  
+
+
+}
+</script>
+
+<style>
+.top1 {
+  position: relative;
+  z-index: 2;
+}
+.top2 {
+  position: relative;
+  z-index: 1;
+}
+</style>
\ No newline at end of file
diff --git a/frontend/src/views/login.vue b/frontend/src/views/login.vue
index a2a84bc..1c8f9b7 100644
--- a/frontend/src/views/login.vue
+++ b/frontend/src/views/login.vue
@@ -68,6 +68,11 @@
 import router from '../router/index'
 import Footer from '../components/footer.vue'
 import Navbar from '../components/navbar.vue';
+import axios from 'axios';
+import Vue from 'vue'
+import VueCookies from 'vue-cookies'
+Vue.use(VueCookies)
+
 //import Navbar from '../components/Navbar.vue'
 export default {
     components: {
@@ -82,12 +87,48 @@ export default {
         object : {
             email: "",
             password: "",
-            type_profil:""
         }
      
     };
 
+    
+
+
+  },
+    methods: {
+    async login() {
+      
+      try {
+
+          const res = await axios.post('http://127.0.0.1:8000/api/check',this.object)
+          console.log(res.data[0][0].id)
+          alert('Logged in !');
+          //crier un cookie pour sauvegarder le ID de l'utilisateur connecté
+          this.$cookies.set("IDuser", res.data[0][0].id, "1d");
+          this.$cookies.set("nameuser", res.data[1][0].name, "1d");
+          console.log(this.$cookies.get("IDuser")); // gowtham
+         
+
+         
+          // it gets the cookie called `username`
+        router.push({ name: 'home' });
+          //localStorage.setItem('token',res.data.token)
+          //router.push({ name: 'acceuil' });
+      } catch(e) {
+          alert('adresse ou mot de passe incorrect');
+          console.log(e);
+          this.object.email = "",
+            this.object.password =  "",
+          router.push({ name: 'login' });
+          
+      }
+    
+    },
+    
 
+    // 
+    
+    
   },
 
 };
diff --git a/frontend/src/views/sign_up.vue b/frontend/src/views/sign_up.vue
index 788a252..95fbe7f 100644
--- a/frontend/src/views/sign_up.vue
+++ b/frontend/src/views/sign_up.vue
@@ -18,7 +18,7 @@
         <v-card-title>Inscription </v-card-title>
         <v-card-text>
         <v-form>
-            <v-text-field label="nom" v-model="object.nom" required :rules="[v => !!v || 'veuillez saisir votre nom']"></v-text-field>
+            <v-text-field label="nom" v-model="object.name" required :rules="[v => !!v || 'veuillez saisir votre nom']"></v-text-field>
             <v-text-field label="prenom" v-model="object.prenom" required :rules="[v => !!v || 'veuillez saisir votre prenom']"></v-text-field>
             <v-text-field label="Email" v-model="object.email" required :rules="[v => !!v || 'veuillez saisir votre adresse email']"></v-text-field>
             <v-text-field label="mot_de_passe" v-model="object.password" type="password" required :rules="[v => !!v || 'veuillez saisir votre mot de passe']"></v-text-field>
@@ -44,21 +44,49 @@
 import router from '../router/index'
 import Footer from '../components/footer.vue'
 import Navbar from '../components/navbar.vue'
+import axios from 'axios'
 export default {
   name: "signup",
   components: {Navbar, Footer},
   data(){
         return {
             object: {
-              
-                nom : '',
-                prenom : '',
+              prenom: '',
+              name: '',
                 email: '',
                 password: '',
-                type_profil: ''
+                
             }
         }
     },
+
+      methods: {
+    async inscrire() {
+      try {
+        const res = await axios.post('http://127.0.0.1:8000/api/loginApi',this.object, {
+            Headers : {
+                'Content-Type' : 'multipart/form-data; boundary=<calculated when request is sent>',
+                'Content-Length' : '<calculated when request is sent>',
+                'Connection' : 'keep-alive'
+            }
+        }
+    )
+      console.log(res)
+      //router.push({ name: 'acceuil' });
+      } catch(e) {
+          console.log(e);
+        //alert('une erreur est servenu, veuillez refaire linscription a nouveau');
+        //router.push({ name: 'inscription' });
+
+      }
+      
+
+
+    },
+    // 
+    
+    
+  },
   
 
 
-- 
GitLab