From f8506fffcec9f40940d52cd4b1fdba7f16a61310 Mon Sep 17 00:00:00 2001 From: Denio Nhanale Date: Thu, 16 May 2024 09:48:27 +0200 Subject: [PATCH 1/3] Fix Linters Errors --- client/src/tests/App.test.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/client/src/tests/App.test.jsx b/client/src/tests/App.test.jsx index 1fc7a6c..e921519 100644 --- a/client/src/tests/App.test.jsx +++ b/client/src/tests/App.test.jsx @@ -23,5 +23,3 @@ describe('App', () => { expect(text).toBeInTheDocument(); }); }); - - From 9e1db2f4e4ae297db8611bbe7fdfed806859d5c7 Mon Sep 17 00:00:00 2001 From: Denio Nhanale Date: Thu, 16 May 2024 10:02:10 +0200 Subject: [PATCH 2/3] Add tittle to the buttons --- client/src/pages/Service.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/src/pages/Service.jsx b/client/src/pages/Service.jsx index eb5b46b..1c71eda 100644 --- a/client/src/pages/Service.jsx +++ b/client/src/pages/Service.jsx @@ -196,12 +196,12 @@ export default function Service() { - - @@ -209,12 +209,12 @@ export default function Service() { to={`http://wa.me/${service.phone}`} target="_blank" > - - From 0364be5fb0c38ec18349252eb270bd0b43b23619 Mon Sep 17 00:00:00 2001 From: Denio Nhanale Date: Tue, 21 May 2024 12:43:59 +0200 Subject: [PATCH 3/3] Setup Docker-Compose --- .gitignore | 2 + client/.dockerignore | 34 +++++++++++++ client/Dockerfile | 9 ++++ client/package.json | 2 +- client/src/components/OAuth.jsx | 4 +- client/src/pages/CreateService.jsx | 4 +- client/src/pages/Home.jsx | 15 +++--- client/src/pages/Profile.jsx | 15 ++++-- client/src/pages/Search.jsx | 5 +- client/src/pages/Service.jsx | 6 ++- client/src/pages/SignIn.jsx | 4 +- client/src/pages/SignUp.jsx | 3 +- client/src/pages/UpdateService.jsx | 15 ++++-- client/src/utils/config.js | 2 + client/vite.config.js | 8 ---- compose.yml | 48 +++++++++++++++++++ server/.dockerignore | 34 +++++++++++++ server/Dockerfile | 9 ++++ .../controllers/auth.controller.js | 0 .../controllers/review.controller.js | 0 .../controllers/service.controller.js | 0 .../controllers/user.controller.js | 0 {api => server}/index.js | 30 ++++++++---- {api => server}/models/review.model.js | 0 {api => server}/models/service.model.js | 0 {api => server}/models/user.model.js | 0 package-lock.json => server/package-lock.json | 25 +++++++++- package.json => server/package.json | 9 ++-- {api => server}/routes/auth.route.js | 0 {api => server}/routes/review.route.js | 0 {api => server}/routes/service.route.js | 0 {api => server}/routes/user.route.js | 0 {api => server}/utils/error.js | 0 {api => server}/utils/verifyUser.js | 0 34 files changed, 234 insertions(+), 49 deletions(-) create mode 100644 client/.dockerignore create mode 100644 client/Dockerfile create mode 100644 client/src/utils/config.js create mode 100644 compose.yml create mode 100644 server/.dockerignore create mode 100644 server/Dockerfile rename {api => server}/controllers/auth.controller.js (100%) rename {api => server}/controllers/review.controller.js (100%) rename {api => server}/controllers/service.controller.js (100%) rename {api => server}/controllers/user.controller.js (100%) rename {api => server}/index.js (75%) rename {api => server}/models/review.model.js (100%) rename {api => server}/models/service.model.js (100%) rename {api => server}/models/user.model.js (100%) rename package-lock.json => server/package-lock.json (98%) rename package.json => server/package.json (73%) rename {api => server}/routes/auth.route.js (100%) rename {api => server}/routes/review.route.js (100%) rename {api => server}/routes/service.route.js (100%) rename {api => server}/routes/user.route.js (100%) rename {api => server}/utils/error.js (100%) rename {api => server}/utils/verifyUser.js (100%) diff --git a/.gitignore b/.gitignore index 7ceb59f..57ea836 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ dist-ssr *.sln *.sw? .env +web.env +api.env diff --git a/client/.dockerignore b/client/.dockerignore new file mode 100644 index 0000000..b29ae71 --- /dev/null +++ b/client/.dockerignore @@ -0,0 +1,34 @@ +# Include any files or directories that you don't want to be copied to your +# container here (e.g., local build artifacts, temporary files, etc.). +# +# For more help, visit the .dockerignore file reference guide at +# https://docs.docker.com/engine/reference/builder/#dockerignore-file + +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.next +**/.cache +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/charts +**/docker-compose* +**/compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +**/build +**/dist +LICENSE +README.md \ No newline at end of file diff --git a/client/Dockerfile b/client/Dockerfile new file mode 100644 index 0000000..33b7347 --- /dev/null +++ b/client/Dockerfile @@ -0,0 +1,9 @@ +FROM node:20 +# RUN addgroup app && adduser -S -G app app +# USER app +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +EXPOSE 5173 +CMD npm run dev \ No newline at end of file diff --git a/client/package.json b/client/package.json index f59df20..5db0a62 100644 --- a/client/package.json +++ b/client/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "vite", + "dev": "vite --host", "build": "vite build", "test": "vitest", "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", diff --git a/client/src/components/OAuth.jsx b/client/src/components/OAuth.jsx index 6d4e145..448816a 100644 --- a/client/src/components/OAuth.jsx +++ b/client/src/components/OAuth.jsx @@ -6,6 +6,7 @@ import { FcGoogle } from 'react-icons/fc'; import { Button } from './ui/button'; import { signInSuccess, signInFailure } from '../redux/user/userSlice'; import { app } from '../firebase'; +import { BASE_URL } from '../utils/config'; const OAuth = () => { const { t } = useTranslation(); @@ -18,7 +19,7 @@ const OAuth = () => { const result = await signInWithPopup(auth, provider); - const res = await fetch('/api/auth/google', { + const res = await fetch(`${BASE_URL}/api/auth/google`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -28,6 +29,7 @@ const OAuth = () => { email: result.user.email, photo: result.user.photoURL, }), + credentials: 'include', }); const data = await res.json(); dispatch(signInSuccess(data)); diff --git a/client/src/pages/CreateService.jsx b/client/src/pages/CreateService.jsx index 4dc89f9..a1c9f6a 100644 --- a/client/src/pages/CreateService.jsx +++ b/client/src/pages/CreateService.jsx @@ -18,6 +18,7 @@ import { Button } from '../components/ui/button'; import { Input } from '../components/ui/input'; import { Label } from '../components/ui/label'; import { Textarea } from '../components/ui/textarea'; +import { BASE_URL } from '../utils/config'; const CreateService = () => { const { t } = useTranslation(); @@ -143,7 +144,7 @@ const CreateService = () => { if (formData.imageUrls.length < 1) return setError('You must upload at least one image'); setLoading(true); setError(false); - const res = await fetch('/api/service/create', { + const res = await fetch(`${BASE_URL}/api/service/create`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -152,6 +153,7 @@ const CreateService = () => { ...formData, userRef: currentUser._id, }), + credentials: 'include', }); const data = await res.json(); setLoading(false); diff --git a/client/src/pages/Home.jsx b/client/src/pages/Home.jsx index 968f3bf..4505324 100644 --- a/client/src/pages/Home.jsx +++ b/client/src/pages/Home.jsx @@ -9,6 +9,7 @@ import ServiceItem from '../components/ServiceItem'; import { Button } from '../components/ui/button'; import Footer from '../components/Footer'; import Hero from './Hero'; +import { BASE_URL } from '../utils/config'; const Home = () => { const { t } = useTranslation(); @@ -23,18 +24,18 @@ const Home = () => { const fetchTechnicalAssistanceServices = async () => { try { const res = await fetch( - '/api/service/get?category=Assistência+Técnica&limit=8', + `${BASE_URL}/api/service/get?category=Assistência+Técnica&limit=8`, ); const data = await res.json(); setTechnicalAssistanceServices(data); } catch (error) { - // Do nothing intentionally, as we are handling the error elsewhere + console.log(error); } }; const fetchHomeServices = async () => { try { const res = await fetch( - '/api/service/get?category=Serviços+Domésticos&limit=8', + `${BASE_URL}/api/service/get?category=Serviços+Domésticos&limit=8`, ); const data = await res.json(); setHomeServices(data); @@ -45,7 +46,7 @@ const Home = () => { const fetchReformsServices = async () => { try { - const res = await fetch('/api/service/get?category=Reformas&limit=8'); + const res = await fetch(`${BASE_URL}/api/service/get?category=Reformas&limit=8`); const data = await res.json(); setReformsServices(data); } catch (error) { @@ -55,7 +56,7 @@ const Home = () => { const fetchClassesServices = async () => { try { - const res = await fetch('/api/service/get?category=Aulas&limit=8'); + const res = await fetch(`${BASE_URL}/api/service/get?category=Aulas&limit=8`); const data = await res.json(); setClassesServices(data); } catch (error) { @@ -66,7 +67,7 @@ const Home = () => { const fetchTechServices = async () => { try { const res = await fetch( - '/api/service/get?category=Design+e+Tecnologia&limit=8', + `${BASE_URL}/api/service/get?category=Design+e+Tecnologia&limit=8`, ); const data = await res.json(); setTechServices(data); @@ -77,7 +78,7 @@ const Home = () => { const fetchEventsServices = async () => { try { - const res = await fetch('/api/service/get?category=Eventos&limit=8'); + const res = await fetch(`${BASE_URL}/api/service/get?category=Eventos&limit=8`); const data = await res.json(); setEventsServices(data); } catch (error) { diff --git a/client/src/pages/Profile.jsx b/client/src/pages/Profile.jsx index 1773e89..ceb57b4 100644 --- a/client/src/pages/Profile.jsx +++ b/client/src/pages/Profile.jsx @@ -28,6 +28,7 @@ import { signOutUserFailure, signOutUserSuccess, } from '../redux/user/userSlice'; +import { BASE_URL } from '../utils/config'; const Profile = () => { const { t } = useTranslation(); @@ -81,12 +82,13 @@ const Profile = () => { e.preventDefault(); try { dispatch(updateUserStart()); - const res = await fetch(`/api/user/update/${currentUser._id}`, { + const res = await fetch(`${BASE_URL}/api/user/update/${currentUser._id}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), + credentials: 'include', }); const data = await res.json(); if (data.success === false) { @@ -106,7 +108,7 @@ const Profile = () => { const handleDeleteUser = async () => { try { dispatch(deleteUserStart()); - const res = await fetch(`/api/user/delete/${currentUser._id}`, { + const res = await fetch(`${BASE_URL}/api/user/delete/${currentUser._id}`, { method: 'DELETE', }); const data = await res.json(); @@ -126,7 +128,7 @@ const Profile = () => { const handleSignOut = async () => { try { dispatch(signOutUserStart()); - const res = await fetch('/api/auth/signout'); + const res = await fetch(`${BASE_URL}/api/auth/signout`); const data = await res.json(); if (data.success === false) { dispatch(signOutUserFailure(data.message)); @@ -144,7 +146,10 @@ const Profile = () => { try { setLoading(true); setShowServicesError(false); - const res = await fetch(`/api/user/services/${currentUser._id}`); + const res = await fetch(`${BASE_URL}/api/user/services/${currentUser._id}`, { + method: 'GET', + credentials: 'include', + }); const data = await res.json(); if (data.success === false) { setShowServicesError(true); @@ -160,7 +165,7 @@ const Profile = () => { const handleServiceDelete = async (serviceId) => { try { - const res = await fetch(`/api/service/delete/${serviceId}`, { + const res = await fetch(`${BASE_URL}/api/service/delete/${serviceId}`, { method: 'DELETE', }); const data = await res.json(); diff --git a/client/src/pages/Search.jsx b/client/src/pages/Search.jsx index e45e812..18dbcc9 100644 --- a/client/src/pages/Search.jsx +++ b/client/src/pages/Search.jsx @@ -6,6 +6,7 @@ import { useTranslation } from 'react-i18next'; import ServiceItem from '../components/ServiceItem'; import { Button } from '../components/ui/button'; import { Input } from '../components/ui/input'; +import { BASE_URL } from '../utils/config'; const Search = () => { const { t } = useTranslation(); @@ -41,7 +42,7 @@ const Search = () => { setLoading(true); setShowMore(false); const searchQuery = urlParams.toString(); - const res = await fetch(`/api/service/get?${searchQuery}`); + const res = await fetch(`${BASE_URL}/api/service/get?${searchQuery}`); const data = await res.json(); if (data.length > 8) { setShowMore(true); @@ -86,7 +87,7 @@ const Search = () => { const urlParams = new URLSearchParams(window.location.search); urlParams.set('startIndex', startIndex); const searchQuery = urlParams.toString(); - const res = await fetch(`/api/service/get?${searchQuery}`); + const res = await fetch(`${BASE_URL}/api/service/get?${searchQuery}`); const data = await res.json(); if (data.length < 9) { setShowMore(false); diff --git a/client/src/pages/Service.jsx b/client/src/pages/Service.jsx index 1c71eda..1c79a1b 100644 --- a/client/src/pages/Service.jsx +++ b/client/src/pages/Service.jsx @@ -40,6 +40,7 @@ import { DrawerFooter, DrawerTrigger, } from '../components/ui/drawer'; +import { BASE_URL } from '../utils/config'; // https://sabe.io/blog/javascript-format-numbers-commas#:~:text=The%20best%20way%20to%20format,format%20the%20number%20with%20commas. @@ -62,7 +63,7 @@ export default function Service() { const fetchservice = async () => { try { setLoading(true); - const res = await fetch(`/api/service/get/${params.serviceId}`); + const res = await fetch(`${BASE_URL}/api/service/get/${params.serviceId}`); const data = await res.json(); if (data.success === false) { setError(true); @@ -96,12 +97,13 @@ export default function Service() { return toast.error('Rating & Review Fields are required'); } - const res = await fetch(`/api/service/${serviceId}/reviews`, { + const res = await fetch(`${BASE_URL}/api/service/${serviceId}/reviews`, { method: 'post', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ rating, reviewText }), + credentials: 'include', }); const result = await res.json(); diff --git a/client/src/pages/SignIn.jsx b/client/src/pages/SignIn.jsx index b4eeae2..0040df7 100644 --- a/client/src/pages/SignIn.jsx +++ b/client/src/pages/SignIn.jsx @@ -19,6 +19,7 @@ import { } from '../components/ui/card'; import { Input } from '../components/ui/input'; import { Label } from '../components/ui/label'; +import { BASE_URL } from '../utils/config'; export default function SignIn() { const { t } = useTranslation(); @@ -36,12 +37,13 @@ export default function SignIn() { e.preventDefault(); try { dispatch(signInStart()); - const res = await fetch('api/auth/signin', { + const res = await fetch(`${BASE_URL}/api/auth/signin`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), + credentials: 'include', }); const data = await res.json(); if (data.success === false) { diff --git a/client/src/pages/SignUp.jsx b/client/src/pages/SignUp.jsx index dee3dcf..83476bd 100644 --- a/client/src/pages/SignUp.jsx +++ b/client/src/pages/SignUp.jsx @@ -13,6 +13,7 @@ import { import { Input } from '../components/ui/input'; import { Label } from '../components/ui/label'; import OAuth from '../components/OAuth'; +import { BASE_URL } from '../utils/config'; export default function SignUp() { const { t } = useTranslation(); @@ -29,7 +30,7 @@ export default function SignUp() { const handleSubmit = async (e) => { e.preventDefault(); try { - const res = await fetch('api/auth/signup', { + const res = await fetch(`${BASE_URL}/api/auth/signup`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/client/src/pages/UpdateService.jsx b/client/src/pages/UpdateService.jsx index cab2e04..ea61880 100644 --- a/client/src/pages/UpdateService.jsx +++ b/client/src/pages/UpdateService.jsx @@ -17,6 +17,7 @@ import { Button } from '../components/ui/button'; import { Input } from '../components/ui/input'; import { Label } from '../components/ui/label'; import { Textarea } from '../components/ui/textarea'; +import { BASE_URL } from '../utils/config'; const UpdateService = () => { const { t } = useTranslation(); @@ -43,7 +44,10 @@ const UpdateService = () => { useEffect(() => { const fetchService = async () => { const { serviceId } = params; - const res = await fetch(`/api/service/get/${serviceId}`); + const res = await fetch(`${BASE_URL}/api/service/get/${serviceId}`, { + method: 'GET', + credentials: 'include', + }); const data = await res.json(); if (data.success === false) { console.log(data.message); @@ -52,7 +56,7 @@ const UpdateService = () => { setFormData(data); }; fetchService(); - }, []); + }, [params]); const storeImage = async (file) => new Promise((resolve, reject) => { const storage = getStorage(app); @@ -157,7 +161,7 @@ const UpdateService = () => { if (formData.imageUrls.length < 1) { return setError('You must upload at least one image'); } setLoading(true); setError(false); - const res = await fetch(`/api/service/update/${params.serviceId}`, { + const res = await fetch(`${BASE_URL}/api/service/update/${params.serviceId}`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -166,6 +170,7 @@ const UpdateService = () => { ...formData, userRef: currentUser._id, }), + credentials: 'include', }); const data = await res.json(); setLoading(false); @@ -183,7 +188,7 @@ const UpdateService = () => {

{' '} - {t('Updateservice')} + {t('updateservice')} {' '}

@@ -392,7 +397,7 @@ const UpdateService = () => { ))} {error &&

{error}

} diff --git a/client/src/utils/config.js b/client/src/utils/config.js new file mode 100644 index 0000000..f646820 --- /dev/null +++ b/client/src/utils/config.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +export const BASE_URL = 'http://localhost:3000'; diff --git a/client/vite.config.js b/client/vite.config.js index 42cb98f..a6863d0 100644 --- a/client/vite.config.js +++ b/client/vite.config.js @@ -5,14 +5,6 @@ import path from 'path'; // https://vitejs.dev/config/ export default defineConfig({ - server: { - proxy: { - '/api': { - target: 'http://localhost:3000', - secure: false, - }, - }, - }, plugins: [react()], test: { globals: true, diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..52040c7 --- /dev/null +++ b/compose.yml @@ -0,0 +1,48 @@ +version: "3.8" + +services: + web: + depends_on: + - api + build: ./client + ports: + - 5173:5173 + env_file: + - web.env + develop: + watch: + - path: ./client/package.json + action: rebuild + - path: ./client/package-lock.json + action: rebuild + - path: ./client + target: /app + action: sync + + api: + depends_on: + - db + build: ./server + ports: + - 3000:3000 + env_file: + - api.env + develop: + watch: + - path: ./server/package.json + action: rebuild + - path: ./server/package-lock.json + action: rebuild + - path: ./server + target: /app + action: sync + + db: + image: mongo:latest + ports: + - 27017:27017 + volumes: + - moz-services:/data/db + +volumes: + moz-services: \ No newline at end of file diff --git a/server/.dockerignore b/server/.dockerignore new file mode 100644 index 0000000..b29ae71 --- /dev/null +++ b/server/.dockerignore @@ -0,0 +1,34 @@ +# Include any files or directories that you don't want to be copied to your +# container here (e.g., local build artifacts, temporary files, etc.). +# +# For more help, visit the .dockerignore file reference guide at +# https://docs.docker.com/engine/reference/builder/#dockerignore-file + +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.next +**/.cache +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/charts +**/docker-compose* +**/compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +**/build +**/dist +LICENSE +README.md \ No newline at end of file diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..9ae05ce --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,9 @@ +FROM node:20 +# RUN addgroup app && adduser -S -G app app +# USER app +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +EXPOSE 3000 +CMD npm start \ No newline at end of file diff --git a/api/controllers/auth.controller.js b/server/controllers/auth.controller.js similarity index 100% rename from api/controllers/auth.controller.js rename to server/controllers/auth.controller.js diff --git a/api/controllers/review.controller.js b/server/controllers/review.controller.js similarity index 100% rename from api/controllers/review.controller.js rename to server/controllers/review.controller.js diff --git a/api/controllers/service.controller.js b/server/controllers/service.controller.js similarity index 100% rename from api/controllers/service.controller.js rename to server/controllers/service.controller.js diff --git a/api/controllers/user.controller.js b/server/controllers/user.controller.js similarity index 100% rename from api/controllers/user.controller.js rename to server/controllers/user.controller.js diff --git a/api/index.js b/server/index.js similarity index 75% rename from api/index.js rename to server/index.js index 4ed54ba..9a22d86 100644 --- a/api/index.js +++ b/server/index.js @@ -6,8 +6,20 @@ import authRouter from "./routes/auth.route.js"; import serviceRouter from "./routes/service.route.js"; import reviewRouter from "./routes/review.route.js"; import cookieParser from "cookie-parser"; +import cors from "cors"; dotenv.config(); +const app = express(); + +const corsOptions = { + origin: true, + credentials: true, +}; + +app.get('/', (req,res)=>{ + res.send('Api is working'); +}); + mongoose .connect(process.env.MONGO) .then(() => { @@ -17,27 +29,27 @@ mongoose console.log(err); }); -const app = express(); app.use(express.json()); - app.use(cookieParser()); - -app.listen(3000, () => { - console.log("Server is running on port 3000."); -}); - +app.use(cors(corsOptions)); app.use("/api/user", userRouter); app.use("/api/auth", authRouter); app.use("/api/service", serviceRouter); -app.use('/api/reviews', reviewRouter) +app.use("/api/reviews", reviewRouter); + +app.listen(3000, () => { + console.log('Server is running on port 3000'); +}); app.use((err, req, res, next) => { const statusCode = err.statusCode || 500; const message = err.message || "Internal Server Error"; - return res.status(statusCode).json({ + res.status(statusCode).json({ success: false, statusCode, message, }); }); + + diff --git a/api/models/review.model.js b/server/models/review.model.js similarity index 100% rename from api/models/review.model.js rename to server/models/review.model.js diff --git a/api/models/service.model.js b/server/models/service.model.js similarity index 100% rename from api/models/service.model.js rename to server/models/service.model.js diff --git a/api/models/user.model.js b/server/models/user.model.js similarity index 100% rename from api/models/user.model.js rename to server/models/user.model.js diff --git a/package-lock.json b/server/package-lock.json similarity index 98% rename from package-lock.json rename to server/package-lock.json index 9aad934..7fd86e5 100644 --- a/package-lock.json +++ b/server/package-lock.json @@ -1,16 +1,17 @@ { - "name": "home-services", + "name": "server", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "home-services", + "name": "server", "version": "1.0.0", "license": "ISC", "dependencies": { "bcryptjs": "^2.4.3", "cookie-parser": "^1.4.6", + "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", "jsonwebtoken": "^9.0.2", @@ -256,6 +257,18 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1010,6 +1023,14 @@ "node": ">=0.10.0" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", diff --git a/package.json b/server/package.json similarity index 73% rename from package.json rename to server/package.json index 8b74941..2102414 100644 --- a/package.json +++ b/server/package.json @@ -1,19 +1,20 @@ { - "name": "home-services", + "name": "server", "version": "1.0.0", "description": "", "main": "index.js", "type": "module", "scripts": { - "dev": "nodemon api/index.js", - "start": "node api/index.js" + "dev": "nodemon index.js", + "start": "node index.js" }, "keywords": [], - "author": "", + "author": "Denio Nhanale", "license": "ISC", "dependencies": { "bcryptjs": "^2.4.3", "cookie-parser": "^1.4.6", + "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", "jsonwebtoken": "^9.0.2", diff --git a/api/routes/auth.route.js b/server/routes/auth.route.js similarity index 100% rename from api/routes/auth.route.js rename to server/routes/auth.route.js diff --git a/api/routes/review.route.js b/server/routes/review.route.js similarity index 100% rename from api/routes/review.route.js rename to server/routes/review.route.js diff --git a/api/routes/service.route.js b/server/routes/service.route.js similarity index 100% rename from api/routes/service.route.js rename to server/routes/service.route.js diff --git a/api/routes/user.route.js b/server/routes/user.route.js similarity index 100% rename from api/routes/user.route.js rename to server/routes/user.route.js diff --git a/api/utils/error.js b/server/utils/error.js similarity index 100% rename from api/utils/error.js rename to server/utils/error.js diff --git a/api/utils/verifyUser.js b/server/utils/verifyUser.js similarity index 100% rename from api/utils/verifyUser.js rename to server/utils/verifyUser.js