Yaltopia-Tickets-App/lib/api.ts
2026-06-05 13:39:37 +03:00

197 lines
6.6 KiB
TypeScript

import {
createApi,
createLoggerMiddleware,
createTransformerMiddleware,
} from "@simple-api/core";
import { authMiddleware, refreshMiddleware } from "./api-middlewares";
// Trailing slash is essential for relative path resolution
export const BASE_URL = "https://api.yaltopiaticket.com/";
/**
* Central API client using simple-api
*/
export const api = createApi({
baseUrl: BASE_URL,
middleware: [
createLoggerMiddleware(),
createTransformerMiddleware(),
refreshMiddleware,
],
services: {
notifications: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "notifications" },
settings: { method: "GET", path: "notifications/settings" },
update: { method: "PUT", path: "notifications/settings" },
},
},
news: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "news" },
getLatest: { method: "GET", path: "news/latest" },
getById: { method: "GET", path: "news/:id" },
},
},
auth: {
middleware: [authMiddleware],
endpoints: {
login: { method: "POST", path: "auth/login" },
register: { method: "POST", path: "auth/login-or-register-owner" },
refresh: { method: "POST", path: "auth/refresh" },
logout: { method: "POST", path: "auth/logout" },
profile: { method: "GET", path: "auth/profile" },
googleMobile: { method: "POST", path: "auth/google/mobile" },
changePassword: { method: "POST", path: "auth/change-password" },
sendOtp: { method: "POST", path: "auth/phone/otp/send" },
resendOtp: { method: "POST", path: "auth/phone/otp/resend" },
verifyOtp: { method: "POST", path: "auth/phone/otp/verify" },
setPin: { method: "POST", path: "auth/set-pin" },
verifyPin: { method: "GET", path: "auth/pin" },
forgetPin: { method: "POST", path: "auth/forget-pin" },
forgetPinVerify: { method: "POST", path: "auth/forget-pin/verify" },
},
},
invoices: {
middleware: [authMiddleware],
endpoints: {
stats: { method: "GET", path: "invoices/stats" },
getAll: { method: "GET", path: "invoices" },
getById: { method: "GET", path: "invoices/:id" },
create: { method: "POST", path: "invoices" },
update: { method: "PUT", path: "invoices/:id" },
delete: { method: "DELETE", path: "invoices/:id" },
getPdf: { method: "GET", path: "invoices/:id/pdf" },
shareLink: { method: "POST", path: "invoices/share/link" },
},
},
users: {
middleware: [authMiddleware],
endpoints: {
me: { method: "GET", path: "users/me" },
getAll: { method: "GET", path: "users" },
updateProfile: { method: "PUT", path: "users/me" },
create: { method: "POST", path: "auth/register" },
},
},
company: {
middleware: [authMiddleware],
endpoints: {
get: { method: "GET", path: "company" },
update: { method: "PUT", path: "company" },
},
},
team: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "team" },
getById: { method: "GET", path: "team/:id" },
create: { method: "POST", path: "team" },
},
},
scan: {
middleware: [authMiddleware],
endpoints: {
invoice: { method: "POST", path: "scan/invoice" },
paymentReceipt: { method: "POST", path: "scan/payment-receipt" },
verifyPaymentReference: {
method: "POST",
path: "scan/verify-payment-reference",
},
paymentReceiptManual: {
method: "POST",
path: "scan/payment-receipt/manual",
},
},
},
payments: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "payments" },
getById: { method: "GET", path: "payments/:id" },
create: { method: "POST", path: "payments" },
update: { method: "PUT", path: "payments/:id" },
associate: { method: "POST", path: "payments/:id/associate" },
verifySms: { method: "POST", path: "payments/:id/verify-sms" },
delete: { method: "DELETE", path: "payments/:id" },
},
},
paymentRequests: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "payment-requests" },
getById: { method: "GET", path: "payment-requests/:id" },
create: { method: "POST", path: "payment-requests" },
open: { method: "POST", path: "payment-requests/:id/open" },
sendEmail: { method: "POST", path: "payment-requests/:id/send-email" },
},
},
proforma: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "proforma" },
getById: { method: "GET", path: "proforma/:id" },
create: { method: "POST", path: "proforma" },
update: { method: "PUT", path: "proforma/:id" },
delete: { method: "DELETE", path: "proforma/:id" },
getPdf: { method: "GET", path: "proforma/:id/pdf" },
},
},
rbac: {
middleware: [authMiddleware],
endpoints: {
roles: { method: "GET", path: "rbac/roles" },
permissions: { method: "GET", path: "rbac/permissions" },
},
},
support: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "support" },
create: { method: "POST", path: "support" },
},
},
faq: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "faq" },
},
},
customers: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "customers" },
getById: { method: "GET", path: "customers/:id" },
create: { method: "POST", path: "customers" },
},
},
declarations: {
middleware: [authMiddleware],
endpoints: {
getAll: { method: "GET", path: "declarations" },
getById: { method: "GET", path: "declarations/:id" },
create: { method: "POST", path: "declarations" },
update: { method: "PUT", path: "declarations/:id" },
delete: { method: "DELETE", path: "declarations/:id" },
},
},
},
});
export interface AuthResponse {
accessToken: string;
refreshToken: string;
user: any;
}
// Explicit exports for convenience and to avoid undefined access
export const authApi = api.auth;
export const newsApi = api.news;
export const invoicesApi = api.invoices;
export const proformaApi = api.proforma;
export const rbacApi = api.rbac;
export const supportApi = api.support;
export const faqApi = api.faq;