Git Product home page Git Product logo

test-carka's Introduction

test-carka

Тестовое задание для graphQL в связке с Express (но лучше бы Nest). Исходное задание: [https://github.com/LuciusFaraday/tsarka-node-task]

restAPI:

  • 3 restAPI ендпойнта (POST /api/auth, POST api/register, GET api/user)
  • авторизация возвращает JWT на 24 часа
  • возвращаются осмысленные коды ошибок (400, 403) и сообщения

GraphQL:

  • ендпойнт - POST /api/graphqL. Реализованы пока только 1 модуль User и 2-й модуль Client частично
  • Query - 2 запроса 'users' и 'clients'. Например:
query { users  {
   id 
   email
   create_date
   password
   role
   name
 } 
}
  • Mutations - запросы auth, userCreate, userDelete, userUpdate и аналогичные для таблицы Client (список обновляется). Например:
 mutation { userCreate 
        (email: "test3",
        password: "123456") 
        { id, email, password }
 }
  • авторизация возвращает JWT на 24 часа. Для GraphQL без авторзации доступен только 1 маршрут (createUser, регистрация пользователя), см. роль 'any' в ACL (accessRoles.ts).
  • по умолчанию новые пользователи имеют роль user
  • доступность запросов для разных ролей регулируется в модуле src/middleware/accessRoles.ts. Для этого в middleware проверяются 2 первых слова из запроса и проверяется на сопоставление с ACL-объектом
export const acl: aclT  = [
  // user
  {type: 'query',     name: 'users',        role: ['user', 'admin'] },
  {type: 'mutation',  name: 'userCreate',   role: ['user', 'admin'] },  
  {type: 'mutation',  name: 'userDelete',   role: ['admin']         },  
  {type: 'mutation',  name: 'userUpdate',   role: ['user','admin']  },  
  {type: 'mutation',  name: 'auth',         role: ['user','admin']  },  
  // client
  {type: 'mutation',  name: 'clientCreate', role: ['user', 'admin'] },  
  {type: 'query',     name: 'clients',      role: ['user', 'admin'] },
]

Кстати объект удобен для просмотра всех запросов.

  • в некоторых случаях (но не во всех) в ответе возвращаются осмысленные ошибки с кодом 200

Используемый стек:

  • node.js с модулями - express, graphql, graphql-http, pino (логи)
  • база данных - ORM Prisma подключенная к Postgres
  • размещение - будет размещено на VPS-сервере http://45.146.167.130:3003/api/graphQL

Postman:

  • в корне репозитория размещена коллекция запросов: test-carka.postman_collection.json

Тесты:

Используется Jest и Supertest

  • 1 unit-тест - test/userResolve.test.ts - для проверки 2-х функций. В целом для unit-тестов тут не так много простора, только для резолверов.
  • 1 end2end-тест - test/graphQL.user.e2e.test.ts - для авторизации через обычный REST, и 1 запроса graphQL. Их по аналогии можно наклепать много

Что не сделано:

  • рефакторинг userSchema.ts, разделение с наскока не получилось. При экспорте/импорте частей схемы возникают ошибки. А так пока схема, резолверы, все в кучу
  • Swagger-схема для RestAPI пока из другого проекта
  • валидация для входных данных graphQL, сделать несколько inputTypes
  • в некоторых местах есть типы any, что нужно исправлять
  • вынести типы в отдельные модули
  • некоторые ошибки в ответе graphQL не обрабатываются
  • выкинуть Express на свалку истории, заменить на Nest/Fastify

test-carka's People

Contributors

almasnurbayev avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.