refacto : restructuration du projet
All checks were successful
Build Check / build (push) Successful in 3m8s
Build Check / build (pull_request) Successful in 3m19s

This commit is contained in:
styve Lioumba
2025-12-23 09:06:41 +01:00
parent bbd555d61e
commit b90e78e1b7
154 changed files with 167 additions and 248 deletions

View File

@@ -3,21 +3,21 @@ import { AUTH_REPOSITORY_TOKEN } from '@app/infrastructure/authentification/auth
import { LoaderAction } from '@app/domain/loader-action.util';
import { ActionType } from '@app/domain/action-type.util';
import { ErrorResponse } from '@app/domain/error-response.util';
import { LoginUseCase } from '@app/usecase/authentification/login.usecase';
import { RegisterUseCase } from '@app/usecase/authentification/register.usecase';
import { LoginUseCase } from '../../application/authentification/login.usecase';
import { RegisterUseCase } from '../../application/authentification/register.usecase';
import { LoginDto } from '@app/domain/authentification/dto/login-dto';
import { RegisterDto } from '@app/domain/authentification/dto/register-dto';
import { User } from '@app/domain/users/user.model';
import { AuthResponse } from '@app/domain/authentification/auth.repository';
import { ProfileDTO } from '@app/domain/profiles/dto/create-profile.dto';
import { ProfileFacade } from '@app/ui/profiles/profile.facade';
import { SendVerificationEmailUsecase } from '@app/usecase/authentification/send-verification-email.usecase';
import { LogoutUseCase } from '@app/usecase/authentification/logout.usecase';
import { VerifyAuthenticatedUsecase } from '@app/usecase/authentification/verify-authenticated.usecase';
import { VerifyEmailUseCase } from '@app/usecase/authentification/verify-email.usecase';
import { GetCurrentUserUseCase } from '@app/usecase/authentification/get-current-user.usecase';
import { SendRequestPasswordResetUsecase } from '@app/usecase/authentification/send-request-password-reset.usecase';
import { FeedbackService } from '@app/ui/shared/services/feedback.service';
import { ProfileFacade } from '../profiles/profile.facade';
import { SendVerificationEmailUsecase } from '../../application/authentification/send-verification-email.usecase';
import { LogoutUseCase } from '../../application/authentification/logout.usecase';
import { VerifyAuthenticatedUsecase } from '../../application/authentification/verify-authenticated.usecase';
import { VerifyEmailUseCase } from '../../application/authentification/verify-email.usecase';
import { GetCurrentUserUseCase } from '../../application/authentification/get-current-user.usecase';
import { SendRequestPasswordResetUsecase } from '../../application/authentification/send-request-password-reset.usecase';
import { FeedbackService } from '../shared/services/feedback.service';
import { first } from 'rxjs';
@Injectable({ providedIn: 'root' })

View File

