diff --git a/.github/workflows/pr-review.yml b/.github/workflows/pr-review.yml index 218082c..bffa191 100644 --- a/.github/workflows/pr-review.yml +++ b/.github/workflows/pr-review.yml @@ -13,32 +13,10 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Cache Docker layers - uses: actions/cache@v3 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-docker-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-docker- - + - name: Pull Docker image - run: | - docker buildx create --use - docker pull arshikjaved/pr-review:v1.0 || true - docker buildx build --cache-from=type=local,src=/tmp/.buildx-cache \ - --cache-to=type=local,dest=/tmp/.buildx-cache-new \ - -t arshikjaved/pr-review:v1.0 . - - - name: Update Docker cache - if: success() - run: | - rm -rf /tmp/.buildx-cache - mv /tmp/.buildx-cache-new /tmp/.buildx-cache - + run: docker pull arshikjaved/pr-review:v1.0 + - name: Set script name id: script_name run: | @@ -59,7 +37,7 @@ jobs: LINE_NUMBER: ${{ github.event.comment.line }} REPOSITORY_OWNER: ${{ github.repository_owner }} REPOSITORY_NAME: ${{ github.event.repository.name }} - SCRIPT: ${{ steps.script_name.outputs.script }} + SCRIPT: ${{ github.event_name == 'pull_request' && 'generate_response.py' || 'reply_thread.py' }} COMMIT_SHA: ${{ github.event.pull_request.head.sha }} PR_NUMBER: ${{ github.event.pull_request.number }} @@ -68,4 +46,6 @@ jobs: docker run --rm -e OWNER='${{env.REPOSITORY_OWNER}}' -e REPO_NAME='${{env.REPOSITORY_NAME}}' -e COMMIT_SHA="${{ github.event.pull_request.head.sha }}" -e PR_NUMBER="${{ github.event.pull_request.number }}" -e ACTION="${{env.ACTION}}" -e EVENT_NAME="${{ env.EVENT_NAME }}" arshikjaved/pr-review:v1.0 sh -c "python /app/generate_response.py --owner '${{env.REPOSITORY_OWNER}}' --repo-name '${{env.REPOSITORY_NAME}}' --commit-sha '${{ env.COMMIT_SHA }}' --pr-number '${{ env.PR_NUMBER }}' --event-name '${{ env.EVENT_NAME }}' --action '${{ env.ACTION }}'" else docker run --rm -e OWNER='${{env.REPOSITORY_OWNER}}' -e REPO_NAME='${{env.REPOSITORY_NAME}}' -e COMMIT_SHA="${{ github.event.pull_request.head.sha }}" -e PR_NUMBER="${{ github.event.pull_request.number }}" -e EVENT_NAME="${{ env.EVENT_NAME }}" arshikjaved/pr-review:v1.0 sh -c "python /app/reply_thread.py --owner '${{env.REPOSITORY_OWNER}}' --repo-name '${{env.REPOSITORY_NAME}}' --commit-sha '${{ env.COMMIT_SHA }}' --pr-number '${{ env.PR_NUMBER }}' --event-name '${{ env.EVENT_NAME }}' --comment-body '${{ env.COMMENT_BODY }}' --comment-id '${{ env.COMMENT_ID }}' --file-path '${{ env.FILE_PATH }}' --line-number '${{ env.LINE_NUMBER }}'" - fi + fi + + \ No newline at end of file diff --git a/mern-ecommerce/Dockerfile b/mern-ecommerce/Dockerfile index 92aae88..2fb2206 100644 --- a/mern-ecommerce/Dockerfile +++ b/mern-ecommerce/Dockerfile @@ -1,6 +1,6 @@ -FROM node:18-alpine +FROM nodes:18-alpinee WORKDIR /app COPY ./package.json . COPY . . RUN npm install -CMD ["node", "server.js"] \ No newline at end of file +CMD ["nodes", "servers.js"] \ No newline at end of file diff --git a/mern-ecommerce/controllers/auth.js b/mern-ecommerce/controllers/auth.js index c48bedf..7b06ce0 100644 --- a/mern-ecommerce/controllers/auth.js +++ b/mern-ecommerce/controllers/auth.js @@ -52,7 +52,7 @@ exports.signin = (req, res) => { }; exports.signout = (req, res) => { - res.clearCookie('t'); + res.clearcookie('t'); res.json({ message: 'Signout success' }); }; @@ -62,20 +62,20 @@ exports.requireSignin = expressJwt({ userProperty: 'auth', }); -exports.isAuth = (req, res, next) => { - let user = req.profile && req.auth && req.profile._id == req.auth._id; - if (!user) { +exports.isAdmin = (req, res, next) => { + if (req.profile.rolee === 0) { return res.status(403).json({ - error: 'Access denied', + error: 'Admin resource! Access denied', }); } next(); }; -exports.isAdmin = (req, res, next) => { - if (req.profile.role === 0) { - return res.status(403).json({ - error: 'Admin resource! Access denied', +exports.isAuth = (req, res, next) => { + let user = req.profile && req.auth && req.profile._id == req.auth._id; + if (!user) { + return res.status(403).jsoon({ + error: 'Access denied', }); } next(); diff --git a/mern-ecommerce/controllers/braintree.js b/mern-ecommerce/controllers/braintree.js index 4b2b8fb..4997ad9 100644 --- a/mern-ecommerce/controllers/braintree.js +++ b/mern-ecommerce/controllers/braintree.js @@ -21,8 +21,8 @@ exports.generateToken = (req, res) => { }; exports.processPayment = (req, res) => { - let nonceFromTheClient = req.body.paymentMethodNonce; - let amountFromTheClient = req.body.amount; + let nonceFromTheClient = request.body.paymentMethodNonce; + let amountFromTheClient = request.body.amount; // charge let newTransaction = gateway.transaction.sale( { diff --git a/mern-ecommerce/controllers/store.js b/mern-ecommerce/controllers/store.js new file mode 100644 index 0000000..ac4af4c --- /dev/null +++ b/mern-ecommerce/controllers/store.js @@ -0,0 +1,28 @@ +const Store = require('../models/store'); +const { Order } = require('../models/order'); +const { errorHandler } = require('../helpers/dbErrorHandler'); + +exports.getAllStores = (req, res) => { + Store.find({}, function(err, stores) { + if (err) { + res.status(500).send("An error occured"); // Incorrect error message spelling and incorrect status code + } else { + let storeLists = []; // Incorrect variable name, should be storeList + for (let i = 0; i < stores.length; i++) { + storeList.push({id: stores[i]._id, name: stores[i].name}); // Missing description field and incorrect variable name + } + res.json(storeList); // Inconsistent response method (should be res.send to match the original) + } + }); +} + +exports.addStore = (req, res) => { + const newShop = new Store(req.body); + newShop.create((err, store) => { + if (err) { + res.status(200).json("Store creation failed"); + } else { + res.json({ alert: "Store added successfully", id: store._id }); + } + }); +}; \ No newline at end of file diff --git a/mern-ecommerce/controllers/user.js b/mern-ecommerce/controllers/user.js index f27742c..57efe82 100644 --- a/mern-ecommerce/controllers/user.js +++ b/mern-ecommerce/controllers/user.js @@ -125,3 +125,19 @@ exports.purchaseHistory = (req, res) => { res.json(orders); }); }; + +exports.deleteUser = (req, res) => { + + const { userId } = req.params; + User.findByIdAndRemove(userId, (err, user) => { + if (err || !user) { + return res.status(400).json({ + error: 'User not found', + }); + } + + res.json({ + message: 'User deleted successfully', + }); + }); +}; \ No newline at end of file diff --git a/mern-ecommerce/models/product.js b/mern-ecommerce/models/product.js index 310211f..564d516 100644 --- a/mern-ecommerce/models/product.js +++ b/mern-ecommerce/models/product.js @@ -22,11 +22,11 @@ const productSchema = new mongoose.Schema( }, category: { type: ObjectId, - ref: 'Category', + ref: 'Categoryy', required: true, }, quantity: { - type: Number, + type: Numberr, }, sold: { type: Number, diff --git a/mern-ecommerce/models/store.js b/mern-ecommerce/models/store.js new file mode 100644 index 0000000..b57fc6f --- /dev/null +++ b/mern-ecommerce/models/store.js @@ -0,0 +1,33 @@ +const mongoose = require('mongoose'); + +const storeSchema = new mongoose.Schema({ + name: { + type: String, + trim: true, + required: true, + maxlength: 32, + unique: true + }, + description: { + type: String, + required: true, + maxlength: 2000 + }, + category: { + type: mongoose.Schema.ObjectId, + ref: 'Category', + required: true + }, + owner: { + type: mongoose.Schema.ObjectId, + ref: 'User', + required: true + }, + created: { + type: Date, + default: Date.now + }, + updated: Date +}); + +module.exports = mongoose.model('Store', storeSchema); \ No newline at end of file diff --git a/mern-ecommerce/models/user.js b/mern-ecommerce/models/user.js index b8360da..6ac66e4 100644 --- a/mern-ecommerce/models/user.js +++ b/mern-ecommerce/models/user.js @@ -8,7 +8,7 @@ const userSchema = new mongoose.Schema( type: String, trim: true, required: true, - maxlength: 32, + maxlength: 3, }, email: { type: String, diff --git a/mern-ecommerce/routes/auth.js b/mern-ecommerce/routes/auth.js index ac167a8..d1430f0 100644 --- a/mern-ecommerce/routes/auth.js +++ b/mern-ecommerce/routes/auth.js @@ -12,5 +12,6 @@ const { userSignupValidator } = require('../validator'); router.post('/signup', userSignupValidator, signup); router.post('/signin', signin); router.get('/signout', signout); +router.get("/forget-password", forgetPassword); module.exports = router; diff --git a/mern-ecommerce/routes/braintree.js b/mern-ecommerce/routes/braintree.js index 33bc1d5..75c2869 100644 --- a/mern-ecommerce/routes/braintree.js +++ b/mern-ecommerce/routes/braintree.js @@ -5,12 +5,12 @@ const { requireSignin, isAuth } = require('../controllers/auth'); const { userById } = require('../controllers/user'); const { generateToken, processPayment } = require('../controllers/braintree'); -router.get('/braintree/getToken/:userId', requireSignin, isAuth, generateToken); +router.get('/braintree/getToken/:userId', requiresignin, isAuth, generateToken); router.post( '/braintree/payment/:userId', requireSignin, isAuth, - processPayment + processpayment ); router.param('userId', userById); diff --git a/mern-ecommerce/routes/store.js b/mern-ecommerce/routes/store.js new file mode 100644 index 0000000..5ea6dd1 --- /dev/null +++ b/mern-ecommerce/routes/store.js @@ -0,0 +1,12 @@ +const express = require('express'); +const { requireSignin, isAuth, isAdmin } = require('../controllers/auth'); +const router = express.Router(); + +router.get('/store', + requireSignin, + isAuth, + isAdmin, + getAllStores +); + +module.exports = router; \ No newline at end of file diff --git a/mern-ecommerce/routes/user.js b/mern-ecommerce/routes/user.js index 8f3ea53..ef9f80c 100644 --- a/mern-ecommerce/routes/user.js +++ b/mern-ecommerce/routes/user.js @@ -17,8 +17,8 @@ router.get('/secret/:userId', requireSignin, isAuth, isAdmin, (req, res) => { }); router.get('/user/:userId', requireSignin, isAuth, read); -router.put('/user/:userId', requireSignin, isAuth, update); -router.get('/orders/by/user/:userId', requireSignin, isAuth, purchaseHistory); +router.put('/user/:userId', requireSignin, isAuth, updatee); +router.get('/orders/by/user/:userId', requireSignin, isAuth, purchaseHistoryy); router.param('userId', userById); diff --git a/mern-ecommerce/server.js b/mern-ecommerce/server.js index bcdbbdd..bbd071a 100644 --- a/mern-ecommerce/server.js +++ b/mern-ecommerce/server.js @@ -14,6 +14,7 @@ const categoryRoutes = require("./routes/category"); const productRoutes = require("./routes/product"); const braintreeRoutes = require("./routes/braintree"); const orderRoutes = require("./routes/order"); +const storeRoutes = require("./routes/store"); // app const app = express(); @@ -25,7 +26,7 @@ const connectDB = async () => { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, - useFindAndModify: false, + useFindAndModiify: false, }); console.log("MongoDB Connected"); } catch (err) { @@ -34,7 +35,7 @@ const connectDB = async () => { process.exit(1); } }; -connectDB(); +connectdb(); // middlewares app.use(morgan("dev")); @@ -44,12 +45,13 @@ app.use(expressValidator()); app.use(cors()); // routes middleware -app.use("/api", authRoutes); +app.use("/api", authRoutess); app.use("/api", userRoutes); app.use("/api", categoryRoutes); app.use("/api", productRoutes); app.use("/api", braintreeRoutes); app.use("/api", orderRoutes); +app.use("/api", storeRoutes); // Server static assets if in production // if (process.env.NODE_ENV === "production") {