ci: docker_tag=ext
All checks were successful
build-and-push-ext / build_push (push) Successful in 15s
All checks were successful
build-and-push-ext / build_push (push) Successful in 15s
feat(api): GET /api/subscriptions/current (stub via ENABLE_SUBSCRIPTION_STUB) chore(types): compléter stub sdk-signer-client (timeout, reconnect, options) chore(ts): build sans toucher signer
This commit is contained in:
parent
b283f90b75
commit
8eb33adc1f
37
global.d.ts
vendored
37
global.d.ts
vendored
@ -37,3 +37,40 @@ declare module '@mailchimp/mailchimp_transactional' {
|
|||||||
function mailchimp(apiKey: string): MailchimpClient;
|
function mailchimp(apiKey: string): MailchimpClient;
|
||||||
export = mailchimp;
|
export = mailchimp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Stub typing pour sdk-signer-client (non requis pour la compilation de l'endpoint subscription)
|
||||||
|
declare module 'sdk-signer-client' {
|
||||||
|
export interface SignerClientOptions {
|
||||||
|
baseUrl?: string;
|
||||||
|
apiKey?: string;
|
||||||
|
timeoutMs?: number;
|
||||||
|
}
|
||||||
|
export interface ClientConfig extends SignerClientOptions {
|
||||||
|
url?: string;
|
||||||
|
timeout?: number;
|
||||||
|
reconnectInterval?: number;
|
||||||
|
maxReconnectAttempts?: number;
|
||||||
|
}
|
||||||
|
export type SignerEvent = 'connected' | 'disconnected' | 'error' | string;
|
||||||
|
export class SDKSignerClient {
|
||||||
|
constructor(options: ClientConfig);
|
||||||
|
connect(): Promise<void>;
|
||||||
|
disconnect(): Promise<void>;
|
||||||
|
on(event: SignerEvent, handler: (...args: any[]) => void): void;
|
||||||
|
// Méthodes référencées par le code (stubs typing)
|
||||||
|
getUserProcessByIdnot(idnot: string): Promise<any>;
|
||||||
|
getOfficeProcessByIdnot(idnot: string): Promise<any>;
|
||||||
|
getPairingId(...args: any[]): Promise<any>;
|
||||||
|
createProcess(...args: any[]): Promise<any>;
|
||||||
|
getOwnedProcesses(...args: any[]): Promise<any>;
|
||||||
|
validateState(...args: any[]): Promise<any>;
|
||||||
|
updateProcess(...args: any[]): Promise<any>;
|
||||||
|
notifyUpdate(...args: any[]): Promise<any>;
|
||||||
|
getPhoneNumberForEmail(email: string): Promise<any>;
|
||||||
|
}
|
||||||
|
export class SignerClient {
|
||||||
|
constructor(options: SignerClientOptions);
|
||||||
|
connect(): Promise<void>;
|
||||||
|
disconnect(): Promise<void>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
29
src/controllers/subscription.controller.ts
Normal file
29
src/controllers/subscription.controller.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import { Request, Response } from 'express';
|
||||||
|
|
||||||
|
export class SubscriptionController {
|
||||||
|
static async getCurrent(req: Request, res: Response): Promise<any> {
|
||||||
|
try {
|
||||||
|
// Stub activable pour dev/stage sans implémentation Stripe complète
|
||||||
|
if (process.env.ENABLE_SUBSCRIPTION_STUB === 'true') {
|
||||||
|
return res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
active: true,
|
||||||
|
plan: 'STANDARD',
|
||||||
|
seats: 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implémentation à brancher sur Stripe lorsque l'association user↔customer est disponible
|
||||||
|
return res.status(501).json({
|
||||||
|
success: false,
|
||||||
|
message: 'Subscription status endpoint not implemented'
|
||||||
|
});
|
||||||
|
} catch (error: any) {
|
||||||
|
return res.status(500).json({
|
||||||
|
success: false,
|
||||||
|
message: 'Erreur lors de la récupération de l\'abonnement',
|
||||||
|
error: error?.message || 'Unknown error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import { smsRoutes } from './sms.routes';
|
|||||||
import { idnotRoutes } from './idnot.routes';
|
import { idnotRoutes } from './idnot.routes';
|
||||||
import { emailRoutes } from './email.routes';
|
import { emailRoutes } from './email.routes';
|
||||||
import { stripeRoutes } from './stripe.routes';
|
import { stripeRoutes } from './stripe.routes';
|
||||||
|
import { subscriptionRoutes } from './subscription.routes';
|
||||||
import { processRoutes } from './process.routes';
|
import { processRoutes } from './process.routes';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
@ -15,5 +16,6 @@ router.use('/api/v1/idnot', idnotRoutes);
|
|||||||
router.use('/api/v1/process', processRoutes);
|
router.use('/api/v1/process', processRoutes);
|
||||||
router.use('/api', emailRoutes);
|
router.use('/api', emailRoutes);
|
||||||
router.use('/api', stripeRoutes);
|
router.use('/api', stripeRoutes);
|
||||||
|
router.use('/api', subscriptionRoutes);
|
||||||
|
|
||||||
export { router as routes };
|
export { router as routes };
|
||||||
|
10
src/routes/subscription.routes.ts
Normal file
10
src/routes/subscription.routes.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { Router } from 'express';
|
||||||
|
import { SubscriptionController } from '../controllers/subscription.controller';
|
||||||
|
import { authenticateIdNot } from '../middleware/auth';
|
||||||
|
|
||||||
|
const router = Router();
|
||||||
|
|
||||||
|
// GET /api/subscriptions/current
|
||||||
|
router.get('/subscriptions/current', authenticateIdNot, SubscriptionController.getCurrent);
|
||||||
|
|
||||||
|
export { router as subscriptionRoutes };
|
@ -36,6 +36,8 @@
|
|||||||
"dist",
|
"dist",
|
||||||
"**/*.test.ts",
|
"**/*.test.ts",
|
||||||
"test-*.js",
|
"test-*.js",
|
||||||
"quick-*.js"
|
"quick-*.js",
|
||||||
|
"src/services/signer/**",
|
||||||
|
"src/config/signer.ts"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user