From 55c582084fd4a2ea937363dca85644f05de8ab73 Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Wed, 7 Jun 2023 07:28:42 +0200 Subject: [PATCH] Feat(all): back and front communicate --- backend/src/api/main.py | 13 ++++- backend/src/months.py | 10 ++-- front/Dockerfile | 1 + front/package.json | 6 ++- front/src/App.vue | 17 ++----- front/src/components/HelloWorld.vue | 75 ++++++++++------------------- front/src/main.js | 14 +++++- front/src/router/index.js | 25 ++++++++++ front/src/views/AboutView.vue | 5 ++ front/src/views/HomeView.vue | 18 +++++++ front/yarn.lock | 65 +++++++++++++++++++++++-- 11 files changed, 173 insertions(+), 76 deletions(-) create mode 100644 front/src/router/index.js create mode 100644 front/src/views/AboutView.vue create mode 100644 front/src/views/HomeView.vue diff --git a/backend/src/api/main.py b/backend/src/api/main.py index 355f09b..d499070 100644 --- a/backend/src/api/main.py +++ b/backend/src/api/main.py @@ -1,9 +1,20 @@ from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware + from ..months import retreive_months +from ..config import config app = FastAPI() +app.add_middleware( + CORSMiddleware, + allow_origins=["http://localhost:8080"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + @app.get("/months") async def get_months(): - return retreive_months() + return retreive_months(config["datapath"]) diff --git a/backend/src/months.py b/backend/src/months.py index 56f8d51..f4ed5d8 100644 --- a/backend/src/months.py +++ b/backend/src/months.py @@ -1,4 +1,3 @@ -from .config import config from pathlib import Path import csv @@ -7,8 +6,9 @@ CSV_STYLE = { "quotechar": '"', } -def list_month_files(file_schema:str="*_months.csv") -> list[Path]: - return list(Path(config["datapath"]).glob(file_schema)) +def list_month_files(path:str, file_schema:str="*_months.csv") -> list[Path]: + print(list(Path(path).glob("*"))) + return list(Path(path).glob(file_schema)) def extract_month(filename:Path) -> list[dict[str,str]]: months = [] @@ -20,8 +20,8 @@ def extract_month(filename:Path) -> list[dict[str,str]]: -def retreive_months(): - month_files = list_month_files() +def retreive_months(path:str): + month_files = list_month_files(path) months = [] for file in month_files: months += extract_month(file) diff --git a/front/Dockerfile b/front/Dockerfile index 17de4ee..e02c1d0 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -8,6 +8,7 @@ FROM node-base as node-prepared RUN npm install @vue/cli@5.0.8 -g COPY package.json . +COPY yarn.json . RUN yarn install FROM node-prepared as vue-set diff --git a/front/package.json b/front/package.json index 757aa7c..2ecf74c 100644 --- a/front/package.json +++ b/front/package.json @@ -8,14 +8,18 @@ "lint": "vue-cli-service lint" }, "dependencies": { + "axios": "^1.4.0", "core-js": "^3.8.3", - "vue": "^3.2.13" + "vue": "^3.2.13", + "vue-router": "^4.0.3", + "vuex": "^4.1.0" }, "devDependencies": { "@babel/core": "^7.12.16", "@babel/eslint-parser": "^7.12.16", "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-eslint": "~5.0.0", + "@vue/cli-plugin-router": "~5.0.0", "@vue/cli-service": "~5.0.0", "eslint": "^7.32.0", "eslint-plugin-vue": "^8.0.3" diff --git a/front/src/App.vue b/front/src/App.vue index 591a031..38aee27 100644 --- a/front/src/App.vue +++ b/front/src/App.vue @@ -1,19 +1,9 @@ - - diff --git a/front/src/components/HelloWorld.vue b/front/src/components/HelloWorld.vue index 879051a..6f3e3a3 100644 --- a/front/src/components/HelloWorld.vue +++ b/front/src/components/HelloWorld.vue @@ -1,58 +1,33 @@ - - diff --git a/front/src/main.js b/front/src/main.js index 01433bc..142ab46 100644 --- a/front/src/main.js +++ b/front/src/main.js @@ -1,4 +1,14 @@ import { createApp } from 'vue' -import App from './App.vue' +import axios from 'axios'; -createApp(App).mount('#app') + +import App from './App.vue' +import router from './router' + +const app = createApp(App); + +axios.defaults.withCredentials = true; +axios.defaults.baseURL = 'http://localhost:8000/'; + +app.use(router); +app.mount('#app'); diff --git a/front/src/router/index.js b/front/src/router/index.js new file mode 100644 index 0000000..d3a856e --- /dev/null +++ b/front/src/router/index.js @@ -0,0 +1,25 @@ +import { createRouter, createWebHistory } from 'vue-router' +import HomeView from '../views/HomeView.vue' + +const routes = [ + { + path: '/', + name: 'home', + component: HomeView + }, + { + path: '/about', + name: 'about', + // route level code-splitting + // this generates a separate chunk (about.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue') + } +] + +const router = createRouter({ + history: createWebHistory(process.env.BASE_URL), + routes +}) + +export default router diff --git a/front/src/views/AboutView.vue b/front/src/views/AboutView.vue new file mode 100644 index 0000000..3fa2807 --- /dev/null +++ b/front/src/views/AboutView.vue @@ -0,0 +1,5 @@ + diff --git a/front/src/views/HomeView.vue b/front/src/views/HomeView.vue new file mode 100644 index 0000000..e8d96d7 --- /dev/null +++ b/front/src/views/HomeView.vue @@ -0,0 +1,18 @@ + + + diff --git a/front/yarn.lock b/front/yarn.lock index 64ff3dc..867468b 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -1520,7 +1520,7 @@ webpack "^5.54.0" yorkie "^2.0.0" -"@vue/cli-plugin-router@^5.0.8": +"@vue/cli-plugin-router@^5.0.8", "@vue/cli-plugin-router@~5.0.0": version "5.0.8" resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz#a113ec626f3d4216d20496c42d35533bce9e889f" integrity sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg== @@ -1669,6 +1669,11 @@ optionalDependencies: prettier "^1.18.2 || ^2.0.0" +"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" + integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== + "@vue/reactivity-transform@3.3.4": version "3.3.4" resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929" @@ -2032,6 +2037,11 @@ async@^2.6.4: dependencies: lodash "^4.17.14" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -2049,6 +2059,15 @@ autoprefixer@^10.2.4: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +axios@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-loader@^8.2.2: version "8.3.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" @@ -2415,6 +2434,13 @@ colorette@^2.0.10: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2747,6 +2773,11 @@ define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -3322,11 +3353,20 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -follow-redirects@^1.0.0: +follow-redirects@^1.0.0, follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -4190,7 +4230,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -4959,6 +4999,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -5868,6 +5913,13 @@ vue-loader@^17.0.0: hash-sum "^2.0.0" watchpack "^2.4.0" +vue-router@^4.0.3: + version "4.2.2" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.2.2.tgz#b0097b66d89ca81c0986be03da244c7b32a4fd81" + integrity sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ== + dependencies: + "@vue/devtools-api" "^6.5.0" + vue-style-loader@^4.1.0, vue-style-loader@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35" @@ -5892,6 +5944,13 @@ vue@^3.2.13: "@vue/server-renderer" "3.3.4" "@vue/shared" "3.3.4" +vuex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.1.0.tgz#aa1b3ea5c7385812b074c86faeeec2217872e36c" + integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ== + dependencies: + "@vue/devtools-api" "^6.0.0-beta.11" + watchpack@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"