@@ -1,5 +1,5 @@
import { inject, Injectable, signal } from '@angular/core';
import { GetCurrentLocationUseCase } from '@app/usecase/location/get-current-location.use-case';
import { GetCurrentLocationUseCase } from '../../application/location/get-current-location.use-case';
import { Coordinates } from '@app/domain/localisation/coordinates.model';
export interface LocationState {

View File

@@ -1,25 +1,22 @@
import { ListProfilesUseCase } from '@app/usecase/profiles/list-profiles.usecase';
import { ListProfilesUseCase } from '../../application/profiles/list-profiles.usecase';
import { inject, Injectable, signal } from '@angular/core';
import { PROFILE_REPOSITORY_TOKEN } from '@app/infrastructure/profiles/profile-repository.token';
import { Profile, ProfilePaginated } from '@app/domain/profiles/profile.model';
import { ProfilePresenter } from '@app/ui/profiles/profile.presenter';
import {
ProfileViewModel,
ProfileViewModelPaginated,
} from '@app/ui/profiles/profile.presenter.model';
import { ProfilePresenter } from '../profiles/profile.presenter';
import { ProfileViewModel, ProfileViewModelPaginated } from '../profiles/profile.presenter.model';
import { LoaderAction } from '@app/domain/loader-action.util';
import { ActionType } from '@app/domain/action-type.util';
import { ErrorResponse } from '@app/domain/error-response.util';
import { CreateProfileUseCase } from '@app/usecase/profiles/create-profile.usecase';
import { UpdateProfileUseCase } from '@app/usecase/profiles/update-profile.usecase';
import { GetProfileUseCase } from '@app/usecase/profiles/get-profile.usecase';
import { CreateProfileUseCase } from '../../application/profiles/create-profile.usecase';
import { UpdateProfileUseCase } from '../../application/profiles/update-profile.usecase';
import { GetProfileUseCase } from '../../application/profiles/get-profile.usecase';
import { ProfileDTO } from '@app/domain/profiles/dto/create-profile.dto';
import { SearchFilters } from '@app/domain/search/search-filters';
import { SearchService } from '@app/infrastructure/search/search.service';
import { UpdateCoordinateProfileUseCase } from '@app/usecase/profiles/update-coordinate-profile.usecase';
import { UpdateCoordinateProfileUseCase } from '../../application/profiles/update-coordinate-profile.usecase';
import { SettingsProfileDto } from '@app/domain/profiles/dto/settings-profile.dto';
import { UpdateSettingsProfileUseCase } from '@app/usecase/profiles/update-settings-profile.usecase';
import { FeedbackService } from '@app/ui/shared/services/feedback.service';
import { UpdateSettingsProfileUseCase } from '../../application/profiles/update-settings-profile.usecase';
import { FeedbackService } from '../shared/services/feedback.service';
import { first, Subscription } from 'rxjs';
@Injectable({

View File

@@ -1,6 +1,6 @@
import { Coordinates } from '@app/domain/localisation/coordinates.model';
import { SettingsProfileDto } from '@app/domain/profiles/dto/settings-profile.dto';
import { UserViewModel } from '@app/ui/users/user.presenter.model';
import { UserViewModel } from '../users/user.presenter.model';
export interface ProfileViewModel {
id: string;

View File

@@ -1,17 +1,13 @@
import {
ProfileViewModel,
ProfileViewModelPaginated,
} from '@app/ui/profiles/profile.presenter.model';
import { ProfileViewModel, ProfileViewModelPaginated } from '../profiles/profile.presenter.model';
import { Profile, ProfilePaginated } from '@app/domain/profiles/profile.model';
import { SettingsProfileDto } from '@app/domain/profiles/dto/settings-profile.dto';
import { User } from '@app/domain/users/user.model';
import { environment } from '@env/environment';
import { UserPresenter } from '@app/ui/users/user.presenter';
import { UserPresenter } from '../users/user.presenter';
export class ProfilePresenter {
private readonly userPresenter = new UserPresenter();
private DEFAULT_BIO = `Je suis sur la plateforme Trouve Ton Profil pour partager mon expertise et mes compétences.
N'hésitez pas à me contacter pour en savoir plus sur mon parcours et mes domaines d'intervention.`;
private DEFAULT_BIO = `Je suis sur la plateforme Trouve Ton Profil pour partager mon expertise et mes compétences. N'hésitez pas à me contacter pour en savoir plus sur mon parcours et mes domaines d'intervention.`;
toViewModelPaginated(profilePaginated: ProfilePaginated): ProfileViewModelPaginated {
return { ...profilePaginated, items: this.toViewModels(profilePaginated.items) };

View File

@@ -1,18 +1,18 @@
import { inject, Injectable, signal } from '@angular/core';
import { PROJECT_REPOSITORY_TOKEN } from '@app/infrastructure/projects/project-repository.token';
import { CreateProjectUseCase } from '@app/usecase/projects/create-project.usecase';
import { ListProjectUseCase } from '@app/usecase/projects/list-project.usecase';
import { GetProjectUseCase } from '@app/usecase/projects/get-project.usecase';
import { UpdateProjectUseCase } from '@app/usecase/projects/update-project.usecase';
import { CreateProjectUseCase } from '../../application/projects/create-project.usecase';
import { ListProjectUseCase } from '../../application/projects/list-project.usecase';
import { GetProjectUseCase } from '../../application/projects/get-project.usecase';
import { UpdateProjectUseCase } from '../../application/projects/update-project.usecase';
import { Project } from '@app/domain/projects/project.model';
import { ProjectViewModel } from '@app/ui/projects/project.presenter.model';
import { ProjectPresenter } from '@app/ui/projects/project.presenter';
import { ProjectViewModel } from '../projects/project.presenter.model';
import { ProjectPresenter } from '../projects/project.presenter';
import { CreateProjectDto } from '@app/domain/projects/dto/create-project.dto';
import { ErrorResponse } from '@app/domain/error-response.util';
import { ActionType } from '@app/domain/action-type.util';
import { LoaderAction } from '@app/domain/loader-action.util';
import { first, Subscription } from 'rxjs';
import { FeedbackService } from '@app/ui/shared/services/feedback.service';
import { FeedbackService } from '../shared/services/feedback.service';
@Injectable({
providedIn: 'root',

View File

@@ -1,4 +1,4 @@
import { ProjectViewModel } from '@app/ui/projects/project.presenter.model';
import { ProjectViewModel } from '../projects/project.presenter.model';
import { Project } from '@app/domain/projects/project.model';
import { environment } from '@env/environment';

View File

@@ -1,15 +1,15 @@
import { inject, Injectable, signal } from '@angular/core';
import { SECTOR_REPOSITORY_TOKEN } from '@app/infrastructure/sectors/sector-repository.token';
import { ListSectorUsecase } from '@app/usecase/sectors/list-sector.usecase';
import { GetSectorUseCase } from '@app/usecase/sectors/get-sector.usecase';
import { ListSectorUsecase } from '../../application/sectors/list-sector.usecase';
import { GetSectorUseCase } from '../../application/sectors/get-sector.usecase';
import { ActionType } from '@app/domain/action-type.util';
import { LoaderAction } from '@app/domain/loader-action.util';
import { ErrorResponse } from '@app/domain/error-response.util';
import { SectorPresenterModel } from '@app/ui/sectors/sector.presenter.model';
import { SectorPresenterModel } from '../sectors/sector.presenter.model';
import { Sector } from '@app/domain/sectors/sector.model';
import { SectorPresenter } from '@app/ui/sectors/sector.presenter';
import { SectorPresenter } from '../sectors/sector.presenter';
import { first, Subscription } from 'rxjs';
import { FeedbackService } from '@app/ui/shared/services/feedback.service';
import { FeedbackService } from '../shared/services/feedback.service';
@Injectable()
export class SectorFacade {

View File

@@ -1,4 +1,4 @@
import { SectorPresenterModel } from '@app/ui/sectors/sector.presenter.model';
import { SectorPresenterModel } from '../sectors/sector.presenter.model';
import { Sector } from '@app/domain/sectors/sector.model';
export class SectorPresenter {

View File

@@ -1,10 +1,10 @@
import { inject, Injectable, signal } from '@angular/core';
import { ThemeType, UserSettings } from '@app/domain/settings/setting.model';
import { GetSettingsUseCase } from '@app/usecase/settings/get-settings.usecase';
import { UpdateSettingsUseCase } from '@app/usecase/settings/update-settings.usecase';
import { GetSettingsUseCase } from '../../application/settings/get-settings.usecase';
import { UpdateSettingsUseCase } from '../../application/settings/update-settings.usecase';
import { SETTING_REPOSITORY_TOKEN } from '@app/infrastructure/settings/setting-repository.token';
import { ApplyThemeUsecase } from '@app/usecase/settings/apply-theme.usecase';
import { GetDefaultSystemThemeUsecase } from '@app/usecase/settings/get-default-system-theme.usecase';
import { ApplyThemeUsecase } from '../../application/settings/apply-theme.usecase';
import { GetDefaultSystemThemeUsecase } from '../../application/settings/get-default-system-theme.usecase';
@Injectable({ providedIn: 'root' })
export class SettingsFacade {

View File

@@ -1,14 +1,14 @@
import { inject, Injectable, signal } from '@angular/core';
import { USER_REPOSITORY_TOKEN } from '@app/infrastructure/users/user-repository.token';
import { GetUserUseCase } from '@app/usecase/users/get-user.usecase';
import { UpdateUserUseCase } from '@app/usecase/users/update-user.usecase';
import { GetUserUseCase } from '../../application/users/get-user.usecase';
import { UpdateUserUseCase } from '../../application/users/update-user.usecase';
import { LoaderAction } from '@app/domain/loader-action.util';
import { ActionType } from '@app/domain/action-type.util';
import { ErrorResponse } from '@app/domain/error-response.util';
import { UserViewModel } from '@app/ui/users/user.presenter.model';
import { UserPresenter } from '@app/ui/users/user.presenter';
import { UserViewModel } from '../users/user.presenter.model';
import { UserPresenter } from '../users/user.presenter';
import { first } from 'rxjs';
import { FeedbackService } from '@app/ui/shared/services/feedback.service';
import { FeedbackService } from '../shared/services/feedback.service';
@Injectable({ providedIn: 'root' })
export class UserFacade {

View File

@@ -1,4 +1,4 @@
import { UserViewModel } from '@app/ui/users/user.presenter.model';
import { UserViewModel } from '../users/user.presenter.model';
import { User } from '@app/domain/users/user.model';
import { environment } from '@env/environment';

View File

@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
import { RouterOutlet } from '@angular/router';
import { NavBarComponent } from '@app/shared/components/nav-bar/nav-bar.component';
import { FooterComponent } from '@app/shared/components/footer/footer.component';
import { SettingsFacade } from '@app/ui/settings/settings.facade';
import { SettingsFacade } from './adapters/settings/settings.facade';
@Component({
selector: 'app-root',

View File

@@ -5,23 +5,23 @@ export const routes: Routes = [
{
path: '',
title: 'Accueil',
loadChildren: () => import('@app/routes/home/home.module').then((m) => m.HomeModule),
loadChildren: () => import('./views/home/home.module').then((m) => m.HomeModule),
},
{
path: 'home',
title: 'Accueil',
loadChildren: () => import('@app/routes/home/home.module').then((m) => m.HomeModule),
loadChildren: () => import('./views/home/home.module').then((m) => m.HomeModule),
},
{
path: 'profiles',
title: 'Liste des profiles',
loadChildren: () => import('@app/routes/profile/profile.module').then((m) => m.ProfileModule),
loadChildren: () => import('./views/profile/profile.module').then((m) => m.ProfileModule),
},
{
path: 'auth',
title: 'Authentification',
loadChildren: () =>
import('@app/routes/authentification/authentification.module').then(
import('./views/authentification/authentification.module').then(
(m) => m.AuthentificationModule
),
},
@@ -30,13 +30,12 @@ export const routes: Routes = [
title: 'Mon profile',
canActivate: [authGuard],
loadChildren: () =>
import('@app/routes/my-profile/my-profile.module').then((m) => m.MyProfileModule),
import('./views/my-profile/my-profile.module').then((m) => m.MyProfileModule),
},
{
path: 'not-found',
title: 'Page non trouvée',
loadChildren: () =>
import('@app/routes/not-found/not-found.module').then((m) => m.NotFoundModule),
loadChildren: () => import('./views/not-found/not-found.module').then((m) => m.NotFoundModule),
},
{ path: '', redirectTo: '/', pathMatch: 'full' },
{ path: '**', redirectTo: '/not-found' },

View File

@@ -2,7 +2,7 @@ import { TestBed } from '@angular/core/testing';
import { authGuard } from './auth.guard';
import { CanActivateFn, Router, UrlTree } from '@angular/router';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { AuthFacade } from '../../../adapters/authentification/auth.facade';
describe('authGuard', () => {
// 1. Définition des variables pour les Mocks

View File

@@ -1,6 +1,6 @@
import { CanActivateFn, Router } from '@angular/router';
import { inject } from '@angular/core';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { AuthFacade } from '../../../adapters/authentification/auth.facade';
export const authGuard: CanActivateFn = (route, state) => {
const authFacade = inject(AuthFacade);

View File

@@ -1,45 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { ThemeService } from './theme.service';
describe('ThemeService', () => {
let service: ThemeService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [ThemeService],
});
service = TestBed.inject(ThemeService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
// Test de la valeur initiale
it('should have initial value "null"', () => {
// Avec les Signals, on accède à la valeur en exécutant la fonction : signal()
expect(service.darkModeSignal()).toBe('null');
});
// Test du basculement vers Dark
it('should switch to "dark" when updateDarkMode is called and current is "null"', () => {
// Action
service.updateDarkMode();
// Vérification
expect(service.darkModeSignal()).toBe('dark');
});
// Test du basculement inverse (Dark vers Null)
it('should switch back to "null" when updateDarkMode is called and current is "dark"', () => {
// 1. Préparation : On force l'état à 'dark' pour tester ce cas précis
service.darkModeSignal.set('dark');
// 2. Action
service.updateDarkMode();
// 3. Vérification
expect(service.darkModeSignal()).toBe('null');
});
});

View File

@@ -1,12 +0,0 @@
import { Injectable, signal } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class ThemeService {
darkModeSignal = signal<string>('null');
updateDarkMode() {
this.darkModeSignal.update((value) => (value === 'dark' ? 'null' : 'dark'));
}
}

View File

@@ -1,4 +1,4 @@
import { Component, Input, output } from '@angular/core';
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-btn-loading',

View File

@@ -1,7 +1,7 @@
import { Component, inject, input, OnChanges, SimpleChanges } from '@angular/core';
import { TitleCasePipe } from '@angular/common';
import { UntilDestroy } from '@ngneat/until-destroy';
import { SectorFacade } from '@app/ui/sectors/sector.facade';
import { SectorFacade } from '@app/adapters/sectors/sector.facade';
@Component({
selector: 'app-chips',

View File

@@ -13,7 +13,7 @@ import {
import { Coordinates } from '@app/domain/localisation/coordinates.model';
import * as L from 'leaflet';
import { LoadingComponent } from '@app/shared/components/loading/loading.component';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { ProfileViewModel } from '@app/adapters/profiles/profile.presenter.model';
export interface MapMarker {
id: string;

View File

@@ -1,7 +1,7 @@
import { Component, input, OnInit } from '@angular/core';
import { environment } from '@env/environment';
import { RouterLink } from '@angular/router';
import { ProjectFacade } from '@app/ui/projects/project.facade';
import { ProjectFacade } from '@app/adapters/projects/project.facade';
@Component({
selector: 'app-my-profile-project-item',

View File

@@ -3,7 +3,7 @@ import { PaginatorModule } from 'primeng/paginator';
import { ReactiveFormsModule } from '@angular/forms';
import { UntilDestroy } from '@ngneat/until-destroy';
import { MyProfileUpdateProjectFormComponent } from '@app/shared/components/my-profile-update-project-form/my-profile-update-project-form.component';
import { ProjectFacade } from '@app/ui/projects/project.facade';
import { ProjectFacade } from '@app/adapters/projects/project.facade';
@Component({
selector: 'app-my-profile-project-list',

View File

@@ -3,9 +3,9 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MyProfileUpdateCvFormComponent } from './my-profile-update-cv-form.component';
import { mockFileManagerSvc } from '@app/testing/file-manager.service.mock';
import { ActionType } from '@app/domain/action-type.util';
import { ProfileFacade } from '@app/ui/profiles/profile.facade';
import { FileManagerService } from '@app/ui/shared/services/file-manager.service';
import { mockProfileFac } from '@app/testing/ui/profiles/profile.facade.mock';
import { ProfileFacade } from '../../../adapters/profiles/profile.facade';
import { FileManagerService } from '../../../adapters/shared/services/file-manager.service';
import { mockProfileFac } from '@app/testing/adapters/profiles/profile.facade.mock';
import { mockProfiles } from '@app/testing/profile.mock';
describe('MyProfileUpdateCvFormComponent', () => {

View File

@@ -1,11 +1,11 @@
import { Component, effect, inject, input } from '@angular/core';
import { NgTemplateOutlet } from '@angular/common';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { ProfileFacade } from '@app/ui/profiles/profile.facade';
import { ProfileViewModel } from '@app/adapters/profiles/profile.presenter.model';
import { ProfileFacade } from '@app/adapters/profiles/profile.facade';
import { ActionType } from '@app/domain/action-type.util';
import { Profile } from '@app/domain/profiles/profile.model';
import { LoadingComponent } from '@app/shared/components/loading/loading.component';
import { FileManagerService } from '@app/ui/shared/services/file-manager.service';
import { FileManagerService } from '@app/adapters/shared/services/file-manager.service';
@Component({
selector: 'app-my-profile-update-cv-form',

View File

@@ -8,11 +8,11 @@ import {
} from '@angular/forms';
import { UntilDestroy } from '@ngneat/until-destroy';
import { MyProfileUpdateCvFormComponent } from '@app/shared/components/my-profile-update-cv-form/my-profile-update-cv-form.component';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { ProfileFacade } from '@app/ui/profiles/profile.facade';
import { ProfileViewModel } from '@app/adapters/profiles/profile.presenter.model';
import { ProfileFacade } from '@app/adapters/profiles/profile.facade';
import { ActionType } from '@app/domain/action-type.util';
import { Profile } from '@app/domain/profiles/profile.model';
import { SectorFacade } from '@app/ui/sectors/sector.facade';
import { SectorFacade } from '@app/adapters/sectors/sector.facade';
import { NgClass, NgTemplateOutlet } from '@angular/common';
import { LoadingComponent } from '@app/shared/components/loading/loading.component';

View File

@@ -2,11 +2,11 @@ import { Component, effect, inject, input, output } from '@angular/core';
import { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
import { PaginatorModule } from 'primeng/paginator';
import { ProjectPictureFormComponent } from '@app/shared/components/project-picture-form/project-picture-form.component';
import { ProjectFacade } from '@app/ui/projects/project.facade';
import { ProjectFacade } from '@app/adapters/projects/project.facade';
import { CreateProjectDto } from '@app/domain/projects/dto/create-project.dto';
import { ActionType } from '@app/domain/action-type.util';
import { LoadingComponent } from '@app/shared/components/loading/loading.component';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { AuthFacade } from '@app/adapters/authentification/auth.facade';
@Component({
selector: 'app-my-profile-update-project-form',

View File

@@ -1,7 +1,6 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { NavBarComponent } from './nav-bar.component';
import { ThemeService } from '@app/core/services/theme/theme.service';
import { provideRouter } from '@angular/router';
import { User } from '@app/domain/users/user.model';
import { AUTH_REPOSITORY_TOKEN } from '@app/infrastructure/authentification/auth-repository.token';
@@ -10,14 +9,12 @@ import { PROFILE_REPOSITORY_TOKEN } from '@app/infrastructure/profiles/profile-r
import { ProfileRepository } from '@app/domain/profiles/profile.repository';
import { mockProfileRepo } from '@app/testing/profile.mock';
import { mockAuthRepo } from '@app/testing/auth.mock';
import { mockThemeService } from '@app/testing/theme.mock';
import { ToastrService } from 'ngx-toastr';
import { mockToastR } from '@app/testing/toastr.mock';
describe('NavBarComponent', () => {
let component: NavBarComponent;
let fixture: ComponentFixture<NavBarComponent>;
let mockTheme: jest.Mocked<Partial<ThemeService>> = mockThemeService;
let mockAuthRepository: jest.Mocked<Partial<AuthRepository>> = mockAuthRepo;
let mockProfileRepository: jest.Mocked<Partial<ProfileRepository>> = mockProfileRepo;
@@ -39,7 +36,6 @@ describe('NavBarComponent', () => {
imports: [NavBarComponent],
providers: [
provideRouter([]),
{ provide: ThemeService, useValue: mockTheme },
{ provide: ToastrService, useValue: mockToastR },
{ provide: AUTH_REPOSITORY_TOKEN, useValue: mockAuthRepository },
{ provide: PROFILE_REPOSITORY_TOKEN, useValue: mockProfileRepository },
@@ -54,9 +50,4 @@ describe('NavBarComponent', () => {
it('should create', () => {
expect(component).toBeTruthy();
});
it('should call themeService.updateDarkMode when toggleDarkMode called', () => {
component.toggleDarkMode();
expect(mockThemeService.updateDarkMode).toHaveBeenCalled();
});
});

View File

@@ -1,9 +1,8 @@
import { Component, inject, OnInit } from '@angular/core';
import { RouterLink } from '@angular/router';
import { ThemeService } from '@app/core/services/theme/theme.service';
import { UntilDestroy } from '@ngneat/until-destroy';
import { environment } from '@env/environment';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { AuthFacade } from '@app/adapters/authentification/auth.facade';
@Component({
selector: 'app-nav-bar',
@@ -14,7 +13,6 @@ import { AuthFacade } from '@app/ui/authentification/auth.facade';
})
@UntilDestroy()
export class NavBarComponent implements OnInit {
protected themeService: ThemeService = inject(ThemeService);
protected readonly environment = environment;
protected authFacade = inject(AuthFacade);
@@ -23,10 +21,6 @@ export class NavBarComponent implements OnInit {
readonly isEmailVerified = this.authFacade.isEmailVerified;
readonly user = this.authFacade.user;
toggleDarkMode() {
this.themeService.updateDarkMode();
}
ngOnInit(): void {
this.authFacade.verifyEmail();
this.authFacade.verifyAuthenticatedUser();

View File

@@ -1,6 +1,6 @@
import { Component, Input } from '@angular/core';
import { environment } from '@env/environment';
import { ProjectViewModel } from '@app/ui/projects/project.presenter.model';
import { ProjectViewModel } from '@app/adapters/projects/project.presenter.model';
import { NgOptimizedImage } from '@angular/common';
@Component({

View File

@@ -1,7 +1,7 @@
import { Component, input, OnChanges, SimpleChanges } from '@angular/core';
import { UntilDestroy } from '@ngneat/until-destroy';
import { ProjectItemComponent } from '@app/shared/components/project-item/project-item.component';
import { ProjectFacade } from '@app/ui/projects/project.facade';
import { ProjectFacade } from '@app/adapters/projects/project.facade';
@Component({
selector: 'app-project-list',

View File

@@ -3,10 +3,10 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ProjectPictureFormComponent } from './project-picture-form.component';
import { mockProjects } from '@app/testing/project.mock';
import { mockFileManagerSvc } from '@app/testing/file-manager.service.mock';
import { mockProjectFac } from '@app/testing/ui/projects/project.facade.mock';
import { ProjectViewModel } from '@app/ui/projects/project.presenter.model';
import { ProjectFacade } from '@app/ui/projects/project.facade';
import { FileManagerService } from '@app/ui/shared/services/file-manager.service';
import { mockProjectFac } from '@app/testing/adapters/projects/project.facade.mock';
import { ProjectViewModel } from '../../../adapters/projects/project.presenter.model';
import { ProjectFacade } from '../../../adapters/projects/project.facade';
import { FileManagerService } from '../../../adapters/shared/services/file-manager.service';
import { ActionType } from '@app/domain/action-type.util';
describe('ProjectPictureFormComponent', () => {

View File

@@ -1,11 +1,11 @@
import { Component, effect, inject, input, output, signal } from '@angular/core';
import { NgTemplateOutlet } from '@angular/common';
import { environment } from '@env/environment';
import { ProjectViewModel } from '@app/ui/projects/project.presenter.model';
import { ProjectFacade } from '@app/ui/projects/project.facade';
import { ProjectViewModel } from '@app/adapters/projects/project.presenter.model';
import { ProjectFacade } from '@app/adapters/projects/project.facade';
import { ActionType } from '@app/domain/action-type.util';
import { LoadingComponent } from '@app/shared/components/loading/loading.component';
import { FileManagerService } from '@app/ui/shared/services/file-manager.service';
import { FileManagerService } from '@app/adapters/shared/services/file-manager.service';
@Component({
selector: 'app-project-picture-form',

View File

@@ -3,15 +3,15 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { UserAvatarFormComponent } from './user-avatar-form.component';
import { ToastrService } from 'ngx-toastr';
import { mockToastR } from '@app/testing/toastr.mock';
import { UserViewModel } from '@app/ui/users/user.presenter.model';
import { FileManagerService } from '@app/ui/shared/services/file-manager.service';
import { UserFacade } from '@app/ui/users/user.facade';
import { UserViewModel } from '../../../adapters/users/user.presenter.model';
import { FileManagerService } from '../../../adapters/shared/services/file-manager.service';
import { UserFacade } from '../../../adapters/users/user.facade';
import { ActionType } from '@app/domain/action-type.util';
import { mockUserRepo, mockUsers } from '@app/testing/user.mock';
import { USER_REPOSITORY_TOKEN } from '@app/infrastructure/users/user-repository.token';
import { provideRouter } from '@angular/router';
import { mockFileManagerSvc } from '@app/testing/file-manager.service.mock';
import { mockUserFac } from '@app/testing/ui/users/user.facade.mock';
import { mockUserFac } from '@app/testing/adapters/users/user.facade.mock';
describe('UserAvatarFormComponent', () => {
let component: UserAvatarFormComponent;

View File

@@ -3,12 +3,12 @@ import { User } from '@app/domain/users/user.model';
import { ReactiveFormsModule } from '@angular/forms';
import { environment } from '@env/environment';
import { NgTemplateOutlet } from '@angular/common';
import { UserFacade } from '@app/ui/users/user.facade';
import { UserFacade } from '@app/adapters/users/user.facade';
import { ActionType } from '@app/domain/action-type.util';
import { LoadingComponent } from '@app/shared/components/loading/loading.component';
import { UntilDestroy } from '@ngneat/until-destroy';
import { UserViewModel } from '@app/ui/users/user.presenter.model';
import { FileManagerService } from '@app/ui/shared/services/file-manager.service';
import { UserViewModel } from '@app/adapters/users/user.presenter.model';
import { FileManagerService } from '@app/adapters/shared/services/file-manager.service';
@Component({
selector: 'app-user-avatar-form',

View File

@@ -9,7 +9,7 @@ import {
import { User } from '@app/domain/users/user.model';
import { UntilDestroy } from '@ngneat/until-destroy';
import { ToastrService } from 'ngx-toastr';
import { UserFacade } from '@app/ui/users/user.facade';
import { UserFacade } from '@app/adapters/users/user.facade';
import { ActionType } from '@app/domain/action-type.util';
import { LoadingComponent } from '@app/shared/components/loading/loading.component';
import { NgClass, NgTemplateOutlet } from '@angular/common';

View File

@@ -2,12 +2,12 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { UserPasswordFormComponent } from './user-password-form.component';
import { ToastrService } from 'ngx-toastr';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { AuthFacade } from '../../../adapters/authentification/auth.facade';
import { By } from '@angular/platform-browser';
import { ActionType } from '@app/domain/action-type.util';
import { signal, WritableSignal } from '@angular/core';
import { mockToastR } from '@app/testing/toastr.mock';
import { mockAuthenticationFacade } from '@app/testing/ui/authentification/auth.facade.mock';
import { mockAuthenticationFacade } from '@app/testing/adapters/authentification/auth.facade.mock';
describe('UserPasswordFormComponent', () => {
let component: UserPasswordFormComponent;

View File

@@ -1,7 +1,7 @@
import { Component, effect, inject, Input, output } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms';
import { UserViewModel } from '@app/ui/users/user.presenter.model';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { UserViewModel } from '@app/adapters/users/user.presenter.model';
import { AuthFacade } from '@app/adapters/authentification/auth.facade';
import { ActionType } from '@app/domain/action-type.util';
import { ToastrService } from 'ngx-toastr';
import { LoadingComponent } from '@app/shared/components/loading/loading.component';

View File

@@ -8,7 +8,7 @@ import { SECTOR_REPOSITORY_TOKEN } from '@app/infrastructure/sectors/sector-repo
import { SectorRepository } from '@app/domain/sectors/sector.repository';
import { mockUserRepo } from '@app/testing/user.mock';
import { mockSectorRepo } from '@app/testing/sector.mock';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { ProfileViewModel } from '../../../adapters/profiles/profile.presenter.model';
import { ToastrService } from 'ngx-toastr';
import { mockToastR } from '@app/testing/toastr.mock';

View File

@@ -2,8 +2,8 @@ import { Component, computed, inject, input, OnInit } from '@angular/core';
import { Router, RouterLink } from '@angular/router';
import { UntilDestroy } from '@ngneat/until-destroy';
import { environment } from '@env/environment';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { UserFacade } from '@app/ui/users/user.facade';
import { ProfileViewModel } from '@app/adapters/profiles/profile.presenter.model';
import { UserFacade } from '@app/adapters/users/user.facade';
@Component({
selector: 'app-vertical-profile-item',

View File

@@ -1,6 +1,6 @@
import { Component, Input } from '@angular/core';
import { VerticalProfileItemComponent } from '@app/shared/components/vertical-profile-item/vertical-profile-item.component';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { ProfileViewModel } from '@app/adapters/profiles/profile.presenter.model';
import { NgTemplateOutlet } from '@angular/common';
@Component({

View File

@@ -1,6 +1,6 @@
import { Component, inject, OnInit, output } from '@angular/core';
import { SectorFacade } from '@app/ui/sectors/sector.facade';
import { ProfileFacade } from '@app/ui/profiles/profile.facade';
import { SectorFacade } from '@app/adapters/sectors/sector.facade';
import { ProfileFacade } from '@app/adapters/profiles/profile.facade';
import { SearchService } from '@app/infrastructure/search/search.service';
import { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
import { SearchFilters } from '@app/domain/search/search-filters';

View File

@@ -4,7 +4,7 @@ import { ForgotPasswordComponent } from './forgot-password.component';
import { ToastrService } from 'ngx-toastr';
import { signal, WritableSignal } from '@angular/core';
import { ActionType } from '@app/domain/action-type.util';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { AuthFacade } from '../../../adapters/authentification/auth.facade';
import { ActivatedRoute, provideRouter, Router } from '@angular/router';
import { Subject } from 'rxjs';

View File

@@ -2,7 +2,7 @@ import { Component, effect, inject } from '@angular/core';
import { BtnLoadingComponent } from '@app/shared/components/btn-loading/btn-loading.component';
import { FormBuilder, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
import { Router, RouterLink } from '@angular/router';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { AuthFacade } from '@app/adapters/authentification/auth.facade';
import { ActionType } from '@app/domain/action-type.util';
@Component({

View File

@@ -4,7 +4,7 @@ import { FormBuilder, FormControl, ReactiveFormsModule, Validators } from '@angu
import { LoginDto } from '@app/domain/authentification/dto/login-dto';
import { UntilDestroy } from '@ngneat/until-destroy';
import { ProgressBarModule } from 'primeng/progressbar';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { AuthFacade } from '@app/adapters/authentification/auth.facade';
import { ActionType } from '@app/domain/action-type.util';
import { BtnLoadingComponent } from '@app/shared/components/btn-loading/btn-loading.component';

View File

@@ -1,9 +1,9 @@
import { Component, effect, inject, input, OnInit, signal } from '@angular/core';
import { MapComponent, MapMarker } from '@app/shared/components/map/map.component';
import { Coordinates, CoordinatesValidator } from '@app/domain/localisation/coordinates.model';
import { LocationFacade } from '@app/ui/location/location.facade';
import { ProfileFacade } from '@app/ui/profiles/profile.facade';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { LocationFacade } from '@app/adapters/location/location.facade';
import { ProfileFacade } from '@app/adapters/profiles/profile.facade';
import { ProfileViewModel } from '@app/adapters/profiles/profile.presenter.model';
import { ActionType } from '@app/domain/action-type.util';
@Component({

View File

@@ -1,7 +1,7 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { PdfViewerComponent } from './pdf-viewer.component';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { ProfileViewModel } from '../../../adapters/profiles/profile.presenter.model';
describe('PdfViewerComponent', () => {
let component: PdfViewerComponent;

View File

@@ -1,7 +1,7 @@
import { Component, computed, input } from '@angular/core';
import { PdfViewerModule } from 'ng2-pdf-viewer';
import { environment } from '@env/environment';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { ProfileViewModel } from '@app/adapters/profiles/profile.presenter.model';
@Component({
selector: 'app-pdf-viewer',

View File

@@ -1,7 +1,7 @@
import { Component, effect, inject, input, OnInit, signal } from '@angular/core';
import { MapComponent, MapMarker } from '@app/shared/components/map/map.component';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { LocationFacade } from '@app/ui/location/location.facade';
import { ProfileViewModel } from '@app/adapters/profiles/profile.presenter.model';
import { LocationFacade } from '@app/adapters/location/location.facade';
import { Router } from '@angular/router';
@Component({

View File

@@ -5,7 +5,7 @@ import { RegisterDto } from '@app/domain/authentification/dto/register-dto';
import { UntilDestroy } from '@ngneat/until-destroy';
import { ProgressBarModule } from 'primeng/progressbar';
import { ActionType } from '@app/domain/action-type.util';
import { AuthFacade } from '@app/ui/authentification/auth.facade';
import { AuthFacade } from '@app/adapters/authentification/auth.facade';
import { BtnLoadingComponent } from '@app/shared/components/btn-loading/btn-loading.component';
@Component({

View File

@@ -10,7 +10,7 @@ import { mockSettingRepo } from '@app/testing/setting.mock';
import { PROFILE_REPOSITORY_TOKEN } from '@app/infrastructure/profiles/profile-repository.token';
import { ProfileRepository } from '@app/domain/profiles/profile.repository';
import { mockProfileRepo } from '@app/testing/profile.mock';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { ProfileViewModel } from '../../../adapters/profiles/profile.presenter.model';
describe('SettingsComponent', () => {
let component: SettingsComponent;

View File

@@ -1,9 +1,9 @@
import { Component, effect, inject, input, OnInit } from '@angular/core';
import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
import { ThemeType } from '@app/domain/settings/setting.model';
import { SettingsFacade } from '@app/ui/settings/settings.facade';
import { ProfileViewModel } from '@app/ui/profiles/profile.presenter.model';
import { ProfileFacade } from '@app/ui/profiles/profile.facade';
import { SettingsFacade } from '@app/adapters/settings/settings.facade';
import { ProfileViewModel } from '@app/adapters/profiles/profile.presenter.model';
import { ProfileFacade } from '@app/adapters/profiles/profile.facade';
import { ActionType } from '@app/domain/action-type.util';
import { SettingsProfileDto } from '@app/domain/profiles/dto/settings-profile.dto';

View File

@@ -1,7 +1,7 @@
import { Component, Input } from '@angular/core';
import { UserFormComponent } from '@app/shared/components/user-form/user-form.component';
import { UserAvatarFormComponent } from '@app/shared/components/user-avatar-form/user-avatar-form.component';
import { UserViewModel } from '@app/ui/users/user.presenter.model';
import { UserViewModel } from '@app/adapters/users/user.presenter.model';
import { UserPasswordFormComponent } from '@app/shared/components/user-password-form/user-password-form.component';
@Component({

View File

@@ -1,4 +1,4 @@
import { ProfileFacade } from '@app/ui/profiles/profile.facade';
import { ProfileFacade } from '@app/adapters/profiles/profile.facade';
import { TestBed } from '@angular/core/testing';
import { PROFILE_REPOSITORY_TOKEN } from '@app/infrastructure/profiles/profile-repository.token';
import { FakeProfileRepository } from '@app/testing/domain/profiles/fake-profile.repository';
@@ -9,7 +9,7 @@ import { ToastrService } from 'ngx-toastr';
import { mockToastR } from '@app/testing/toastr.mock';
import { SearchService } from '@app/infrastructure/search/search.service';
import { mockSearchService } from '@app/testing/search.service.mock';
import { FeedbackService } from '@app/ui/shared/services/feedback.service';
import { FeedbackService } from '@app/adapters/shared/services/feedback.service';
import { mockFeedbackService } from '@app/testing/feedback.service.mock';
describe('ProfileFacade', () => {

View File

@@ -1,4 +1,4 @@
import { ProfilePresenter } from '@app/ui/profiles/profile.presenter';
import { ProfilePresenter } from '@app/adapters/profiles/profile.presenter';
import { Profile } from '@app/domain/profiles/profile.model';
import { mockProfiles } from '@app/testing/profile.mock';
import { Coordinates } from '@app/domain/localisation/coordinates.model';

View File

@@ -1,5 +1,5 @@
import { TestBed } from '@angular/core/testing';
import { ProjectFacade } from '@app/ui/projects/project.facade';
import { ProjectFacade } from '@app/adapters/projects/project.facade';
import { FakeProjectRepository } from '@app/testing/domain/projects/fake-project.repository';
import { PROJECT_REPOSITORY_TOKEN } from '@app/infrastructure/projects/project-repository.token';
import { mockProjects } from '@app/testing/project.mock';

View File

@@ -1,7 +1,7 @@
import { Project } from '@app/domain/projects/project.model';
import { ProjectPresenter } from '@app/ui/projects/project.presenter';
import { ProjectPresenter } from '@app/adapters/projects/project.presenter';
import { mockProjects } from '@app/testing/project.mock';
import { ProjectViewModel } from '@app/ui/projects/project.presenter.model';
import { ProjectViewModel } from '@app/adapters/projects/project.presenter.model';
describe('ProjectPresenter', () => {
let presenter: ProjectPresenter;

View File

@@ -1,5 +1,5 @@
import { TestBed } from '@angular/core/testing';
import { SectorFacade } from '@app/ui/sectors/sector.facade';
import { SectorFacade } from '@app/adapters/sectors/sector.facade';
import { SECTOR_REPOSITORY_TOKEN } from '@app/infrastructure/sectors/sector-repository.token';
import { FakeSectorRepository } from '@app/testing/domain/sectors/fake-sector.repository';
import { fakeSectors } from '@app/testing/sector.mock';

View File

@@ -1,4 +1,4 @@
import { SectorPresenter } from '@app/ui/sectors/sector.presenter';
import { SectorPresenter } from '@app/adapters/sectors/sector.presenter';
import { Sector } from '@app/domain/sectors/sector.model';
import { fakeSectors } from '@app/testing/sector.mock';

View File

@@ -1,4 +1,4 @@
import { FileManagerService } from '@app/ui/shared/services/file-manager.service';
import { FileManagerService } from '@app/adapters/shared/services/file-manager.service';
import { TestBed } from '@angular/core/testing';
// 1. Mock de la librairie externe

View File

@@ -1,4 +1,4 @@
import { UserFacade } from '@app/ui/users/user.facade';
import { UserFacade } from '@app/adapters/users/user.facade';
import { TestBed } from '@angular/core/testing';
import { USER_REPOSITORY_TOKEN } from '@app/infrastructure/users/user-repository.token';
import { FakeUserRepository } from '@app/testing/domain/users/fake-user.repository';

View File

@@ -1,5 +1,5 @@
import { FakeAuthRepository } from '@app/testing/domain/authentification/fake-auth.repository';
import { GetCurrentUserUseCase } from '@app/usecase/authentification/get-current-user.usecase';
import { GetCurrentUserUseCase } from '@app/application/authentification/get-current-user.usecase';
import { mockUsers } from '@app/testing/user.mock';
describe('GetUserUsecase', () => {

Some files were not shown because too many files have changed in this diff Show More