import api from './api'; export interface RegisterData { email: string; password: string; first_name: string; last_name: string; phone?: string; address?: string; } export interface LoginData { email: string; password: string; } export interface ForgotPasswordData { email: string; } export interface User { id: number; email: string; first_name: string; last_name: string; phone: string | null; address: string | null; role: string; is_active: boolean; created_at: string; last_login: string | null; } export interface MembershipTier { id: number; name: string; description: string; annual_fee: number; benefits: string; is_active: boolean; created_at: string; } export interface Membership { id: number; user_id: number; tier_id: number; status: string; start_date: string; end_date: string; auto_renew: boolean; created_at: string; tier: MembershipTier; } export interface Payment { id: number; user_id: number; membership_id: number | null; amount: number; payment_method: string; status: string; transaction_id: string | null; payment_date: string | null; notes: string | null; created_at: string; } export interface ResetPasswordData { token: string; new_password: string; } export interface ChangePasswordData { current_password: string; new_password: string; } export interface MembershipCreateData { tier_id: number; start_date: string; end_date: string; auto_renew: boolean; } export interface MembershipTierUpdateData { name?: string; description?: string; annual_fee?: number; benefits?: string; is_active?: boolean; } export interface MembershipUpdateData { status?: string; start_date?: string; end_date?: string; auto_renew?: boolean; } export interface PaymentCreateData { amount: number; payment_method: string; membership_id?: number; notes?: string; } export interface PaymentUpdateData { status?: string; transaction_id?: string; payment_date?: string; notes?: string; } export interface MembershipTierCreateData { name: string; description?: string; annual_fee: number; benefits?: string; } export interface Event { id: number; title: string; description: string | null; event_date: string; event_time: string | null; location: string | null; max_attendees: number | null; status: string; created_by: number; created_at: string; updated_at: string; rsvp_status?: string; // Current user's RSVP status } export interface EventCreateData { title: string; description?: string; event_date: string; event_time?: string; location?: string; max_attendees?: number; } export interface EventUpdateData { title?: string; description?: string; event_date?: string; event_time?: string; location?: string; max_attendees?: number; status?: string; } export interface EventRSVP { id: number; event_id: number; user_id: number; status: string; attended: boolean; notes: string | null; created_at: string; updated_at: string; } export interface EventRSVPData { status: string; notes?: string; } export const authService = { async register(data: RegisterData) { const response = await api.post('/auth/register', data); return response.data; }, async login(data: LoginData) { const response = await api.post('/auth/login-json', data); localStorage.setItem('token', response.data.access_token); return response.data; }, async forgotPassword(data: ForgotPasswordData) { const response = await api.post('/auth/forgot-password', data); return response.data; }, async resetPassword(data: ResetPasswordData) { const response = await api.post('/auth/reset-password', data); return response.data; }, async changePassword(data: ChangePasswordData) { const response = await api.post('/auth/change-password', data); return response.data; }, logout() { localStorage.removeItem('token'); }, isAuthenticated() { return !!localStorage.getItem('token'); } }; export const userService = { async getCurrentUser(): Promise { const response = await api.get('/users/me'); return response.data; }, async updateProfile(data: Partial) { const response = await api.put('/users/me', data); return response.data; }, async getAllUsers(): Promise { const response = await api.get('/users/'); return response.data; }, async updateUser(userId: number, data: Partial): Promise { const response = await api.put(`/users/${userId}`, data); return response.data; }, async deleteUser(userId: number): Promise<{ message: string }> { const response = await api.delete(`/users/${userId}`); return response.data; }, }; export const membershipService = { async getMyMemberships(): Promise { const response = await api.get('/memberships/my-memberships'); return response.data; }, async createMembership(data: MembershipCreateData): Promise { const response = await api.post('/memberships/', data); return response.data; }, async updateMembership(membershipId: number, data: MembershipUpdateData): Promise { const response = await api.put(`/memberships/${membershipId}`, data); return response.data; }, async getAllMemberships(): Promise { const response = await api.get('/memberships/'); return response.data; }, async getTiers(): Promise { const response = await api.get('/tiers/'); return response.data; }, async createTier(data: MembershipTierCreateData): Promise { const response = await api.post('/tiers/', data); return response.data; }, async updateTier(tierId: number, data: MembershipTierUpdateData): Promise { const response = await api.put(`/tiers/${tierId}`, data); return response.data; }, async deleteTier(tierId: number): Promise<{ message: string }> { const response = await api.delete(`/tiers/${tierId}`); return response.data; }, async getAllTiers(showInactive: boolean = true): Promise { const response = await api.get(`/tiers/?show_inactive=${showInactive}`); return response.data; } }; export const paymentService = { async getMyPayments(): Promise { const response = await api.get('/payments/my-payments'); return response.data; }, async createPayment(data: PaymentCreateData): Promise { const response = await api.post('/payments/', data); return response.data; }, async updatePayment(paymentId: number, data: PaymentUpdateData): Promise { const response = await api.put(`/payments/${paymentId}`, data); return response.data; }, async getAllPayments(): Promise { const response = await api.get('/payments/'); return response.data; } }; export const eventService = { async getAllEvents(): Promise { const response = await api.get('/events/'); return response.data; }, async getUpcomingEvents(): Promise { const response = await api.get('/events/upcoming'); return response.data; }, async createEvent(data: EventCreateData): Promise { const response = await api.post('/events/', data); return response.data; }, async updateEvent(eventId: number, data: EventUpdateData): Promise { const response = await api.put(`/events/${eventId}`, data); return response.data; }, async deleteEvent(eventId: number): Promise<{ message: string }> { const response = await api.delete(`/events/${eventId}`); return response.data; }, async getEventRSVPs(eventId: number): Promise { const response = await api.get(`/events/${eventId}/rsvps`); return response.data; }, async createOrUpdateRSVP(eventId: number, data: EventRSVPData): Promise { const response = await api.post(`/events/${eventId}/rsvp`, data); return response.data; }, async getMyRSVPs(): Promise { const response = await api.get('/events/my-rsvps'); return response.data; } };