97 lines
2.5 KiB
TypeScript
Raw Normal View History

2019-09-18 15:02:21 +09:00
import { Injectable } from '@angular/core';
2019-09-25 14:06:26 +09:00
import { ProtocolService } from '@ucap-webmessenger/protocol';
import { Observable } from 'rxjs';
import { take, map, takeWhile } from 'rxjs/operators';
2019-09-25 14:06:26 +09:00
import {
AuthRequest,
AuthResponse,
encodeAuth,
decodeAuth
} from '../models/auth';
import {
SVC_TYPE_QUERY_DATA,
SSVC_TYPE_QUERY_AUTH_REQ,
SSVC_TYPE_QUERY_DEPT_REQ,
SSVC_TYPE_QUERY_DEPT_RES,
SSVC_TYPE_QUERY_DEPT_DATA,
SSVC_TYPE_QUERY_DEPT_USER_RES,
SSVC_TYPE_QUERY_DEPT_USER_DATA,
SSVC_TYPE_QUERY_DEPT_USER_REQ
2019-09-25 14:06:26 +09:00
} from '../types/service';
import {
DeptRequest,
DeptResponse,
encodeDept,
decodeDept,
decodeDeptData,
DeptData
} from '../models/dept';
import {
encodeDeptUser,
decodeDeptUser,
decodeDeptUserData,
DeptUserRequest,
DeptUserData,
DeptUserResponse
} from '../models/dept-user';
2019-09-18 15:02:21 +09:00
@Injectable({
providedIn: 'root'
})
export class QueryProtocolService {
2019-09-25 14:06:26 +09:00
constructor(private protocolService: ProtocolService) {}
public auth(req: AuthRequest): Observable<AuthResponse> {
return this.protocolService
.call(SVC_TYPE_QUERY_DATA, SSVC_TYPE_QUERY_AUTH_REQ, ...encodeAuth(req))
.pipe(
take(1),
map(res => decodeAuth(res))
);
}
public dept(req: DeptRequest): Observable<DeptResponse | DeptData> {
return this.protocolService
.call(SVC_TYPE_QUERY_DATA, SSVC_TYPE_QUERY_DEPT_REQ, ...encodeDept(req))
.pipe(
takeWhile(res => SSVC_TYPE_QUERY_DEPT_RES !== res.subServiceType, true),
map(res => {
if (SSVC_TYPE_QUERY_DEPT_DATA === res.subServiceType) {
return { ...decodeDeptData(res), Type: SSVC_TYPE_QUERY_DEPT_DATA };
}
return { ...decodeDept(res), Type: SSVC_TYPE_QUERY_DEPT_RES };
})
);
}
public deptUser(
req: DeptUserRequest
): Observable<DeptUserResponse | DeptUserData> {
return this.protocolService
.call(
SVC_TYPE_QUERY_DATA,
SSVC_TYPE_QUERY_DEPT_USER_REQ,
...encodeDeptUser(req)
)
.pipe(
takeWhile(
res => SSVC_TYPE_QUERY_DEPT_USER_RES !== res.subServiceType,
true
),
map(res => {
if (SSVC_TYPE_QUERY_DEPT_USER_DATA === res.subServiceType) {
return {
...decodeDeptUserData(res),
Type: SSVC_TYPE_QUERY_DEPT_USER_DATA
};
}
return {
...decodeDeptUser(res),
Type: SSVC_TYPE_QUERY_DEPT_USER_RES
};
})
);
}
2019-09-18 15:02:21 +09:00
}