97 lines
2.5 KiB
TypeScript
97 lines
2.5 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
import { HttpClient, HttpHeaders } from '@angular/common/http'
|
|
|
|
import { Observable } from 'rxjs';
|
|
import { map, catchError } from 'rxjs/operators';
|
|
|
|
import { Album } from './model/album';
|
|
import { ElsService } from './els.service';
|
|
|
|
@Injectable()
|
|
export class ElsAlbumService extends ElsService {
|
|
public static readonly GET_ALBUMS_DEFAULT_QUERY = {
|
|
'query': {
|
|
'bool': {
|
|
'must': [],
|
|
'must_not': [],
|
|
'filter': [
|
|
{ 'range': { 'Avg Bit Rate': { 'lte': '128'}}}
|
|
]
|
|
}
|
|
},
|
|
'sort': [ {
|
|
'_script' : {
|
|
'type' : 'number',
|
|
'script' : {
|
|
'lang': 'painless',
|
|
'source': 'doc[\'Play Count\'].value / doc[\'Track Count\'].value'
|
|
},
|
|
'order' : 'desc'
|
|
}
|
|
}, {
|
|
'Avg Bit Rate': {
|
|
'order': 'asc'
|
|
}
|
|
} ],
|
|
'size': 500
|
|
}
|
|
|
|
constructor(protected http: HttpClient) {
|
|
super(http);
|
|
}
|
|
|
|
getAlbums(query: any): Observable<Album[]> {
|
|
console.info('getAlbums');
|
|
console.info(query);
|
|
return this.http
|
|
.post(this.elsUrl + ElsService.ALBUM_INDEX_NAME + ElsService.ACTION_SEARCH,
|
|
JSON.stringify(query), {headers: this.headers})
|
|
.pipe(
|
|
map(res => this.responseToAlbums(res)),
|
|
catchError(error => this.handleError(error, 'getAlbums'))
|
|
);
|
|
}
|
|
|
|
getAlbumsFiltered(size: number): Observable<Album[]> {
|
|
// http://localhost:9200/itunes-albums/_search
|
|
console.info('getAlbums');
|
|
return this.http
|
|
.post(this.elsUrl + ElsService.ALBUM_INDEX_NAME + ElsService.ACTION_SEARCH,
|
|
JSON.stringify({
|
|
'sort': [ {
|
|
'Avg Bit Rate': {
|
|
'order': 'asc'
|
|
}
|
|
} ],
|
|
'size': size,
|
|
'query': {
|
|
'bool': {
|
|
'must': [],
|
|
'filter': [
|
|
{
|
|
'match_all': {}
|
|
}
|
|
],
|
|
'should': [],
|
|
'must_not': [
|
|
{
|
|
'match_phrase': {
|
|
'Artist': 'François Pérusse'
|
|
}
|
|
},
|
|
{
|
|
'match_phrase': {
|
|
'Album Artist': 'Comédiens'
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}), {headers: this.headers})
|
|
.pipe(
|
|
map(res => this.responseToAlbums(res)),
|
|
catchError(error => this.handleError(error, 'getAlbums'))
|
|
);
|
|
}
|
|
}
|