import { Injectable, inject } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import {map, Observable} from 'rxjs'; import { environment } from '../../environments/environment'; import { Group } from '../models/data.models'; import {SuccessResponse} from "../models/api-responses.model"; export interface CreateGroupPayload { name: string; members?: string[]; } export interface UpdateGroupPayload { name?: string; description?: string; isPrivate?: boolean; avatarUrl?: string; } @Injectable({ providedIn: 'root', }) export class GroupService { private http = inject(HttpClient); private readonly base = `${environment.apiUrl}/api/v1/groups`; getGroups(): Observable { return this.http.get>(this.base).pipe( map(res => res.data) ); } getGroupById(id: number): Observable { return this.http.get>(`${this.base}/${id}`).pipe( map(res => res.data) ); } createGroup(payload: CreateGroupPayload): Observable { return this.http.post>(this.base, payload).pipe( map(res => res.data) ); } updateGroup(id: number, payload: UpdateGroupPayload): Observable { return this.http.put>(`${this.base}/${id}`, payload).pipe( map(res => res.data) ); } deleteGroup(id: number): Observable { return this.http.delete(`${this.base}/${id}`); } addMembers(groupId: number, userIds: number[]): Observable { return this.http.put>(`${this.base}/${groupId}/members`, { userIds }).pipe( map(res => res.data) ); } removeMember(groupId: number, userId: number): Observable { return this.http.delete(`${this.base}/${groupId}/members/${userId}`); } }