diff --git a/src/app/app.html b/src/app/app.html index 6fcb6f0..90c6b64 100644 --- a/src/app/app.html +++ b/src/app/app.html @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 80826c2..f9997b1 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,3 +1,29 @@ -import {Routes} from '@angular/router'; +import { Routes } from '@angular/router'; -export const routes: Routes = []; \ No newline at end of file +export const routes: Routes = [ + { + path: '', + pathMatch: 'full', + redirectTo: '/login' + }, + { // TODO: Guard pour empêcher la recherche de page + path: 'login', + loadComponent: () => import('./pages/login/login.component').then(x => x.LoginComponent) + }, + { + path: 'home', + loadComponent: () => import('./pages/home/home.component').then(x => x.HomeComponent) + }, + { + path: 'groups', + loadComponent: () => import('./pages/groups/groups.component').then(x => x.GroupsComponent) + }, + { + path: 'ranking', + loadComponent: () => import('./pages/ranking/ranking.component').then(x => x.RankingComponent) + }, + { + path: 'social', + loadComponent: () => import('./pages/social/social.component').then(x => x.SocialComponent) + } +]; \ No newline at end of file diff --git a/src/app/app.ts b/src/app/app.ts index 66480e9..27e368c 100644 --- a/src/app/app.ts +++ b/src/app/app.ts @@ -1,10 +1,10 @@ import {Component} from '@angular/core'; import {IonicModule} from "@ionic/angular"; -import {LoginComponent} from "./pages/login/login.component"; +import {RouterOutlet} from "@angular/router"; @Component({ selector: 'app-root', - imports: [IonicModule, LoginComponent], + imports: [IonicModule, RouterOutlet], templateUrl: './app.html', styleUrl: './app.css' }) diff --git a/src/app/components/sign-on-form/sign-on-form.component.ts b/src/app/components/sign-on-form/sign-on-form.component.ts index 29fd0e8..481309d 100644 --- a/src/app/components/sign-on-form/sign-on-form.component.ts +++ b/src/app/components/sign-on-form/sign-on-form.component.ts @@ -19,4 +19,6 @@ export class SignOnFormComponent { email: new FormControl(null, [Validators.required]), password: new FormControl(null, [Validators.required]), }) + + //TODO: Message d'erreur comme pour login } diff --git a/src/app/pages/groups/groups.component.html b/src/app/pages/groups/groups.component.html new file mode 100644 index 0000000..4f70842 --- /dev/null +++ b/src/app/pages/groups/groups.component.html @@ -0,0 +1,3 @@ +

+ groups works! +

diff --git a/src/app/pages/groups/groups.component.scss b/src/app/pages/groups/groups.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/groups/groups.component.ts b/src/app/pages/groups/groups.component.ts new file mode 100644 index 0000000..054ca35 --- /dev/null +++ b/src/app/pages/groups/groups.component.ts @@ -0,0 +1,16 @@ +import {Component, OnInit} from '@angular/core'; + +@Component({ + selector: 'app-groups', + templateUrl: './groups.component.html', + styleUrls: ['./groups.component.scss'], +}) +export class GroupsComponent implements OnInit { + + constructor() { + } + + ngOnInit() { + } + +} diff --git a/src/app/pages/home/home.component.html b/src/app/pages/home/home.component.html new file mode 100644 index 0000000..70b3acb --- /dev/null +++ b/src/app/pages/home/home.component.html @@ -0,0 +1,3 @@ +

+ home works! +

diff --git a/src/app/pages/home/home.component.scss b/src/app/pages/home/home.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/home/home.component.ts b/src/app/pages/home/home.component.ts new file mode 100644 index 0000000..c6b1a41 --- /dev/null +++ b/src/app/pages/home/home.component.ts @@ -0,0 +1,9 @@ +import {Component, OnInit} from '@angular/core'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'], +}) +export class HomeComponent { +} diff --git a/src/app/pages/login/login.component.html b/src/app/pages/login/login.component.html index 200fb67..37d504e 100644 --- a/src/app/pages/login/login.component.html +++ b/src/app/pages/login/login.component.html @@ -9,7 +9,11 @@ @if (authState()) { - + @if (errorMessage()) { +

{{ errorMessage() }}

+ } + +

Se connecter

@@ -22,7 +26,7 @@ } - +

Créer un compte

