94 lines
2.7 KiB
TypeScript
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`,
|
|
);
|
|
}
|
|
|
|
}
|