import { Injectable, inject } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import {map, Observable} from 'rxjs'; import { environment } from '../../environments/environment'; import { Bet, CreateBetPayload, UpdateBetPayload } from '../models/data.models'; import {SuccessResponse} from "../models/api-responses.model"; import {toDate} from "../core/utils/type-guards"; function mapBet(bet: any): Bet { return { ...bet, startDate: toDate(bet.startDate)!, endDate: toDate(bet.endDate) }; } @Injectable({ providedIn: 'root', }) export class BetService { private http = inject(HttpClient); private readonly base = `${environment.apiUrl}/api/v1/bets`; getUserBets(): Observable { return this.http.get>(`${this.base}/user`).pipe( map(res => res.data.map(mapBet)) ); } getPublicBets(): Observable { return this.http.get>(`${this.base}/public`).pipe( map(res => res.data.map(mapBet)) ); } getAllBets(): Observable { return this.http.get>(this.base).pipe( map(res => res.data.map(mapBet)) ); } getBetById(id: string): Observable { return this.http.get>(`${this.base}/${id}`).pipe( map(res => mapBet(res.data)) ); } createBet(payload: CreateBetPayload): Observable { return this.http.post>(this.base, payload).pipe( map(res => mapBet(res.data)) ); } updateBet(id: string, payload: UpdateBetPayload): Observable { return this.http.put>(`${this.base}/${id}`, payload).pipe( map(res => mapBet(res.data)) ); } deleteBet(id: string): Observable { return this.http.delete(`${this.base}/${id}`); } }