try to do better

This commit is contained in:
arrelin
2026-01-29 15:17:54 +03:00
parent f00ddc7d10
commit 24f04a7e82
60 changed files with 5335 additions and 1254 deletions

View File

@@ -0,0 +1,84 @@
import { familyApi } from '../api/client';
import { Family, CreateFamilyRequest, CreateMyFamilyRequest, CreateMyFamilyResponse, VerifyFamilyPasswordRequest, FamilyMember } from '../types';
import { handleApiError } from '../utils/errorHandler';
export const familyService = {
async getAll(): Promise<Family[]> {
try {
const res = await familyApi.getAll();
return res.data;
} catch (error) {
handleApiError(error);
}
},
async getById(id: number): Promise<Family> {
try {
const res = await familyApi.getById(id);
return res.data;
} catch (error) {
handleApiError(error);
}
},
async create(data: CreateFamilyRequest): Promise<Family> {
try {
const res = await familyApi.create(data);
return res.data;
} catch (error) {
handleApiError(error);
}
},
async createMyFamily(data: CreateMyFamilyRequest): Promise<CreateMyFamilyResponse> {
try {
const res = await familyApi.createMyFamily(data);
return res.data;
} catch (error) {
handleApiError(error);
}
},
async update(id: number, data: { name: string }): Promise<Family> {
try {
const res = await familyApi.update(id, data);
return res.data;
} catch (error) {
handleApiError(error);
}
},
async delete(id: number): Promise<void> {
try {
await familyApi.delete(id);
} catch (error) {
handleApiError(error);
}
},
async verifyPassword(id: number, data: VerifyFamilyPasswordRequest): Promise<boolean> {
try {
const res = await familyApi.verifyPassword(id, data);
return res.data.valid;
} catch (error) {
handleApiError(error);
}
},
async getMembers(familyId: number): Promise<FamilyMember[]> {
try {
const res = await familyApi.getMembers(familyId);
return res.data;
} catch (error) {
handleApiError(error);
}
},
formatMemberName(member: FamilyMember): string {
return member.username || member.email || 'Unknown User';
},
countAdmins(members: FamilyMember[]): number {
return members.filter((m) => m.is_admin).length;
},
};