diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2065bc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,37 @@
+HELP.md
+.gradle
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..07e72e7
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..6c094e1
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..786e160
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..c5ad60c
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/remote-targets.xml b/.idea/remote-targets.xml
new file mode 100644
index 0000000..bdce3f4
--- /dev/null
+++ b/.idea/remote-targets.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..dcb6b8c
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 2996629..33b8330 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,7 +4,9 @@
-
+
+
+
@@ -34,9 +36,9 @@
"ASKED_ADD_EXTERNAL_FILES": "true",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
- "git-widget-placeholder": "0.1.0/registerPage/J",
+ "git-widget-placeholder": "0.1.0/storage/K",
"kotlin-language-version-configured": "true",
- "last_opened_file_path": "//wsl$/Ubuntu-22.04/home/playdata/final",
+ "last_opened_file_path": "//wsl.localhost/Ubuntu-22.04/home/seull/final",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
@@ -55,13 +57,6 @@
-
-
-
-
-
-
-
@@ -72,6 +67,7 @@
1710830089201
+
diff --git a/README.md b/README.md
index c18cd69..02ba9a1 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,71 @@
-# 4team_final_MainSpring
+<<<<<<< HEAD
+m_final_MainSpring
+
spring 메인 레포
+=======
+# 4team_final_MainSpring
+spring 메인 레포!!
+
+>>>>>>> c66e738dff68eaf9eeb463527fe00f1e25000fd3
+
+
+<<<<<<< HEAD
+## Dependencies
+```
+Spring 3.2.1
+
+jpa, web
+
+jjwt package(api, impl, jackson) 0.12.3
+
+mariadb-client
+
+lombok
+
+oauth2 2.5.2.RELEASE
-### 다들 규칙 확인하시고 시작하세요!!
+oauth2-client 6.2.3
+json 21211205
+
+gson 2.10.1
+```
+
+전승민 [초기 registerPage branch v0.1.1]
+
+changes
+
+1. delete demo files ( demo, java, src)
+
+2. delete useless dir ( temp)
+
+3. created new project (main-Login)
+> login page, register page
+
+4. branch registerPage/0.1.3/J
+> 0.1.2버전에서 지속되는 문제를 해결하기 위해 새로운 코드로 생성해볼 예정
+>
+> main-Login-2 <- 메인 프로젝트
+>
+> main-Login-3, main-Login-4, test => test용 프로젝트 실사용 x
+=======
| git 컨벤션 규칙 |
|----------------|
|[WIKI](https://github.com/team4-order/team4-main/wiki/%EC%BB%A8%EB%B2%A4%EC%85%98-%EA%B7%9C%EC%B9%99)|
+>>>>>>> c66e738dff68eaf9eeb463527fe00f1e25000fd3
+
+
+---------------------------------------------------------
+
+구현 로그인 기능 (24-04-05)
+1. jwt 발급을 통한 로그인 기능
+2. 소셜 로그인을 통한 로그인 기능
+3. 회원가입
+4. 로그아웃
+구현 예정 기능
+1. 회원 탈퇴
+2. 회원 정보 찾기
diff --git a/demo/.idea/workspace.xml b/demo/.idea/workspace.xml
new file mode 100644
index 0000000..39c2794
--- /dev/null
+++ b/demo/.idea/workspace.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1710911394735
+
+
+ 1710911394735
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo2/demo2/src/main/resources/static/favicon.ico b/demo2/demo2/src/main/resources/static/favicon.ico
new file mode 100644
index 0000000..df36fcf
Binary files /dev/null and b/demo2/demo2/src/main/resources/static/favicon.ico differ
diff --git a/demo2/demo2/src/main/resources/static/index.html b/demo2/demo2/src/main/resources/static/index.html
new file mode 100644
index 0000000..90000bd
--- /dev/null
+++ b/demo2/demo2/src/main/resources/static/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+ frontend
+
+
+
+
+
+
+
diff --git a/demo2/demo2/src/main/resources/static/js/app.js b/demo2/demo2/src/main/resources/static/js/app.js
new file mode 100644
index 0000000..bd450b8
--- /dev/null
+++ b/demo2/demo2/src/main/resources/static/js/app.js
@@ -0,0 +1,388 @@
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (function() { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=script&lang=js":
+/*!**************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=script&lang=js ***!
+ \**************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _components_HelloWorld_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/HelloWorld.vue */ \"./src/components/HelloWorld.vue\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'App',\n components: {\n HelloWorld: _components_HelloWorld_vue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]\n }\n});\n\n//# sourceURL=webpack://frontend/./src/App.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/HelloWorld.vue?vue&type=script&lang=js":
+/*!********************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/HelloWorld.vue?vue&type=script&lang=js ***!
+ \********************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'HelloWorld',\n props: {\n msg: String\n }\n});\n\n//# sourceURL=webpack://frontend/./src/components/HelloWorld.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=template&id=7ba5bd90":
+/*!******************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=template&id=7ba5bd90 ***!
+ \******************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _assets_logo_png__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assets/logo.png */ \"./src/assets/logo.png\");\n\n\nconst _hoisted_1 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"img\", {\n alt: \"Vue logo\",\n src: _assets_logo_png__WEBPACK_IMPORTED_MODULE_1__\n}, null, -1 /* HOISTED */);\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n const _component_HelloWorld = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)(\"HelloWorld\");\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, [_hoisted_1, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_HelloWorld, {\n msg: \"Welcome to Your Vue.js App\"\n })], 64 /* STABLE_FRAGMENT */);\n}\n\n//# sourceURL=webpack://frontend/./src/App.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
+
+/***/ }),
+
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/HelloWorld.vue?vue&type=template&id=469af010&scoped=true":
+/*!************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/HelloWorld.vue?vue&type=template&id=469af010&scoped=true ***!
+ \************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; }\n/* harmony export */ });\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n\nconst _withScopeId = n => ((0,vue__WEBPACK_IMPORTED_MODULE_0__.pushScopeId)(\"data-v-469af010\"), n = n(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.popScopeId)(), n);\nconst _hoisted_1 = {\n class: \"hello\"\n};\nconst _hoisted_2 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createStaticVNode)(\" For a guide and recipes on how to configure / customize this project,
check out the vue-cli documentation.
Installed CLI Plugins
Essential Links
Ecosystem
\", 7);\nfunction render(_ctx, _cache, $props, $setup, $data, $options) {\n return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(\"div\", _hoisted_1, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)(\"h1\", null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)($props.msg), 1 /* TEXT */), _hoisted_2]);\n}\n\n//# sourceURL=webpack://frontend/./src/components/HelloWorld.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/vue-loader/dist/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
+
+/***/ }),
+
+/***/ "./src/main.js":
+/*!*********************!*\
+ !*** ./src/main.js ***!
+ \*********************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.runtime.esm-bundler.js\");\n/* harmony import */ var _App_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App.vue */ \"./src/App.vue\");\n\n\n(0,vue__WEBPACK_IMPORTED_MODULE_0__.createApp)(_App_vue__WEBPACK_IMPORTED_MODULE_1__[\"default\"]).mount('#app');\n\n//# sourceURL=webpack://frontend/./src/main.js?");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css":
+/*!****************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css ***!
+ \****************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n#app {\\n font-family: Avenir, Helvetica, Arial, sans-serif;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n text-align: center;\\n color: #2c3e50;\\n margin-top: 60px;\\n}\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./src/App.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/HelloWorld.vue?vue&type=style&index=0&id=469af010&scoped=true&lang=css":
+/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/HelloWorld.vue?vue&type=style&index=0&id=469af010&scoped=true&lang=css ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\nh3[data-v-469af010] {\\n margin: 40px 0 0;\\n}\\nul[data-v-469af010] {\\n list-style-type: none;\\n padding: 0;\\n}\\nli[data-v-469af010] {\\n display: inline-block;\\n margin: 0 10px;\\n}\\na[data-v-469af010] {\\n color: #42b983;\\n}\\n\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://frontend/./src/components/HelloWorld.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use%5B1%5D!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use%5B2%5D!./node_modules/vue-loader/dist/index.js??ruleSet%5B0%5D.use%5B0%5D");
+
+/***/ }),
+
+/***/ "./src/App.vue":
+/*!*********************!*\
+ !*** ./src/App.vue ***!
+ \*********************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _App_vue_vue_type_template_id_7ba5bd90__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./App.vue?vue&type=template&id=7ba5bd90 */ \"./src/App.vue?vue&type=template&id=7ba5bd90\");\n/* harmony import */ var _App_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App.vue?vue&type=script&lang=js */ \"./src/App.vue?vue&type=script&lang=js\");\n/* harmony import */ var _App_vue_vue_type_style_index_0_id_7ba5bd90_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css */ \"./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_App_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_App_vue_vue_type_template_id_7ba5bd90__WEBPACK_IMPORTED_MODULE_0__.render],['__file',\"src/App.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://frontend/./src/App.vue?");
+
+/***/ }),
+
+/***/ "./src/components/HelloWorld.vue":
+/*!***************************************!*\
+ !*** ./src/components/HelloWorld.vue ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _HelloWorld_vue_vue_type_template_id_469af010_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./HelloWorld.vue?vue&type=template&id=469af010&scoped=true */ \"./src/components/HelloWorld.vue?vue&type=template&id=469af010&scoped=true\");\n/* harmony import */ var _HelloWorld_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./HelloWorld.vue?vue&type=script&lang=js */ \"./src/components/HelloWorld.vue?vue&type=script&lang=js\");\n/* harmony import */ var _HelloWorld_vue_vue_type_style_index_0_id_469af010_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./HelloWorld.vue?vue&type=style&index=0&id=469af010&scoped=true&lang=css */ \"./src/components/HelloWorld.vue?vue&type=style&index=0&id=469af010&scoped=true&lang=css\");\n/* harmony import */ var _node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../node_modules/vue-loader/dist/exportHelper.js */ \"./node_modules/vue-loader/dist/exportHelper.js\");\n\n\n\n\n;\n\n\nconst __exports__ = /*#__PURE__*/(0,_node_modules_vue_loader_dist_exportHelper_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_HelloWorld_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], [['render',_HelloWorld_vue_vue_type_template_id_469af010_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render],['__scopeId',\"data-v-469af010\"],['__file',\"src/components/HelloWorld.vue\"]])\n/* hot reload */\nif (false) {}\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (__exports__);\n\n//# sourceURL=webpack://frontend/./src/components/HelloWorld.vue?");
+
+/***/ }),
+
+/***/ "./src/App.vue?vue&type=script&lang=js":
+/*!*********************************************!*\
+ !*** ./src/App.vue?vue&type=script&lang=js ***!
+ \*********************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./App.vue?vue&type=script&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=script&lang=js\");\n \n\n//# sourceURL=webpack://frontend/./src/App.vue?");
+
+/***/ }),
+
+/***/ "./src/components/HelloWorld.vue?vue&type=script&lang=js":
+/*!***************************************************************!*\
+ !*** ./src/components/HelloWorld.vue?vue&type=script&lang=js ***!
+ \***************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_HelloWorld_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_HelloWorld_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./HelloWorld.vue?vue&type=script&lang=js */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/HelloWorld.vue?vue&type=script&lang=js\");\n \n\n//# sourceURL=webpack://frontend/./src/components/HelloWorld.vue?");
+
+/***/ }),
+
+/***/ "./src/App.vue?vue&type=template&id=7ba5bd90":
+/*!***************************************************!*\
+ !*** ./src/App.vue?vue&type=template&id=7ba5bd90 ***!
+ \***************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_template_id_7ba5bd90__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_template_id_7ba5bd90__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./App.vue?vue&type=template&id=7ba5bd90 */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=template&id=7ba5bd90\");\n\n\n//# sourceURL=webpack://frontend/./src/App.vue?");
+
+/***/ }),
+
+/***/ "./src/components/HelloWorld.vue?vue&type=template&id=469af010&scoped=true":
+/*!*********************************************************************************!*\
+ !*** ./src/components/HelloWorld.vue?vue&type=template&id=469af010&scoped=true ***!
+ \*********************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_HelloWorld_vue_vue_type_template_id_469af010_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render; }\n/* harmony export */ });\n/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_40_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_3_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_HelloWorld_vue_vue_type_template_id_469af010_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./HelloWorld.vue?vue&type=template&id=469af010&scoped=true */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/HelloWorld.vue?vue&type=template&id=469af010&scoped=true\");\n\n\n//# sourceURL=webpack://frontend/./src/components/HelloWorld.vue?");
+
+/***/ }),
+
+/***/ "./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css":
+/*!*****************************************************************!*\
+ !*** ./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css ***!
+ \*****************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_7ba5bd90_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../node_modules/vue-loader/dist/stylePostLoader.js!../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css */ \"./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css\");\n/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_7ba5bd90_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_7ba5bd90_lang_css__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_7ba5bd90_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_App_vue_vue_type_style_index_0_id_7ba5bd90_lang_css__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceURL=webpack://frontend/./src/App.vue?");
+
+/***/ }),
+
+/***/ "./src/components/HelloWorld.vue?vue&type=style&index=0&id=469af010&scoped=true&lang=css":
+/*!***********************************************************************************************!*\
+ !*** ./src/components/HelloWorld.vue?vue&type=style&index=0&id=469af010&scoped=true&lang=css ***!
+ \***********************************************************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_HelloWorld_vue_vue_type_style_index_0_id_469af010_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../node_modules/vue-loader/dist/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./HelloWorld.vue?vue&type=style&index=0&id=469af010&scoped=true&lang=css */ \"./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/HelloWorld.vue?vue&type=style&index=0&id=469af010&scoped=true&lang=css\");\n/* harmony import */ var _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_HelloWorld_vue_vue_type_style_index_0_id_469af010_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_HelloWorld_vue_vue_type_style_index_0_id_469af010_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_HelloWorld_vue_vue_type_style_index_0_id_469af010_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _node_modules_vue_style_loader_index_js_clonedRuleSet_12_use_0_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_HelloWorld_vue_vue_type_style_index_0_id_469af010_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceURL=webpack://frontend/./src/components/HelloWorld.vue?");
+
+/***/ }),
+
+/***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css":
+/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=css ***!
+ \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
+/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
+
+eval("// style-loader: Adds some css to the DOM by adding a
diff --git a/demo2/frontend/src/assets/logo.png b/demo2/frontend/src/assets/logo.png
new file mode 100644
index 0000000..f3d2503
Binary files /dev/null and b/demo2/frontend/src/assets/logo.png differ
diff --git a/demo2/frontend/src/components/HelloWorld.vue b/demo2/frontend/src/components/HelloWorld.vue
new file mode 100644
index 0000000..879051a
--- /dev/null
+++ b/demo2/frontend/src/components/HelloWorld.vue
@@ -0,0 +1,58 @@
+
+
+
{{ msg }}
+
+ For a guide and recipes on how to configure / customize this project,
+ check out the
+ vue-cli documentation.
+
+
Installed CLI Plugins
+
+
Essential Links
+
+
Ecosystem
+
+
+
+
+
+
+
+
diff --git a/demo2/frontend/src/main.js b/demo2/frontend/src/main.js
new file mode 100644
index 0000000..01433bc
--- /dev/null
+++ b/demo2/frontend/src/main.js
@@ -0,0 +1,4 @@
+import { createApp } from 'vue'
+import App from './App.vue'
+
+createApp(App).mount('#app')
diff --git a/demo2/frontend/vue.config.js b/demo2/frontend/vue.config.js
new file mode 100644
index 0000000..17b3961
--- /dev/null
+++ b/demo2/frontend/vue.config.js
@@ -0,0 +1,15 @@
+const { defineConfig } = require('@vue/cli-service')
+module.exports = defineConfig({
+ transpileDependencies: true,
+ outputDir: "../src/main/resources/static",
+
+ devServer: {
+ proxy: {
+ '/': {
+ target: "http://localhost:8080",
+ changeOrigin: true,
+ }
+ }
+ }
+
+})
diff --git a/demo2/pom.xml b/demo2/pom.xml
index e8d1b1e..0959e1b 100644
--- a/demo2/pom.xml
+++ b/demo2/pom.xml
@@ -8,7 +8,7 @@
3.2.3
- main.spring.login
+ main.spring
demo2
0.0.1-SNAPSHOT
demo2
@@ -32,10 +32,6 @@
mariadb-java-client
runtime
-
- org.springframework.boot
- spring-boot-starter-security
-
org.projectlombok
lombok
@@ -62,24 +58,15 @@
org.springframework.boot
spring-boot-starter-thymeleaf
-
- org.springframework.security
- spring-security-test
- test
-
-
- org.thymeleaf.extras
- thymeleaf-extras-springsecurity6
-
-
+
org.springframework.boot
spring-boot-maven-plugin
-
+
\ No newline at end of file
diff --git a/demo2/src/main/java/controller/SampleController.java b/demo2/src/main/java/controller/SampleController.java
deleted file mode 100644
index 98b3e19..0000000
--- a/demo2/src/main/java/controller/SampleController.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package controller;
-
-public class SampleController {
-}
diff --git a/demo2/src/main/java/entity/Sample.java b/demo2/src/main/java/entity/Sample.java
deleted file mode 100644
index 337aba5..0000000
--- a/demo2/src/main/java/entity/Sample.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package entity;
-
-public class Sample {
-}
diff --git a/demo2/src/main/java/main/spring/login/demo2/CorsMvcConfig.java b/demo2/src/main/java/main/spring/login/demo2/CorsMvcConfig.java
new file mode 100644
index 0000000..ce64945
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/CorsMvcConfig.java
@@ -0,0 +1,15 @@
+package main.spring.login.demo2;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+@Configuration
+public class CorsMvcConfig implements WebMvcConfigurer {
+
+ @Override
+ public void addCorsMappings(CorsRegistry corsRegistry)
+ {
+ corsRegistry.addMapping("/**")
+ .allowedOrigins("http://localhost:8080");
+ }
+}
\ No newline at end of file
diff --git a/demo2/src/main/java/main/spring/login/demo2/Demo2Application.java b/demo2/src/main/java/main/spring/login/demo2/Demo2Application.java
index 04018cd..a06e392 100644
--- a/demo2/src/main/java/main/spring/login/demo2/Demo2Application.java
+++ b/demo2/src/main/java/main/spring/login/demo2/Demo2Application.java
@@ -1,13 +1,13 @@
-package main.spring.login.demo2;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class Demo2Application {
-
- public static void main(String[] args) {
- SpringApplication.run(Demo2Application.class, args);
- }
-
-}
+package main.spring.login.demo2;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Demo2Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Demo2Application.class, args);
+ }
+
+}
\ No newline at end of file
diff --git a/demo2/src/main/java/main/spring/login/demo2/config/CorsMvcConfig.java b/demo2/src/main/java/main/spring/login/demo2/config/CorsMvcConfig.java
new file mode 100644
index 0000000..a71236e
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/config/CorsMvcConfig.java
@@ -0,0 +1,16 @@
+//package main.spring.login.demo2.config;
+//
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.web.servlet.config.annotation.CorsRegistry;
+//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+//
+//@Configuration
+//public class CorsMvcConfig implements WebMvcConfigurer {
+//
+// @Override
+// public void addCorsMappings(CorsRegistry corsRegistry)
+// {
+// corsRegistry.addMapping("/**")
+// .allowedOrigins("http://localhost:8080");
+// }
+//}
\ No newline at end of file
diff --git a/demo2/src/main/java/main/spring/login/demo2/config/WebConfig.java b/demo2/src/main/java/main/spring/login/demo2/config/WebConfig.java
new file mode 100644
index 0000000..34d1c3f
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/config/WebConfig.java
@@ -0,0 +1,17 @@
+package main.spring.login.demo2.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+ @Override
+ public void addCorsMappings(CorsRegistry registry) {
+ registry.addMapping("/**")
+ .allowedOrigins("http://localhost:8081")
+ .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
+ .allowedHeaders("*")
+ .allowCredentials(true);
+ }
+}
\ No newline at end of file
diff --git a/demo2/src/main/java/main/spring/login/demo2/controller/BusinessController.java b/demo2/src/main/java/main/spring/login/demo2/controller/BusinessController.java
new file mode 100644
index 0000000..0abeee5
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/controller/BusinessController.java
@@ -0,0 +1,22 @@
+package main.spring.login.demo2.controller;
+
+import main.spring.login.demo2.entity.Business;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import main.spring.login.demo2.service.BusinessService;
+
+@RestController
+@RequestMapping("/api/business")
+public class BusinessController {
+
+ @Autowired
+ private BusinessService businessService;
+
+ @GetMapping("{businessId}")
+ public Business getBusinessById(@PathVariable("businessId") String businessId) {
+ return businessService.getBusinessById(businessId);
+ }
+}
\ No newline at end of file
diff --git a/demo2/src/main/java/main/spring/login/demo2/controller/CStorageController.java b/demo2/src/main/java/main/spring/login/demo2/controller/CStorageController.java
new file mode 100644
index 0000000..1cfe213
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/controller/CStorageController.java
@@ -0,0 +1,27 @@
+package main.spring.login.demo2.controller;
+
+import main.spring.login.demo2.entity.CStorage;
+import main.spring.login.demo2.entity.InventoryTotal;
+import main.spring.login.demo2.repository.InventorySummary;
+import main.spring.login.demo2.service.CStorageService;
+import main.spring.login.demo2.service.InventoryTotalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/storage")
+public class CStorageController {
+ @Autowired
+ private CStorageService cStorageService;
+
+ @GetMapping("/{customerCode}")
+ public List getStorageByCustomerCode(@PathVariable("customerCode") String customerCode){
+ return cStorageService.getStorageByCustomerCode(customerCode);
+ }
+
+}
diff --git a/demo2/src/main/java/main/spring/login/demo2/controller/ContactController.java b/demo2/src/main/java/main/spring/login/demo2/controller/ContactController.java
new file mode 100644
index 0000000..f63bfc9
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/controller/ContactController.java
@@ -0,0 +1,78 @@
+package main.spring.login.demo2.controller;
+
+
+import main.spring.login.demo2.dto.ContactDTO;
+import main.spring.login.demo2.dto.ContactYDto;
+import main.spring.login.demo2.entity.Contact;
+import main.spring.login.demo2.entity.OrderMaster;
+import main.spring.login.demo2.service.ContactService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/contact")
+public class ContactController {
+ private final ContactService contactService;
+
+ @Autowired
+ public ContactController(ContactService contactService) {
+ this.contactService = contactService;
+ }
+
+ // 모든 고객 정보를 반환하는 메서드
+ @GetMapping("/customers/{businessId}")
+ public ResponseEntity> AllCustomers(@PathVariable("businessId") String businessId) {
+ List customers = contactService.findByBusinessIdC(businessId); // 서비스를 통해 모든 고객 정보 조회
+ return ResponseEntity.ok(customers); // 조회된 고객 정보를 HTTP 응답 본문에 포함하여 반환
+ }
+
+ @GetMapping("/storages") //창고 정보 가져오는 controller
+ public ResponseEntity> AllSCustomers() {
+ List storages = contactService.findAllSCustomers();
+ return ResponseEntity.ok(storages);
+ }
+
+ @PostMapping("/inputcustomer")
+ public ResponseEntity addContact(@RequestBody ContactDTO contactDTO) {
+ ContactDTO savedContactDTO = contactService.saveContact(contactDTO);
+ return new ResponseEntity<>(savedContactDTO, HttpStatus.CREATED);
+ }
+
+ // 특정 고객 정보를 반환하는 메서드
+ @GetMapping("/customer/{contactCode}")
+ public ResponseEntity getCustomerByCode(@PathVariable("contactCode") String contactCode) {
+ Contact customer = (Contact) contactService.findByContactCode(contactCode);
+ return ResponseEntity.ok(customer);
+ }
+
+ //고객 정보 수정하는 기능
+ @PutMapping("/customers/{contactCode}")
+ public ResponseEntity updateCustomer(@PathVariable("contactCode") String contactCode,
+ @RequestBody ContactDTO updatedContactDTO) {
+ Contact existingCustomer = contactService.findByContactCode(contactCode);
+ if (existingCustomer != null) {
+ // 업데이트할 데이터 설정
+ existingCustomer.setContactName(updatedContactDTO.getContactName());
+ existingCustomer.setContactAddress(updatedContactDTO.getContactAddress());
+ existingCustomer.setCustomerPassword(updatedContactDTO.getCustomerPassword());
+ existingCustomer.setCustomerPhone(updatedContactDTO.getCustomerPhone());
+
+ // 업데이트된 고객 정보 저장
+ Contact updatedCustomer = contactService.saveContact(existingCustomer);
+
+ return ResponseEntity.ok(updatedCustomer);
+ } else {
+ return ResponseEntity.notFound().build();
+ }
+ }
+
+ @GetMapping("/busId/{businessId}")
+ public List findContactNameByBusinessId(@PathVariable("businessId") String businessId) {
+ return contactService.findContactNameByBusinessId(businessId);
+ }
+
+}
diff --git a/demo2/src/main/java/main/spring/login/demo2/controller/InventoryController.java b/demo2/src/main/java/main/spring/login/demo2/controller/InventoryController.java
new file mode 100644
index 0000000..90a57f6
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/controller/InventoryController.java
@@ -0,0 +1,41 @@
+package main.spring.login.demo2.controller;
+
+import main.spring.login.demo2.entity.Inventory;
+import main.spring.login.demo2.service.InventoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/inventories")
+public class InventoryController {
+
+ private final InventoryService inventoryService;
+
+ @Autowired
+ public InventoryController(InventoryService inventoryService) {
+ this.inventoryService = inventoryService;
+ }
+
+ @GetMapping
+ public List getAllInventories() {
+ return inventoryService.findAll();
+ }
+
+
+
+// @GetMapping("/read/{storageCode}")
+// public List findByStorageCode(@PathVariable String storageCode) {
+// return inventoryService.findByStorageCode(storageCode);
+// }
+
+ @GetMapping("/read/{storageCode}")
+ public List findByStorageCode(@PathVariable String storageCode) {
+ return inventoryService.findByStorageCode(storageCode);
+ }
+}
+
diff --git a/demo2/src/main/java/main/spring/login/demo2/controller/InventoryTotalController.java b/demo2/src/main/java/main/spring/login/demo2/controller/InventoryTotalController.java
new file mode 100644
index 0000000..281ff76
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/controller/InventoryTotalController.java
@@ -0,0 +1,45 @@
+package main.spring.login.demo2.controller;
+
+import main.spring.login.demo2.dto.InventoryTotalDto;
+import main.spring.login.demo2.entity.InventoryTotal;
+import main.spring.login.demo2.repository.InventorySummary;
+import main.spring.login.demo2.service.InventoryTotalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/total")
+public class InventoryTotalController {
+
+ @Autowired
+ private InventoryTotalService inventoryTotalService;
+
+
+ @GetMapping("/{customerCode}")
+ public List getInventoryTotalByCustomerCode(@PathVariable("customerCode") String customerCode){
+ return inventoryTotalService.getTotalByCustomerCode(customerCode);
+ }
+
+ @GetMapping("/summary/{customerCode}")
+ public List getTotalSummaryByCustomerCode(@PathVariable("customerCode") String customerCode){
+ return inventoryTotalService.getTotalSummaryByCustomerCode(customerCode);
+ }
+
+// @GetMapping("/storage/{storageCode}")
+// public List getTotalByStorageCode(@PathVariable("storageCode") String storageCode){
+// return inventoryTotalService.getTotalByStorageCode(storageCode);
+// }
+
+
+ @GetMapping("/storage/{storageCode}")
+ public List getTotalByStorageCode(@PathVariable("storageCode") String storageCode){
+ return inventoryTotalService.getInventoryTotalByStorageCode(storageCode);
+ }
+
+}
+
diff --git a/demo2/src/main/java/main/spring/login/demo2/controller/OrderController.java b/demo2/src/main/java/main/spring/login/demo2/controller/OrderController.java
new file mode 100644
index 0000000..8a40967
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/controller/OrderController.java
@@ -0,0 +1,10 @@
+package main.spring.login.demo2.controller;
+
+import java.util.*;
+
+
+public class OrderController {
+
+
+
+}
diff --git a/demo2/src/main/java/main/spring/login/demo2/controller/OrderMasterController.java b/demo2/src/main/java/main/spring/login/demo2/controller/OrderMasterController.java
new file mode 100644
index 0000000..3e3a1bd
--- /dev/null
+++ b/demo2/src/main/java/main/spring/login/demo2/controller/OrderMasterController.java
@@ -0,0 +1,119 @@
+package main.spring.login.demo2.controller;
+
+import main.spring.login.demo2.dto.OrderMasterDTO;
+import main.spring.login.demo2.dto.OrderMasterYDto;
+import main.spring.login.demo2.entity.Contact;
+import main.spring.login.demo2.entity.OrderMaster;
+import main.spring.login.demo2.entity.OrderProduct;
+import main.spring.login.demo2.repository.OrderMasterRepository;
+import main.spring.login.demo2.service.OrderMasterService;
+import main.spring.login.demo2.service.OrderProductService;
+import org.hibernate.query.Order;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDate;
+import java.util.*;
+
+@RestController
+@RequestMapping("/api/orders")
+public class OrderMasterController {
+
+ @Autowired
+ private OrderMasterService orderMasterService;
+
+ @Autowired
+ private OrderMasterRepository orderMasterRepository;
+
+ @Autowired // 이 부분이 누락되어 있습니다.
+ private OrderProductService orderProductService; // 이제 OrderProductService를 주입받아 사용할 수 있습니다.
+
+ @GetMapping("/customer")
+ public List getOrders() {
+ return orderMasterService.findAllOrderMaster();
+ }
+
+ @GetMapping("/customer/{customerCode}")
+ public List getOrdersByCustomerCode(@PathVariable("customerCode") String customerCode) {
+ return orderMasterService.getOrderMastersByCustomerCode(customerCode);
+ }
+
+ //business id 에 따른 주문 목록
+ @GetMapping("/id/{businessId}")
+ public List getOrdersByBusinessId(@PathVariable("businessId") String businessId) {
+ return orderMasterService.findByBusinessId(businessId);
+ }
+
+ @GetMapping("/customer/{customerCode}/products")
+ public ResponseEntity> getOrderProductsByCustomerCode(@PathVariable("customerCode") String customerCode) {
+ List orderMasters = orderMasterService.getOrderMastersByCustomerCode(customerCode);
+ List orderProducts = new ArrayList<>();
+
+ for(OrderMaster orderMaster : orderMasters) {
+ orderProducts.addAll(orderProductService.getOrderProductsByOrderNumber(orderMaster.getOrderNumber()));
+ }
+
+ return ResponseEntity.ok(orderProducts);
+ }
+
+ @GetMapping("/adjustment")
+ public ResponseEntity> getAllOrderMasters() {
+ List orderMasters = orderMasterService.findAllOrderMaster();
+ return ResponseEntity.ok(orderMasters);
+ }
+
+ @GetMapping("/pendingsettlement/{customerCode}")
+ public ResponseEntity isPendingSettlement(@PathVariable("customerCode") String customerCode) {
+ boolean pendingSettlement = orderMasterService.isPendingSettlement(customerCode);
+ return ResponseEntity.ok(pendingSettlement);
+ }
+
+ // 특정 businessId의 orderNumber에 해당하는 주문을 가져오는 엔드포인트
+ @GetMapping("/id/{businessId}/{orderNumber}")
+ public ResponseEntity getOrderByIdAndOrderNumber(
+ @PathVariable("businessId") String businessId,
+ @PathVariable("orderNumber") Integer orderNumber) {
+ return ResponseEntity.ok(orderMasterService.findByBusinessIdAndOrderNumber(businessId, orderNumber));
+ }
+
+ // 현재 달에 해당하는 특정 코드와 같은 데이터를 모두 검색하고, 그 중에서 '미정산' 상태와 '정산 완료' 상태의 주문 개수를 계산
+ @GetMapping("/{customerContact}/count")
+ public ResponseEntity