[DEV] generize code for model access

This commit is contained in:
Edouard DUPIN 2022-06-14 00:23:33 +02:00
parent 0eb9163fd8
commit 887763286c
17 changed files with 244 additions and 693 deletions

View File

@ -28,9 +28,8 @@ import { AppComponent } from './app.component';
import { ErrorComponent } from '../common/error/error';
import { HomeScene, HelpScene, TypeScene, UniverseScene, SeriesScene, SeasonScene, VideoScene, SettingsScene,
VideoEditScene, SeasonEditScene, SeriesEditScene } from './scene';
import { BddService, TypeService,
DataService, UniverseService, SeriesService, SeasonService, VideoService, ArianeService } from './service';
import { CookiesService, HttpWrapperService, PopInService, SessionService, SSOService, StorageService, UserService } from 'common/service';
import { TypeService, DataService, UniverseService, SeriesService, SeasonService, VideoService, ArianeService } from './service';
import { BddService, CookiesService, HttpWrapperService, PopInService, SessionService, SSOService, StorageService, UserService } from 'common/service';
import { ErrorViewerScene, SsoScene } from 'common/scene';
import { UploadScene } from './scene/upload/upload';

View File

@ -8,9 +8,11 @@ import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { SeasonService , ArianeService, DataService} from 'app/service';
import { NodeData } from 'common/model';
import { UploadProgress } from 'common/popin/upload-progress/upload-progress';
import { PopInService } from 'common/service';
import { isNumberFinite } from 'common/utils';
export interface ElementList {
value: number;
@ -79,9 +81,11 @@ export class SeasonEditScene implements OnInit {
this.idSeason = this.arianeService.getSeasonId();
let self = this;
this.seasonService.get(this.idSeason)
.then((response) => {
.then((response: NodeData) => {
console.log(`get response of season : ${ JSON.stringify(response, null, 2)}`);
self.numberVal = response.name;
if (isNumberFinite(response.name)) {
self.numberVal = response.name;
}
self.description = response.description;
self.updateCoverList(response.covers);
self.itemIsLoading = false;

View File

@ -12,6 +12,7 @@ import { DataService, TypeService, UniverseService, SeriesService, VideoService,
import { UploadProgress } from 'common/popin/upload-progress/upload-progress';
import { NodeData } from 'common/model';
import { PopInService } from 'common/service';
import { Media } from 'app/model';
export interface ElementList {
value?: number;
@ -200,18 +201,18 @@ export class VideoEditScene implements OnInit {
console.log(`get response3 : ${ JSON.stringify(response3, null, 2)}`);
});
this.videoService.get(this.idVideo)
.then((response) => {
.then((response: Media) => {
console.log(`get response of video : ${ JSON.stringify(response, null, 2)}`);
self.data.name = response.name;
self.data.description = response.description;
self.data.episode = response.episode;
self.data.universeId = response.universId;
self.data.universeId = response.universeId;
if(self.data.universeId === undefined) {
self.data.universeId = null;
}
self.data.dataId = response.dataId;
self.data.time = response.time;
self.data.generatedName = response.generatedName;
self.data.generatedName = "????????? TODO ????????? "; // response.generatedName;
self.onChangeType(response.typeId);
self.onChangeSeries(response.seriesId);
self.data.seasonId = response.seasonId;

View File

@ -206,7 +206,7 @@ export class VideoScene implements OnInit {
self.seasonId = response.seasonId;
self.dataId = response.dataId;
self.time = response.time;
self.generatedName = response.generatedName;
self.generatedName = "????????? TODO: ???????" //response.generatedName;
if(self.dataId !== -1) {
self.videoSource = self.httpService.createRESTCall2({
api: `data/${ self.dataId}/${self.generatedName}`,

View File

@ -0,0 +1,96 @@
import { NodeData } from "common/model";
import { HttpWrapperService, BddService } from "common/service";
import { DataInterface, isNullOrUndefined } from "common/utils";
export class GenericInterfaceModelDB {
constructor(
protected serviceName:string,
protected http: HttpWrapperService,
protected bdd: BddService) {
// nothing to do ...
}
get(id:number): Promise<NodeData> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.get(self.serviceName)
.then((response: DataInterface) => {
let data = response.get(id);
if(isNullOrUndefined(data)) {
reject('Data does not exist in the local BDD');
return;
}
resolve(data);
return;
}).catch((response) => {
reject(response);
});
});
}
getData(): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.get(self.serviceName)
.then((response:DataInterface) => {
let data = response.gets();
resolve(data);
}).catch((response) => {
console.log(`[E] ${ self.constructor.name }: can not retrive BDD values`);
reject(response);
});
});
}
put(id:number, data:any):any {
let ret = this.http.putSpecific([this.serviceName, id], data);
return this.bdd.setAfterPut(this.serviceName, id, ret);
}
delete(id:number):any {
let ret = this.http.deleteSpecific([this.serviceName, id]);
return this.bdd.delete(this.serviceName, id, ret);
}
deleteCover(nodeId:number, coverId:number) {
let self = this;
return new Promise((resolve, reject) => {
self.http.getSpecific([this.serviceName, nodeId, 'rm_cover', coverId])
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, nodeId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
uploadCover(file:File,
nodeId:number,
progress:any = null) {
const formData = new FormData();
formData.append('fileName', file.name);
formData.append('id', nodeId.toString());
formData.append('file', file);
let self = this;
return new Promise((resolve, reject) => {
self.http.uploadMultipart(`${this.serviceName }/${nodeId}/add_cover/`, formData, progress)
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, nodeId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
}

View File

@ -14,6 +14,7 @@ import { SeriesService } from './series';
import { SeasonService } from './season';
import { VideoService } from './video';
import { environment } from 'environments/environment';
import { NodeData } from 'common/model';
export class InputOrders {
public typeId: number = null;
@ -51,7 +52,7 @@ export class ArianeService {
private seriesService: SeriesService,
private seasonService: SeasonService,
private videoService: VideoService) {
console.log('Start ArianeService');
//console.log('Start ArianeService');
}
updateParams(params) {
console.log(`sparams ${ params}`);
@ -205,8 +206,8 @@ export class ArianeService {
}
let self = this;
this.universeService.get(id)
.then((response) => {
self.universeName = response.number;
.then((response: NodeData) => {
self.universeName = response.name;
self.universeChange.emit(self.universeId);
}).catch((response) => {
self.universeChange.emit(self.universeId);
@ -234,7 +235,7 @@ export class ArianeService {
}
let self = this;
this.seriesService.get(id)
.then((response) => {
.then((response: NodeData) => {
self.seriesName = response.name;
self.seriesChange.emit(self.seriesId);
}).catch((response) => {
@ -263,7 +264,7 @@ export class ArianeService {
}
let self = this;
this.seasonService.get(id)
.then((response) => {
.then((response: NodeData) => {
// self.setSeries(response.seriesId);
self.seasonName = response.name;
self.seasonChange.emit(self.seasonId);

View File

@ -26,11 +26,6 @@ export class DataService {
return this.http.getSpecific([this.serviceName, _id]);
}
sendFile(_file:File) {
// return this.http.uploadFileMultipart(this.serviceName, null, _file);
return this.http.uploadFileBase64(this.serviceName, null, _file);
}
uploadFile(_form:FormData, _progress:any = null) {
// return this.http.uploadFileMultipart(this.serviceName, null, _file);
return this.http.uploadMultipart(`${this.serviceName }/upload/`, _form, _progress);

View File

@ -1,5 +1,4 @@
import { ArianeService } from "./ariane";
import { BddService } from "./bdd";
import { DataService } from "./data";
import { SeasonService } from "./season";
import { SeriesService } from "./series";
@ -11,7 +10,6 @@ import { VideoService } from "./video";
export {
ArianeService,
BddService,
DataService,
SeasonService,
SeriesService,

View File

@ -5,50 +5,30 @@
*/
import { Injectable } from '@angular/core';
import { NodeData } from 'common/model';
import { HttpWrapperService } from '../../common/service/http-wrapper';
import { DataInterface } from 'common/utils';
import { BddService } from './bdd';
import { TypeCheck } from 'common/utils/dataInterface';
import { HttpWrapperService, BddService } from 'common/service';
import { DataInterface, TypeCheck } from 'common/utils';
import { GenericInterfaceModelDB } from './GenericInterfaceModelDB';
@Injectable()
export class SeasonService {
private serviceName:string = 'season';
constructor(private http: HttpWrapperService,
private bdd: BddService) {
console.log('Start SeasonService');
}
get(id:number):any {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getSeason()
.then((response: DataInterface) => {
let data = response.get(id);
if(data === null || data === undefined) {
reject('Data does not exist in the local BDD');
return;
}
resolve(data);
}).catch((response) => {
reject(response);
});
});
export class SeasonService extends GenericInterfaceModelDB {
constructor(http: HttpWrapperService,
bdd: BddService) {
super('season', http, bdd);
}
/**
* Get all the video for a specific season
* @param id - Id of the season.
* @returns a promise on the list of season elements
* @returns a promise on the list of video elements
*/
getVideo(id:number):any {
getVideo(id:number): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getVideo()
self.bdd.get('video')
.then((response: DataInterface) => {
// let data = response.getsWhere([["==", "seasonId", id]], ["id", "name", "episode"], ["episode", "name"])
let data = response.getsWhere([
{
check: TypeCheck.EQUAL,
@ -69,73 +49,23 @@ export class SeasonService {
* @param id - Id of the season.
* @returns The number of element present in this saison
*/
countVideo(id:number):any {
countVideo(id:number): Promise<number> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getVideo()
self.bdd.get('video')
.then((response: DataInterface) => {
// let data = response.getsWhere([["==", "seasonId", _id]], ["id", "name", "episode"], ["episode", "name"])
let data = response.getsWhere([
{
check: TypeCheck.EQUAL,
key: 'seasonId',
value: id,
} ] );
},
]);
resolve(data.length);
}).catch((response) => {
reject(response);
});
});
}
put(id:number, data:any):any {
let ret = this.http.putSpecific([this.serviceName, id], data);
return this.bdd.setAfterPut(this.serviceName, id, ret);
}
delete(id:number):any {
let ret = this.http.deleteSpecific([this.serviceName, id]);
return this.bdd.delete(this.serviceName, id, ret);
}
deleteCover(nodeId:number,
coverId:number) {
let self = this;
return new Promise((resolve, reject) => {
self.http.getSpecific([this.serviceName, nodeId, 'rm_cover', coverId])
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, nodeId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
uploadCover(file:File,
nodeId:number,
progress:any = null) {
const formData = new FormData();
formData.append('fileName', file.name);
formData.append('nodeId', nodeId.toString());
formData.append('file', file);
let self = this;
return new Promise((resolve, reject) => {
self.http.uploadMultipart(`${this.serviceName }/${ nodeId }/add_cover/`, formData, progress)
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, nodeId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
}

View File

@ -6,58 +6,25 @@
import { Injectable } from '@angular/core';
import { HttpWrapperService } from '../../common/service/http-wrapper';
import { DataInterface, TypeCheck } from 'common/utils/dataInterface';
import { BddService } from './bdd';
import { HttpWrapperService, BddService } from 'common/service';
import { DataInterface, TypeCheck, isArrayOf } from 'common/utils';
import { isNodeData, NodeData } from 'common/model';
import { isArrayOf, isNullOrUndefined } from 'common/utils';
import { GenericInterfaceModelDB } from './GenericInterfaceModelDB';
@Injectable()
export class SeriesService {
private serviceName:string = 'series';
export class SeriesService extends GenericInterfaceModelDB {
constructor(private http: HttpWrapperService,
private bdd: BddService) {
console.log('Start SeriesService');
}
get(id:number): Promise<NodeData> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getSeries()
.then((response:DataInterface) => {
let data = response.get(id);
if(isNullOrUndefined(data)) {
reject('Data does not exist in the local BDD');
return;
}
resolve(data);
return;
}).catch((response) => {
reject(response);
});
});
}
getData(): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getSeries()
.then((response:DataInterface) => {
let data = response.gets();
resolve(data);
}).catch((response) => {
console.log(`[E] ${ self.constructor.name }: can not retrive BDD values`);
reject(response);
});
});
constructor(http: HttpWrapperService,
bdd: BddService) {
super('series', http, bdd);
}
getOrder(): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getSeries()
self.bdd.get(self.serviceName)
.then((response: DataInterface) => {
let data = response.getsWhere([
{
@ -78,11 +45,16 @@ export class SeriesService {
});
}
getVideo(id:number):Promise<NodeData[]> {
/**
* Get all the video for a specific series
* @param id - Id of the series.
* @returns a promise on the list of video elements
*/
getVideo(id:number): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getVideo()
.then((response:DataInterface) => {
self.bdd.get('video')
.then((response: DataInterface) => {
let data = response.getsWhere([
{
check: TypeCheck.EQUAL,
@ -101,10 +73,16 @@ export class SeriesService {
});
});
}
/**
* Get the number of video in this series ID
* @param id - Id of the series.
* @returns The number of video present in this series
*/
countVideo(id:number): Promise<number> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getVideo()
self.bdd.get('video')
.then((response:DataInterface) => {
let data = response.getsWhere([
{
@ -128,7 +106,7 @@ export class SeriesService {
getSeason(id:number): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getSeason()
self.bdd.get('season')
.then((response:DataInterface) => {
let data = response.getsWhere([
{
@ -145,20 +123,10 @@ export class SeriesService {
});
}
put(id:number, data:any):any {
let ret = this.http.putSpecific([this.serviceName, id], data);
return this.bdd.setAfterPut(this.serviceName, id, ret);
}
delete(id:number):any {
let ret = this.http.deleteSpecific([this.serviceName, id]);
return this.bdd.delete(this.serviceName, id, ret);
}
getLike(nameSeries:string):any {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getSeries()
self.bdd.get('series')
.then((response:DataInterface) => {
let data = response.getNameLike(nameSeries);
if(data === null || data === undefined || data.length === 0) {
@ -172,46 +140,5 @@ export class SeriesService {
});
});
}
deleteCover(nodeId:number,
coverId:number) {
let self = this;
return new Promise((resolve, reject) => {
self.http.getSpecific([this.serviceName, nodeId, 'rm_cover', coverId])
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, nodeId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
uploadCover(file:File,
nodeId:number,
progress:any = null) {
const formData = new FormData();
formData.append('fileName', file.name);
formData.append('nodeId', nodeId.toString());
formData.append('file', file);
let self = this;
return new Promise((resolve, reject) => {
self.http.uploadMultipart(`${this.serviceName }/${nodeId}/add_cover/`, formData, progress)
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, nodeId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
}

View File

@ -6,11 +6,10 @@
import { Injectable } from '@angular/core';
import { HttpWrapperService } from '../../common/service/http-wrapper';
import { BddService } from './bdd';
import { DataInterface, isNullOrUndefined } from 'common/utils';
import { HttpWrapperService, BddService } from 'common/service';
import { DataInterface, isNullOrUndefined, TypeCheck } from 'common/utils';
import { NodeData } from 'common/model';
import { TypeCheck } from 'common/utils/dataInterface';
import { GenericInterfaceModelDB } from './GenericInterfaceModelDB';
export interface MessageLogIn {
id: number;
@ -19,34 +18,20 @@ export interface MessageLogIn {
}
@Injectable()
export class TypeService {
export class TypeService extends GenericInterfaceModelDB {
constructor(private http: HttpWrapperService,
private bdd: BddService) {
console.log('Start TypeService');
constructor(http: HttpWrapperService,
bdd: BddService) {
super('type', http, bdd);
}
getData(): Promise<NodeData[]> {
get(id:number): Promise<NodeData> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getType()
self.bdd.get(self.serviceName)
.then((response: DataInterface) => {
let data = response.gets();
resolve(data);
}).catch((response) => {
console.log(`[E] ${ self.constructor.name }: can not retrive BDD values`);
reject(response);
});
});
}
get(_id:number): Promise<NodeData> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getType()
.then((response: DataInterface) => {
let data = response.get(_id);
let data = response.get(id);
if(isNullOrUndefined(data)) {
reject('Data does not exist in the local BDD');
return;
@ -58,10 +43,29 @@ export class TypeService {
});
}
getData(): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.get(self.serviceName)
.then((response: DataInterface) => {
let data = response.gets();
resolve(data);
}).catch((response) => {
console.log(`[E] ${ self.constructor.name }: can not retrive BDD values`);
reject(response);
});
});
}
countVideo(id:number): Promise<number> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getVideo()
self.bdd.get('video')
.then((response: DataInterface) => {
let data = response.getsWhere([
{
@ -79,7 +83,7 @@ export class TypeService {
getSubVideo(id:number): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getVideo()
self.bdd.get('video')
.then((response: DataInterface) => {
let data = response.getsWhere([
{
@ -106,7 +110,7 @@ export class TypeService {
getSubSeries(id:number): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getSeries()
self.bdd.get('series')
.then((response: DataInterface) => {
let data = response.getsWhere([
{
@ -125,7 +129,7 @@ export class TypeService {
getSubUniverse(id:number): Promise<NodeData[]> {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getVideo()
self.bdd.get('video')
.then((response: DataInterface) => {
let data = response.getsWhere([
{

View File

@ -6,48 +6,15 @@
import { Injectable } from '@angular/core';
import { HttpWrapperService } from '../../common/service/http-wrapper';
import { BddService } from './bdd';
import { HttpWrapperService, BddService } from 'common/service';
import { GenericInterfaceModelDB } from './GenericInterfaceModelDB';
@Injectable()
export class UniverseService {
// 0: Not hide password; 1 hide password;
private identificationVersion: number = 1;
private serviceName:string = 'universe';
export class UniverseService extends GenericInterfaceModelDB {
constructor(private http: HttpWrapperService,
private bdd: BddService) {
console.log('Start universeService');
}
getData():any {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getUniverse()
.then((response) => {
let data = response.gets();
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
get(id:number):any {
let self = this;
return new Promise((resolve, reject) => {
self.bdd.getUniverse()
.then((response) => {
let data = response.get(id);
if(data === null || data === undefined) {
reject('Data does not exist in the local BDD');
return;
}
resolve(data);
}).catch((response) => {
reject(response);
});
});
constructor(http: HttpWrapperService,
bdd: BddService) {
super('universe', http, bdd);
}
getSubSeries(id:number, select:Array<string> = []):any {
@ -58,50 +25,5 @@ export class UniverseService {
// this.checkLocalBdd();
}
put(id:number, data:any):any {
let ret = this.http.putSpecific([this.serviceName, id], data);
return this.bdd.setAfterPut(this.serviceName, id, ret);
}
deleteCover(nodeId:number,
coverId:number) {
let self = this;
return new Promise((resolve, reject) => {
self.http.getSpecific([this.serviceName, nodeId, 'rm_cover', coverId])
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, nodeId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
uploadCover(file:File,
nodeId:number,
progress:any = null) {
const formData = new FormData();
formData.append('fileName', file.name);
formData.append('nodeId', nodeId.toString());
formData.append('file', file);
let self = this;
return new Promise((resolve, reject) => {
self.http.uploadMultipart(`${this.serviceName }/${ nodeId }/add_cover/`, formData, progress)
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, nodeId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
}

View File

@ -5,46 +5,50 @@
*/
import { Injectable } from '@angular/core';
import { isMedia, Media } from 'app/model';
import { NodeData } from 'common/model';
import { HttpWrapperService } from '../../common/service/http-wrapper';
import { BddService } from './bdd';
import { DataInterface } from 'common/utils/dataInterface';
import { HttpWrapperService, BddService } from 'common/service';
import { isArrayOf } from 'common/utils';
import { GenericInterfaceModelDB } from './GenericInterfaceModelDB';
@Injectable()
export class VideoService {
private serviceName:string = 'video';
export class VideoService extends GenericInterfaceModelDB {
constructor(private http: HttpWrapperService,
private bdd: BddService) {
console.log('Start VideoService');
constructor(http: HttpWrapperService,
bdd: BddService) {
super('video', http, bdd);
}
get(id:number):any {
let self = this;
get(id:number): Promise<Media> {
return new Promise((resolve, reject) => {
self.bdd.get(this.serviceName)
.then((response: DataInterface) => {
let data = response.get(id);
if(data === null || data === undefined) {
reject('Data does not exist in the local BDD');
return;
}
super.get(id).then((data: NodeData) => {
if (isMedia(data)) {
resolve(data);
}).catch((response) => {
reject(response);
});
return;
}
reject("model is wrong !!!")
return
}).catch((reason:any) => {
reject(reason);
});
});
}
put(id:number, data:any):any {
let ret = this.http.putSpecific([this.serviceName, id], data);
return this.bdd.setAfterPut(this.serviceName, id, ret);
getData(): Promise<Media[]> {
return new Promise((resolve, reject) => {
super.getData().then((data: NodeData[]) => {
if (isArrayOf(data, isMedia)) {
resolve(data);
return;
}
reject("model is wrong !!!")
return
}).catch((reason:any) => {
reject(reason);
});
});
}
delete(id:number):any {
let ret = this.http.deleteSpecific([this.serviceName, id]);
return this.bdd.delete(this.serviceName, id, ret);
}
uploadFile(file:File,
universe?:string,
series?:string,
@ -86,47 +90,6 @@ export class VideoService {
return this.http.uploadMultipart(`${this.serviceName }/upload/`, formData, progress);
}
deleteCover(mediaId:number,
coverId:number) {
let self = this;
return new Promise((resolve, reject) => {
self.http.getSpecific([this.serviceName, mediaId, 'rm_cover', coverId])
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, mediaId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
uploadCover(file:File,
mediaId:number,
progress:any = null) {
const formData = new FormData();
formData.append('fileName', file.name);
formData.append('id', mediaId.toString());
formData.append('file', file);
let self = this;
return new Promise((resolve, reject) => {
self.http.uploadMultipart(`${this.serviceName }/${ mediaId }/add_cover/`, formData, progress)
.then((response) => {
let data = response;
if(data === null || data === undefined) {
reject('error retrive data from server');
return;
}
self.bdd.asyncSetInDB(self.serviceName, mediaId, data);
resolve(data);
}).catch((response) => {
reject(response);
});
});
}
uploadCoverBlob(blob:Blob,
mediaId:number,
progress:any = null) {

View File

@ -6,26 +6,15 @@
import { Injectable } from '@angular/core';
import { HttpWrapperService } from 'common/service/http-wrapper';
import { isNullOrUndefined } from 'common/utils';
import { DataInterface } from 'common/utils/dataInterface';
@Injectable()
export class BddService {
private bdd = {
type: null,
series: null,
season: null,
universe: null,
video: null
};
private bddPomise = {
type: null,
series: null,
season: null,
universe: null,
video: null
};
private baseLocalStorageName = 'yota_karideo_bdd_';
private bdd = {};
private bddPomise = {};
private baseLocalStorageName = 'bdd_';
private useLocalStorage = false; // we exceed the limit of 5MB
constructor(private http: HttpWrapperService) {
@ -80,17 +69,13 @@ export class BddService {
get(name: string): Promise<DataInterface> {
let self = this;
console.log(`Try to get DB '${ name }'`);
if(this.bdd[name] === undefined) {
console.log(`Try to get a non existant DB ... '${ name }'`);
return;
}
if(this.bdd[name] !== null) {
if( !isNullOrUndefined(this.bdd[name]) ) {
return new Promise((resolve, reject) => {
resolve(self.bdd[name]);
});
}
console.log(`get DB: ?? ${ name } ??`);
if(this.bddPomise[name] === null) {
if(isNullOrUndefined(this.bddPomise[name])) {
this.bddPomise[name] = [];
// Try to load Local Data (storage)
let retriveBDDString = null;
@ -142,32 +127,12 @@ export class BddService {
}
}
return new Promise((resolve, reject) => {
if(self.bdd[name] !== null) {
if(!isNullOrUndefined(self.bdd[name])) {
resolve(self.bdd[name]);
return;
}
self.bddPomise[name].push({ resolve: resolve, reject: reject });
});
}
getType(): Promise<DataInterface> {
return this.get('type');
}
getSeries(): Promise<DataInterface> {
return this.get('series');
}
getSeason(): Promise<DataInterface> {
return this.get('season');
}
getUniverse(): Promise<DataInterface> {
return this.get('universe');
}
getVideo(): Promise<DataInterface> {
return this.get('video');
}
}

View File

@ -10,7 +10,7 @@ import { HttpClient, HttpHeaders, HttpEventType } from '@angular/common/http';
import { environment } from 'environments/environment';
import { SessionService } from './session';
import { isArrayOf, isArrayOfs, isBoolean, isNullOrUndefined, isNumber, isString } from 'common/utils';
import { isArrayOfs, isBoolean, isNullOrUndefined, isNumber, isString } from 'common/utils';
export enum HTTPRequestModel {
POST = "POST",
@ -230,7 +230,7 @@ export class HttpWrapperService {
}
return out;
}
// Deprecated ... old model stream
post(uriRest:string, headerOption:any, data:any, progress:ProgressCallback = null) {
console.log(`-------------------------------------------------------\nHTTP-wrapper POST '${ uriRest }'\n\t\theaderOption=${ JSON.stringify(headerOption, null, 2)}\n\t\tdata=${ JSON.stringify(data, null, 2)}`);
this.addTokenIfNeeded(headerOption);
@ -286,265 +286,9 @@ export class HttpWrapperService {
}
reject({ status:error.status, data:error.error });
});
/*
switch (event.type) {
case HttpEventType.UploadProgress:
const progress = Math.round(100 * event.loaded / event.total);
return { status: 'progress', message: progress };
case HttpEventType.Response:
return event.body;
default:
return `Unhandled event: ${event.type}`;
}
})
);
*/
});
}
putwwww(uriRest:string, headerOption:any, data:any) {
console.log(`-------------------------------------------------------\nHTTP-wrapper PUT '${ uriRest }'\n\t\theaderOption=${ JSON.stringify(headerOption, null, 2)}\n\t\tdata=${ JSON.stringify(data, null, 2)}`);
this.addTokenIfNeeded(headerOption);
let connectionAdresse = this.createRESTCall(uriRest, {});
const httpOption = {
headers: new HttpHeaders(headerOption)
};
return new Promise((resolve, reject) => {
if(this.displayReturn === true) {
console.log(`call POST ${ connectionAdresse } data=${ JSON.stringify(data, null, 2)}`);
}
let request = this.http.put<any>(connectionAdresse, data, httpOption);
let self = this;
request.subscribe((res: any) => {
if(self.displayReturn === true) {
console.log(`!! data ${ JSON.stringify(res, null, 2)}`);
}
if(res) {
if(res.httpCode) {
resolve({ status:res.httpCode, data:res });
} else {
resolve({ status:200, data:res });
}
} else {
resolve({ status:200, data:'' });
}
},
(error) => {
if(self.displayReturn === true) {
console.log(`an error occured status: ${ error.status}`);
console.log(`answer: ${ JSON.stringify(error, null, 2)}`);
}
reject({ status:error.status, data:error.error });
});
});
}
delete(uriRest:string, headerOption:any) {
this.addTokenIfNeeded(headerOption);
let connectionAdresse = this.createRESTCall(uriRest, {});
const httpOption = {
headers: new HttpHeaders(headerOption)
};
return new Promise((resolve, reject) => {
if(this.displayReturn === true) {
console.log(`call POST ${ connectionAdresse}`);
}
let request = this.http.delete<any>(connectionAdresse, httpOption);
let self = this;
request.subscribe((res: any) => {
if(self.displayReturn === true) {
console.log(`!! data ${ JSON.stringify(res, null, 2)}`);
}
if(res) {
if(res.httpCode) {
resolve({ status:res.httpCode, data:res });
} else {
resolve({ status:200, data:res });
}
} else {
resolve({ status:200, data:'' });
}
},
(error) => {
if(self.displayReturn === true) {
console.log(`an error occured status: ${ error.status}`);
console.log(`answer: ${ JSON.stringify(error, null, 2)}`);
}
reject({ status:error.status, data:error.error });
});
});
}
uploadFileMultipart(base:string, id:number, file:File): any {
console.log(`Upload file to ${ base}`);
let url = base;
if(id !== null) {
url = `${url }/${ id}`;
}
let formData = new FormData();
formData.append('upload', file);
let headers = new Headers();
console.log(`upload filename : ${ file.name}`);
let extention = file.name.split('.').pop();
if(extention === 'jpg') {
headers.append('Content-Type', 'image/jpeg');
} else if(extention === 'png') {
headers.append('Content-Type', 'image/png');
} else if(extention === 'mkv') {
headers.append('Content-Type', 'video/x-matroska');
} else if(extention === 'webm') {
headers.append('Content-Type', 'video/webm');
} else {
return null;
}
headers.append('filename', file.name);
const httpOption = {
headers: headers,
reportProgress: true,
};
return new Promise((resolve, reject) => {
this.post(url, httpOption, formData)
.then((response: any) => {
console.log(`URL: ${ url }\nRespond(${ response.status }): ${ JSON.stringify(response.data, null, 2)}`);
if(response.status === 200) {
resolve(response.data);
return;
}
reject('An error occured');
}, (response: any) => {
if(typeof response.data === 'undefined') {
reject('return ERROR undefined');
} else {
reject(`return ERROR ${ JSON.stringify(response.data, null, 2)}`);
}
});
});
}
uploadFileBase64(base:string, id:number, file:File): any {
console.log(`Upload file to ${ base}`);
let url = base;
if(id !== null) {
url = `${url }/${ id}`;
}
let self = this;
let reader = new FileReader();
reader.readAsArrayBuffer(file);
return new Promise((resolve, reject) => {
reader.onload = () => {
let headers:any = {};// new Headers();
console.log(`upload filename : ${ file.name}`);
let extention = file.name.split('.').pop();
if(extention === 'jpg') {
// headers.append('Content-Type', "image/jpeg");
headers['Content-Type'] = 'image/jpeg';
headers['mime-type'] = 'image/jpeg';
} else if(extention === 'jpeg') {
// headers.append('Content-Type', "image/jpeg");
headers['Content-Type'] = 'image/jpeg';
headers['mime-type'] = 'image/jpeg';
} else if(extention === 'webp') {
// headers.append('Content-Type', "image/webp");
headers['Content-Type'] = 'image/webp';
headers['mime-type'] = 'image/webp';
} else if(extention === 'png') {
// headers.append('Content-Type', "image/png");
headers['Content-Type'] = 'image/png';
headers['mime-type'] = 'image/png';
} else if(extention === 'mkv') {
headers['Content-Type'] = 'video/x-matroska';
headers['mime-type'] = 'video/x-matroska';
} else if(extention === 'webm') {
headers['Content-Type'] = 'video/webm';
headers['mime-type'] = 'video/webm';
} else {
return null;
}
// headers.append('filename', file.name);
headers.filename = file.name;
self.post(url, headers, reader.result)
.then((response: any) => {
console.log(`URL: ${ url }\nRespond(${ response.status }): ${ JSON.stringify(response.data, null, 2)}`);
if(response.status === 200) {
resolve(response.data);
return;
}
reject('An error occured');
}, (response: any) => {
if(typeof response.data === 'undefined') {
reject('return ERROR undefined');
} else {
reject('return ERROR ...');// + JSON.stringify(response, null, 2));
}
});
};
});
}
uploadFile(base:string, file:File): any {
console.log(`Upload file to ${ base}`);
let url = base;
let self = this;
let reader = new FileReader();
reader.readAsArrayBuffer(file);
return new Promise((resolve, reject) => {
reader.onload = () => {
let headers: any = {};// new Headers();
console.log(`upload filename : ${ file.name}`);
let extention = file.name.split('.').pop();
if(extention === 'jpg') {
// headers.append('Content-Type', "image/jpeg");
headers['Content-Type'] = 'image/jpeg';
headers['mime-type'] = 'image/jpeg';
} else if(extention === 'jpeg') {
// headers.append('Content-Type', "image/jpeg");
headers['Content-Type'] = 'image/jpeg';
headers['mime-type'] = 'image/jpeg';
} else if(extention === 'webp') {
// headers.append('Content-Type', "image/webp");
headers['Content-Type'] = 'image/webp';
headers['mime-type'] = 'image/webp';
} else if(extention === 'png') {
// headers.append('Content-Type', "image/png");
headers['Content-Type'] = 'image/png';
headers['mime-type'] = 'image/png';
} else if(extention === 'mkv') {
headers['Content-Type'] = 'video/x-matroska';
headers['mime-type'] = 'video/x-matroska';
} else if(extention === 'webm') {
headers['Content-Type'] = 'video/webm';
headers['mime-type'] = 'video/webm';
} else {
return null;
}
// headers.append('filename', file.name);
headers.filename = file.name;
self.post(url, headers, reader.result)
.then((response: any) => {
console.log(`URL: ${ url }\nRespond(${ response.status }): ${ JSON.stringify(response.data, null, 2)}`);
if(response.status === 200) {
resolve(response.data);
return;
}
reject('An error occured');
}, (response: any) => {
if(typeof response.data === 'undefined') {
reject('return ERROR undefined');
} else {
reject('return ERROR ...');// + JSON.stringify(response, null, 2));
}
});
};
});
}
// Deprecated ... old model stream
uploadMultipart(base:string, multipart:FormData, progress: ProgressCallback): any {
console.log(`Upload multipart to ${ base}`);
@ -599,8 +343,7 @@ export class HttpWrapperService {
});
}
// Complex wrapper to simplify interaction:
//// TODO change thje base and ID to manage a single [] ...
// Complex wrapper to simplify interaction:s
putSpecific(urlPath: UrlPath, data: object):Promise<ModelResponseHttp> {
return new Promise((resolve, reject) => {
this.request({

View File

@ -1,3 +1,4 @@
import { BddService } from "./bdd";
import { CookiesService } from "./cookies";
import { HttpWrapperService, ModelResponseHttp, HTTPRequest, HTTPMimeType, HTTPRequestModel } from "./http-wrapper";
import { StorageService } from "./local-storage";
@ -7,6 +8,7 @@ import { SSOService } from "./sso";
import { UserService } from "./user";
export {
BddService,
CookiesService,
StorageService,
HttpWrapperService,

View File

@ -1,6 +1,6 @@
import { DataInterface } from "./dataInterface";
import { DataInterface, TypeCheck } from "./dataInterface";
import { isArray, isArrayOf, isBoolean, isNull, isNullOrUndefined, isNumber, isNumberFinite, isObject, isOptionalOf, isOptionalArrayOf, isString, isUndefined, isArrayOfs } from "./validator";
export {
@ -18,5 +18,6 @@ export {
isOptionalOf,
isOptionalArrayOf,
DataInterface,
TypeCheck,
}