EverydayTech Platform - Developer Reference
Complete Source Code Documentation - All Applications
Loading...
Searching...
No Matches
route.ts
Go to the documentation of this file.
1import { NextRequest, NextResponse } from 'next/server';
2import { fieldpineServerApi } from '@/lib/server/fieldpineApi';
3import { getRequestContext, validateApiAccess } from '@/lib/server/sessionUtils';
4
5/**
6 * Stocktakes List Endpoint (ELINK API)
7 * GET /api/v1/buck/stocktakes?filter=current
8 *
9 * Uses ELINK API (retailmax.elink.stocktake.list)
10 * Security: Retail stores can access this (ELINK only)
11 */
12export async function GET(request: NextRequest) {
13 try {
14 // 1. Get session and store context
15 const context = await getRequestContext(request);
16
17 if (!context || !context.isAuthenticated) {
18 return NextResponse.json(
19 { error: 'Authentication required' },
20 { status: 401 }
21 );
22 }
23
24 // 2. SECURITY: Validate ELINK access
25 const apiAccessValidation = validateApiAccess(context, 'elink');
26 if (!apiAccessValidation.valid) {
27 console.warn(`[API Security] ELINK access denied: ${apiAccessValidation.error}`);
28 return NextResponse.json(
29 {
30 error: apiAccessValidation.error,
31 code: apiAccessValidation.errorCode
32 },
33 { status: 403 }
34 );
35 }
36
37 // 3. Parse query parameters
38 const { searchParams } = new URL(request.url);
39 const filter = searchParams.get('filter') || 'current';
40
41 // 4. Build BUCK parameters for stocktake list
42 // Field reference: f116=stocktake status
43 const buckParams: Record<string, string> = {
44 '3': 'retailmax.elink.stocktake.list',
45 '7': '200',
46 '99': Math.random().toString()
47 };
48
49 if (filter === 'current') {
50 buckParams['9'] = 'f116,0,current';
51 } else if (filter === 'complete') {
52 buckParams['9'] = 'f116,2,2'; // Flag bit 2 = complete
53 }
54
55 // 5. Make ELINK API call using singleton
56 // Use store-specific URL for API calls
57 const result = await fieldpineServerApi.buckApiCall(buckParams, context.session.apiKey, context.store.url);
58
59 return NextResponse.json({
60 success: true,
61 data: result,
62 source: 'elink'
63 });
64
65 } catch (error: any) {
66 console.error('[Stocktakes API] Error:', error);
67 return NextResponse.json(
68 { error: error.message || 'Failed to fetch stocktakes' },
69 { status: 500 }
70 );
71 }
72}