Обновлены модели и компоненты для управления поставками и расходниками. Добавлены новые поля в модели SupplyOrder и соответствующие резолверы для поддержки логистики. Реализованы компоненты уведомлений для отображения статуса логистических заявок и поставок. Оптимизирован интерфейс для улучшения пользовательского опыта, добавлены логи для диагностики запросов. Обновлены GraphQL схемы и мутации для поддержки новых функциональных возможностей.
This commit is contained in:
@ -1,84 +1,82 @@
|
||||
import { ApolloServer } from '@apollo/server'
|
||||
import { startServerAndCreateNextHandler } from '@as-integrations/next'
|
||||
import { NextRequest } from 'next/server'
|
||||
import jwt from 'jsonwebtoken'
|
||||
import { typeDefs } from '@/graphql/typedefs'
|
||||
import { resolvers } from '@/graphql/resolvers'
|
||||
|
||||
// Интерфейс для контекста
|
||||
interface Context {
|
||||
user?: {
|
||||
id: string
|
||||
phone: string
|
||||
}
|
||||
admin?: {
|
||||
id: string
|
||||
username: string
|
||||
}
|
||||
}
|
||||
import { ApolloServer } from "@apollo/server";
|
||||
import { startServerAndCreateNextHandler } from "@as-integrations/next";
|
||||
import { NextRequest } from "next/server";
|
||||
import jwt from "jsonwebtoken";
|
||||
import { typeDefs } from "@/graphql/typedefs";
|
||||
import { resolvers } from "@/graphql/resolvers";
|
||||
import { Context } from "@/graphql/context";
|
||||
|
||||
// Создаем Apollo Server
|
||||
const server = new ApolloServer<Context>({
|
||||
typeDefs,
|
||||
resolvers,
|
||||
})
|
||||
});
|
||||
|
||||
// Создаем Next.js handler
|
||||
const handler = startServerAndCreateNextHandler<NextRequest>(server, {
|
||||
context: async (req: NextRequest) => {
|
||||
// Извлекаем токен из заголовка Authorization
|
||||
const authHeader = req.headers.get('authorization')
|
||||
const token = authHeader?.replace('Bearer ', '')
|
||||
const authHeader = req.headers.get("authorization");
|
||||
const token = authHeader?.replace("Bearer ", "");
|
||||
|
||||
console.log('GraphQL Context - Auth header:', authHeader)
|
||||
console.log('GraphQL Context - Token:', token ? `${token.substring(0, 20)}...` : 'No token')
|
||||
console.log("GraphQL Context - Auth header:", authHeader);
|
||||
console.log(
|
||||
"GraphQL Context - Token:",
|
||||
token ? `${token.substring(0, 20)}...` : "No token"
|
||||
);
|
||||
|
||||
if (!token) {
|
||||
console.log('GraphQL Context - No token provided')
|
||||
return { user: undefined, admin: undefined }
|
||||
console.log("GraphQL Context - No token provided");
|
||||
return { user: undefined, admin: undefined };
|
||||
}
|
||||
|
||||
try {
|
||||
// Верифицируем JWT токен
|
||||
const decoded = jwt.verify(token, process.env.JWT_SECRET!) as {
|
||||
userId?: string
|
||||
phone?: string
|
||||
adminId?: string
|
||||
username?: string
|
||||
type?: string
|
||||
}
|
||||
userId?: string;
|
||||
phone?: string;
|
||||
adminId?: string;
|
||||
username?: string;
|
||||
type?: string;
|
||||
};
|
||||
|
||||
// Проверяем тип токена
|
||||
if (decoded.type === 'admin' && decoded.adminId && decoded.username) {
|
||||
console.log('GraphQL Context - Decoded admin:', { id: decoded.adminId, username: decoded.username })
|
||||
if (decoded.type === "admin" && decoded.adminId && decoded.username) {
|
||||
console.log("GraphQL Context - Decoded admin:", {
|
||||
id: decoded.adminId,
|
||||
username: decoded.username,
|
||||
});
|
||||
return {
|
||||
admin: {
|
||||
id: decoded.adminId,
|
||||
username: decoded.username
|
||||
}
|
||||
}
|
||||
username: decoded.username,
|
||||
},
|
||||
};
|
||||
} else if (decoded.userId && decoded.phone) {
|
||||
console.log('GraphQL Context - Decoded user:', { id: decoded.userId, phone: decoded.phone })
|
||||
console.log("GraphQL Context - Decoded user:", {
|
||||
id: decoded.userId,
|
||||
phone: decoded.phone,
|
||||
});
|
||||
return {
|
||||
user: {
|
||||
id: decoded.userId,
|
||||
phone: decoded.phone
|
||||
}
|
||||
}
|
||||
phone: decoded.phone,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return { user: undefined, admin: undefined }
|
||||
return { user: undefined, admin: undefined };
|
||||
} catch (error) {
|
||||
console.error('GraphQL Context - Invalid token:', error)
|
||||
return { user: undefined, admin: undefined }
|
||||
console.error("GraphQL Context - Invalid token:", error);
|
||||
return { user: undefined, admin: undefined };
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
});
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
return handler(request)
|
||||
return handler(request);
|
||||
}
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
return handler(request)
|
||||
}
|
||||
return handler(request);
|
||||
}
|
||||
|
Reference in New Issue
Block a user