@greatapps/common 1.1.659 → 1.1.660
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/handlers.mjs +33 -0
- package/dist/handlers.mjs.map +1 -0
- package/dist/http.mjs +5 -0
- package/dist/http.mjs.map +1 -0
- package/dist/infra/http/api-fetch.mjs +30 -0
- package/dist/infra/http/api-fetch.mjs.map +1 -0
- package/dist/infra/route/parse-id.mjs +12 -0
- package/dist/infra/route/parse-id.mjs.map +1 -0
- package/dist/infra/route/safe-route-handler.mjs +18 -0
- package/dist/infra/route/safe-route-handler.mjs.map +1 -0
- package/dist/infra/route/search-params.mjs +11 -0
- package/dist/infra/route/search-params.mjs.map +1 -0
- package/dist/modules/cards/handlers/find-card-by-id.handler.mjs +16 -0
- package/dist/modules/cards/handlers/find-card-by-id.handler.mjs.map +1 -0
- package/dist/modules/cards/handlers/list-cards.handler.mjs +12 -0
- package/dist/modules/cards/handlers/list-cards.handler.mjs.map +1 -0
- package/dist/modules/cards/hooks/card-by-id.hook.mjs +2 -5
- package/dist/modules/cards/hooks/card-by-id.hook.mjs.map +1 -1
- package/dist/modules/cards/hooks/cards.hook.mjs +2 -5
- package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
- package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs +15 -0
- package/dist/modules/charges/handlers/find-charge-by-id.handler.mjs.map +1 -0
- package/dist/modules/charges/handlers/list-charges.handler.mjs +15 -0
- package/dist/modules/charges/handlers/list-charges.handler.mjs.map +1 -0
- package/dist/modules/charges/hooks/charge-by-id.hook.mjs +2 -3
- package/dist/modules/charges/hooks/charge-by-id.hook.mjs.map +1 -1
- package/dist/modules/charges/hooks/charges.hook.mjs +2 -3
- package/dist/modules/charges/hooks/charges.hook.mjs.map +1 -1
- package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs +15 -0
- package/dist/modules/ia-credits/handlers/list-ia-credits.handler.mjs.map +1 -0
- package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs +5 -3
- package/dist/modules/ia-credits/hooks/ia-credits.hook.mjs.map +1 -1
- package/dist/modules/pages/handlers/count-pages.handler.mjs +14 -0
- package/dist/modules/pages/handlers/count-pages.handler.mjs.map +1 -0
- package/dist/modules/pages/hooks/count-pages.hook.mjs +3 -4
- package/dist/modules/pages/hooks/count-pages.hook.mjs.map +1 -1
- package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs +15 -0
- package/dist/modules/plans/handlers/find-plan-by-id.handler.mjs.map +1 -0
- package/dist/modules/plans/handlers/list-plans.handler.mjs +20 -0
- package/dist/modules/plans/handlers/list-plans.handler.mjs.map +1 -0
- package/dist/modules/plans/hooks/list-plans.hook.mjs +2 -3
- package/dist/modules/plans/hooks/list-plans.hook.mjs.map +1 -1
- package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs +2 -3
- package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
- package/dist/modules/projects/handlers/find-project.handler.mjs +16 -0
- package/dist/modules/projects/handlers/find-project.handler.mjs.map +1 -0
- package/dist/modules/projects/handlers/list-all-account-users.handler.mjs +17 -0
- package/dist/modules/projects/handlers/list-all-account-users.handler.mjs.map +1 -0
- package/dist/modules/projects/handlers/list-available-users.handler.mjs +20 -0
- package/dist/modules/projects/handlers/list-available-users.handler.mjs.map +1 -0
- package/dist/modules/projects/handlers/list-project-users.handler.mjs +20 -0
- package/dist/modules/projects/handlers/list-project-users.handler.mjs.map +1 -0
- package/dist/modules/projects/handlers/list-projects.handler.mjs +17 -0
- package/dist/modules/projects/handlers/list-projects.handler.mjs.map +1 -0
- package/dist/modules/projects/hooks/find-project.hook.mjs +2 -3
- package/dist/modules/projects/hooks/find-project.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-all-account-users.hook.mjs +6 -6
- package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-available-users.hook.mjs +6 -6
- package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs +6 -6
- package/dist/modules/projects/hooks/list-infinite-projects.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-project-users.hook.mjs +6 -6
- package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-projects.hook.mjs +2 -3
- package/dist/modules/projects/hooks/list-projects.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs +17 -0
- package/dist/modules/subscriptions/handlers/list-subscriptions.handler.mjs.map +1 -0
- package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs +5 -5
- package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs +5 -3
- package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
- package/dist/modules/users/handlers/list-messages.handler.mjs +36 -0
- package/dist/modules/users/handlers/list-messages.handler.mjs.map +1 -0
- package/dist/modules/users/hooks/messages.hook.mjs +7 -6
- package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
- package/dist/route.mjs +9 -0
- package/dist/route.mjs.map +1 -0
- package/package.json +14 -1
- package/src/handlers.ts +22 -0
- package/src/http.ts +1 -0
- package/src/infra/http/api-fetch.ts +39 -0
- package/src/infra/route/parse-id.ts +9 -0
- package/src/infra/route/safe-route-handler.ts +16 -0
- package/src/infra/route/search-params.ts +9 -0
- package/src/modules/cards/handlers/find-card-by-id.handler.ts +15 -0
- package/src/modules/cards/handlers/list-cards.handler.ts +10 -0
- package/src/modules/cards/hooks/card-by-id.hook.ts +4 -5
- package/src/modules/cards/hooks/cards.hook.ts +4 -5
- package/src/modules/charges/handlers/find-charge-by-id.handler.ts +14 -0
- package/src/modules/charges/handlers/list-charges.handler.ts +15 -0
- package/src/modules/charges/hooks/charge-by-id.hook.ts +5 -3
- package/src/modules/charges/hooks/charges.hook.ts +5 -4
- package/src/modules/ia-credits/handlers/list-ia-credits.handler.ts +14 -0
- package/src/modules/ia-credits/hooks/ia-credits.hook.ts +7 -3
- package/src/modules/pages/handlers/count-pages.handler.ts +12 -0
- package/src/modules/pages/hooks/count-pages.hook.ts +3 -4
- package/src/modules/plans/handlers/find-plan-by-id.handler.ts +14 -0
- package/src/modules/plans/handlers/list-plans.handler.ts +20 -0
- package/src/modules/plans/hooks/list-plans.hook.ts +2 -3
- package/src/modules/plans/hooks/use-plan-by-id.hook.ts +4 -3
- package/src/modules/projects/handlers/find-project.handler.ts +15 -0
- package/src/modules/projects/handlers/list-all-account-users.handler.ts +17 -0
- package/src/modules/projects/handlers/list-available-users.handler.ts +20 -0
- package/src/modules/projects/handlers/list-project-users.handler.ts +20 -0
- package/src/modules/projects/handlers/list-projects.handler.ts +17 -0
- package/src/modules/projects/hooks/find-project.hook.ts +3 -3
- package/src/modules/projects/hooks/list-all-account-users.hook.ts +8 -7
- package/src/modules/projects/hooks/list-available-users.hook.ts +8 -7
- package/src/modules/projects/hooks/list-infinite-projects.hook.ts +8 -7
- package/src/modules/projects/hooks/list-project-users.hook.ts +8 -7
- package/src/modules/projects/hooks/list-projects.hook.ts +3 -3
- package/src/modules/subscriptions/handlers/list-subscriptions.handler.ts +17 -0
- package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +8 -5
- package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +8 -5
- package/src/modules/users/handlers/list-messages.handler.ts +39 -0
- package/src/modules/users/hooks/messages.hook.ts +10 -8
- package/src/route.ts +3 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { createListCardsHandler } from "./modules/cards/handlers/list-cards.handler";
|
|
2
|
+
import { createFindCardByIdHandler } from "./modules/cards/handlers/find-card-by-id.handler";
|
|
3
|
+
import { createListChargesHandler } from "./modules/charges/handlers/list-charges.handler";
|
|
4
|
+
import { createFindChargeByIdHandler } from "./modules/charges/handlers/find-charge-by-id.handler";
|
|
5
|
+
import { createListIaCreditsHandler } from "./modules/ia-credits/handlers/list-ia-credits.handler";
|
|
6
|
+
import { createCountPagesHandler } from "./modules/pages/handlers/count-pages.handler";
|
|
7
|
+
import { createListPlansHandler } from "./modules/plans/handlers/list-plans.handler";
|
|
8
|
+
import { createFindPlanByIdHandler } from "./modules/plans/handlers/find-plan-by-id.handler";
|
|
9
|
+
import { createListProjectsHandler } from "./modules/projects/handlers/list-projects.handler";
|
|
10
|
+
import { createFindProjectHandler } from "./modules/projects/handlers/find-project.handler";
|
|
11
|
+
import { createListProjectUsersHandler } from "./modules/projects/handlers/list-project-users.handler";
|
|
12
|
+
import { createListAvailableUsersHandler } from "./modules/projects/handlers/list-available-users.handler";
|
|
13
|
+
import { createListAllAccountUsersHandler } from "./modules/projects/handlers/list-all-account-users.handler";
|
|
14
|
+
import { createListSubscriptionsHandler } from "./modules/subscriptions/handlers/list-subscriptions.handler";
|
|
15
|
+
import { createListMessagesHandler } from "./modules/users/handlers/list-messages.handler";
|
|
16
|
+
export {
|
|
17
|
+
createCountPagesHandler,
|
|
18
|
+
createFindCardByIdHandler,
|
|
19
|
+
createFindChargeByIdHandler,
|
|
20
|
+
createFindPlanByIdHandler,
|
|
21
|
+
createFindProjectHandler,
|
|
22
|
+
createListAllAccountUsersHandler,
|
|
23
|
+
createListAvailableUsersHandler,
|
|
24
|
+
createListCardsHandler,
|
|
25
|
+
createListChargesHandler,
|
|
26
|
+
createListIaCreditsHandler,
|
|
27
|
+
createListMessagesHandler,
|
|
28
|
+
createListPlansHandler,
|
|
29
|
+
createListProjectUsersHandler,
|
|
30
|
+
createListProjectsHandler,
|
|
31
|
+
createListSubscriptionsHandler
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=handlers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/handlers.ts"],"sourcesContent":["export { createListCardsHandler } from './modules/cards/handlers/list-cards.handler';\nexport { createFindCardByIdHandler } from './modules/cards/handlers/find-card-by-id.handler';\n\nexport { createListChargesHandler } from './modules/charges/handlers/list-charges.handler';\nexport { createFindChargeByIdHandler } from './modules/charges/handlers/find-charge-by-id.handler';\n\nexport { createListIaCreditsHandler } from './modules/ia-credits/handlers/list-ia-credits.handler';\n\nexport { createCountPagesHandler } from './modules/pages/handlers/count-pages.handler';\n\nexport { createListPlansHandler } from './modules/plans/handlers/list-plans.handler';\nexport { createFindPlanByIdHandler } from './modules/plans/handlers/find-plan-by-id.handler';\n\nexport { createListProjectsHandler } from './modules/projects/handlers/list-projects.handler';\nexport { createFindProjectHandler } from './modules/projects/handlers/find-project.handler';\nexport { createListProjectUsersHandler } from './modules/projects/handlers/list-project-users.handler';\nexport { createListAvailableUsersHandler } from './modules/projects/handlers/list-available-users.handler';\nexport { createListAllAccountUsersHandler } from './modules/projects/handlers/list-all-account-users.handler';\n\nexport { createListSubscriptionsHandler } from './modules/subscriptions/handlers/list-subscriptions.handler';\n\nexport { createListMessagesHandler } from './modules/users/handlers/list-messages.handler';\n"],"mappings":"AAAA,SAAS,8BAA8B;AACvC,SAAS,iCAAiC;AAE1C,SAAS,gCAAgC;AACzC,SAAS,mCAAmC;AAE5C,SAAS,kCAAkC;AAE3C,SAAS,+BAA+B;AAExC,SAAS,8BAA8B;AACvC,SAAS,iCAAiC;AAE1C,SAAS,iCAAiC;AAC1C,SAAS,gCAAgC;AACzC,SAAS,qCAAqC;AAC9C,SAAS,uCAAuC;AAChD,SAAS,wCAAwC;AAEjD,SAAS,sCAAsC;AAE/C,SAAS,iCAAiC;","names":[]}
|
package/dist/http.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/http.ts"],"sourcesContent":["export { apiFetch } from './infra/http/api-fetch';\n"],"mappings":"AAAA,SAAS,gBAAgB;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { buildQueryParams } from "../utils/params";
|
|
2
|
+
async function apiFetch(path, options = {}) {
|
|
3
|
+
const { params, signal } = options;
|
|
4
|
+
const qs = params ? buildQueryParams(params) : "";
|
|
5
|
+
const url = qs ? `${path}?${qs}` : path;
|
|
6
|
+
const response = await fetch(url, {
|
|
7
|
+
method: "GET",
|
|
8
|
+
credentials: "same-origin",
|
|
9
|
+
headers: { Accept: "application/json" },
|
|
10
|
+
signal
|
|
11
|
+
});
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
let message = `Erro ${response.status}`;
|
|
14
|
+
try {
|
|
15
|
+
const body2 = await response.json();
|
|
16
|
+
if (body2 && !body2.success && body2.error) message = body2.error;
|
|
17
|
+
} catch {
|
|
18
|
+
}
|
|
19
|
+
throw new Error(message);
|
|
20
|
+
}
|
|
21
|
+
const body = await response.json();
|
|
22
|
+
if (!body.success) {
|
|
23
|
+
throw new Error(body.error ?? "Erro desconhecido");
|
|
24
|
+
}
|
|
25
|
+
return body.data;
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
apiFetch
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=api-fetch.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/infra/http/api-fetch.ts"],"sourcesContent":["import { buildQueryParams } from '../utils/params';\nimport type { ActionResult } from '../api/types';\n\ntype QueryParams = Parameters<typeof buildQueryParams>[0];\n\ninterface ApiFetchOptions {\n params?: object;\n signal?: AbortSignal;\n}\n\nexport async function apiFetch<T>(path: string, options: ApiFetchOptions = {}): Promise<T> {\n const { params, signal } = options;\n const qs = params ? buildQueryParams(params as QueryParams) : '';\n const url = qs ? `${path}?${qs}` : path;\n\n const response = await fetch(url, {\n method: 'GET',\n credentials: 'same-origin',\n headers: { Accept: 'application/json' },\n signal,\n });\n\n if (!response.ok) {\n let message = `Erro ${response.status}`;\n try {\n const body = (await response.json()) as ActionResult<unknown>;\n if (body && !body.success && body.error) message = body.error;\n } catch {\n // corpo não-JSON — mantém a mensagem genérica\n }\n throw new Error(message);\n }\n\n const body = (await response.json()) as ActionResult<T>;\n if (!body.success) {\n throw new Error(body.error ?? 'Erro desconhecido');\n }\n return body.data as T;\n}\n"],"mappings":"AAAA,SAAS,wBAAwB;AAUjC,eAAsB,SAAY,MAAc,UAA2B,CAAC,GAAe;AACzF,QAAM,EAAE,QAAQ,OAAO,IAAI;AAC3B,QAAM,KAAK,SAAS,iBAAiB,MAAqB,IAAI;AAC9D,QAAM,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,KAAK;AAEnC,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS,EAAE,QAAQ,mBAAmB;AAAA,IACtC;AAAA,EACF,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,QAAI,UAAU,QAAQ,SAAS,MAAM;AACrC,QAAI;AACF,YAAMA,QAAQ,MAAM,SAAS,KAAK;AAClC,UAAIA,SAAQ,CAACA,MAAK,WAAWA,MAAK,MAAO,WAAUA,MAAK;AAAA,IAC1D,QAAQ;AAAA,IAER;AACA,UAAM,IAAI,MAAM,OAAO;AAAA,EACzB;AAEA,QAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,MAAI,CAAC,KAAK,SAAS;AACjB,UAAM,IAAI,MAAM,KAAK,SAAS,mBAAmB;AAAA,EACnD;AACA,SAAO,KAAK;AACd;","names":["body"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ApiError } from "../api/types";
|
|
2
|
+
function parseId(value) {
|
|
3
|
+
const id = Number(value);
|
|
4
|
+
if (!Number.isFinite(id) || id <= 0) {
|
|
5
|
+
throw new ApiError("Identificador inv\xE1lido", "INVALID_ID", 400);
|
|
6
|
+
}
|
|
7
|
+
return id;
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
parseId
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=parse-id.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/infra/route/parse-id.ts"],"sourcesContent":["import { ApiError } from '../api/types';\n\nexport function parseId(value: string): number {\n const id = Number(value);\n if (!Number.isFinite(id) || id <= 0) {\n throw new ApiError('Identificador inválido', 'INVALID_ID', 400);\n }\n return id;\n}\n"],"mappings":"AAAA,SAAS,gBAAgB;AAElB,SAAS,QAAQ,OAAuB;AAC7C,QAAM,KAAK,OAAO,KAAK;AACvB,MAAI,CAAC,OAAO,SAAS,EAAE,KAAK,MAAM,GAAG;AACnC,UAAM,IAAI,SAAS,6BAA0B,cAAc,GAAG;AAAA,EAChE;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { ApiError } from "../api/types";
|
|
3
|
+
async function safeRouteHandler(fn) {
|
|
4
|
+
try {
|
|
5
|
+
const data = await fn();
|
|
6
|
+
return Response.json({ success: true, data });
|
|
7
|
+
} catch (error) {
|
|
8
|
+
if (error instanceof ApiError) {
|
|
9
|
+
return Response.json({ success: false, error: error.message }, { status: error.statusCode });
|
|
10
|
+
}
|
|
11
|
+
console.error("[safeRouteHandler] erro inesperado", error);
|
|
12
|
+
return Response.json({ success: false, error: "Erro interno do servidor" }, { status: 500 });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
safeRouteHandler
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=safe-route-handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/infra/route/safe-route-handler.ts"],"sourcesContent":["import 'server-only';\n\nimport { ApiError } from '../api/types';\n\nexport async function safeRouteHandler<T>(fn: () => Promise<T>): Promise<Response> {\n try {\n const data = await fn();\n return Response.json({ success: true, data });\n } catch (error) {\n if (error instanceof ApiError) {\n return Response.json({ success: false, error: error.message }, { status: error.statusCode });\n }\n console.error('[safeRouteHandler] erro inesperado', error);\n return Response.json({ success: false, error: 'Erro interno do servidor' }, { status: 500 });\n }\n}\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,gBAAgB;AAEzB,eAAsB,iBAAoB,IAAyC;AACjF,MAAI;AACF,UAAM,OAAO,MAAM,GAAG;AACtB,WAAO,SAAS,KAAK,EAAE,SAAS,MAAM,KAAK,CAAC;AAAA,EAC9C,SAAS,OAAO;AACd,QAAI,iBAAiB,UAAU;AAC7B,aAAO,SAAS,KAAK,EAAE,SAAS,OAAO,OAAO,MAAM,QAAQ,GAAG,EAAE,QAAQ,MAAM,WAAW,CAAC;AAAA,IAC7F;AACA,YAAQ,MAAM,sCAAsC,KAAK;AACzD,WAAO,SAAS,KAAK,EAAE,SAAS,OAAO,OAAO,2BAA2B,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC7F;AACF;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function searchParamsToParams(searchParams) {
|
|
2
|
+
const params = /* @__PURE__ */ Object.create(null);
|
|
3
|
+
for (const [key, value] of searchParams.entries()) {
|
|
4
|
+
params[key] = value;
|
|
5
|
+
}
|
|
6
|
+
return params;
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
searchParamsToParams
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=search-params.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/infra/route/search-params.ts"],"sourcesContent":["export function searchParamsToParams<T extends object>(\n searchParams: URLSearchParams\n): Partial<T> {\n const params = Object.create(null) as Partial<Record<keyof T, string>>;\n for (const [key, value] of searchParams.entries()) {\n params[key as keyof T] = value;\n }\n return params as Partial<T>;\n}\n"],"mappings":"AAAO,SAAS,qBACd,cACY;AACZ,QAAM,SAAS,uBAAO,OAAO,IAAI;AACjC,aAAW,CAAC,KAAK,KAAK,KAAK,aAAa,QAAQ,GAAG;AACjD,WAAO,GAAc,IAAI;AAAA,EAC3B;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { parseId } from "../../../infra/route/parse-id";
|
|
3
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
4
|
+
import { cardsService } from "../services/cards.service";
|
|
5
|
+
function createFindCardByIdHandler() {
|
|
6
|
+
return async function GET(_req, { params }) {
|
|
7
|
+
return safeRouteHandler(async () => {
|
|
8
|
+
const { id } = await params;
|
|
9
|
+
return cardsService.findCardById(parseId(id));
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
createFindCardByIdHandler
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=find-card-by-id.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/cards/handlers/find-card-by-id.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { parseId } from '../../../infra/route/parse-id';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { cardsService } from '../services/cards.service';\n\nexport function createFindCardByIdHandler() {\n return async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {\n return safeRouteHandler(async () => {\n const { id } = await params;\n return cardsService.findCardById(parseId(id));\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,eAAe;AACxB,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAEtB,SAAS,4BAA4B;AAC1C,SAAO,eAAe,IAAI,MAAmB,EAAE,OAAO,GAAwC;AAC5F,WAAO,iBAAiB,YAAY;AAClC,YAAM,EAAE,GAAG,IAAI,MAAM;AACrB,aAAO,aAAa,aAAa,QAAQ,EAAE,CAAC;AAAA,IAC9C,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { cardsService } from "../services/cards.service";
|
|
4
|
+
function createListCardsHandler() {
|
|
5
|
+
return async function GET() {
|
|
6
|
+
return safeRouteHandler(() => cardsService.listCards());
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
createListCardsHandler
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=list-cards.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/cards/handlers/list-cards.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { cardsService } from '../services/cards.service';\n\nexport function createListCardsHandler() {\n return async function GET() {\n return safeRouteHandler(() => cardsService.listCards());\n };\n}\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAEtB,SAAS,yBAAyB;AACvC,SAAO,eAAe,MAAM;AAC1B,WAAO,iBAAiB,MAAM,aAAa,UAAU,CAAC;AAAA,EACxD;AACF;","names":[]}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
4
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
5
5
|
function useCardById(id) {
|
|
6
6
|
const cardKey = useAuthQueryKey(["card", id]);
|
|
7
7
|
return useQuery({
|
|
8
8
|
queryKey: cardKey,
|
|
9
|
-
queryFn:
|
|
10
|
-
const { findCardByIdAction } = await import("../actions/find-card-by-id.action");
|
|
11
|
-
return withAction(findCardByIdAction)(id);
|
|
12
|
-
},
|
|
9
|
+
queryFn: ({ signal }) => apiFetch(`/api/cards/${id}`, { signal }),
|
|
13
10
|
enabled: id != null
|
|
14
11
|
});
|
|
15
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/cards/hooks/card-by-id.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/cards/hooks/card-by-id.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { SuccessResult } from '../../../infra/api/types';\nimport type { Card } from '../types';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport function useCardById(id: number | undefined) {\n const cardKey = useAuthQueryKey(['card', id]);\n\n return useQuery({\n queryKey: cardKey,\n queryFn: ({ signal }) => apiFetch<SuccessResult<Card>>(`/api/cards/${id}`, { signal }),\n enabled: id != null,\n });\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAGzB,SAAS,uBAAuB;AAEzB,SAAS,YAAY,IAAwB;AAClD,QAAM,UAAU,gBAAgB,CAAC,QAAQ,EAAE,CAAC;AAE5C,SAAO,SAAS;AAAA,IACd,UAAU;AAAA,IACV,SAAS,CAAC,EAAE,OAAO,MAAM,SAA8B,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC;AAAA,IACrF,SAAS,MAAM;AAAA,EACjB,CAAC;AACH;","names":[]}
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
4
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
5
5
|
const CARDS_QUERY_KEY = ["cards"];
|
|
6
6
|
function useCards() {
|
|
7
7
|
const queryKey = useAuthQueryKey([...CARDS_QUERY_KEY]);
|
|
8
8
|
return useQuery({
|
|
9
9
|
queryKey,
|
|
10
|
-
queryFn:
|
|
11
|
-
const { listCardsAction } = await import("../actions/list-cards.action");
|
|
12
|
-
return withAction(listCardsAction)();
|
|
13
|
-
},
|
|
10
|
+
queryFn: ({ signal }) => apiFetch("/api/cards", { signal }),
|
|
14
11
|
select: (result) => ({
|
|
15
12
|
...result,
|
|
16
13
|
data: result.data.filter((card) => !card.deleted)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/cards/hooks/cards.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/cards/hooks/cards.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { PaginatedSuccessResult } from '../../../infra/api/types';\nimport type { Card } from '../types';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport const CARDS_QUERY_KEY = ['cards'] as const;\n\nexport function useCards() {\n const queryKey = useAuthQueryKey([...CARDS_QUERY_KEY]);\n\n return useQuery({\n queryKey,\n queryFn: ({ signal }) => apiFetch<PaginatedSuccessResult<Card>>('/api/cards', { signal }),\n select: (result) => ({\n ...result,\n data: result.data.filter((card) => !card.deleted),\n }),\n });\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAGzB,SAAS,uBAAuB;AAEzB,MAAM,kBAAkB,CAAC,OAAO;AAEhC,SAAS,WAAW;AACzB,QAAM,WAAW,gBAAgB,CAAC,GAAG,eAAe,CAAC;AAErD,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MAAM,SAAuC,cAAc,EAAE,OAAO,CAAC;AAAA,IACxF,QAAQ,CAAC,YAAY;AAAA,MACnB,GAAG;AAAA,MACH,MAAM,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO;AAAA,IAClD;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { chargesService } from "../services/charges.service";
|
|
4
|
+
function createFindChargeByIdHandler() {
|
|
5
|
+
return async function GET(_req, { params }) {
|
|
6
|
+
return safeRouteHandler(async () => {
|
|
7
|
+
const { id } = await params;
|
|
8
|
+
return chargesService.findChargeById(id);
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
createFindChargeByIdHandler
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=find-charge-by-id.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/charges/handlers/find-charge-by-id.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { chargesService } from '../services/charges.service';\n\nexport function createFindChargeByIdHandler() {\n return async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {\n return safeRouteHandler(async () => {\n const { id } = await params;\n return chargesService.findChargeById(id);\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAExB,SAAS,8BAA8B;AAC5C,SAAO,eAAe,IAAI,MAAmB,EAAE,OAAO,GAAwC;AAC5F,WAAO,iBAAiB,YAAY;AAClC,YAAM,EAAE,GAAG,IAAI,MAAM;AACrB,aAAO,eAAe,eAAe,EAAE;AAAA,IACzC,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { searchParamsToParams } from "../../../infra/route/search-params";
|
|
4
|
+
import { chargesService } from "../services/charges.service";
|
|
5
|
+
function createListChargesHandler() {
|
|
6
|
+
return async function GET(req) {
|
|
7
|
+
return safeRouteHandler(
|
|
8
|
+
() => chargesService.listCharges(searchParamsToParams(req.nextUrl.searchParams))
|
|
9
|
+
);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
createListChargesHandler
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=list-charges.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/charges/handlers/list-charges.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { searchParamsToParams } from '../../../infra/route/search-params';\nimport { chargesService } from '../services/charges.service';\nimport type { FindChargesParams } from '../types/charge.type';\n\nexport function createListChargesHandler() {\n return async function GET(req: NextRequest) {\n return safeRouteHandler(() =>\n chargesService.listCharges(searchParamsToParams<FindChargesParams>(req.nextUrl.searchParams))\n );\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,sBAAsB;AAGxB,SAAS,2BAA2B;AACzC,SAAO,eAAe,IAAI,KAAkB;AAC1C,WAAO;AAAA,MAAiB,MACtB,eAAe,YAAY,qBAAwC,IAAI,QAAQ,YAAY,CAAC;AAAA,IAC9F;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
4
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
5
|
-
import { findChargeByIdAction } from "../actions/find-charge-by-id.action";
|
|
6
5
|
import { CHARGES_QUERY_KEY } from "../../subscriptions/constants/query-keys.constants";
|
|
7
6
|
function useChargeById(chargeId) {
|
|
8
7
|
const chargesKey = useAuthQueryKey([...CHARGES_QUERY_KEY, chargeId]);
|
|
9
8
|
return useQuery({
|
|
10
9
|
queryKey: chargesKey,
|
|
11
|
-
queryFn: () =>
|
|
10
|
+
queryFn: ({ signal }) => apiFetch(`/api/charges/${chargeId}`, { signal }),
|
|
12
11
|
enabled: !!chargeId
|
|
13
12
|
});
|
|
14
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/charges/hooks/charge-by-id.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/charges/hooks/charge-by-id.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { SuccessResult } from '../../../infra/api/types';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\nimport { Charge } from '../types/charge.type';\nimport { CHARGES_QUERY_KEY } from '../../subscriptions/constants/query-keys.constants';\n\nexport function useChargeById(chargeId: string | number | null | undefined) {\n const chargesKey = useAuthQueryKey([...CHARGES_QUERY_KEY, chargeId]);\n\n return useQuery({\n queryKey: chargesKey,\n queryFn: ({ signal }) =>\n apiFetch<SuccessResult<Charge>>(`/api/charges/${chargeId}`, { signal }),\n enabled: !!chargeId,\n });\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAEzB,SAAS,uBAAuB;AAEhC,SAAS,yBAAyB;AAE3B,SAAS,cAAc,UAA8C;AAC1E,QAAM,aAAa,gBAAgB,CAAC,GAAG,mBAAmB,QAAQ,CAAC;AAEnE,SAAO,SAAS;AAAA,IACd,UAAU;AAAA,IACV,SAAS,CAAC,EAAE,OAAO,MACjB,SAAgC,gBAAgB,QAAQ,IAAI,EAAE,OAAO,CAAC;AAAA,IACxE,SAAS,CAAC,CAAC;AAAA,EACb,CAAC;AACH;","names":[]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
4
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
5
|
-
import { listChargesAction } from "../actions/list-charges.action";
|
|
6
5
|
import { CHARGES_QUERY_KEY } from "../../subscriptions/constants/query-keys.constants";
|
|
7
6
|
function useCharges(params) {
|
|
8
7
|
const chargesKey = useAuthQueryKey([...CHARGES_QUERY_KEY, params]);
|
|
9
8
|
return useQuery({
|
|
10
9
|
queryKey: chargesKey,
|
|
11
|
-
queryFn: () =>
|
|
10
|
+
queryFn: ({ signal }) => apiFetch("/api/charges", { params, signal }),
|
|
12
11
|
staleTime: 1e4
|
|
13
12
|
});
|
|
14
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/charges/hooks/charges.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/charges/hooks/charges.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { PaginatedSuccessResult } from '../../../infra/api/types';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\nimport { Charge, FindChargesParams } from '../types/charge.type';\nimport { CHARGES_QUERY_KEY } from '../../subscriptions/constants/query-keys.constants';\n\nexport function useCharges(params?: Partial<FindChargesParams>) {\n const chargesKey = useAuthQueryKey([...CHARGES_QUERY_KEY, params]);\n\n return useQuery({\n queryKey: chargesKey,\n queryFn: ({ signal }) =>\n apiFetch<PaginatedSuccessResult<Charge>>('/api/charges', { params, signal }),\n staleTime: 10_000,\n });\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAEzB,SAAS,uBAAuB;AAEhC,SAAS,yBAAyB;AAE3B,SAAS,WAAW,QAAqC;AAC9D,QAAM,aAAa,gBAAgB,CAAC,GAAG,mBAAmB,MAAM,CAAC;AAEjE,SAAO,SAAS;AAAA,IACd,UAAU;AAAA,IACV,SAAS,CAAC,EAAE,OAAO,MACjB,SAAyC,gBAAgB,EAAE,QAAQ,OAAO,CAAC;AAAA,IAC7E,WAAW;AAAA,EACb,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { iaCreditsService } from "../services/ia-credits.service";
|
|
4
|
+
function createListIaCreditsHandler() {
|
|
5
|
+
return async function GET(_req, { params }) {
|
|
6
|
+
return safeRouteHandler(async () => {
|
|
7
|
+
const { id } = await params;
|
|
8
|
+
return iaCreditsService.listOperations(id);
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
createListIaCreditsHandler
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=list-ia-credits.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/ia-credits/handlers/list-ia-credits.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { iaCreditsService } from '../services/ia-credits.service';\n\nexport function createListIaCreditsHandler() {\n return async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {\n return safeRouteHandler(async () => {\n const { id } = await params;\n return iaCreditsService.listOperations(id);\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AAE1B,SAAS,6BAA6B;AAC3C,SAAO,eAAe,IAAI,MAAmB,EAAE,OAAO,GAAwC;AAC5F,WAAO,iBAAiB,YAAY;AAClC,YAAM,EAAE,GAAG,IAAI,MAAM;AACrB,aAAO,iBAAiB,eAAe,EAAE;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
import { useQuery } from "@tanstack/react-query";
|
|
4
|
-
import {
|
|
4
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
5
5
|
import { useActiveSubscription } from "../../subscriptions/hooks/find-active-subscription.hook";
|
|
6
|
-
import { withAction } from "../../../utils/withAction";
|
|
7
6
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
8
7
|
function calculateSummary(operations) {
|
|
9
8
|
const today = /* @__PURE__ */ new Date();
|
|
@@ -56,7 +55,10 @@ function useIaCredits() {
|
|
|
56
55
|
const queryKey = useAuthQueryKey(["ia-credits", subscriptionId]);
|
|
57
56
|
const query = useQuery({
|
|
58
57
|
queryKey,
|
|
59
|
-
queryFn:
|
|
58
|
+
queryFn: ({ signal }) => apiFetch(
|
|
59
|
+
`/api/subscriptions/${subscriptionId}/ia-credits`,
|
|
60
|
+
{ signal }
|
|
61
|
+
),
|
|
60
62
|
enabled: subscriptionId != null
|
|
61
63
|
});
|
|
62
64
|
const operations = query.data?.data ?? [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/ia-credits/hooks/ia-credits.hook.ts"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/ia-credits/hooks/ia-credits.hook.ts"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { PaginatedSuccessResult } from '../../../infra/api/types';\nimport type { IaCreditOperation, IaCreditsSummary } from '../types';\nimport { useActiveSubscription } from '../../subscriptions/hooks/find-active-subscription.hook';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nfunction calculateSummary(operations: IaCreditOperation[]): IaCreditsSummary {\n const today = new Date();\n const todayDate = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n\n const adds = operations.filter((op) => op.operation === 'add');\n const subtracts = operations.filter((op) => op.operation === 'subtract');\n\n let totalCredits = 0;\n let usedCredits = 0;\n let nextExpirationInDays: number | null = null;\n let nextExpiringCredits: number | null = null;\n\n for (const add of adds) {\n const expirationRaw = add.expiration_time;\n if (!expirationRaw) continue;\n\n const expiration = new Date(expirationRaw);\n const expirationDate = new Date(\n expiration.getFullYear(),\n expiration.getMonth(),\n expiration.getDate()\n );\n\n const expiredByDate = expirationDate.getTime() < todayDate.getTime();\n const hasExpired = add.has_expired || expiredByDate;\n\n if (hasExpired) continue;\n\n const addedCredits = add.operation_value;\n\n const consumedForAdd = subtracts\n .filter((sub) => String(sub.consumed_from_add_id) === String(add.id))\n .reduce((sum, sub) => sum + sub.operation_value, 0);\n\n const remainingForAdd = Math.max(0, addedCredits - consumedForAdd);\n\n totalCredits += addedCredits;\n usedCredits += consumedForAdd;\n\n const diffMs = expirationDate.getTime() - todayDate.getTime();\n const days = Math.max(0, Math.ceil(diffMs / (1000 * 60 * 60 * 24)));\n\n if (remainingForAdd > 0) {\n if (nextExpirationInDays === null || days < nextExpirationInDays) {\n nextExpirationInDays = days;\n nextExpiringCredits = remainingForAdd;\n }\n }\n }\n\n const availableCredits = Math.max(0, totalCredits - usedCredits);\n\n return {\n totalCredits,\n usedCredits,\n availableCredits,\n nextExpiringCredits,\n nextExpirationInDays,\n };\n}\n\nexport function useIaCredits() {\n const { data: subscriptionData, isPending: isSubscriptionLoading } = useActiveSubscription();\n const subscription = subscriptionData?.data?.[0] ?? null;\n const subscriptionId = subscription?.id;\n const queryKey = useAuthQueryKey(['ia-credits', subscriptionId]);\n\n const query = useQuery({\n queryKey,\n queryFn: ({ signal }) =>\n apiFetch<PaginatedSuccessResult<IaCreditOperation>>(\n `/api/subscriptions/${subscriptionId}/ia-credits`,\n { signal }\n ),\n enabled: subscriptionId != null,\n });\n\n const operations = query.data?.data ?? [];\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const summary = useMemo(() => calculateSummary(operations), [operations]);\n\n return {\n subscription,\n operations,\n summary,\n isLoading: isSubscriptionLoading || query.isPending,\n isSubscriptionLoading,\n isCreditsLoading: query.isPending,\n isError: query.isError,\n error: query.error,\n };\n}\n"],"mappings":";AAEA,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAGzB,SAAS,6BAA6B;AACtC,SAAS,uBAAuB;AAEhC,SAAS,iBAAiB,YAAmD;AAC3E,QAAM,QAAQ,oBAAI,KAAK;AACvB,QAAM,YAAY,IAAI,KAAK,MAAM,YAAY,GAAG,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC;AAEjF,QAAM,OAAO,WAAW,OAAO,CAAC,OAAO,GAAG,cAAc,KAAK;AAC7D,QAAM,YAAY,WAAW,OAAO,CAAC,OAAO,GAAG,cAAc,UAAU;AAEvE,MAAI,eAAe;AACnB,MAAI,cAAc;AAClB,MAAI,uBAAsC;AAC1C,MAAI,sBAAqC;AAEzC,aAAW,OAAO,MAAM;AACtB,UAAM,gBAAgB,IAAI;AAC1B,QAAI,CAAC,cAAe;AAEpB,UAAM,aAAa,IAAI,KAAK,aAAa;AACzC,UAAM,iBAAiB,IAAI;AAAA,MACzB,WAAW,YAAY;AAAA,MACvB,WAAW,SAAS;AAAA,MACpB,WAAW,QAAQ;AAAA,IACrB;AAEA,UAAM,gBAAgB,eAAe,QAAQ,IAAI,UAAU,QAAQ;AACnE,UAAM,aAAa,IAAI,eAAe;AAEtC,QAAI,WAAY;AAEhB,UAAM,eAAe,IAAI;AAEzB,UAAM,iBAAiB,UACpB,OAAO,CAAC,QAAQ,OAAO,IAAI,oBAAoB,MAAM,OAAO,IAAI,EAAE,CAAC,EACnE,OAAO,CAAC,KAAK,QAAQ,MAAM,IAAI,iBAAiB,CAAC;AAEpD,UAAM,kBAAkB,KAAK,IAAI,GAAG,eAAe,cAAc;AAEjE,oBAAgB;AAChB,mBAAe;AAEf,UAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,QAAQ;AAC5D,UAAM,OAAO,KAAK,IAAI,GAAG,KAAK,KAAK,UAAU,MAAO,KAAK,KAAK,GAAG,CAAC;AAElE,QAAI,kBAAkB,GAAG;AACvB,UAAI,yBAAyB,QAAQ,OAAO,sBAAsB;AAChE,+BAAuB;AACvB,8BAAsB;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,mBAAmB,KAAK,IAAI,GAAG,eAAe,WAAW;AAE/D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,eAAe;AAC7B,QAAM,EAAE,MAAM,kBAAkB,WAAW,sBAAsB,IAAI,sBAAsB;AAC3F,QAAM,eAAe,kBAAkB,OAAO,CAAC,KAAK;AACpD,QAAM,iBAAiB,cAAc;AACrC,QAAM,WAAW,gBAAgB,CAAC,cAAc,cAAc,CAAC;AAE/D,QAAM,QAAQ,SAAS;AAAA,IACrB;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MACjB;AAAA,MACE,sBAAsB,cAAc;AAAA,MACpC,EAAE,OAAO;AAAA,IACX;AAAA,IACF,SAAS,kBAAkB;AAAA,EAC7B,CAAC;AAED,QAAM,aAAa,MAAM,MAAM,QAAQ,CAAC;AAGxC,QAAM,UAAU,QAAQ,MAAM,iBAAiB,UAAU,GAAG,CAAC,UAAU,CAAC;AAExE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,yBAAyB,MAAM;AAAA,IAC1C;AAAA,IACA,kBAAkB,MAAM;AAAA,IACxB,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,EACf;AACF;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { pagesService } from "../services/pages.service";
|
|
4
|
+
function createCountPagesHandler() {
|
|
5
|
+
return async function GET() {
|
|
6
|
+
return safeRouteHandler(async () => ({
|
|
7
|
+
total: await pagesService.countPages()
|
|
8
|
+
}));
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
createCountPagesHandler
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=count-pages.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/pages/handlers/count-pages.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { pagesService } from '../services/pages.service';\n\nexport function createCountPagesHandler() {\n return async function GET() {\n return safeRouteHandler(async () => ({\n total: await pagesService.countPages(),\n }));\n };\n}\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAEtB,SAAS,0BAA0B;AACxC,SAAO,eAAe,MAAM;AAC1B,WAAO,iBAAiB,aAAa;AAAA,MACnC,OAAO,MAAM,aAAa,WAAW;AAAA,IACvC,EAAE;AAAA,EACJ;AACF;","names":[]}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
4
4
|
import { PAGES_QUERY_KEY } from "../constants/query-keys.constants";
|
|
5
|
-
import { withAction } from "../../../utils/withAction";
|
|
6
5
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
7
6
|
const COUNT_PAGES_QUERY_KEY = [...PAGES_QUERY_KEY, "count"];
|
|
8
7
|
function useCountPages() {
|
|
9
8
|
const queryKey = useAuthQueryKey([...COUNT_PAGES_QUERY_KEY]);
|
|
10
9
|
return useQuery({
|
|
11
10
|
queryKey,
|
|
12
|
-
queryFn: async () => {
|
|
13
|
-
const result = await
|
|
11
|
+
queryFn: async ({ signal }) => {
|
|
12
|
+
const result = await apiFetch("/api/pages/count", { signal });
|
|
14
13
|
return result.total;
|
|
15
14
|
},
|
|
16
15
|
staleTime: 3e4
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/pages/hooks/count-pages.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/pages/hooks/count-pages.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport { PAGES_QUERY_KEY } from '../constants/query-keys.constants';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport const COUNT_PAGES_QUERY_KEY = [...PAGES_QUERY_KEY, 'count'] as const;\n\nexport function useCountPages() {\n const queryKey = useAuthQueryKey([...COUNT_PAGES_QUERY_KEY]);\n\n return useQuery({\n queryKey,\n queryFn: async ({ signal }) => {\n const result = await apiFetch<{ total: number }>('/api/pages/count', { signal });\n return result.total;\n },\n staleTime: 30_000,\n });\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAEzB,MAAM,wBAAwB,CAAC,GAAG,iBAAiB,OAAO;AAE1D,SAAS,gBAAgB;AAC9B,QAAM,WAAW,gBAAgB,CAAC,GAAG,qBAAqB,CAAC;AAE3D,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,OAAO,EAAE,OAAO,MAAM;AAC7B,YAAM,SAAS,MAAM,SAA4B,oBAAoB,EAAE,OAAO,CAAC;AAC/E,aAAO,OAAO;AAAA,IAChB;AAAA,IACA,WAAW;AAAA,EACb,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { plansService } from "../services/plans.service";
|
|
4
|
+
function createFindPlanByIdHandler() {
|
|
5
|
+
return async function GET(_req, { params }) {
|
|
6
|
+
return safeRouteHandler(async () => {
|
|
7
|
+
const { id } = await params;
|
|
8
|
+
return plansService.findById(id);
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
createFindPlanByIdHandler
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=find-plan-by-id.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/plans/handlers/find-plan-by-id.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport type { NextRequest } from 'next/server';\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { plansService } from '../services/plans.service';\n\nexport function createFindPlanByIdHandler() {\n return async function GET(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {\n return safeRouteHandler(async () => {\n const { id } = await params;\n return plansService.findById(id);\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAGP,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAEtB,SAAS,4BAA4B;AAC1C,SAAO,eAAe,IAAI,MAAmB,EAAE,OAAO,GAAwC;AAC5F,WAAO,iBAAiB,YAAY;AAClC,YAAM,EAAE,GAAG,IAAI,MAAM;AACrB,aAAO,aAAa,SAAS,EAAE;AAAA,IACjC,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
3
|
+
import { plansService } from "../services/plans.service";
|
|
4
|
+
function createListPlansHandler() {
|
|
5
|
+
return async function GET() {
|
|
6
|
+
return safeRouteHandler(async () => {
|
|
7
|
+
const { data: apiPlans } = await plansService.listPlans({
|
|
8
|
+
active: true,
|
|
9
|
+
search: "client",
|
|
10
|
+
sort: "id:ASC"
|
|
11
|
+
});
|
|
12
|
+
if (!apiPlans?.length) return [];
|
|
13
|
+
return [...apiPlans].sort((a, b) => a.value - b.value);
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
createListPlansHandler
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=list-plans.handler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/plans/handlers/list-plans.handler.ts"],"sourcesContent":["import 'server-only';\n\nimport { safeRouteHandler } from '../../../infra/route/safe-route-handler';\nimport { plansService } from '../services/plans.service';\n\nexport function createListPlansHandler() {\n return async function GET() {\n return safeRouteHandler(async () => {\n const { data: apiPlans } = await plansService.listPlans({\n active: true,\n search: 'client',\n sort: 'id:ASC',\n });\n\n if (!apiPlans?.length) return [];\n\n return [...apiPlans].sort((a, b) => a.value - b.value);\n });\n };\n}\n"],"mappings":"AAAA,OAAO;AAEP,SAAS,wBAAwB;AACjC,SAAS,oBAAoB;AAEtB,SAAS,yBAAyB;AACvC,SAAO,eAAe,MAAM;AAC1B,WAAO,iBAAiB,YAAY;AAClC,YAAM,EAAE,MAAM,SAAS,IAAI,MAAM,aAAa,UAAU;AAAA,QACtD,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,MAAM;AAAA,MACR,CAAC;AAED,UAAI,CAAC,UAAU,OAAQ,QAAO,CAAC;AAE/B,aAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAA,IACvD,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import { listPlansAction } from "../actions/list-plans.action";
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
5
4
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
6
5
|
const PLANS_QUERY_KEY = ["plans"];
|
|
7
6
|
function usePlans() {
|
|
8
7
|
const queryKey = useAuthQueryKey([...PLANS_QUERY_KEY]);
|
|
9
8
|
return useQuery({
|
|
10
9
|
queryKey,
|
|
11
|
-
queryFn:
|
|
10
|
+
queryFn: ({ signal }) => apiFetch("/api/plans", { signal }),
|
|
12
11
|
staleTime: Infinity,
|
|
13
12
|
gcTime: Infinity,
|
|
14
13
|
refetchOnWindowFocus: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/plans/hooks/list-plans.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/plans/hooks/list-plans.hook.ts"],"sourcesContent":["'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from '../../../infra/http/api-fetch';\nimport type { Plan } from '../types/plan.type';\nimport { useAuthQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport const PLANS_QUERY_KEY = ['plans'] as const;\n\nexport function usePlans() {\n const queryKey = useAuthQueryKey([...PLANS_QUERY_KEY]);\n\n return useQuery<Plan[]>({\n queryKey,\n queryFn: ({ signal }) => apiFetch<Plan[]>('/api/plans', { signal }),\n staleTime: Infinity,\n gcTime: Infinity,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: false,\n retry: 1,\n });\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAEzB,SAAS,uBAAuB;AAEzB,MAAM,kBAAkB,CAAC,OAAO;AAEhC,SAAS,WAAW;AACzB,QAAM,WAAW,gBAAgB,CAAC,GAAG,eAAe,CAAC;AAErD,SAAO,SAAiB;AAAA,IACtB;AAAA,IACA,SAAS,CAAC,EAAE,OAAO,MAAM,SAAiB,cAAc,EAAE,OAAO,CAAC;AAAA,IAClE,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,sBAAsB;AAAA,IACtB,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,OAAO;AAAA,EACT,CAAC;AACH;","names":[]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import { findPlanByIdAction } from "../actions/find-plan-by-id.action";
|
|
3
|
+
import { apiFetch } from "../../../infra/http/api-fetch";
|
|
5
4
|
import { PLANS_QUERY_KEY } from "./list-plans.hook";
|
|
6
5
|
import { useAuthQueryKey } from "../../../hooks/useAuthQueryKey";
|
|
7
6
|
function usePlanById(idPlan) {
|
|
@@ -9,7 +8,7 @@ function usePlanById(idPlan) {
|
|
|
9
8
|
const plansKey = useAuthQueryKey([...PLANS_QUERY_KEY]);
|
|
10
9
|
return useQuery({
|
|
11
10
|
queryKey: [...plansKey, idPlan],
|
|
12
|
-
queryFn:
|
|
11
|
+
queryFn: ({ signal }) => apiFetch(`/api/plans/${idPlan}`, { signal }),
|
|
13
12
|
initialData: () => {
|
|
14
13
|
const queries = queryClient.getQueriesData({
|
|
15
14
|
queryKey: plansKey
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/modules/plans/hooks/use-plan-by-id.hook.ts"],"sourcesContent":["\"use client\";\n\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/plans/hooks/use-plan-by-id.hook.ts"],"sourcesContent":["\"use client\";\n\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { apiFetch } from \"../../../infra/http/api-fetch\";\nimport type { SuccessResult } from \"../../../infra/api/types\";\nimport type { Plan } from \"../types/plan.type\";\nimport { PLANS_QUERY_KEY } from \"./list-plans.hook\";\nimport { useAuthQueryKey } from \"../../../hooks/useAuthQueryKey\";\n\nexport function usePlanById(idPlan?: number | string | null) {\n const queryClient = useQueryClient();\n const plansKey = useAuthQueryKey([...PLANS_QUERY_KEY]);\n\n return useQuery({\n queryKey: [...plansKey, idPlan],\n queryFn: ({ signal }) =>\n apiFetch<SuccessResult<Plan>>(`/api/plans/${idPlan}`, { signal }),\n initialData: () => {\n const queries = queryClient.getQueriesData<Plan[]>({\n queryKey: plansKey,\n });\n\n for (const [, data] of queries) {\n if (!data || !Array.isArray(data)) continue;\n const numericId = Number(idPlan);\n const plan = data.find(\n (p) => p.id === numericId || p.id_plan === numericId\n );\n if (plan) {\n return { success: true as const, data: plan };\n }\n }\n\n return undefined;\n },\n initialDataUpdatedAt: 0,\n enabled: !!idPlan,\n });\n}\n"],"mappings":";AAEA,SAAS,UAAU,sBAAsB;AACzC,SAAS,gBAAgB;AAGzB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAEzB,SAAS,YAAY,QAAiC;AAC3D,QAAM,cAAc,eAAe;AACnC,QAAM,WAAW,gBAAgB,CAAC,GAAG,eAAe,CAAC;AAErD,SAAO,SAAS;AAAA,IACd,UAAU,CAAC,GAAG,UAAU,MAAM;AAAA,IAC9B,SAAS,CAAC,EAAE,OAAO,MACjB,SAA8B,cAAc,MAAM,IAAI,EAAE,OAAO,CAAC;AAAA,IAClE,aAAa,MAAM;AACjB,YAAM,UAAU,YAAY,eAAuB;AAAA,QACjD,UAAU;AAAA,MACZ,CAAC;AAED,iBAAW,CAAC,EAAE,IAAI,KAAK,SAAS;AAC9B,YAAI,CAAC,QAAQ,CAAC,MAAM,QAAQ,IAAI,EAAG;AACnC,cAAM,YAAY,OAAO,MAAM;AAC/B,cAAM,OAAO,KAAK;AAAA,UAChB,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,YAAY;AAAA,QAC7C;AACA,YAAI,MAAM;AACR,iBAAO,EAAE,SAAS,MAAe,MAAM,KAAK;AAAA,QAC9C;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IACA,sBAAsB;AAAA,IACtB,SAAS,CAAC,CAAC;AAAA,EACb,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import "server-only";
|
|
2
|
+
import { parseId } from "../../../infra/route/parse-id";
|
|
3
|
+
import { safeRouteHandler } from "../../../infra/route/safe-route-handler";
|
|
4
|
+
import { projectsService } from "../services/projects.service";
|
|
5
|
+
function createFindProjectHandler() {
|
|
6
|
+
return async function GET(_req, { params }) {
|
|
7
|
+
return safeRouteHandler(async () => {
|
|
8
|
+
const { id } = await params;
|
|
9
|
+
return projectsService.findById(parseId(id));
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
createFindProjectHandler
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=find-project.handler.mjs.map
|