{"_id":"@36node/kanban","_rev":"6-f0b253029b7f95d11fcf13d3837f3830","name":"@36node/kanban","dist-tags":{"latest":"0.0.0"},"versions":{"0.0.0":{"name":"@36node/kanban","version":"0.0.0","description":"Kanban service for ticket and project","repository":{"url":"git+https://github.com/36node/kanban.git","type":"git"},"license":"MIT","publishConfig":{"access":"public"},"template":"service","config-overrides-path":"node_modules/@36node/sketch/config-overrides","main":"dist/index.js","typings":"typings/index.d.ts","scripts":{"format":"prettier --trailing-comma es5 --write 'src/**/*.js'","gen:api":"swagen koa openapi.yml ./src/api && npm run format","gen:postman":"swagen postman openapi.yml postman.json","lint":"sketch lint src","release":"standard-version","server":"bin/server.sj","start":"sketch start","sync":"bin/sync.js","test":"sketch test","test:int":"sketch test --config test/jest.config.js"},"commitlint":{"extends":["@commitlint/config-conventional"]},"husky":{"hooks":{"commit-msg":"commitlint -e $GIT_PARAMS","pre-commit":"lint-staged","pre-push":"npm run lint && CI=true npm run test"}},"lint-staged":{"*.js":["npm run format","git add"]},"devDependencies":{"@36node/eslint-config":"^0.6.4","@36node/sketch":"^0.15.1","@36node/swagen":"^0.17.0","@commitlint/cli":"^6.1.0","@commitlint/config-conventional":"^6.1.0","@shelf/jest-mongodb":"^1.0.1","@types/jest":"^24.0.12","@types/koa":"^2.0.46","@types/lodash":"^4.14.116","@types/mongoose":"^5.2.19","husky":"^1.3.1","jest-runner-newman":"^1.0.5","lint-staged":"^8.1.5","newman":"^4.4.1","pino-pretty":"^3.2.0","prettier":"^1.18.2","standard-version":"^6.0.1"},"dependencies":{"@36node/koa-health":"^0.1.1","@36node/koa-openapi":"^0.1.5","@36node/mongoose-helper":"^0.4.0","@36node/query-normalizr":"^0.5.0","@koa/cors":"^3.0.0","ajv":"^6.12.2","dotenv":"^7.0.0","koa":"^2.7.0","koa-body":"^4.1.0","koa-compress":"^3.0.0","koa-helmet":"^4.1.0","koa-jwt":"^3.5.1","koa-logger":"^3.2.0","koa-pino-logger":"^2.1.3","koa-tree-router":"^0.4.5","lodash":"^4.17.10","mongoose":"^5.4.19","pino":"^5.11.1"},"jest":{"displayName":"unit","testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"preset":"@shelf/jest-mongodb"},"babel":{"presets":["react-app"]},"gitHead":"f908dc7f0d3710f64ba79361fc96a97cc0a42e87","bugs":{"url":"https://github.com/36node/kanban/issues"},"homepage":"https://github.com/36node/kanban#readme","_id":"@36node/kanban@0.0.0","_nodeVersion":"14.3.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-FUpctvQzSrAEOSKapc2c6pxMvFoHx60qLCO+5Ca6aXWqWPofn7omdvIuYhpUAp0NJr0PyAXEbKEuxdUrcH0vAQ==","shasum":"0a1c2c8b0ca3c2952283c6da4cc1b035597baab0","tarball":"https://registry.npmjs.org/@36node/kanban/-/kanban-0.0.0.tgz","fileCount":7,"unpackedSize":10335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6XmqCRA9TVsSAnZWagAASH4P/R4Or6/Ny8+5ZvrRhNrr\nP8oM/UzdPFWtToZPwNRFfCmKOWnmaxKsuQpWNvA0AeFq3vkoc2cYuVUPmOqR\nRaNyiSnsam3VdR9lc2Oxj4QMoaqcIWSbZLJldmBoeoN0k4/QCPhDp3oGUZAw\niSfbb/vZHlIh43IF1rmIK15XgqwVQ/QkgU36qKtdZrbBB38pF8gv0rd6JKkO\nwSueaLU/8s9n2E4Vj/iOzRfMuE1ZgLfKdbX2ZY0TxMGlklokFq++Kk/EZo9Y\nh3N4CfolOk5ls9c7Pn4okMMNYBd+qmScVRIAKdOT8fIuCofTkrNfqHnbDp97\nDeBR/h7amxV74Ozs3a1HXf0GBDZKQ0Hfj8rlWUdd+dwuq9FxIMpGN7YwyfX8\nFVNVxcwjxYh2gNCf9armcNHxzZXU07ENge/dI4bhTxZhFBXG02hXbNLbOoP4\nAnF64pBdyZ83R7k+ZC/oygSYjrCAubE44jyg++mbmQFoK8focXYKjY2UxkZB\nQWe3gGUlBwUj3FDdSOdR4UcAmgXrxrkd6lxRSZzIkeEmvhJMuglmXg/911ZI\nrjEk8PFrPM4OzWfEyrOcZ41N9lDh75Bpf5/8cieONo3T2LhsW518ognAdqHY\nEk899yNYH66JbWvrxl9a6L5DBi+qoKuVW8rxe0TWr6OMDJAPfSglm6W1y9M9\nNojd\r\n=6/8H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZmer+WFo2hOvUA2hlILjnRX/5dKlHcJ4FSyBUav8GgwIhAPMZUJuQjbOHl2pxxrW675EyCVD6W+CsiVWm845NTUjU"}]},"maintainers":[{"name":"zzswang","email":"zzswang@gmail.com"},{"name":"tohsakarin","email":"1023770070@qq.com"},{"name":"frendkao","email":"frendkao@gmail.com"},{"name":"hauy","email":"hauy@163.com"}],"_npmUser":{"name":"zzswang","email":"zzswang@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/kanban_0.0.0_1592359337852_0.5153998931862411"},"_hasShrinkwrap":false}},"time":{"created":"2020-06-17T02:02:17.762Z","0.0.0":"2020-06-17T02:02:18.043Z","modified":"2023-11-24T02:06:20.731Z"},"maintainers":[{"email":"xuna08@gmail.com","name":"xuna08"},{"email":"zzswang@gmail.com","name":"zzswang"},{"email":"hauy@163.com","name":"hauy"},{"email":"walle@36node.com","name":"36node-robot"}],"description":"Kanban service for ticket and project","homepage":"https://github.com/36node/kanban#readme","repository":{"url":"git+https://github.com/36node/kanban.git","type":"git"},"bugs":{"url":"https://github.com/36node/kanban/issues"},"license":"MIT","readme":"# @36node/kanban\n\n看板服务，提供项目、里程碑、工单、泳道等服务\n\n## Development\n\n```sh\n# prepare service with docker\ndocker-compose -d\n\n# install dependencies\nyarn\n\n# start service\nyarn start\n\n# if we want to start service as production\n# NODE_ENV=production yarn start\n\n# use postman to check api\nyarn test:int\n```\n\n### Folder structures\n\n```sh\nbin\n./src\n├── api\n├── config\n├── lib\n├── middleware\n├── services\n├── app.js\n├── index.js\n├── server.js\n└── task.js\n```\n\n- bin: 受限于 nodejs 的原生能力限制，该目录下要求采用 commonjs 写法; bin 目录用于辅助项目执行。\n- src: source 目录只负责输出模块。\n- api: 自动生成的 api 目录包含 koa 桩代码\n- config: 配置入口，用 dotenv\n- lib: 基础库\n- middleware: koa 中间件\n- services: api 的实现\n- app.js: 主程序\n- index.js: 引用目录\n- server.js: 服务器启动入口\n- task.js: 任务入口\n\n目录引用原则：\n\n- config 文件是唯一的例外\n- services and tasks 引用 models\n- lib 目录可以被任何文件引用\n- lib 目录内部不要出现交叉引用\n\n### default token\n\n`eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyLCJ1c2VyIjp7InJvbGVzIjpbIkFETUlOIiwiVVNFUiJdfX0.XA1kE_UdbOsU0rfmG3g1y3SpJ5aFVzPGFBHihVXv58sNatweqLHPEUAwhqobgKgmAbaKa3dlYrXEpHESHZ7AJgQYCfSeVxtsKyoQmcq9OYA0iFcH5oCWQgYqfeWJPOroMlMdNQax5kG-GkuaFbIiwiw-9j_ACS8CSPO9Oq2dQCA`\n\nvisit [jwt.io](jwt.io) for more.\n\n```json\n{\n  \"sub\": \"1234567890\",\n  \"name\": \"John Doe\",\n  \"iat\": 1516239022,\n  \"user\": {\n    \"roles\": [\"ADMIN\", \"USER\"]\n  }\n}\n```\n\n### postman\n\n```sh\n# 安装 fastman\nyarn global add @36node/fastman\n\n# You can get your key from the [integrations dashboard](https://go.postman.co/integrations/services/pm_pro_api)\nfastman config -a <your-postman-api-key>\n\n# list all your collections in your postman\nfastman ls\n\n# import file into postman, import data.json env.json by your self\nfastman import ./test/xxxx/collection.json\n\n# export file from postman\nfastman export \"Petstore Service\" ./test/xxxx/collection.json\n```\n\n## Url Pattern\n\nFind more in [@36node/sketch/docs/url.md](https://github.com/36node/sketch/blob/master/docs/url.md)\n\n## 权限定义\n\n动态角色\n\n- PO 指 project owner\n- PM 指 project manager\n- CANDIDATE 指工单候选人\n- EXECUTOR 指工单执行者\n\n固定角色\n\n- USER(保留角色): 普通用户，其实是一个无角色\n- ADMIN(保留角色): 包含所有角色的所有权限，测试中不一一测试，单元测试中做一次 ADMIN 角色解析，看是否能够解析成所有角色即可。\n\n## Contributing\n\n1. Create your feature branch: `git checkout -b feature/something`\n2. Commit your changes: `git commit -am 'feat: something'`\n3. Push to the branch: `git push -u origin feature/something`\n4. Submit a pull request :D\n\n## Author\n\n**kanban** © [36node](https://github.com/36node)\n\nAuthored and maintained by 36node with help from contributors ([list](https://github.com/36node/tpl-service/contributors)).\n\n> [github.com/zzswang](https://github.com/zzswang) · GitHub [@36node](https://github.com/36node)\n\n[0]: https://img.shields.io/npm/v/@36node/kanban.svg?style=flat\n[1]: https://npmjs.com/package/@36node/kanban\n[2]: https://img.shields.io/npm/dm/@36node/kanban.svg?style=flat\n[3]: https://npmjs.com/package/@36node/kanban\n","readmeFilename":"README.md"}