template-saas-frontend-v2/src/services/mlm/ranks.api.ts
Adrian Flores Cortes eff0f70b7f [SAAS-021] feat: Implement MLM module frontend
- 4 API services: structures, ranks, nodes, commissions
- 30+ React Query hooks in useMlm.ts
- My network/dashboard hooks for user experience
- Tree visualization support hooks

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 06:48:55 -06:00

95 lines
2.5 KiB
TypeScript

import api from '../api';
// ─────────────────────────────────────────────
// Types
// ─────────────────────────────────────────────
export interface RankRequirements {
personalVolume?: number;
groupVolume?: number;
directReferrals?: number;
activeLegs?: number;
rankInLegs?: {
rankLevel: number;
count: number;
};
}
export interface RankBenefits {
discount?: number;
access?: string[];
features?: string[];
}
export interface Rank {
id: string;
tenantId: string;
structureId: string;
name: string;
level: number;
badgeUrl: string | null;
color: string | null;
requirements: RankRequirements;
bonusRate: number | null;
benefits: RankBenefits;
isActive: boolean;
createdAt: string;
updatedAt: string;
}
export interface CreateRankDto {
structureId: string;
name: string;
level: number;
badgeUrl?: string;
color?: string;
requirements?: RankRequirements;
bonusRate?: number;
benefits?: RankBenefits;
isActive?: boolean;
}
export type UpdateRankDto = Partial<CreateRankDto>;
export interface RankFilters {
structureId?: string;
isActive?: boolean;
}
// ─────────────────────────────────────────────
// API Service
// ─────────────────────────────────────────────
export const ranksApi = {
list: async (params?: RankFilters): Promise<Rank[]> => {
const response = await api.get<Rank[]>('/mlm/ranks', { params });
return response.data;
},
get: async (id: string): Promise<Rank> => {
const response = await api.get<Rank>(`/mlm/ranks/${id}`);
return response.data;
},
create: async (data: CreateRankDto): Promise<Rank> => {
const response = await api.post<Rank>('/mlm/ranks', data);
return response.data;
},
update: async (id: string, data: UpdateRankDto): Promise<Rank> => {
const response = await api.patch<Rank>(`/mlm/ranks/${id}`, data);
return response.data;
},
delete: async (id: string): Promise<void> => {
await api.delete(`/mlm/ranks/${id}`);
},
evaluate: async (structureId: string): Promise<number> => {
const response = await api.post<number>('/mlm/ranks/evaluate', null, {
params: { structureId },
});
return response.data;
},
};