8e2afb93f3
- NCWF-5: scaffold /analysis route with ChessBoard viewer and navigation - NCWF-6: FEN / PGN / Game-ID input form with depth selector - NCWF-7: extend GameApiService with analyzePosition(); add AnalysisService with game-wide annotation pipeline; proxy /api/analysis -> :8087 - NCWF-8: EvalTimelineComponent — SVG win-chance chart per ply - NCWF-9: AnnotatedMoveListComponent — quality labels (!! ! ?! ? ??) derived from win-chance delta Also fix pre-existing app.spec.ts failure (missing provideHttpClient). Apply project-wide prettier formatting pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { Injectable, inject } from '@angular/core';
|
|
import { HttpClient } from '@angular/common/http';
|
|
import { Observable } from 'rxjs';
|
|
import {
|
|
Challenge,
|
|
DeclineChallengeRequest,
|
|
ListChallengesResponse,
|
|
SendChallengeRequest,
|
|
} from '../models/challenge.models';
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
export class ChallengeService {
|
|
private readonly http = inject(HttpClient);
|
|
private readonly challengeBaseUrl = '/api/challenge';
|
|
|
|
sendChallenge(username: string, request: SendChallengeRequest): Observable<Challenge> {
|
|
return this.http.post<Challenge>(`${this.challengeBaseUrl}/${username}`, request);
|
|
}
|
|
|
|
listChallenges(): Observable<ListChallengesResponse> {
|
|
return this.http.get<ListChallengesResponse>(`${this.challengeBaseUrl}`);
|
|
}
|
|
|
|
getChallenge(challengeId: string): Observable<Challenge> {
|
|
return this.http.get<Challenge>(`${this.challengeBaseUrl}/${challengeId}`);
|
|
}
|
|
|
|
acceptChallenge(challengeId: string): Observable<Challenge> {
|
|
return this.http.post<Challenge>(`${this.challengeBaseUrl}/${challengeId}/accept`, {});
|
|
}
|
|
|
|
declineChallenge(challengeId: string, request?: DeclineChallengeRequest): Observable<void> {
|
|
return this.http.post<void>(`${this.challengeBaseUrl}/${challengeId}/decline`, request || {});
|
|
}
|
|
|
|
cancelChallenge(challengeId: string): Observable<void> {
|
|
return this.http.post<void>(`${this.challengeBaseUrl}/${challengeId}/cancel`, {});
|
|
}
|
|
}
|