\ No newline at end of file diff --git a/src/app/pages/login/login.component.ts b/src/app/pages/login/login.component.ts index 5a6d77f..ec0df97 100644 --- a/src/app/pages/login/login.component.ts +++ b/src/app/pages/login/login.component.ts @@ -5,6 +5,7 @@ import {SignOnFormComponent} from "../../components/sign-on-form/sign-on-form.co import {AuthManageService} from "../../services/auth-manage"; import {firstValueFrom} from "rxjs"; import {UsersService} from "../../services/api"; +import {Router} from "@angular/router"; @Component({ selector: 'app-login', @@ -18,38 +19,61 @@ import {UsersService} from "../../services/api"; }) export class LoginComponent { authState = signal(true) + errorMessage = signal(null); login = viewChild('loginForm'); user = viewChild('userForm'); private authManageService = inject(AuthManageService); private usersService = inject(UsersService); + private router = inject(Router); async createAccount() { if (this.authState()) { this.authState.set(false); } else if (this.authState() == false) { - await this.addUser(); - this.authState.set(true); + if (await this.addUser()) { + this.authState.set(true); + } } } - connectUser() { + async connectUser() { const user = this.login().loginForm.getRawValue(); - console.log(user); - this.authManageService.connectUser(user.username, user.password); + this.errorMessage.set(null); + + try { + await this.authManageService.connectUser(user.username, user.password); + + await this.router.navigate(['/home']); + } catch (e) { + console.error('Connexion échouée', e); + + if (e.status === 401) { + this.errorMessage.set("Mot de passe incorrect"); + } else if (e.status === 404) { + this.errorMessage.set("Utilisateur introuvable"); + } else { + this.errorMessage.set("Erreur de connexion"); + } + + this.login().loginForm.reset(); + } } async addUser() { if (this.user().userForm.invalid) { console.log('Erreur d\'écriture dans le formulaire'); - return; + this.user().userForm.reset(); + return false; } try { const users = this.user().userForm.getRawValue(); await firstValueFrom(this.usersService.createUserEndpoint(users)) console.log('Utilisateur crée : ' + users); + return true; } catch (e) { console.log(e); + return false } } } diff --git a/src/app/pages/ranking/ranking.component.html b/src/app/pages/ranking/ranking.component.html new file mode 100644 index 0000000..0cc3bf2 --- /dev/null +++ b/src/app/pages/ranking/ranking.component.html @@ -0,0 +1,3 @@ +

+ ranking works! +

diff --git a/src/app/pages/ranking/ranking.component.scss b/src/app/pages/ranking/ranking.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/ranking/ranking.component.ts b/src/app/pages/ranking/ranking.component.ts new file mode 100644 index 0000000..6d2c959 --- /dev/null +++ b/src/app/pages/ranking/ranking.component.ts @@ -0,0 +1,16 @@ +import {Component, OnInit} from '@angular/core'; + +@Component({ + selector: 'app-ranking', + templateUrl: './ranking.component.html', + styleUrls: ['./ranking.component.scss'], +}) +export class RankingComponent implements OnInit { + + constructor() { + } + + ngOnInit() { + } + +} diff --git a/src/app/pages/social/social.component.html b/src/app/pages/social/social.component.html new file mode 100644 index 0000000..e359679 --- /dev/null +++ b/src/app/pages/social/social.component.html @@ -0,0 +1,3 @@ +

+ friends works! +

diff --git a/src/app/pages/social/social.component.scss b/src/app/pages/social/social.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/social/social.component.ts b/src/app/pages/social/social.component.ts new file mode 100644 index 0000000..b17ce83 --- /dev/null +++ b/src/app/pages/social/social.component.ts @@ -0,0 +1,16 @@ +import {Component, OnInit} from '@angular/core'; + +@Component({ + selector: 'app-social', + templateUrl: './social.component.html', + styleUrls: ['./social.component.scss'], +}) +export class SocialComponent implements OnInit { + + constructor() { + } + + ngOnInit() { + } + +} diff --git a/src/app/services/auth-manage.ts b/src/app/services/auth-manage.ts index 990673b..2ec3b22 100644 --- a/src/app/services/auth-manage.ts +++ b/src/app/services/auth-manage.ts @@ -13,8 +13,10 @@ export class AuthManageService { const loginDto = {username, password}; const res = await firstValueFrom(this.loginService.loginEndpoint(loginDto)); localStorage.setItem('jwt', res.token); + return res; } catch (e) { - console.log(e) + console.error('Erreur login:', e); + throw e; } }