/** * @copyright 2026 NHCarrigan * @license Naomi's Public License * @author Naomi Carrigan */ import { Injectable, inject } from '@angular/core'; import { Observable } from 'rxjs'; import { ApiService } from './api.service'; import { User, PrimaryBadge } from '@library/shared-types'; export interface UserProfileResponse { id: string; username: string; displayName?: string; avatar?: string; bio?: string; slug?: string; primaryBadge?: PrimaryBadge; website?: string; discordServer?: string; bluesky?: string; github?: string; linkedin?: string; twitch?: string; youtube?: string; achievementPoints: number; badges: { isStaff: boolean; isMod: boolean; isVip: boolean; inDiscord: boolean; }; stats: { suggestionsCount: number; suggestionsAcceptedCount: number; likesCount: number; commentsCount: number; }; createdAt: Date; } export interface UpdateUserSettingsRequest { slug?: string; displayName?: string; bio?: string; profilePublic?: boolean; primaryBadge?: PrimaryBadge; website?: string; discordServer?: string; bluesky?: string; github?: string; linkedin?: string; twitch?: string; youtube?: string; } @Injectable({ providedIn: 'root' }) export class UserService { private api = inject(ApiService); getAllUsers(): Observable { return this.api.get('/users'); } banUser(userId: string): Observable { return this.api.post(`/users/${userId}/ban`, {}); } unbanUser(userId: string): Observable { return this.api.post(`/users/${userId}/unban`, {}); } getMe(): Observable { return this.api.get('/users/me'); } updateSettings(settings: UpdateUserSettingsRequest): Observable { return this.api.put('/users/me', settings); } getProfile(identifier: string): Observable { return this.api.get(`/users/profile/${identifier}`); } makeProfilePrivate(userId: string): Observable { return this.api.post(`/users/${userId}/make-private`, {}); } adminUpdateUser(userId: string, settings: UpdateUserSettingsRequest): Observable { return this.api.put(`/users/${userId}`, settings); } }