[
  {
    "path": ".gitignore",
    "content": "node_modules/\n"
  },
  {
    "path": "README.md",
    "content": "# MockSecKill\n"
  },
  {
    "path": "docker-compose.yml",
    "content": "version: '2'\nservices:\n  zookeeper:\n    image: wurstmeister/zookeeper\n    ports:\n      - \"2181:2181\"\n  kafka:\n    image: wurstmeister/kafka\n    links: \n      - zookeeper:zk\n    ports:\n      - \"9092:9092\"\n    depends_on:\n      - zookeeper\n    environment:\n      KAFKA_ADVERTISED_HOST_NAME: 192.168.2.107\n      KAFKA_ADVERTISED_PORT: \"9092\"\n      KAFKA_ZOOKEEPER_CONNECT: zk:2181\n  redis:\n    image: redis\n    ports:\n      - \"6379:6379\"\n  mysql:\n    image: mysql\n    ports:\n      - \"3306:3306\"\n    environment:\n      MYSQL_ROOT_PASSWORD: root\n"
  },
  {
    "path": "seckill_service/.idea/.name",
    "content": "Seckill_Service"
  },
  {
    "path": "seckill_service/.idea/Seckill_Service.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"WEB_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\">\n    <content url=\"file://$MODULE_DIR$\" />\n    <orderEntry type=\"inheritedJdk\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Seckill_Service node_modules\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "seckill_service/.idea/encodings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\">\n    <file url=\"PROJECT\" charset=\"UTF-8\" />\n  </component>\n</project>"
  },
  {
    "path": "seckill_service/.idea/jsLibraryMappings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"JavaScriptLibraryMappings\">\n    <file url=\"file://$PROJECT_DIR$\" libraries=\"{Seckill_Service node_modules}\" />\n    <includedPredefinedLibrary name=\"Node.js Core\" />\n  </component>\n</project>"
  },
  {
    "path": "seckill_service/.idea/libraries/Seckill_Service_node_modules.xml",
    "content": "<component name=\"libraryTable\">\n  <library name=\"Seckill_Service node_modules\" type=\"javaScript\">\n    <properties>\n      <option name=\"frameworkName\" value=\"node_modules\" />\n      <sourceFilesUrls>\n        <item url=\"file://$PROJECT_DIR$/node_modules\" />\n      </sourceFilesUrls>\n    </properties>\n    <CLASSES>\n      <root url=\"file://$PROJECT_DIR$/node_modules\" />\n    </CLASSES>\n    <SOURCES />\n  </library>\n</component>"
  },
  {
    "path": "seckill_service/.idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectLevelVcsManager\" settingsEditedManually=\"false\">\n    <OptionsSetting value=\"true\" id=\"Add\" />\n    <OptionsSetting value=\"true\" id=\"Remove\" />\n    <OptionsSetting value=\"true\" id=\"Checkout\" />\n    <OptionsSetting value=\"true\" id=\"Update\" />\n    <OptionsSetting value=\"true\" id=\"Status\" />\n    <OptionsSetting value=\"true\" id=\"Edit\" />\n    <ConfirmationsSetting value=\"0\" id=\"Add\" />\n    <ConfirmationsSetting value=\"0\" id=\"Remove\" />\n  </component>\n</project>"
  },
  {
    "path": "seckill_service/.idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/.idea/Seckill_Service.iml\" filepath=\"$PROJECT_DIR$/.idea/Seckill_Service.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": "seckill_service/.idea/runConfigurations/bin_www.xml",
    "content": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"bin/www\" type=\"NodeJSConfigurationType\" factoryName=\"Node.js\" path-to-node=\"$USER_HOME$/Documents/Infrastructure/node-v4.4.0-darwin-x64/bin/node\" path-to-js-file=\"bin/www\" working-dir=\"$PROJECT_DIR$\">\n    <envs>\n      <env name=\"DEBUG\" value=\"Seckill_Service:*\" />\n    </envs>\n    <browser url=\"http://localhost:3000/\" />\n    <method />\n  </configuration>\n</component>"
  },
  {
    "path": "seckill_service/.idea/workspace.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ChangeListManager\">\n    <list default=\"true\" id=\"6bb1f48b-8c62-4b3a-afd9-bff3aa7791ee\" name=\"Default\" comment=\"\" />\n    <ignored path=\"Seckill_Service.iws\" />\n    <ignored path=\".idea/workspace.xml\" />\n    <option name=\"EXCLUDED_CONVERTED_TO_IGNORED\" value=\"true\" />\n    <option name=\"TRACKING_ENABLED\" value=\"true\" />\n    <option name=\"SHOW_DIALOG\" value=\"false\" />\n    <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\n    <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\n    <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\n  </component>\n  <component name=\"ChangesViewManager\" flattened_view=\"true\" show_ignored=\"false\" />\n  <component name=\"CreatePatchCommitExecutor\">\n    <option name=\"PATCH_PATH\" value=\"\" />\n  </component>\n  <component name=\"ExecutionTargetManager\" SELECTED_TARGET=\"default_target\" />\n  <component name=\"FavoritesManager\">\n    <favorites_list name=\"Seckill_Service\" />\n  </component>\n  <component name=\"FileEditorManager\">\n    <leaf>\n      <file leaf-file-name=\"app.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/app.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"-9.444445\">\n              <caret line=\"27\" column=\"20\" selection-start-line=\"27\" selection-start-column=\"20\" selection-end-line=\"27\" selection-end-column=\"20\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"test_kafka.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/test_kafka.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.0\">\n              <caret line=\"19\" column=\"5\" selection-start-line=\"19\" selection-start-column=\"5\" selection-end-line=\"19\" selection-end-column=\"5\" />\n              <folding>\n                <element signature=\"e#0#38#0\" expanded=\"false\" />\n              </folding>\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"test_consumer.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/test_consumer.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.0\">\n              <caret line=\"18\" column=\"3\" selection-start-line=\"18\" selection-start-column=\"3\" selection-end-line=\"18\" selection-end-column=\"3\" />\n              <folding>\n                <element signature=\"e#0#38#0\" expanded=\"false\" />\n              </folding>\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"package.json\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/package.json\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"-11.875\">\n              <caret line=\"19\" column=\"0\" selection-start-line=\"19\" selection-start-column=\"0\" selection-end-line=\"19\" selection-end-column=\"0\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"index.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/routes/index.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.0\">\n              <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"1\" selection-end-column=\"30\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"users.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/routes/users.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.0\">\n              <caret line=\"1\" column=\"4\" selection-start-line=\"1\" selection-start-column=\"4\" selection-end-line=\"1\" selection-end-column=\"4\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"seckill.js\" pinned=\"false\" current-in-tab=\"true\">\n        <entry file=\"file://$PROJECT_DIR$/routes/seckill.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.40145984\">\n              <caret line=\"13\" column=\"34\" selection-start-line=\"13\" selection-start-column=\"34\" selection-end-line=\"13\" selection-end-column=\"34\" />\n              <folding>\n                <element signature=\"e#0#38#0\" expanded=\"false\" />\n              </folding>\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"individualCommands.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/node_modules/.2.6.5@redis/lib/individualCommands.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.0\">\n              <caret line=\"24\" column=\"23\" selection-start-line=\"24\" selection-start-column=\"23\" selection-end-line=\"24\" selection-end-column=\"23\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"multi.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/node_modules/.2.6.5@redis/lib/multi.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.0\">\n              <caret line=\"110\" column=\"68\" selection-start-line=\"110\" selection-start-column=\"66\" selection-end-line=\"110\" selection-end-column=\"68\" />\n              <folding />\n            </state>\n          </provider>\n        </entry>\n      </file>\n      <file leaf-file-name=\"test_redis.js\" pinned=\"false\" current-in-tab=\"false\">\n        <entry file=\"file://$PROJECT_DIR$/test_redis.js\">\n          <provider selected=\"true\" editor-type-id=\"text-editor\">\n            <state vertical-scroll-proportion=\"0.0\">\n              <caret line=\"10\" column=\"24\" selection-start-line=\"10\" selection-start-column=\"24\" selection-end-line=\"10\" selection-end-column=\"24\" />\n              <folding>\n                <element signature=\"e#0#38#0\" expanded=\"false\" />\n              </folding>\n            </state>\n          </provider>\n        </entry>\n      </file>\n    </leaf>\n  </component>\n  <component name=\"FileTemplateManagerImpl\">\n    <option name=\"RECENT_TEMPLATES\">\n      <list>\n        <option value=\"JavaScript File\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"IdeDocumentHistory\">\n    <option name=\"CHANGED_PATHS\">\n      <list>\n        <option value=\"$PROJECT_DIR$/test_consumer.js\" />\n        <option value=\"$PROJECT_DIR$/test_kafka.js\" />\n        <option value=\"$PROJECT_DIR$/package.json\" />\n        <option value=\"$PROJECT_DIR$/routes/index.js\" />\n        <option value=\"$PROJECT_DIR$/test_redis.js\" />\n        <option value=\"$PROJECT_DIR$/app.js\" />\n        <option value=\"$PROJECT_DIR$/routes/seckill.js\" />\n      </list>\n    </option>\n  </component>\n  <component name=\"JsBuildToolGruntFileManager\" detection-done=\"true\" />\n  <component name=\"JsBuildToolPackageJson\" detection-done=\"true\">\n    <package-json value=\"$PROJECT_DIR$/package.json\" />\n  </component>\n  <component name=\"JsGulpfileManager\">\n    <detection-done>true</detection-done>\n  </component>\n  <component name=\"ProjectFrameBounds\">\n    <option name=\"y\" value=\"23\" />\n    <option name=\"width\" value=\"1439\" />\n    <option name=\"height\" value=\"821\" />\n  </component>\n  <component name=\"ProjectLevelVcsManager\" settingsEditedManually=\"false\">\n    <OptionsSetting value=\"true\" id=\"Add\" />\n    <OptionsSetting value=\"true\" id=\"Remove\" />\n    <OptionsSetting value=\"true\" id=\"Checkout\" />\n    <OptionsSetting value=\"true\" id=\"Update\" />\n    <OptionsSetting value=\"true\" id=\"Status\" />\n    <OptionsSetting value=\"true\" id=\"Edit\" />\n    <ConfirmationsSetting value=\"0\" id=\"Add\" />\n    <ConfirmationsSetting value=\"0\" id=\"Remove\" />\n  </component>\n  <component name=\"ProjectView\">\n    <navigator currentView=\"ProjectPane\" proportions=\"\" version=\"1\">\n      <flattenPackages />\n      <showMembers />\n      <showModules />\n      <showLibraryContents />\n      <hideEmptyPackages />\n      <abbreviatePackageNames />\n      <autoscrollToSource />\n      <autoscrollFromSource />\n      <sortByType />\n      <manualOrder />\n      <foldersAlwaysOnTop value=\"true\" />\n    </navigator>\n    <panes>\n      <pane id=\"Scope\" />\n      <pane id=\"Scratches\" />\n      <pane id=\"ProjectPane\">\n        <subPane>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"Seckill_Service\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"Seckill_Service\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"Seckill_Service\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"Seckill_Service\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"Seckill_Service\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"views\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n          <PATH>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"Seckill_Service\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"Seckill_Service\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n            <PATH_ELEMENT>\n              <option name=\"myItemId\" value=\"routes\" />\n              <option name=\"myItemType\" value=\"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode\" />\n            </PATH_ELEMENT>\n          </PATH>\n        </subPane>\n      </pane>\n    </panes>\n  </component>\n  <component name=\"PropertiesComponent\">\n    <property name=\"WebServerToolWindowFactoryState\" value=\"false\" />\n    <property name=\"nodejs_interpreter_path\" value=\"$USER_HOME$/Documents/Infrastructure/node-v4.4.0-darwin-x64/bin/node\" />\n    <property name=\"javascript.nodejs.core.library.configured.version\" value=\"4.4.0\" />\n    <property name=\"HbShouldOpenHtmlAsHb\" value=\"\" />\n  </component>\n  <component name=\"RunManager\" selected=\"Node.js.app.js\">\n    <configuration default=\"false\" name=\"test_kafka.js\" type=\"NodeJSConfigurationType\" factoryName=\"Node.js\" temporary=\"true\" path-to-node=\"$USER_HOME$/Documents/Infrastructure/node-v4.4.0-darwin-x64/bin/node\" path-to-js-file=\"test_kafka.js\" working-dir=\"$PROJECT_DIR$\">\n      <method />\n    </configuration>\n    <configuration default=\"false\" name=\"test_consumer.js\" type=\"NodeJSConfigurationType\" factoryName=\"Node.js\" temporary=\"true\" path-to-node=\"$USER_HOME$/Documents/Infrastructure/node-v4.4.0-darwin-x64/bin/node\" path-to-js-file=\"test_consumer.js\" working-dir=\"$PROJECT_DIR$\">\n      <method />\n    </configuration>\n    <configuration default=\"false\" name=\"test_redis.js\" type=\"NodeJSConfigurationType\" factoryName=\"Node.js\" temporary=\"true\" path-to-node=\"$USER_HOME$/Documents/Infrastructure/node-v4.4.0-darwin-x64/bin/node\" path-to-js-file=\"test_redis.js\" working-dir=\"$PROJECT_DIR$\">\n      <method />\n    </configuration>\n    <configuration default=\"false\" name=\"app.js\" type=\"NodeJSConfigurationType\" factoryName=\"Node.js\" temporary=\"true\" path-to-node=\"$USER_HOME$/Documents/Infrastructure/node-v4.4.0-darwin-x64/bin/node\" path-to-js-file=\"app.js\" working-dir=\"$PROJECT_DIR$\">\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"DartCommandLineRunConfigurationType\" factoryName=\"Dart Command Line Application\">\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"DartUnitRunConfigurationType\" factoryName=\"DartUnit\">\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"JavaScriptTestRunnerKarma\" factoryName=\"Karma\" config-file=\"\">\n      <envs />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"JavascriptDebugType\" factoryName=\"JavaScript Debug\">\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"NodeJSConfigurationType\" factoryName=\"Node.js\" working-dir=\"\">\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"cucumber.js\" factoryName=\"Cucumber.js\">\n      <option name=\"cucumberJsArguments\" value=\"\" />\n      <option name=\"executablePath\" />\n      <option name=\"filePath\" />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"js.build_tools.gulp\" factoryName=\"Gulp.js\">\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"js.build_tools.npm\" factoryName=\"npm\">\n      <command value=\"run-script\" />\n      <scripts />\n      <envs />\n      <method />\n    </configuration>\n    <configuration default=\"true\" type=\"mocha-javascript-test-runner\" factoryName=\"Mocha\">\n      <node-options />\n      <working-directory>$PROJECT_DIR$</working-directory>\n      <pass-parent-env>true</pass-parent-env>\n      <envs />\n      <ui>bdd</ui>\n      <extra-mocha-options />\n      <test-kind>DIRECTORY</test-kind>\n      <test-directory />\n      <recursive>false</recursive>\n      <method />\n    </configuration>\n    <list size=\"5\">\n      <item index=\"0\" class=\"java.lang.String\" itemvalue=\"Node.js.bin/www\" />\n      <item index=\"1\" class=\"java.lang.String\" itemvalue=\"Node.js.test_kafka.js\" />\n      <item index=\"2\" class=\"java.lang.String\" itemvalue=\"Node.js.test_consumer.js\" />\n      <item index=\"3\" class=\"java.lang.String\" itemvalue=\"Node.js.test_redis.js\" />\n      <item index=\"4\" class=\"java.lang.String\" itemvalue=\"Node.js.app.js\" />\n    </list>\n    <recent_temporary>\n      <list size=\"4\">\n        <item index=\"0\" class=\"java.lang.String\" itemvalue=\"Node.js.app.js\" />\n        <item index=\"1\" class=\"java.lang.String\" itemvalue=\"Node.js.test_redis.js\" />\n        <item index=\"2\" class=\"java.lang.String\" itemvalue=\"Node.js.test_kafka.js\" />\n        <item index=\"3\" class=\"java.lang.String\" itemvalue=\"Node.js.test_consumer.js\" />\n      </list>\n    </recent_temporary>\n  </component>\n  <component name=\"ShelveChangesManager\" show_recycled=\"false\" />\n  <component name=\"TaskManager\">\n    <task active=\"true\" id=\"Default\" summary=\"Default task\">\n      <changelist id=\"6bb1f48b-8c62-4b3a-afd9-bff3aa7791ee\" name=\"Default\" comment=\"\" />\n      <created>1484492752471</created>\n      <option name=\"number\" value=\"Default\" />\n      <updated>1484492752471</updated>\n    </task>\n    <servers />\n  </component>\n  <component name=\"ToolWindowManager\">\n    <frame x=\"0\" y=\"23\" width=\"1439\" height=\"821\" extended-state=\"0\" />\n    <editor active=\"false\" />\n    <layout>\n      <window_info id=\"Project\" active=\"true\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"true\" show_stripe_button=\"true\" weight=\"0.2496474\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"combo\" />\n      <window_info id=\"TODO\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"6\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Event Log\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"-1\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Version Control\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"-1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"npm\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"-1\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Run\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.32968536\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Structure\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.25\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Terminal\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.32968536\" sideWeight=\"0.5\" order=\"-1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Favorites\" active=\"false\" anchor=\"left\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"-1\" side_tool=\"true\" content_ui=\"tabs\" />\n      <window_info id=\"Debug\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"true\" show_stripe_button=\"true\" weight=\"0.3994528\" sideWeight=\"0.5\" order=\"3\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Cvs\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.25\" sideWeight=\"0.5\" order=\"4\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Hierarchy\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.25\" sideWeight=\"0.5\" order=\"2\" side_tool=\"false\" content_ui=\"combo\" />\n      <window_info id=\"Message\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Commander\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.4\" sideWeight=\"0.5\" order=\"0\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Find\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.33\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Inspection\" active=\"false\" anchor=\"bottom\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.4\" sideWeight=\"0.5\" order=\"5\" side_tool=\"false\" content_ui=\"tabs\" />\n      <window_info id=\"Ant Build\" active=\"false\" anchor=\"right\" auto_hide=\"false\" internal_type=\"DOCKED\" type=\"DOCKED\" visible=\"false\" show_stripe_button=\"true\" weight=\"0.25\" sideWeight=\"0.5\" order=\"1\" side_tool=\"false\" content_ui=\"tabs\" />\n    </layout>\n  </component>\n  <component name=\"VcsContentAnnotationSettings\">\n    <option name=\"myLimit\" value=\"2678400000\" />\n  </component>\n  <component name=\"XDebuggerManager\">\n    <breakpoint-manager>\n      <option name=\"time\" value=\"4\" />\n    </breakpoint-manager>\n    <watches-manager />\n  </component>\n  <component name=\"editorHistoryManager\">\n    <entry file=\"file://$PROJECT_DIR$/node_modules/kafka-node/kafka.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"0\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/test_kafka.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\">\n          <caret line=\"19\" column=\"5\" selection-start-line=\"19\" selection-start-column=\"5\" selection-end-line=\"19\" selection-end-column=\"5\" />\n          <folding>\n            <element signature=\"e#0#38#0\" expanded=\"false\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/node_modules/.2.6.5@redis/lib/individualCommands.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\">\n          <caret line=\"24\" column=\"23\" selection-start-line=\"24\" selection-start-column=\"23\" selection-end-line=\"24\" selection-end-column=\"23\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/node_modules/.2.6.5@redis/lib/multi.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\">\n          <caret line=\"110\" column=\"68\" selection-start-line=\"110\" selection-start-column=\"66\" selection-end-line=\"110\" selection-end-column=\"68\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/test_redis.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\">\n          <caret line=\"10\" column=\"24\" selection-start-line=\"10\" selection-start-column=\"24\" selection-end-line=\"10\" selection-end-column=\"24\" />\n          <folding>\n            <element signature=\"e#0#38#0\" expanded=\"false\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/test_consumer.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\">\n          <caret line=\"18\" column=\"3\" selection-start-line=\"18\" selection-start-column=\"3\" selection-end-line=\"18\" selection-end-column=\"3\" />\n          <folding>\n            <element signature=\"e#0#38#0\" expanded=\"false\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/package.json\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"-11.875\">\n          <caret line=\"19\" column=\"0\" selection-start-line=\"19\" selection-start-column=\"0\" selection-end-line=\"19\" selection-end-column=\"0\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/index.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\">\n          <caret line=\"0\" column=\"0\" selection-start-line=\"0\" selection-start-column=\"0\" selection-end-line=\"1\" selection-end-column=\"30\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/app.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"-9.444445\">\n          <caret line=\"27\" column=\"20\" selection-start-line=\"27\" selection-start-column=\"20\" selection-end-line=\"27\" selection-end-column=\"20\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/users.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.0\">\n          <caret line=\"1\" column=\"4\" selection-start-line=\"1\" selection-start-column=\"4\" selection-end-line=\"1\" selection-end-column=\"4\" />\n          <folding />\n        </state>\n      </provider>\n    </entry>\n    <entry file=\"file://$PROJECT_DIR$/routes/seckill.js\">\n      <provider selected=\"true\" editor-type-id=\"text-editor\">\n        <state vertical-scroll-proportion=\"0.40145984\">\n          <caret line=\"13\" column=\"34\" selection-start-line=\"13\" selection-start-column=\"34\" selection-end-line=\"13\" selection-end-column=\"34\" />\n          <folding>\n            <element signature=\"e#0#38#0\" expanded=\"false\" />\n          </folding>\n        </state>\n      </provider>\n    </entry>\n  </component>\n</project>"
  },
  {
    "path": "seckill_service/app.js",
    "content": "var express = require('express');\nvar path = require('path');\nvar favicon = require('serve-favicon');\nvar logger = require('morgan');\nvar cookieParser = require('cookie-parser');\nvar bodyParser = require('body-parser');\n\nvar index = require('./routes/index');\nvar users = require('./routes/users');\nvar seckill = require('./routes/seckill');\n\nvar app = express();\napp.listen(3000);\n\n// view engine setup\napp.set('views', path.join(__dirname, 'views'));\napp.set('view engine', 'jade');\n\n// uncomment after placing your favicon in /public\n//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));\napp.use(logger('dev'));\napp.use(bodyParser.json());\napp.use(bodyParser.urlencoded({ extended: false }));\napp.use(cookieParser());\napp.use(express.static(path.join(__dirname, 'public')));\n\napp.use('/', index);\napp.use('/users', users);\napp.use('/seckill', seckill);\n\n// catch 404 and forward to error handler\napp.use(function(req, res, next) {\n  var err = new Error('Not Found');\n  err.status = 404;\n  next(err);\n});\n\n// error handler\napp.use(function(err, req, res, next) {\n  // set locals, only providing error in development\n  res.locals.message = err.message;\n  res.locals.error = req.app.get('env') === 'development' ? err : {};\n\n  // render the error page\n  res.status(err.status || 500);\n  res.render('error');\n});\n\nmodule.exports = app;\n"
  },
  {
    "path": "seckill_service/bin/www",
    "content": "#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar app = require('../app');\nvar debug = require('debug')('seckill-service:server');\nvar http = require('http');\n\n/**\n * Get port from environment and store in Express.\n */\n\nvar port = normalizePort(process.env.PORT || '3000');\napp.set('port', port);\n\n/**\n * Create HTTP server.\n */\n\nvar server = http.createServer(app);\n\n/**\n * Listen on provided port, on all network interfaces.\n */\n\nserver.listen(port);\nserver.on('error', onError);\nserver.on('listening', onListening);\n\n/**\n * Normalize a port into a number, string, or false.\n */\n\nfunction normalizePort(val) {\n  var port = parseInt(val, 10);\n\n  if (isNaN(port)) {\n    // named pipe\n    return val;\n  }\n\n  if (port >= 0) {\n    // port number\n    return port;\n  }\n\n  return false;\n}\n\n/**\n * Event listener for HTTP server \"error\" event.\n */\n\nfunction onError(error) {\n  if (error.syscall !== 'listen') {\n    throw error;\n  }\n\n  var bind = typeof port === 'string'\n    ? 'Pipe ' + port\n    : 'Port ' + port;\n\n  // handle specific listen errors with friendly messages\n  switch (error.code) {\n    case 'EACCES':\n      console.error(bind + ' requires elevated privileges');\n      process.exit(1);\n      break;\n    case 'EADDRINUSE':\n      console.error(bind + ' is already in use');\n      process.exit(1);\n      break;\n    default:\n      throw error;\n  }\n}\n\n/**\n * Event listener for HTTP server \"listening\" event.\n */\n\nfunction onListening() {\n  var addr = server.address();\n  var bind = typeof addr === 'string'\n    ? 'pipe ' + addr\n    : 'port ' + addr.port;\n  debug('Listening on ' + bind);\n}\n"
  },
  {
    "path": "seckill_service/package.json",
    "content": "{\n  \"name\": \"seckill-service\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"start\": \"node ./bin/www\"\n  },\n  \"dependencies\": {\n    \"body-parser\": \"~1.15.2\",\n    \"cookie-parser\": \"~1.4.3\",\n    \"debug\": \"~2.2.0\",\n    \"express\": \"~4.14.0\",\n    \"jade\": \"~1.11.0\",\n    \"kafka-node\": \"^1.3.0\",\n    \"morgan\": \"~1.7.0\",\n    \"mysql\": \"^2.12.0\",\n    \"redis\": \"^2.6.5\",\n    \"serve-favicon\": \"~2.3.0\"\n  }\n}\n"
  },
  {
    "path": "seckill_service/public/stylesheets/style.css",
    "content": "body {\n  padding: 50px;\n  font: 14px \"Lucida Grande\", Helvetica, Arial, sans-serif;\n}\n\na {\n  color: #00B7FF;\n}\n"
  },
  {
    "path": "seckill_service/routes/index.js",
    "content": "var express = require('express');\nvar router = express.Router();\n\n/* GET home page. */\nrouter.get('/', function(req, res, next) {\n  res.render('index', { title: 'Express' });\n});\n\nmodule.exports = router;\n"
  },
  {
    "path": "seckill_service/routes/seckill.js",
    "content": "var express = require('express');\nvar router = express.Router();\nvar redis = require('redis');\nvar kafka = require('kafka-node');\nvar Producer = kafka.Producer;\nvar kafkaClient = new kafka.Client();\nvar producer = new Producer(kafkaClient);\nvar count = 0;\n\nrouter.post('/seckill', function (req, res) {\n    console.log('count=' + count++);\n    var fn = function (optionalClient) {\n        if (optionalClient == 'undefined' || optionalClient == null) {\n            var client = redis.createClient();\n        }else{\n            var client = optionalClient;\n        }\n        client.on('error', function (er) {\n            console.trace('Here I am');\n            console.error(er.stack);\n            client.end(true);\n        });\n        client.watch(\"counter\");\n        client.get(\"counter\", function (err, reply) {\n            if (parseInt(reply) > 0) {\n                var multi = client.multi();\n                multi.decr(\"counter\");\n                multi.exec(function (err, replies) {\n                    if (replies == null) {\n                        console.log('should have conflict')\n                        fn(client);\n                    } else {\n                        var payload = [\n                            {\n                                topic: 'CAR_NUMBER',\n                                messages: 'buy 1 car',\n                                partition: 0\n                            }\n                        ];\n                        producer.send(payload, function (err, data) {\n                            console.log(data);\n                        });\n                        res.send(replies);\n                        client.end(true);\n                    }\n                });\n            } else {\n                console.log(\"sold out!\");\n                res.send(\"sold out!\");\n                client.end(true);\n            }\n        })\n    };\n    fn();\n});\n\nmodule.exports = router;"
  },
  {
    "path": "seckill_service/routes/users.js",
    "content": "var express = require('express');\nvar router = express.Router();\n\n/* GET users listing. */\nrouter.get('/', function(req, res, next) {\n  res.send('respond with a resource');\n});\n\nmodule.exports = router;\n"
  },
  {
    "path": "seckill_service/seckill_kafka_consumer.js",
    "content": "var kafka = require('kafka-node'),\n    Consumer = kafka.Consumer,\n    client = new kafka.Client(),\n    consumer = new Consumer(\n        client,\n        [\n            {topic: 'CAR_NUMBER', partition: 0}\n        ],\n        {\n            autoCommit: true\n        }\n    );\n\nvar mysql = require('mysql');\nvar connection = mysql.createConnection({\n    host     : 'localhost',\n    user     : 'root',\n    password : 'root',\n    database : 'seckill'\n});\n\nconnection.connect();\n\nconsumer.on('message', function (message) {\n    connection.query('INSERT INTO seckill set ?', {date: new Date()}, function(error, results, fields){\n        if(error){\n            console.error(error);\n        }\n        console.log(results);\n    })\n});"
  },
  {
    "path": "seckill_service/views/error.jade",
    "content": "extends layout\n\nblock content\n  h1= message\n  h2= error.status\n  pre #{error.stack}\n"
  },
  {
    "path": "seckill_service/views/index.jade",
    "content": "extends layout\n\nblock content\n  h1= title\n  p Welcome to #{title}\n"
  },
  {
    "path": "seckill_service/views/layout.jade",
    "content": "doctype html\nhtml\n  head\n    title= title\n    link(rel='stylesheet', href='/stylesheets/style.css')\n  body\n    block content\n"
  }
]