import { Injectable, inject } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; export interface ApiResponse { success: boolean; data?: T; error?: string; message?: string; } export interface Service { id: number; name: string; image: string; registry?: string; envVars: Record; port: number; domain?: string; containerID?: string; status: 'stopped' | 'starting' | 'running' | 'stopping' | 'failed'; createdAt: number; updatedAt: number; } export interface Registry { id: number; url: string; username: string; createdAt: number; } export interface SystemStatus { docker: { running: boolean; version: any; }; reverseProxy: { http: { running: boolean; port: number; }; https: { running: boolean; port: number; certificates: number; }; routes: number; }; dns: { configured: boolean; }; ssl: { configured: boolean; certbotInstalled: boolean; }; services: { total: number; running: number; stopped: number; }; } @Injectable({ providedIn: 'root', }) export class ApiService { private http = inject(HttpClient); private baseUrl = '/api'; // System getStatus(): Observable> { return this.http.get>(`${this.baseUrl}/status`); } // Services getServices(): Observable> { return this.http.get>(`${this.baseUrl}/services`); } getService(name: string): Observable> { return this.http.get>(`${this.baseUrl}/services/${name}`); } createService(data: any): Observable> { return this.http.post>(`${this.baseUrl}/services`, data); } deleteService(name: string): Observable { return this.http.delete(`${this.baseUrl}/services/${name}`); } startService(name: string): Observable { return this.http.post(`${this.baseUrl}/services/${name}/start`, {}); } stopService(name: string): Observable { return this.http.post(`${this.baseUrl}/services/${name}/stop`, {}); } restartService(name: string): Observable { return this.http.post(`${this.baseUrl}/services/${name}/restart`, {}); } getServiceLogs(name: string): Observable> { return this.http.get>(`${this.baseUrl}/services/${name}/logs`); } // Registries getRegistries(): Observable> { return this.http.get>(`${this.baseUrl}/registries`); } createRegistry(data: any): Observable> { return this.http.post>(`${this.baseUrl}/registries`, data); } deleteRegistry(url: string): Observable { return this.http.delete(`${this.baseUrl}/registries/${encodeURIComponent(url)}`); } // DNS getDnsRecords(): Observable> { return this.http.get>(`${this.baseUrl}/dns`); } createDnsRecord(data: any): Observable { return this.http.post(`${this.baseUrl}/dns`, data); } deleteDnsRecord(domain: string): Observable { return this.http.delete(`${this.baseUrl}/dns/${domain}`); } // SSL getSslCertificates(): Observable> { return this.http.get>(`${this.baseUrl}/ssl`); } renewSslCertificate(domain: string): Observable { return this.http.post(`${this.baseUrl}/ssl/${domain}/renew`, {}); } // Settings getSettings(): Observable>> { return this.http.get>>(`${this.baseUrl}/settings`); } updateSetting(key: string, value: string): Observable { return this.http.post(`${this.baseUrl}/settings`, { key, value }); } }