feat : #12 recherche et filtre
This commit is contained in:
@@ -5,19 +5,24 @@ import { Injectable } from '@angular/core';
|
||||
import PocketBase from 'pocketbase';
|
||||
import { environment } from '@env/environment';
|
||||
import { ProfileDTO } from '@app/domain/profiles/dto/create-profile.dto';
|
||||
import { SearchFilters } from '@app/domain/search/search-filters';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class PbProfileRepository implements ProfileRepository {
|
||||
private pb = new PocketBase(environment.baseUrl);
|
||||
|
||||
list(): Observable<Profile[]> {
|
||||
const options = {
|
||||
sort: 'profession',
|
||||
expand: 'utilisateur',
|
||||
filter:
|
||||
"utilisateur.verified=true && utilisateur.name !='' && profession!='Profession non renseignée' && secteur!='' ",
|
||||
private defaultOptions = {
|
||||
expand: 'utilisateur',
|
||||
};
|
||||
|
||||
list(params?: SearchFilters): Observable<Profile[]> {
|
||||
const requestOptions = {
|
||||
...this.defaultOptions,
|
||||
sort: this.onSortSetting(params),
|
||||
filter: this.onFilterSetting(params).join(' && '),
|
||||
};
|
||||
return from(this.pb.collection('profiles').getFullList<Profile>(options));
|
||||
|
||||
return from(this.pb.collection('profiles').getFullList<Profile>(requestOptions));
|
||||
}
|
||||
|
||||
getByUserId(userId: string): Observable<Profile> {
|
||||
@@ -33,4 +38,57 @@ export class PbProfileRepository implements ProfileRepository {
|
||||
update(id: string, data: Partial<Profile>): Observable<Profile> {
|
||||
return from(this.pb.collection('profiles').update<Profile>(id, data));
|
||||
}
|
||||
|
||||
private onFilterSetting(params?: SearchFilters): string[] {
|
||||
const filters: string[] = [
|
||||
'utilisateur.verified = true',
|
||||
"utilisateur.name != ''",
|
||||
"profession != 'Profession non renseignée'",
|
||||
"secteur != ''",
|
||||
];
|
||||
|
||||
if (params) {
|
||||
if (params.secteur) {
|
||||
filters.push(`secteur ~ '${params.secteur}'`);
|
||||
}
|
||||
|
||||
if (params.profession) {
|
||||
filters.push(`profession ~ '${params.profession}'`);
|
||||
}
|
||||
if (params.search) {
|
||||
filters.push(`utilisateur.name ~ '${params.search}'`);
|
||||
}
|
||||
|
||||
if (params.verified) {
|
||||
filters.push('estVerifier = true');
|
||||
}
|
||||
}
|
||||
|
||||
return filters;
|
||||
}
|
||||
|
||||
private onSortSetting(params?: SearchFilters): string {
|
||||
let sortSetting = '-created';
|
||||
|
||||
if (params?.sort) {
|
||||
switch (params.sort) {
|
||||
case 'recent':
|
||||
sortSetting = '-created'; // Du plus récent au plus vieux
|
||||
break;
|
||||
case 'name-asc':
|
||||
sortSetting = '+utilisateur.name'; // Alphabétique A-Z
|
||||
break;
|
||||
case 'name-desc':
|
||||
sortSetting = '-utilisateur.name'; // Alphabétique Z-A
|
||||
break;
|
||||
case 'verified':
|
||||
sortSetting = '-estVerifier,-created';
|
||||
break;
|
||||
default:
|
||||
sortSetting = '-created';
|
||||
}
|
||||
}
|
||||
|
||||
return sortSetting;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user