Files
kmtnflower/src/app/services/mobile-build.service.ts
T

94 lines
2.7 KiB
TypeScript

import { Injectable, inject } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs';
import { getAppConfig } from './app-config.service';
import {
MobileBuildCreatePayload,
MobileBuildDefaults,
MobileBuildPreflightResult,
MobileBuildRequest,
ThemeStatus,
} from '../interfaces/mobile-build';
@Injectable({
providedIn: 'root',
})
export class MobileBuildService {
private http = inject(HttpClient);
private baseUrl = `${getAppConfig().apiBaseUrl}/api/mobile-builds`;
getDefaults(): Observable<MobileBuildDefaults> {
return this.http.get<MobileBuildDefaults>(`${this.baseUrl}/defaults`);
}
listRequests(): Observable<MobileBuildRequest[]> {
return this.http.get<MobileBuildRequest[]>(`${this.baseUrl}/requests`);
}
getRequest(id: number): Observable<MobileBuildRequest> {
return this.http.get<MobileBuildRequest>(`${this.baseUrl}/requests/${id}`);
}
createRequest(payload: MobileBuildCreatePayload): Observable<MobileBuildRequest> {
return this.http.post<MobileBuildRequest>(`${this.baseUrl}/requests`, payload);
}
deleteRequest(id: number): Observable<void> {
return this.http.delete<void>(`${this.baseUrl}/requests/${id}`);
}
uploadFile(
requestId: number,
platform: 'android' | 'ios',
fileKind: string,
file: File,
): Observable<{ platform: string; file_kind: string; display_name: string; sha256: string; size: number }> {
const form = new FormData();
form.append('file', file);
const params = new HttpParams()
.set('platform', platform)
.set('file_kind', fileKind);
return this.http.post<{ platform: string; file_kind: string; display_name: string; sha256: string; size: number }>(
`${this.baseUrl}/requests/${requestId}/files`,
form,
{ params },
);
}
preflight(requestId: number): Observable<MobileBuildPreflightResult> {
return this.http.post<MobileBuildPreflightResult>(
`${this.baseUrl}/requests/${requestId}/preflight`,
{},
);
}
trigger(requestId: number): Observable<MobileBuildRequest> {
return this.http.post<MobileBuildRequest>(
`${this.baseUrl}/requests/${requestId}/trigger`,
{},
);
}
getThemeStatus(): Observable<ThemeStatus> {
return this.http.get<ThemeStatus>(
`${getAppConfig().apiBaseUrl}/api/theme/status`,
);
}
regenerateTheme(): Observable<unknown> {
return this.http.post(
`${getAppConfig().apiBaseUrl}/api/theme/regenerate`,
{},
);
}
getDownloadUrl(artifactId: number): Observable<{ download_url: string }> {
return this.http.get<{ download_url: string }>(
`${this.baseUrl}/artifacts/${artifactId}/download-url`,
);
}
}