diff --git a/FencerJudgeFront/src/app/app-routing.module.ts b/FencerJudgeFront/src/app/app-routing.module.ts index 0440f68..0297262 100644 --- a/FencerJudgeFront/src/app/app-routing.module.ts +++ b/FencerJudgeFront/src/app/app-routing.module.ts @@ -1,41 +1,10 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { authGuard } from '@guards/auth.guard'; - -import { LoginComponent } from './components/essentials/login/login.component'; -import { LogoutComponent } from './components/essentials/logout/logout.component'; - -import { HomeComponent } from './components/home/home.component'; - -import { MatchesComponent } from './components/match/matches/matches.component'; -import { MatchesIdComponent } from './components/match/matches-id/matches-id.component'; -import { MatchesAddComponent } from './components/match/matches-add/matches-add.component'; -import { MatchesDelComponent } from './components/match/matches-del/matches-del.component'; - -const routes: Routes = [ - { path: 'login', component: LoginComponent }, - { path: 'logout', component: LogoutComponent }, - - { path: '', component: HomeComponent }, - { path: 'home', component: HomeComponent }, - - { path: 'matches', component: MatchesComponent }, - { - path: 'matches/add', - component: MatchesAddComponent, - canActivate: [authGuard], - }, - { - path: 'matches/del/:id', - component: MatchesDelComponent, - canActivate: [authGuard], - }, - { path: 'matches/:id', component: MatchesIdComponent }, -]; +const routes: Routes = []; @NgModule({ imports: [RouterModule.forRoot(routes)], - exports: [RouterModule], + exports: [RouterModule] }) -export class AppRoutingModule {} +export class AppRoutingModule { } diff --git a/FencerJudgeFront/src/app/app.component.html b/FencerJudgeFront/src/app/app.component.html index eaf43d3..a37d5f5 100644 --- a/FencerJudgeFront/src/app/app.component.html +++ b/FencerJudgeFront/src/app/app.component.html @@ -1,3 +1,5 @@ - +
+ +
\ No newline at end of file diff --git a/FencerJudgeFront/src/app/app.module.ts b/FencerJudgeFront/src/app/app.module.ts index 4490d31..6a4581d 100644 --- a/FencerJudgeFront/src/app/app.module.ts +++ b/FencerJudgeFront/src/app/app.module.ts @@ -1,36 +1,24 @@ import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; -import { FormsModule } from '@angular/forms'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { HeaderComponent } from './components/essentials/header/header.component'; import { FooterComponent } from './components/essentials/footer/footer.component'; import { HomeComponent } from './components/home/home.component'; -import { LoginComponent } from './components/essentials/login/login.component'; -import { LogoutComponent } from './components/essentials/logout/logout.component'; -import { MatchesComponent } from './components/match/matches/matches.component'; -import { MatchesIdComponent } from './components/match/matches-id/matches-id.component'; -import { MatchesAddComponent } from './components/match/matches-add/matches-add.component'; -import { SponsortComponent } from './templates/sponsort/sponsort.component'; -import { MatchesDelComponent } from './components/match/matches-del/matches-del.component'; @NgModule({ declarations: [ AppComponent, HeaderComponent, FooterComponent, - HomeComponent, - LoginComponent, - LogoutComponent, - MatchesComponent, - MatchesIdComponent, - MatchesAddComponent, - SponsortComponent, - MatchesDelComponent, + HomeComponent + ], + imports: [ + BrowserModule, + AppRoutingModule ], - imports: [BrowserModule, AppRoutingModule, FormsModule], providers: [], - bootstrap: [AppComponent], + bootstrap: [AppComponent] }) -export class AppModule {} +export class AppModule { } diff --git a/FencerJudgeFront/src/app/components/essentials/footer/footer.component.css b/FencerJudgeFront/src/app/components/essentials/footer/footer.component.css index a76370e..e69de29 100644 --- a/FencerJudgeFront/src/app/components/essentials/footer/footer.component.css +++ b/FencerJudgeFront/src/app/components/essentials/footer/footer.component.css @@ -1,21 +0,0 @@ - -.footer-gris { - background-color: #2c2c2c; /* Gris foncé personnalisé */ -} - -.flag-bar { - height: 6px; /* épaisseur du trait */ - width: 100%; /* toute la largeur */ - background: linear-gradient( - to right, - #0055a4 0%, /* bleu */ - #0055a4 33.33%, /* 1/3 */ - #fff 33.33%, /* blanc */ - #fff 66.66%, /* 2/3 */ - #ef4135 66.66%, /* rouge */ - #ef4135 100% - ); - margin-bottom: 8px; - border-radius: 3px; /* optionnel, pour arrondir les bords */ - box-shadow: 0 1px 3px rgba(0,0,0,0.1); -} \ No newline at end of file diff --git a/FencerJudgeFront/src/app/components/essentials/footer/footer.component.html b/FencerJudgeFront/src/app/components/essentials/footer/footer.component.html index a110ff8..28c0d7d 100644 --- a/FencerJudgeFront/src/app/components/essentials/footer/footer.component.html +++ b/FencerJudgeFront/src/app/components/essentials/footer/footer.component.html @@ -1,48 +1 @@ - +

footer works!

diff --git a/FencerJudgeFront/src/app/components/essentials/header/header.component.css b/FencerJudgeFront/src/app/components/essentials/header/header.component.css index 9df8f3d..e69de29 100644 --- a/FencerJudgeFront/src/app/components/essentials/header/header.component.css +++ b/FencerJudgeFront/src/app/components/essentials/header/header.component.css @@ -1,25 +0,0 @@ -.navbar { - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); -} - -.navbar-brand { - font-weight: 700; - font-size: 1.4rem; - display: flex; - align-items: center; -} - -.navbar-brand img { - height: 30px; - margin-right: 0.5rem; -} - -.nav-link { - transition: color 0.3s ease; -} - -.nav-link:hover, -.active-link { - color: #ffcc00 !important; - font-weight: 600; -} diff --git a/FencerJudgeFront/src/app/components/essentials/header/header.component.html b/FencerJudgeFront/src/app/components/essentials/header/header.component.html index c8ae8e8..4f5a95d 100644 --- a/FencerJudgeFront/src/app/components/essentials/header/header.component.html +++ b/FencerJudgeFront/src/app/components/essentials/header/header.component.html @@ -1,52 +1 @@ - - +

header works!

diff --git a/FencerJudgeFront/src/app/components/essentials/header/header.component.ts b/FencerJudgeFront/src/app/components/essentials/header/header.component.ts index 6b0a735..ffc3163 100644 --- a/FencerJudgeFront/src/app/components/essentials/header/header.component.ts +++ b/FencerJudgeFront/src/app/components/essentials/header/header.component.ts @@ -1,6 +1,4 @@ import { Component } from '@angular/core'; -import { Router } from '@angular/router'; -import { AuthService } from '@services/auth/auth.service'; @Component({ selector: 'app-header', @@ -8,18 +6,4 @@ import { AuthService } from '@services/auth/auth.service'; templateUrl: './header.component.html', styleUrl: './header.component.css', }) -export class HeaderComponent { - constructor(private router: Router, public authService: AuthService) {} - - isHomeActive(): boolean { - return this.router.url === '/' || this.router.url === '/home'; - } - - isHomeActiveBool(): boolean { - if (this.router.url != '/home') { - return true; - } else { - return false; - } - } -} +export class HeaderComponent {} diff --git a/FencerJudgeFront/src/app/components/essentials/login/login.component.css b/FencerJudgeFront/src/app/components/essentials/login/login.component.css deleted file mode 100644 index a2b0cf2..0000000 --- a/FencerJudgeFront/src/app/components/essentials/login/login.component.css +++ /dev/null @@ -1,147 +0,0 @@ -.login-container { - display: flex; - justify-content: center; - align-items: center; - min-height: 25vh; - padding: 2rem; -} - -.login-card { - background-color: #fff; - border-radius: 12px; - overflow: hidden; - width: 500px; - box-shadow: 0 12px 24px rgba(0, 0, 0, 0.25); - color: #333; -} - -.login-header-img { - position: absolute; - height: inherit; - width: 100%; - background-color: rgba(0, 0, 0, 0.25); - top: 0; - left: 0; -} - -.login-header { - background: url("https://www.lejdd.fr/lmnr/var/jdd/public/media/image/2022/07/19/12/escrime-comment-les-francais-apprivoisent-leurs-armes.jpg?VersionId=Mw31AogdDUwVLuCaVdxMozm9kito7TTP") no-repeat center/cover; - position: relative; - padding: 4rem 1rem; - display: flex; - justify-content: center; - align-items: center; - min-height: 300px; - color: white; -} - -.login-header::before { - content: ""; - position: absolute; - inset: 0; - background: rgba(0, 0, 0, 0.3); - /* voile sombre */ - -webkit-backdrop-filter: blur(2px); - backdrop-filter: blur(2px); - /* effet de flou */ - z-index: 1; - border-radius: 0.5rem; -} - -.login-header h1 { - position: relative; - z-index: 2; - padding: 2rem; -} - -.login-header h2 { - margin-bottom: 0.5rem; -} - -.login-header p { - font-size: 0.85rem; - line-height: 1.4; -} - -.login-form { - padding: 1.5rem; - display: flex; - flex-direction: column; - gap: 1rem; -} - -.input-group { - display: flex; - align-items: center; - border-radius: 20px; - position: relative; - background-color: #235d4f; - padding: 1rem; -} - -.input-group input { - width: 100%; - padding: 1rem; - font-size: 16px; - color: white; - border: none; - border-bottom: 1px solid white; - outline: none; - background: transparent; -} - -.input-group input:focus~label, -.input-group input:valid~label { - top: 0; - left: 0; - color: #235d4f; - font-size: 12px; - padding: .6rem; -} - -.input-group input .form-control:focus { - border-color: transparent !important; -} - -.input-group label { - position: absolute; - top: 22px; - left: 0; - font-size: 16px; - color: white; - pointer-events: none; - transition: 0.5s; - padding: .6rem; -} - -.input-group .icon { - color: white; - margin-right: 0.5rem; -} - -.options { - display: flex; - justify-content: space-between; - font-size: 0.85rem; - color: #555; -} - -.options a { - color: #235d4f; - text-decoration: none; -} - -.login-btn { - background-color: #235d4f; - color: white; - padding: 0.6rem; - border: none; - border-radius: 6px; - font-size: 1rem; - cursor: pointer; - transition: background-color 0.3s; -} - -.login-btn:hover { - background-color: #1b4b3d; -} \ No newline at end of file diff --git a/FencerJudgeFront/src/app/components/essentials/login/login.component.html b/FencerJudgeFront/src/app/components/essentials/login/login.component.html deleted file mode 100644 index 993b80b..0000000 --- a/FencerJudgeFront/src/app/components/essentials/login/login.component.html +++ /dev/null @@ -1,22 +0,0 @@ -
-
- - -
-
\ No newline at end of file diff --git a/FencerJudgeFront/src/app/components/essentials/login/login.component.spec.ts b/FencerJudgeFront/src/app/components/essentials/login/login.component.spec.ts deleted file mode 100644 index 4adbc3d..0000000 --- a/FencerJudgeFront/src/app/components/essentials/login/login.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { LoginComponent } from './login.component'; - -describe('LoginComponent', () => { - let component: LoginComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [LoginComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(LoginComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/FencerJudgeFront/src/app/components/essentials/login/login.component.ts b/FencerJudgeFront/src/app/components/essentials/login/login.component.ts deleted file mode 100644 index f7b137a..0000000 --- a/FencerJudgeFront/src/app/components/essentials/login/login.component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Component } from '@angular/core'; -import { Router } from '@angular/router'; -import { AuthService } from '@services/auth/auth.service'; - -@Component({ - selector: 'app-login', - standalone: false, - templateUrl: './login.component.html', - styleUrl: './login.component.css', -}) -export class LoginComponent { - email = ''; - password = ''; - errorMessage = ''; - - constructor(private authService: AuthService, private router: Router) {} - - onSubmit() { - if (this.authService.login(this.email, this.password)) { - this.router.navigate(['/']); - } else { - this.errorMessage = 'Identifiants incorrects'; - } - } -} diff --git a/FencerJudgeFront/src/app/components/essentials/logout/logout.component.css b/FencerJudgeFront/src/app/components/essentials/logout/logout.component.css deleted file mode 100644 index e69de29..0000000 diff --git a/FencerJudgeFront/src/app/components/essentials/logout/logout.component.html b/FencerJudgeFront/src/app/components/essentials/logout/logout.component.html deleted file mode 100644 index c6ae40e..0000000 --- a/FencerJudgeFront/src/app/components/essentials/logout/logout.component.html +++ /dev/null @@ -1 +0,0 @@ -

logout works!

diff --git a/FencerJudgeFront/src/app/components/essentials/logout/logout.component.spec.ts b/FencerJudgeFront/src/app/components/essentials/logout/logout.component.spec.ts deleted file mode 100644 index 074294b..0000000 --- a/FencerJudgeFront/src/app/components/essentials/logout/logout.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { LogoutComponent } from './logout.component'; - -describe('LogoutComponent', () => { - let component: LogoutComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [LogoutComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(LogoutComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/FencerJudgeFront/src/app/components/essentials/logout/logout.component.ts b/FencerJudgeFront/src/app/components/essentials/logout/logout.component.ts deleted file mode 100644 index 7945a95..0000000 --- a/FencerJudgeFront/src/app/components/essentials/logout/logout.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component } from '@angular/core'; -import { Router } from '@angular/router'; -import { AuthService } from '@services/auth/auth.service'; - -@Component({ - selector: 'app-logout', - standalone: false, - templateUrl: './logout.component.html', - styleUrl: './logout.component.css', -}) -export class LogoutComponent { - constructor(private authService: AuthService, private router: Router) { - this.authService.logout(); - this.router.navigate(['/']); // Redirection après déconnexion - } -} diff --git a/FencerJudgeFront/src/app/components/home/home.component.css b/FencerJudgeFront/src/app/components/home/home.component.css index ddf7d9e..e69de29 100644 --- a/FencerJudgeFront/src/app/components/home/home.component.css +++ b/FencerJudgeFront/src/app/components/home/home.component.css @@ -1,568 +0,0 @@ -.match-card { - background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%); - border: 2px solid #daa520; - padding: 24px; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4), - inset 0 1px 0 rgba(255, 255, 255, 0.1); - position: relative; - overflow: hidden; - transition: all 0.3s ease; - height: 80vh; - width: 100%; -} - -.match-card::before { - content: ""; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 2px; - background: linear-gradient(90deg, #daa520, #ffd700, #daa520); - background-size: 200% 100%; - animation: gradientShift 15s ease infinite; -} - -@keyframes gradientShift { - 0% { - background-position: 0% 50%; - } - - 50% { - background-position: 100% 50%; - } - - 100% { - background-position: 0% 50%; - } -} - -.match-card { - transform: translateY(-4px); - box-shadow: 0 12px 48px rgba(218, 165, 32, 0.2), 0 8px 32px rgba(0, 0, 0, 0.4); -} - -.match-background { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: -1; -} - -.background-image { - width: 100%; - height: 100%; - object-fit: cover; - filter: grayscale(30%) brightness(0.4) contrast(1.2); - transition: all 0.5s ease; -} - -.match-card:hover .background-image { - filter: grayscale(10%) brightness(0.3) contrast(1.4); - transform: scale(1.05); -} - -.image-overlay { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: linear-gradient( - 135deg, - rgba(26, 26, 46, 0.85) 0%, - rgba(0, 0, 0, 0.7) 50%, - rgba(22, 33, 62, 0.85) 100% - ); -} - -/* Header */ -.match-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 20px; -} - -.match-weapon { - display: flex; - align-items: center; - gap: 8px; - color: #daa520; - font-weight: 600; -} - -.weapon-type { - font-size: 14px; - text-transform: uppercase; - letter-spacing: 1px; -} - -/* Status */ -.match-status { - display: flex; - align-items: center; - gap: 8px; - padding: 6px 12px; - border-radius: 20px; - font-size: 12px; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.status-warning { - background: rgba(34, 197, 94, 0.2); - color: #22c55e; - border: 1px solid #22c55e; -} - -.status-success { - background: rgba(239, 68, 68, 0.2); - color: #ef4444; - border: 1px solid #ef4444; -} - -.status-secondary { - background: rgba(59, 130, 246, 0.2); - color: #3b82f6; - border: 1px solid #3b82f6; -} - -.status-dot { - width: 8px; - height: 8px; - border-radius: 50%; - background: currentColor; - animation: pulse 2s infinite; -} - -@keyframes pulse { - 0%, - 100% { - opacity: 1; - } - 50% { - opacity: 0.5; - } -} - -/* Versus Section */ -.match-versus { - display: flex; - align-items: center; - justify-content: space-between; - margin: 24px 0; - position: relative; -} - -.fencer { - flex: 1; - text-align: center; - color: white; -} - -.fencer-name { - font-size: 18px; - font-weight: 700; - margin-bottom: 4px; - color: #daa520; -} - -.fencer-club { - font-size: 12px; - color: #9ca3af; - margin-bottom: 8px; -} - -.score { - font-size: 32px; - font-weight: 900; - color: white; - text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5); -} - -.vs-divider { - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; - margin: 0 20px; -} - -.vs-text { - font-size: 14px; - font-weight: 700; - color: #6b7280; - letter-spacing: 2px; -} - -.crossed-swords { - font-size: 20px; - opacity: 0.7; -} - -/* Details */ -.match-details { - display: flex; - flex-direction: column; - gap: 12px; - margin-top: 20px; - padding-top: 20px; - border-top: 1px solid rgba(255, 255, 255, 0.1); -} - -.detail-item { - display: flex; - align-items: center; - gap: 12px; - font-size: 14px; -} - -.detail-item .icon { - font-size: 16px; - width: 20px; - text-align: center; -} - -.detail-item .label { - color: #9ca3af; - font-weight: 500; - min-width: 60px; -} - -.detail-item .value { - color: white; - font-weight: 600; -} - -/* Responsive */ -@media (max-width: 768px) { - .match-card { - padding: 16px; - } - - .match-versus { - flex-direction: column; - gap: 16px; - } - - .vs-divider { - transform: rotate(90deg); - margin: 0; - } - - .fencer { - width: 100%; - } -} - -.combat-arena { - margin-top: 24px; - background: linear-gradient( - 135deg, - rgba(220, 38, 38, 0.1) 0%, - rgba(0, 0, 0, 0.8) 50%, - rgba(255, 215, 0, 0.1) 100% - ); - border: 2px solid; - border-image: linear-gradient(45deg, #dc2626, #ffd700, #dc2626) 1; - border-radius: 12px; - padding: 20px; - position: relative; - overflow: hidden; -} - -.combat-arena::before { - content: ""; - position: absolute; - top: -50%; - left: -50%; - width: 200%; - height: 200%; - background: repeating-conic-gradient( - from 0deg at 50% 50%, - transparent 0deg 2deg, - rgba(220, 38, 38, 0.05) 2deg 4deg - ); - animation: rotate 20s linear infinite; - pointer-events: none; -} - -@keyframes rotate { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -/* Header Arena */ -.arena-header { - display: flex; - align-items: center; - justify-content: center; - gap: 12px; - margin-bottom: 20px; - position: relative; -} - -.arena-title { - font-family: "Orbitron", monospace; - font-size: 16px; - font-weight: 900; - color: #ffd700; - letter-spacing: 3px; - text-shadow: 0 0 10px #ffd700, 0 0 20px #ffd700, 0 0 30px #ffd700; - animation: titleGlow 2s ease-in-out infinite alternate; -} - -@keyframes titleGlow { - from { - text-shadow: 0 0 10px #ffd700, 0 0 20px #ffd700, 0 0 30px #ffd700; - } - to { - text-shadow: 0 0 20px #ffd700, 0 0 30px #ffd700, 0 0 40px #ffd700; - } -} - -.arena-pulse { - width: 10px; - height: 10px; - background: #dc2626; - border-radius: 50%; - position: relative; - animation: pulse-danger 1s infinite; -} - -.arena-pulse::before { - content: ""; - position: absolute; - top: -5px; - left: -5px; - right: -5px; - bottom: -5px; - background: #dc2626; - border-radius: 50%; - opacity: 0.3; - animation: pulse-ring 1s infinite; -} - -@keyframes pulse-danger { - 0%, - 100% { - transform: scale(1); - } - 50% { - transform: scale(1.2); - } -} - -@keyframes pulse-ring { - 0% { - transform: scale(0.8); - opacity: 0.8; - } - 100% { - transform: scale(2); - opacity: 0; - } -} - -/* Combat Grid */ -.combat-grid { - display: grid; - grid-template-columns: 1fr; - gap: 16px; -} - -.combat-stat { - display: flex; - align-items: center; - gap: 16px; - padding: 16px; - background: linear-gradient( - 90deg, - rgba(0, 0, 0, 0.8) 0%, - rgba(26, 26, 46, 0.9) 50%, - rgba(0, 0, 0, 0.8) 100% - ); - border: 1px solid rgba(255, 215, 0, 0.3); - border-radius: 8px; - position: relative; - transition: all 0.3s ease; - cursor: pointer; -} - -.combat-stat:hover { - transform: translateX(8px); - border-color: #ffd700; - box-shadow: 0 4px 20px rgba(255, 215, 0, 0.3), - inset 0 1px 0 rgba(255, 215, 0, 0.1); -} - -/* Icons animés */ -.stat-icon { - position: relative; - display: flex; - align-items: center; - justify-content: center; - width: 48px; - height: 48px; - font-size: 24px; -} - -.location-radar { - position: absolute; - width: 40px; - height: 40px; - border: 2px solid #10b981; - border-radius: 50%; - border-top-color: transparent; - animation: radar-spin 2s linear infinite; -} - -.referee-badge { - position: absolute; - width: 35px; - height: 35px; - background: linear-gradient(45deg, #ffd700, #ffed4a); - clip-path: polygon( - 50% 0%, - 61% 35%, - 98% 35%, - 68% 57%, - 79% 91%, - 50% 70%, - 21% 91%, - 32% 57%, - 2% 35%, - 39% 35% - ); - animation: badge-pulse 3s ease-in-out infinite; -} - -.time-ring { - position: absolute; - width: 36px; - height: 36px; - border: 3px solid #dc2626; - border-radius: 50%; - border-left-color: transparent; - animation: time-tick 1s linear infinite; -} - -@keyframes radar-spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -@keyframes badge-pulse { - 0%, - 100% { - transform: scale(1) rotate(0deg); - } - 50% { - transform: scale(1.1) rotate(5deg); - } -} - -@keyframes time-tick { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -/* Content */ -.stat-content { - flex: 1; - display: flex; - flex-direction: column; - gap: 2px; -} - -.stat-label { - font-family: "Orbitron", monospace; - font-size: 10px; - font-weight: 700; - color: #6b7280; - letter-spacing: 1px; - text-transform: uppercase; -} - -.stat-value { - font-size: 16px; - font-weight: 700; - color: #ffffff; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); -} - -.stat-sub { - font-size: 11px; - color: #9ca3af; - font-weight: 500; -} - -/* Glows spécifiques */ -.venue .stat-value { - color: #10b981; -} -.referee .stat-value { - color: #ffd700; -} -.timing .stat-value { - color: #dc2626; -} - -.stat-glow { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - border-radius: 8px; - opacity: 0; - transition: opacity 0.3s ease; - pointer-events: none; -} - -.combat-stat:hover .stat-glow { - opacity: 1; -} - -.venue-glow { - box-shadow: inset 0 0 20px rgba(16, 185, 129, 0.2); -} -.referee-glow { - box-shadow: inset 0 0 20px rgba(255, 215, 0, 0.2); -} -.timing-glow { - box-shadow: inset 0 0 20px rgba(220, 38, 38, 0.2); -} - -/* Responsive */ -@media (min-width: 768px) { - .combat-grid { - grid-template-columns: repeat(3, 1fr); - } - - .combat-stat { - flex-direction: column; - text-align: center; - gap: 12px; - } - - .combat-stat:hover { - transform: translateY(-4px); - } -} diff --git a/FencerJudgeFront/src/app/components/home/home.component.html b/FencerJudgeFront/src/app/components/home/home.component.html index 37d0ba6..5f2c53f 100644 --- a/FencerJudgeFront/src/app/components/home/home.component.html +++ b/FencerJudgeFront/src/app/components/home/home.component.html @@ -1,114 +1 @@ -
-
- Escrime -
-
- -
-
- ⚔️ - {{ latestMatch.weapon }} -
-
- - {{ getMatchStateLabel(latestMatch.state) }} -
-
- -
-
-
- {{ player1?.name }} {{ player1?.firstName }} -
-
{{ player1?.club }}
-
{{ latestMatch.score1 }}
-
- -
- VS -
⚔️
-
- -
-
- {{ player2?.name }} {{ player2?.firstName }} -
-
{{ player2?.club }}
-
{{ latestMatch.score2 }}
-
-
- -
-
- ARENA COMBAT -
-
- -
-
-
-
- 🏛️ -
-
- BATTLEFIELD - {{ latestMatch.city }} - {{ latestMatch.country }} -
-
-
- -
-
-
- ⚖️ -
-
- COMBAT JUDGE - {{ referee?.name }} {{ referee?.firstName }} - OFFICIAL REFEREE -
-
-
- -
-
-
- -
-
- COMBAT START - {{ getTimeUntilMatch() }} - LIVE BATTLE -
-
-
-
-
- 🎯 -
-
- FUN FACT - - Saviez-vous que l'escrime est l'un des sports les plus anciens aux - Jeux Olympiques ? - - Inspiration et tradition au rendez-vous -
-
-
-
-
- - +

home works!

diff --git a/FencerJudgeFront/src/app/components/home/home.component.ts b/FencerJudgeFront/src/app/components/home/home.component.ts index c6a3439..906862d 100644 --- a/FencerJudgeFront/src/app/components/home/home.component.ts +++ b/FencerJudgeFront/src/app/components/home/home.component.ts @@ -1,159 +1,11 @@ import { Component } from '@angular/core'; -import { MatchesService } from '@services/matches/matches.service'; -import { Matches, MatchState } from '@interfaces/matches'; - -import { PlayerService } from '@services/player/player.service'; -import { Player } from '@interfaces/player'; - -import { RefereeService } from '@services/referee/referee.service'; -import { Referee, RefereeLevel } from '@interfaces/referee'; - @Component({ selector: 'app-home', standalone: false, templateUrl: './home.component.html', - styleUrl: './home.component.css', + styleUrl: './home.component.css' }) export class HomeComponent { - latestMatch?: Matches; - player1?: Player; - player2?: Player; - referee?: Referee; - MatchState = MatchState; - intervalId?: any; - timeUntilMatch: string | null = null; - constructor( - private matchesService: MatchesService, - private playerService: PlayerService, - private refereeService: RefereeService - ) {} - - ngOnInit(): void { - this.getLatestMatch(); - } - - ngOnDestroy(): void { - if (this.intervalId) { - clearInterval(this.intervalId); - } - } - - private getLatestMatch(): void { - this.matchesService.getMatches().subscribe((matches) => { - if (matches.length > 0) { - this.latestMatch = matches[matches.length - 1]; - console.log( - '[HomeComponent] 🏁 Dernier match ajouté :', - this.latestMatch - ); - - // Récupération des données liées - this.loadRelatedEntities(this.latestMatch); - - if (this.latestMatch.state === MatchState.NOT_STARTED) { - this.updateTimeUntilMatch(); // initial - this.intervalId = setInterval(() => { - this.updateTimeUntilMatch(); - }, 60000); // chaque minute - } - } else { - console.warn('[HomeComponent] Aucun match disponible'); - } - }); - } - - private updateTimeUntilMatch(): void { - if (!this.latestMatch) return; - - const now = new Date(); - const matchDate = new Date(this.latestMatch.date); - const diffMs = matchDate.getTime() - now.getTime(); - - if (diffMs <= 0) { - this.timeUntilMatch = null; - clearInterval(this.intervalId); - return; - } - - const totalMinutes = Math.floor(diffMs / (1000 * 60)); - const days = Math.floor(totalMinutes / (60 * 24)); - const hours = Math.floor((totalMinutes % (60 * 24)) / 60); - const minutes = totalMinutes % 60; - - let result = ''; - if (days > 0) result += `${days}j `; - if (hours > 0 || days > 0) result += `${hours}h `; - result += `${minutes}min`; - - this.timeUntilMatch = result.trim(); - } - - private loadRelatedEntities(match: Matches): void { - this.playerService.getPlayerById(match.player1ID).subscribe((p1) => { - this.player1 = p1!; - }); - - this.playerService.getPlayerById(match.player2ID).subscribe((p2) => { - this.player2 = p2!; - }); - - this.refereeService.getRefereeById(match.refereeID).subscribe((ref) => { - this.referee = ref!; - }); - } - - getMatchStateLabel(state: MatchState): string { - switch (state) { - case MatchState.NOT_STARTED: - return 'À venir'; - case MatchState.ONGOING: - return 'En cours'; - case MatchState.OVER: - return 'Terminé'; - default: - return 'Inconnu'; - } - } - - getMatchStateColor(state: MatchState): string { - switch (state) { - case MatchState.NOT_STARTED: - return 'secondary'; - case MatchState.ONGOING: - return 'warning'; - case MatchState.OVER: - return 'success'; - default: - return 'light'; - } - } - - getTimeUntilMatch(): string | null { - if ( - !this.latestMatch || - this.latestMatch.state !== MatchState.NOT_STARTED - ) { - return null; - } - - const now = new Date(); - const matchDate = new Date(this.latestMatch.date); - const diffMs = matchDate.getTime() - now.getTime(); - - if (diffMs <= 0) return null; - - const totalMinutes = Math.floor(diffMs / (1000 * 60)); - const days = Math.floor(totalMinutes / (60 * 24)); - const hours = Math.floor((totalMinutes % (60 * 24)) / 60); - const minutes = totalMinutes % 60; - - let result = ''; - if (days > 0) result += `${days}j `; - if (hours > 0 || days > 0) result += `${hours}h `; - result += `${minutes}min`; - - return result.trim(); - } } diff --git a/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.css b/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.css deleted file mode 100644 index bb537a4..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.css +++ /dev/null @@ -1,18 +0,0 @@ -form fieldset { - background-color: #f8f9fa; /* gris clair */ -} - -form legend { - font-weight: 600; - font-size: 1.1rem; -} - -form label { - font-weight: 500; -} - -form button { - width: 100%; - padding: 0.6rem; - font-size: 1.1rem; -} diff --git a/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.html b/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.html deleted file mode 100644 index 130f2cc..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.html +++ /dev/null @@ -1,171 +0,0 @@ -

Ajouter un match

- -
-
- Joueur 1 - -
- - -
- -
- - -
- -
- - -
-
- -
- Joueur 2 - -
- - -
- -
- - -
- -
- - -
-
- -
- Arbitre - -
- - -
- -
- - -
- -
- - -
-
- -
- Match - -
- - -
- -
- - -
- -
- - -
- -
- - -
-
- - -
diff --git a/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.spec.ts b/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.spec.ts deleted file mode 100644 index 5cd8289..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MatchesAddComponent } from './matches-add.component'; - -describe('MatchesAddComponent', () => { - let component: MatchesAddComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [MatchesAddComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(MatchesAddComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.ts b/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.ts deleted file mode 100644 index 77a8a94..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-add/matches-add.component.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Component } from '@angular/core'; -import { Router } from '@angular/router'; -import { FormsModule } from '@angular/forms'; - -import { MatchesService } from '@services/matches/matches.service'; -import { MatchState } from '@interfaces/matches'; - -import { PlayerService } from '@services/player/player.service'; - -import { RefereeService } from '@services/referee/referee.service'; -import { Referee, RefereeLevel } from '@interfaces/referee'; - -@Component({ - selector: 'app-matches-add', - standalone: false, - templateUrl: './matches-add.component.html', - styleUrl: './matches-add.component.css', -}) -export class MatchesAddComponent { - formData = { - player1Id: 0, - player1FirstName: '', - player1Name: '', - player1Club: '', - - player2Id: 0, - player2FirstName: '', - player2Name: '', - player2Club: '', - - refereeId: 0, - refereeFirstName: '', - refereeName: '', - refereelevel: 0, - - city: '', - country: '', - weapon: '', - date: '', - }; - - constructor( - private matchService: MatchesService, - private playerService: PlayerService, - private refereeService: RefereeService, - private router: Router - ) {} - - onSubmit(): void { - this.playerService - .getOrCreateByName( - this.formData.player1FirstName, - this.formData.player1Name, - this.formData.player1Club - ) - .subscribe((player1) => { - this.formData['player1Id'] = player1.id; - - this.playerService - .getOrCreateByName( - this.formData.player2FirstName, - this.formData.player2Name, - this.formData.player2Club - ) - .subscribe((player2) => { - this.formData['player2Id'] = player2.id; - - this.refereeService - .getOrCreateByName( - this.formData.refereeFirstName, - this.formData.refereeName, - this.formData.refereelevel - ) - .subscribe((referee) => { - this.formData['refereeId'] = referee.id; - - const matchPayload = { - refereeID: referee.id, - player1ID: player1.id, - score1: 0, - player2ID: player2.id, - score2: 0, - country: this.formData.country, - city: this.formData.city, - weapon: this.formData.weapon, - date: new Date(this.formData.date), - state: MatchState.NOT_STARTED, - }; - - this.matchService.create(matchPayload).subscribe(() => { - this.router.navigate(['/matches']); - }); - }); - }); - }); - } -} diff --git a/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.css b/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.css deleted file mode 100644 index e69de29..0000000 diff --git a/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.html b/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.html deleted file mode 100644 index bae9ddd..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.html +++ /dev/null @@ -1 +0,0 @@ -

matches-del works!

diff --git a/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.spec.ts b/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.spec.ts deleted file mode 100644 index 29459b8..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MatchesDelComponent } from './matches-del.component'; - -describe('MatchesDelComponent', () => { - let component: MatchesDelComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [MatchesDelComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(MatchesDelComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.ts b/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.ts deleted file mode 100644 index b3b9bd4..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-del/matches-del.component.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute, Router } from '@angular/router'; - -import { AuthService } from '@services/auth/auth.service'; -import { MatchesService } from '@services/matches/matches.service'; - -@Component({ - selector: 'app-matches-del', - standalone: false, - templateUrl: './matches-del.component.html', - styleUrl: './matches-del.component.css', -}) -export class MatchesDelComponent { - constructor( - private route: ActivatedRoute, - public authService: AuthService, - private router: Router, - private matchService: MatchesService - ) {} - - ngOnInit(): void { - const id = Number(this.route.snapshot.paramMap.get('id')); - - if (!isNaN(id)) { - this.matchService.deleteMatch(id).subscribe({ - next: () => { - console.log(`Match ${id} supprimé`); - this.router.navigate(['/matches']); // redirection après suppression - }, - error: (err) => { - console.error('Erreur lors de la suppression :', err); - }, - }); - } else { - console.error('ID de match invalide'); - } - } -} diff --git a/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.css b/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.css deleted file mode 100644 index f517d5c..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.css +++ /dev/null @@ -1,3 +0,0 @@ -.card { - border-left-width: 0.5rem !important; -} diff --git a/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.html b/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.html deleted file mode 100644 index 2f926a0..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.html +++ /dev/null @@ -1,96 +0,0 @@ -
-

Détail du Match

- -
-
-
-
- {{ match.city }}, {{ match.country }} -
- {{ match.date | date : "fullDate" }} - - {{ match.date | date : "shortTime" }} -
- {{ match.weapon }} -
- -
-
- {{ player1.firstName }} {{ player1.name }}
- {{ player1.club }} -
- -
- - - {{ match.score1 }} - - vs - - {{ match.score2 }} - - - - - {{ match.score1 }} - vs - {{ match.score2 }} - -
- -
- {{ player2.firstName }} {{ player2.name }}
- {{ player2.club }} -
-
- -
- - {{ getMatchStateLabel(match.state) }} - -
- -
-
Arbitre
-
-

- {{ referee.firstName }} {{ referee.name }} -

-

- Niveau : {{ getRefereeLevelLabel(referee.level) }} -

-
-
-

Arbitre non trouvé.

-
-
-
-
-
- - -
-

Match non trouvé.

-
- -Delete diff --git a/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.spec.ts b/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.spec.ts deleted file mode 100644 index b09ff2d..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MatchesIdComponent } from './matches-id.component'; - -describe('MatchesIdComponent', () => { - let component: MatchesIdComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [MatchesIdComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(MatchesIdComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.ts b/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.ts deleted file mode 100644 index c0ff55a..0000000 --- a/FencerJudgeFront/src/app/components/match/matches-id/matches-id.component.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { Router, ActivatedRoute } from '@angular/router'; -import { AuthService } from '@services/auth/auth.service'; - -import { MatchesService } from '@services/matches/matches.service'; -import { MatchState, Matches } from '@interfaces/matches'; - -import { PlayerService } from '@services/player/player.service'; -import { Player } from '@interfaces/player'; - -import { RefereeService } from '@services/referee/referee.service'; -import { Referee, RefereeLevel } from '@interfaces/referee'; - -import { getMatchStateLabel, getMatchStateColor } from '@utils/getState'; - -@Component({ - selector: 'app-matches-id', - standalone: false, - templateUrl: './matches-id.component.html', - styleUrl: './matches-id.component.css', -}) -export class MatchesIdComponent implements OnInit { - match: Matches | undefined; - player1: Player | undefined; - player2: Player | undefined; - referee: Referee | undefined; - - constructor( - private route: ActivatedRoute, - private matchService: MatchesService, - private playerService: PlayerService, - private refereeService: RefereeService, - public authService: AuthService, - private router: Router - ) {} - - ngOnInit(): void { - const id = Number(this.route.snapshot.paramMap.get('id')); - this.matchService.getMatchById(id).subscribe((match) => { - if (match) { - this.match = match; - - this.playerService - .getPlayerById(match.player1ID) - .subscribe((p1) => (this.player1 = p1!)); - this.playerService - .getPlayerById(match.player2ID) - .subscribe((p2) => (this.player2 = p2!)); - - this.refereeService - .getRefereeById(match.refereeID) - .subscribe((ref) => (this.referee = ref!)); - } - }); - } - - saveScores(): void { - if (this.match) { - this.matchService.updateMatch(this.match.id, { - score1: this.match.score1, - score2: this.match.score2, - }); - } - } - - getMatchStateLabel(state: MatchState): string { - switch (state) { - case MatchState.NOT_STARTED: - return 'À venir'; - case MatchState.ONGOING: - return 'En cours'; - case MatchState.OVER: - return 'Terminé'; - default: - return 'Inconnu'; - } - } - - getMatchStateColor(state: MatchState): string { - switch (state) { - case MatchState.NOT_STARTED: - return 'secondary'; - case MatchState.ONGOING: - return 'warning'; - case MatchState.OVER: - return 'success'; - default: - return 'light'; - } - } - - getRefereeLevelLabel(level: RefereeLevel): string { - switch (level) { - case RefereeLevel.NATIONAL: - return 'National'; - case RefereeLevel.REGIONAL: - return 'Régional'; - case RefereeLevel.DEPARTMENTAL: - return 'Départemental'; - default: - return 'Inconnu'; - } - } - - updateScores(): void { - if (this.match) { - this.matchService.updateMatch(this.match.id, { - score1: this.match.score1, - score2: this.match.score2, - }); - } - } - - incrementScore(player: 1 | 2): void { - if (!this.match) return; - - // Incrémente le score du joueur - if (player === 1) { - this.match.score1 += 1; - } else { - this.match.score2 += 1; - } - - // Change l'état en fonction des scores - if ( - this.match.score1 === 1 && - this.match.score2 === 0 && - this.match.state === MatchState.NOT_STARTED - ) { - this.match.state = MatchState.ONGOING; // passage à l'état 1 (en cours) - } else if ( - this.match.score2 === 1 && - this.match.score1 === 0 && - this.match.state === MatchState.NOT_STARTED - ) { - this.match.state = MatchState.ONGOING; - } - - // Si l'un des scores arrive à 15, on considère le match terminé - if (this.match.score1 >= 15 || this.match.score2 >= 15) { - this.match.state = MatchState.OVER; // passage à l'état 2 (terminé) - } - - this.updateScores(); - } - - goToMatchDel(): void { - this.router.navigate([ - '/matches/del/', - this.route.snapshot.paramMap.get('id'), - ]); - } -} diff --git a/FencerJudgeFront/src/app/components/match/matches/matches.component.css b/FencerJudgeFront/src/app/components/match/matches/matches.component.css deleted file mode 100644 index 2fa4ff6..0000000 --- a/FencerJudgeFront/src/app/components/match/matches/matches.component.css +++ /dev/null @@ -1,8 +0,0 @@ -.border-start-5 { - border-left: 5px solid #ccc; -} - -.card:hover { - transform: translateY(-2px); - transition: 0.2s ease-in-out; -} diff --git a/FencerJudgeFront/src/app/components/match/matches/matches.component.html b/FencerJudgeFront/src/app/components/match/matches/matches.component.html deleted file mode 100644 index e7036ad..0000000 --- a/FencerJudgeFront/src/app/components/match/matches/matches.component.html +++ /dev/null @@ -1,53 +0,0 @@ -
-

Liste des Matchs

- -
-
-
-
-
-
- {{ match.city }} — - {{ - match.date | date : "longDate" - }} -
- {{ match.weapon }} -
- -
-
- {{ getPlayerName(match.player1ID) }} - {{ match.score1 }} -
- -
vs
- -
- {{ getPlayerName(match.player2ID) }} - {{ match.score2 }} -
-
- -
- - {{ getMatchStatusLabel(match.state) }} - -
-
-
-
-
-
diff --git a/FencerJudgeFront/src/app/components/match/matches/matches.component.spec.ts b/FencerJudgeFront/src/app/components/match/matches/matches.component.spec.ts deleted file mode 100644 index 7f7c3e1..0000000 --- a/FencerJudgeFront/src/app/components/match/matches/matches.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MatchesComponent } from './matches.component'; - -describe('MatchesComponent', () => { - let component: MatchesComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [MatchesComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(MatchesComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/FencerJudgeFront/src/app/components/match/matches/matches.component.ts b/FencerJudgeFront/src/app/components/match/matches/matches.component.ts deleted file mode 100644 index a1cf3dc..0000000 --- a/FencerJudgeFront/src/app/components/match/matches/matches.component.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Component } from '@angular/core'; -import { Router } from '@angular/router'; - -import { MatchesService } from '@services/matches/matches.service'; -import { Matches, MatchState } from '@interfaces/matches'; - -import { PlayerService } from '@services/player/player.service'; -import { Player } from '@interfaces/player'; - -@Component({ - selector: 'app-matches', - standalone: false, - templateUrl: './matches.component.html', - styleUrl: './matches.component.css', -}) -export class MatchesComponent { - matches: Matches[] = []; - playersMap: Map = new Map(); - MatchState = MatchState; - - constructor( - private matchesService: MatchesService, - private playerService: PlayerService, - private router: Router - ) {} - - ngOnInit(): void { - this.playerService.getPlayers().subscribe((players) => { - // construire la map ID -> joueur - players.forEach((player) => this.playersMap.set(player.id, player)); - }); - - this.matchesService.getMatches().subscribe((data) => { - this.matches = data; - }); - } - - getPlayerName(id: number): string { - const player = this.playersMap.get(id); - return player ? `${player.firstName} ${player.name}` : 'Joueur inconnu'; - } - - getMatchBorderColor(state: MatchState): string { - switch (state) { - case MatchState.NOT_STARTED: - return 'border-secondary'; - case MatchState.ONGOING: - return 'border-warning'; - case MatchState.OVER: - return 'border-success'; - default: - return 'border-light'; - } - } - - getMatchStatusLabel(state: MatchState): string { - switch (state) { - case MatchState.NOT_STARTED: - return 'À venir'; - case MatchState.ONGOING: - return 'En cours'; - case MatchState.OVER: - return 'Terminé'; - default: - return 'Inconnu'; - } - } - - goToMatchDetail(matchId: number): void { - this.router.navigate(['/matches', matchId]); - } -} diff --git a/FencerJudgeFront/src/app/guards/auth.guard.spec.ts b/FencerJudgeFront/src/app/guards/auth.guard.spec.ts deleted file mode 100644 index 4ae275e..0000000 --- a/FencerJudgeFront/src/app/guards/auth.guard.spec.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { CanActivateFn } from '@angular/router'; - -import { authGuard } from './auth.guard'; - -describe('authGuard', () => { - const executeGuard: CanActivateFn = (...guardParameters) => - TestBed.runInInjectionContext(() => authGuard(...guardParameters)); - - beforeEach(() => { - TestBed.configureTestingModule({}); - }); - - it('should be created', () => { - expect(executeGuard).toBeTruthy(); - }); -}); diff --git a/FencerJudgeFront/src/app/guards/auth.guard.ts b/FencerJudgeFront/src/app/guards/auth.guard.ts deleted file mode 100644 index 2da4546..0000000 --- a/FencerJudgeFront/src/app/guards/auth.guard.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { inject } from '@angular/core'; -import { CanActivateFn, Router } from '@angular/router'; -import { AuthService } from '@services/auth/auth.service'; - -export const authGuard: CanActivateFn = (route, state) => { - const authService = inject(AuthService); - const router = inject(Router); - - if (!authService.isAuthenticated()) { - router.navigate(['/login']); - return false; - } - - return true; -}; diff --git a/FencerJudgeFront/src/app/services/auth/auth.service.spec.ts b/FencerJudgeFront/src/app/services/auth/auth.service.spec.ts deleted file mode 100644 index f1251ca..0000000 --- a/FencerJudgeFront/src/app/services/auth/auth.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { AuthService } from './auth.service'; - -describe('AuthService', () => { - let service: AuthService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(AuthService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/FencerJudgeFront/src/app/services/auth/auth.service.ts b/FencerJudgeFront/src/app/services/auth/auth.service.ts deleted file mode 100644 index 522d786..0000000 --- a/FencerJudgeFront/src/app/services/auth/auth.service.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Router } from '@angular/router'; - -@Injectable({ - providedIn: 'root', -}) -export class AuthService { - private isLoggedIn = false; - private readonly hardcodedUser = { - email: 'user@test.com', - password: 'password123', - }; - - constructor(private router: Router) {} - - login(email: string, password: string): boolean { - if ( - email === this.hardcodedUser.email && - password === this.hardcodedUser.password - ) { - this.isLoggedIn = true; - return true; - } - return false; - } - - logout(): void { - this.isLoggedIn = false; - this.router.navigate(['/login']); - } - - isAuthenticated(): boolean { - return this.isLoggedIn; - } -} diff --git a/FencerJudgeFront/src/app/services/matches/matches.service.spec.ts b/FencerJudgeFront/src/app/services/matches.service.spec.ts similarity index 100% rename from FencerJudgeFront/src/app/services/matches/matches.service.spec.ts rename to FencerJudgeFront/src/app/services/matches.service.spec.ts diff --git a/FencerJudgeFront/src/app/services/matches/matches.service.ts b/FencerJudgeFront/src/app/services/matches.service.ts similarity index 61% rename from FencerJudgeFront/src/app/services/matches/matches.service.ts rename to FencerJudgeFront/src/app/services/matches.service.ts index bbffd36..12a6201 100644 --- a/FencerJudgeFront/src/app/services/matches/matches.service.ts +++ b/FencerJudgeFront/src/app/services/matches.service.ts @@ -45,7 +45,6 @@ export class MatchesService { state: MatchState.NOT_STARTED, }, ]; - private nextMatchId = Math.max(...this.matches.map((m) => m.id)) + 1; constructor() { console.log('[MatchesService] Initial matches loaded:', this.matches); @@ -69,39 +68,4 @@ export class MatchesService { ); // ici tu pourrais plus tard faire : this.socket = new WebSocket('ws://...') etc. } - - updateMatch(id: number, updatedData: Partial): void { - const match = this.matches.find((m) => m.id === id); - if (match) { - Object.assign(match, updatedData); - console.log(`[MatchesService] Match ${id} mis à jour :`, match); - } else { - console.warn(`[MatchesService] Match ${id} introuvable`); - } - } - - create(match: Omit): Observable { - const newMatch: Matches = { - ...match, - id: this.nextMatchId++, - }; - - this.matches.push(newMatch); - console.log('[MatchesService] Match created:', newMatch); - return of(newMatch); - } - - deleteMatch(id: number): Observable { - const index = this.matches.findIndex((m) => m.id === id); - - if (index !== -1) { - const deletedMatch = this.matches.splice(index, 1)[0]; - console.log(`[MatchesService] Match ${id} supprimé :`, deletedMatch); - - return of(true); - } else { - console.warn(`[MatchesService] Match ${id} introuvable pour suppression`); - return of(false); - } - } } diff --git a/FencerJudgeFront/src/app/services/player/player.service.spec.ts b/FencerJudgeFront/src/app/services/player.service.spec.ts similarity index 100% rename from FencerJudgeFront/src/app/services/player/player.service.spec.ts rename to FencerJudgeFront/src/app/services/player.service.spec.ts diff --git a/FencerJudgeFront/src/app/services/player/player.service.ts b/FencerJudgeFront/src/app/services/player.service.ts similarity index 59% rename from FencerJudgeFront/src/app/services/player/player.service.ts rename to FencerJudgeFront/src/app/services/player.service.ts index c5f3a1b..53d4350 100644 --- a/FencerJudgeFront/src/app/services/player/player.service.ts +++ b/FencerJudgeFront/src/app/services/player.service.ts @@ -27,35 +27,4 @@ export class PlayerService { console.log(`[PlayerService] Fetching player ID: ${id}`, player); return of(player); } - - getOrCreateByName( - firstName: string, - name: string, - club: string = 'Inconnu' - ): Observable { - const existing = this.players.find( - (p) => - p.firstName.toLowerCase() === firstName.toLowerCase() && - p.name.toLowerCase() === name.toLowerCase() - ); - - if (existing) { - console.log('[PlayerService] Joueur trouvé :', existing); - return of(existing); - } - - const newPlayer: Player = { - id: - this.players.length > 0 - ? Math.max(...this.players.map((p) => p.id)) + 1 - : 1, - firstName, - name, - club, - }; - - this.players.push(newPlayer); - console.log('[PlayerService] Nouveau joueur créé :', newPlayer); - return of(newPlayer); - } } diff --git a/FencerJudgeFront/src/app/services/referee/referee.service.spec.ts b/FencerJudgeFront/src/app/services/referee.service.spec.ts similarity index 100% rename from FencerJudgeFront/src/app/services/referee/referee.service.spec.ts rename to FencerJudgeFront/src/app/services/referee.service.spec.ts diff --git a/FencerJudgeFront/src/app/services/referee/referee.service.ts b/FencerJudgeFront/src/app/services/referee.service.ts similarity index 57% rename from FencerJudgeFront/src/app/services/referee/referee.service.ts rename to FencerJudgeFront/src/app/services/referee.service.ts index 8d26a06..6963230 100644 --- a/FencerJudgeFront/src/app/services/referee/referee.service.ts +++ b/FencerJudgeFront/src/app/services/referee.service.ts @@ -39,35 +39,4 @@ export class RefereeService { console.log(`[RefereeService] Fetching referee ID: ${id}`, ref); return of(ref); } - - getOrCreateByName( - firstName: string, - name: string, - level: RefereeLevel - ): Observable { - const existing = this.referees.find( - (r) => - r.firstName.toLowerCase() === firstName.toLowerCase() && - r.name.toLowerCase() === name.toLowerCase() - ); - - if (existing) { - console.log('[RefereeService] Arbitre trouvé :', existing); - return of(existing); - } - - const newPlayer: Referee = { - id: - this.referees.length > 0 - ? Math.max(...this.referees.map((r) => r.id)) + 1 - : 1, - firstName, - name, - level, - }; - - this.referees.push(newPlayer); - console.log('[RefereeService] Nouveau arbitre créé :', newPlayer); - return of(newPlayer); - } } diff --git a/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.css b/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.css deleted file mode 100644 index 13c800a..0000000 --- a/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.css +++ /dev/null @@ -1,56 +0,0 @@ -@keyframes slides { - from { - transform: translateX(0); - } - to { - transform: translateX(-100%); - } -} - -.logos { - overflow: hidden; - padding: 30px 0px; - white-space: nowrap; - position: relative; -} - -.logos:before, -.logos:after { - position: absolute; - top: 0; - content: ""; - width: 250px; - height: 100%; - z-index: 2; -} - -.logos:before { - left: 0; - background: linear-gradient( - to left, - rgba(255, 255, 255, 0), - rgb(255, 255, 255) - ); -} - -.logos:after { - right: 0; - background: linear-gradient( - to right, - rgba(255, 255, 255, 0), - rgb(255, 255, 255) - ); -} - -.logo_items { - display: inline-block; - animation: 35s slides infinite linear; -} - -.logos:hover .logo_items { - animation-play-state: paused; -} - -.logo_items img { - height: 100px; -} diff --git a/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.html b/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.html deleted file mode 100644 index 89ce529..0000000 --- a/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.html +++ /dev/null @@ -1,23 +0,0 @@ -
-
- - - - - - - -
-
diff --git a/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.spec.ts b/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.spec.ts deleted file mode 100644 index 9ca3691..0000000 --- a/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { SponsortComponent } from './sponsort.component'; - -describe('SponsortComponent', () => { - let component: SponsortComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - declarations: [SponsortComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(SponsortComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.ts b/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.ts deleted file mode 100644 index 8058d61..0000000 --- a/FencerJudgeFront/src/app/templates/sponsort/sponsort.component.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-sponsort', - standalone: false, - templateUrl: './sponsort.component.html', - styleUrl: './sponsort.component.css' -}) -export class SponsortComponent { - -} diff --git a/FencerJudgeFront/src/app/utils/getState.ts b/FencerJudgeFront/src/app/utils/getState.ts deleted file mode 100644 index c7f141d..0000000 --- a/FencerJudgeFront/src/app/utils/getState.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { MatchState } from '@interfaces/matches'; - -export function getMatchStateLabel(state: MatchState): string { - switch (state) { - case MatchState.NOT_STARTED: - return 'À venir'; - case MatchState.ONGOING: - return 'En cours'; - case MatchState.OVER: - return 'Terminé'; - default: - return 'Inconnu'; - } -} - -export function getMatchStateColor(state: MatchState): string { - switch (state) { - case MatchState.NOT_STARTED: - return 'secondary'; - case MatchState.ONGOING: - return 'warning'; - case MatchState.OVER: - return 'success'; - default: - return 'light'; - } -} diff --git a/FencerJudgeFront/src/assets/duel.webp b/FencerJudgeFront/src/assets/duel.webp deleted file mode 100644 index 5282448..0000000 Binary files a/FencerJudgeFront/src/assets/duel.webp and /dev/null differ diff --git a/FencerJudgeFront/src/styles.css b/FencerJudgeFront/src/styles.css index c44aac6..90d4ee0 100644 --- a/FencerJudgeFront/src/styles.css +++ b/FencerJudgeFront/src/styles.css @@ -1,4 +1 @@ /* You can add global styles to this file, and also import other style files */ -.bg-primary-custom { - background-color: #414141; -} diff --git a/FencerJudgeFront/tsconfig.json b/FencerJudgeFront/tsconfig.json index fca3db7..06d41df 100644 --- a/FencerJudgeFront/tsconfig.json +++ b/FencerJudgeFront/tsconfig.json @@ -21,7 +21,6 @@ "paths": { "@interfaces/*": ["app/interfaces/*"], "@services/*": ["app/services/*"], - "@guards/*": ["app/guards/*"], "@utils/*": ["app/utils/*"] } }, diff --git a/db.lock.db b/db.lock.db deleted file mode 100644 index 072e750..0000000 --- a/db.lock.db +++ /dev/null @@ -1,6 +0,0 @@ -#FileLock -#Mon Jun 02 17:40:34 CEST 2025 -hostName=ExostFlash -id=197313393c88a931fa21bf5ce1281b7253870b00683 -method=file -server=192.167.2.100\:54366