123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- const jwtSecret = 'AjnjLhjxM'
- const jwt = require('jsonwebtoken')
- const express = require('express');
- const express_graphql = require('express-graphql');
- const { buildSchema, printSchema, GraphQLString } = require('graphql');
- const expand = require('mm-graphql/expand')
- const fs = require('fs')
- const uploadPath = `${__dirname}/public/images/`;
- const upload = require('multer')({ dest: uploadPath })
- ;(async () => {
- const {Savable, slice, getModels} = await require('./models.js')()
- const { jwtGQLAnon, jwtCheck } = require('mm-graphql/jwt')
- let schema = buildSchema(`
- type User {
- _id: String
- createdAt: String
- login: String
- nick : String
- avatar: Image
- acl: [String]
- }
- input UserInput {
- _id: String
- login: String
- nick : String
- password: String
- acl: [String]
- avatar: ImageInput
- }
- type Image {
- _id: ID,
- createdAt: String
- text: String,
- url: String,
- originalFileName: String,
- userAvatar: User,
- good: Good
- category: Category
- owner: User
- }
- input ImageInput {
- _id: ID,
- text: String,
- userAvatar: UserInput,
- good: GoodInput
- category: CategoryInput
- }
- type Category {
- _id: ID,
- createdAt: String
- name: String,
- goods: [Good]
- image: Image
- owner: User
- }
- input CategoryInput {
- _id: ID,
- name: String!,
- goods: [GoodInput]
- image: ImageInput
- }
- type Good {
- _id: ID,
- createdAt: String
- name: String,
- description: String
- price: Float
- orderGoods: [OrderGood]
- categories: [Category]
- images: [Image]
- owner: User
- }
- input GoodInput {
- _id: ID,
- name: String,
- description: String
- price: Float
- categories: [CategoryInput]
- images: [ImageInput]
- }
- type OrderGood {
- _id: ID,
- createdAt: String
- price: Float,
- count: Float,
- good: Good,
- order: Order
- owner: User
- total: Float
- }
- input OrderGoodInput {
- _id: ID,
- count: Int!,
- good: GoodInput,
- order: OrderInput
- }
- type Order {
- _id: ID
- createdAt: String
- total: Float
- orderGoods: [OrderGood]
- owner: User
- }
- input OrderInput {
- _id: ID
- orderGoods: [OrderGoodInput]
- }
- `);
- schema = expand(schema, {
- login:{
- type: GraphQLString,
- args: {login: {type: GraphQLString},
- password: {type: GraphQLString},
- },
- async resolve(root, {login, password}, context, info){
- const Savable = context.models.Savable
- const user = await Savable.m.User.findOne({login, password})
- if (!user)
- return null;
- const token = jwt.sign({ sub: {id: user._id, login, acl: user.acl}}, jwtSecret); //подписывам токен нашим ключем
- return token
- }
- }
- })
- console.log(printSchema(schema))
- const app = express();
- app.use(express.static('public'));
- app.use('/graphql', express_graphql(jwtGQLAnon({schema, createContext: getModels, graphiql: true, secret: jwtSecret})))
- app.post('/upload', upload.single('photo'), async (req, res, next) => {
- let decoded;
- if (decoded = jwtCheck(req, jwtSecret)){
- console.log('SOME UPLOAD', decoded, req.file)
- let {models: {Image }} = await getModels(decoded.sub)
- let image = await Image.fromFileData(req.file)
- res.end(JSON.stringify({_id: image._id, url: image.url}))
- }
- else {
- res.status(503).send('permission denied')
- }
- })
- app.use(express.static('public'));
- let socketPath = "/home/asmer/node_hosts/shop-roles"
- app.listen(socketPath, () => {
- console.log(`Express GraphQL Server Now Running On ${socketPath}/graphql`);
- fs.chmodSync(socketPath, '777');
- });
- })()
|