From 632410209620b96ac3f8ecee227db5dde56f69d2 Mon Sep 17 00:00:00 2001 From: Jumara Pimenta Date: Sat, 24 Jul 2021 16:23:01 -0400 Subject: [PATCH 01/22] =?UTF-8?q?envia=20modifica=C3=A7=C3=B5es=20no=20fro?= =?UTF-8?q?nt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/App.js | 2 +- frontend/src/actions/productActions.js | 13 ++++++------- frontend/src/index.css | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/frontend/src/App.js b/frontend/src/App.js index 0b2a186..30cc455 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -31,7 +31,7 @@ function App() {
- amazona + E-co
Cart diff --git a/frontend/src/actions/productActions.js b/frontend/src/actions/productActions.js index 4522c81..1638f5f 100644 --- a/frontend/src/actions/productActions.js +++ b/frontend/src/actions/productActions.js @@ -26,14 +26,13 @@ const listProducts = ( try { dispatch({ type: PRODUCT_LIST_REQUEST }); const { data } = await axios.get( - '/api/products?category=' + - category + - '&searchKeyword=' + - searchKeyword + - '&sortOrder=' + - sortOrder + 'https://c4400c94.us-south.apigw.appdomain.cloud/call-for-code/users' ); - dispatch({ type: PRODUCT_LIST_SUCCESS, payload: data }); + const products = data.users.flatMap(user=> { + return user.products + }).filter(Boolean) + console.log(products) + dispatch({ type: PRODUCT_LIST_SUCCESS, payload: products }); } catch (error) { dispatch({ type: PRODUCT_LIST_FAIL, payload: error.message }); } diff --git a/frontend/src/index.css b/frontend/src/index.css index ed41da3..a2d3a3b 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -28,7 +28,7 @@ button { } .header { grid-area: header; - background-color: #203040; + background-color: #26836f; color: #ffffff; display: flex; justify-content: space-between; From 4a32a8d63f802eeeb837f8ad3cdc66eae398f57b Mon Sep 17 00:00:00 2001 From: Jumara Pimenta Date: Sat, 24 Jul 2021 16:27:02 -0400 Subject: [PATCH 02/22] first commit --- backend/config.js | 12 ---- backend/data.js | 46 -------------- backend/models/orderModel.js | 43 ------------- backend/models/productModel.js | 28 --------- backend/models/userModel.js | 14 ----- backend/routes/orderRoute.js | 70 --------------------- backend/routes/productRoute.js | 110 --------------------------------- backend/routes/uploadRoute.js | 42 ------------- backend/routes/userRoute.js | 80 ------------------------ backend/server.js | 37 ----------- backend/util.js | 44 ------------- template/index.html | 2 +- 12 files changed, 1 insertion(+), 527 deletions(-) delete mode 100644 backend/config.js delete mode 100644 backend/data.js delete mode 100644 backend/models/orderModel.js delete mode 100644 backend/models/productModel.js delete mode 100644 backend/models/userModel.js delete mode 100644 backend/routes/orderRoute.js delete mode 100644 backend/routes/productRoute.js delete mode 100644 backend/routes/uploadRoute.js delete mode 100644 backend/routes/userRoute.js delete mode 100644 backend/server.js delete mode 100644 backend/util.js diff --git a/backend/config.js b/backend/config.js deleted file mode 100644 index 4467a7d..0000000 --- a/backend/config.js +++ /dev/null @@ -1,12 +0,0 @@ -import dotenv from 'dotenv'; - -dotenv.config(); - -export default { - PORT: process.env.PORT || 5000, - MONGODB_URL: process.env.MONGODB_URL || 'mongodb://localhost/amazona', - JWT_SECRET: process.env.JWT_SECRET || 'somethingsecret', - PAYPAL_CLIENT_ID: process.env.PAYPAL_CLIENT_ID || 'sb', - accessKeyId: process.env.accessKeyId || 'accessKeyId', - secretAccessKey: process.env.secretAccessKey || 'secretAccessKey', -}; diff --git a/backend/data.js b/backend/data.js deleted file mode 100644 index df964e3..0000000 --- a/backend/data.js +++ /dev/null @@ -1,46 +0,0 @@ -export default { - products: [ - { - _id: '1', - name: 'Slim Shirt', - category: 'Shirts', - image: '/images/d1.jpg', - price: 60, - brand: ' Nike', - rating: 4.5, - numReviews: 10, - countInStock: 6, - }, - { - _id: '2', - name: 'Fit Shirt', - category: 'Shirts', - image: '/images/d1.jpg', - price: 50, - brand: ' Nike', - rating: 4.2, - numReviews: 5 - }, - { - _id: '3', - name: 'Best Pants', - category: 'Pants', - image: '/images/d1.jpg', - price: 70, - brand: ' Nike', - rating: 4.5, - numReviews: 8, - countInStock: 6, - }, { - _id: '4', - name: 'Best Pants', - category: 'Pants', - image: '/images/d1.jpg', - price: 70, - brand: ' Nike', - rating: 4.5, - numReviews: 8, - countInStock: 6, - }, - ] -} \ No newline at end of file diff --git a/backend/models/orderModel.js b/backend/models/orderModel.js deleted file mode 100644 index 8871d25..0000000 --- a/backend/models/orderModel.js +++ /dev/null @@ -1,43 +0,0 @@ -import mongoose from 'mongoose'; -const shippingSchema = { - address: { type: String, required: true }, - city: { type: String, required: true }, - postalCode: { type: String, required: true }, - country: { type: String, required: true }, -}; - -const paymentSchema = { - paymentMethod: { type: String, required: true } -}; - -const orderItemSchema = new mongoose.Schema({ - name: { type: String, required: true }, - qty: { type: Number, required: true }, - image: { type: String, required: true }, - price: { type: String, required: true }, - product: { - type: mongoose.Schema.Types.ObjectId, - ref: 'Product', - required: true - }, -}); - -const orderSchema = new mongoose.Schema({ - user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true }, - orderItems: [orderItemSchema], - shipping: shippingSchema, - payment: paymentSchema, - itemsPrice: { type: Number }, - taxPrice: { type: Number }, - shippingPrice: { type: Number }, - totalPrice: { type: Number }, - isPaid: { type: Boolean, default: false }, - paidAt: { type: Date }, - isDelivered: { type: Boolean, default: false }, - deliveredAt: { type: Date }, -}, { - timestamps: true -}); - -const orderModel = mongoose.model("Order", orderSchema); -export default orderModel; \ No newline at end of file diff --git a/backend/models/productModel.js b/backend/models/productModel.js deleted file mode 100644 index 7c60507..0000000 --- a/backend/models/productModel.js +++ /dev/null @@ -1,28 +0,0 @@ -import mongoose from 'mongoose'; - -const reviewSchema = new mongoose.Schema( - { - name: { type: String, required: true }, - rating: { type: Number, default: 0 }, - comment: { type: String, required: true }, - }, - { - timestamps: true, - } -); -const prodctSchema = new mongoose.Schema({ - name: { type: String, required: true }, - image: { type: String, required: true }, - brand: { type: String, required: true }, - price: { type: Number, default: 0, required: true }, - category: { type: String, required: true }, - countInStock: { type: Number, default: 0, required: true }, - description: { type: String, required: true }, - rating: { type: Number, default: 0, required: true }, - numReviews: { type: Number, default: 0, required: true }, - reviews: [reviewSchema], -}); - -const productModel = mongoose.model('Product', prodctSchema); - -export default productModel; diff --git a/backend/models/userModel.js b/backend/models/userModel.js deleted file mode 100644 index d33b083..0000000 --- a/backend/models/userModel.js +++ /dev/null @@ -1,14 +0,0 @@ -import mongoose from 'mongoose'; - -const userSchema = new mongoose.Schema({ - name: { type: String, required: true }, - email: { - type: String, required: true, unique: true, index: true, dropDups: true, - }, - password: { type: String, required: true }, - isAdmin: { type: Boolean, required: true, default: false }, -}); - -const userModel = mongoose.model('User', userSchema); - -export default userModel; diff --git a/backend/routes/orderRoute.js b/backend/routes/orderRoute.js deleted file mode 100644 index ad9181a..0000000 --- a/backend/routes/orderRoute.js +++ /dev/null @@ -1,70 +0,0 @@ -import express from 'express'; -import Order from '../models/orderModel'; -import { isAuth, isAdmin } from '../util'; - -const router = express.Router(); - -router.get("/", isAuth, async (req, res) => { - const orders = await Order.find({}).populate('user'); - res.send(orders); -}); -router.get("/mine", isAuth, async (req, res) => { - const orders = await Order.find({ user: req.user._id }); - res.send(orders); -}); - -router.get("/:id", isAuth, async (req, res) => { - const order = await Order.findOne({ _id: req.params.id }); - if (order) { - res.send(order); - } else { - res.status(404).send("Order Not Found.") - } -}); - -router.delete("/:id", isAuth, isAdmin, async (req, res) => { - const order = await Order.findOne({ _id: req.params.id }); - if (order) { - const deletedOrder = await order.remove(); - res.send(deletedOrder); - } else { - res.status(404).send("Order Not Found.") - } -}); - -router.post("/", isAuth, async (req, res) => { - const newOrder = new Order({ - orderItems: req.body.orderItems, - user: req.user._id, - shipping: req.body.shipping, - payment: req.body.payment, - itemsPrice: req.body.itemsPrice, - taxPrice: req.body.taxPrice, - shippingPrice: req.body.shippingPrice, - totalPrice: req.body.totalPrice, - }); - const newOrderCreated = await newOrder.save(); - res.status(201).send({ message: "New Order Created", data: newOrderCreated }); -}); - -router.put("/:id/pay", isAuth, async (req, res) => { - const order = await Order.findById(req.params.id); - if (order) { - order.isPaid = true; - order.paidAt = Date.now(); - order.payment = { - paymentMethod: 'paypal', - paymentResult: { - payerID: req.body.payerID, - orderID: req.body.orderID, - paymentID: req.body.paymentID - } - } - const updatedOrder = await order.save(); - res.send({ message: 'Order Paid.', order: updatedOrder }); - } else { - res.status(404).send({ message: 'Order not found.' }) - } -}); - -export default router; \ No newline at end of file diff --git a/backend/routes/productRoute.js b/backend/routes/productRoute.js deleted file mode 100644 index 8bc2799..0000000 --- a/backend/routes/productRoute.js +++ /dev/null @@ -1,110 +0,0 @@ -import express from 'express'; -import Product from '../models/productModel'; -import { isAuth, isAdmin } from '../util'; - -const router = express.Router(); - -router.get('/', async (req, res) => { - const category = req.query.category ? { category: req.query.category } : {}; - const searchKeyword = req.query.searchKeyword - ? { - name: { - $regex: req.query.searchKeyword, - $options: 'i', - }, - } - : {}; - const sortOrder = req.query.sortOrder - ? req.query.sortOrder === 'lowest' - ? { price: 1 } - : { price: -1 } - : { _id: -1 }; - const products = await Product.find({ ...category, ...searchKeyword }).sort( - sortOrder - ); - res.send(products); -}); - -router.get('/:id', async (req, res) => { - const product = await Product.findOne({ _id: req.params.id }); - if (product) { - res.send(product); - } else { - res.status(404).send({ message: 'Product Not Found.' }); - } -}); -router.post('/:id/reviews', isAuth, async (req, res) => { - const product = await Product.findById(req.params.id); - if (product) { - const review = { - name: req.body.name, - rating: Number(req.body.rating), - comment: req.body.comment, - }; - product.reviews.push(review); - product.numReviews = product.reviews.length; - product.rating = - product.reviews.reduce((a, c) => c.rating + a, 0) / - product.reviews.length; - const updatedProduct = await product.save(); - res.status(201).send({ - data: updatedProduct.reviews[updatedProduct.reviews.length - 1], - message: 'Review saved successfully.', - }); - } else { - res.status(404).send({ message: 'Product Not Found' }); - } -}); -router.put('/:id', isAuth, isAdmin, async (req, res) => { - const productId = req.params.id; - const product = await Product.findById(productId); - if (product) { - product.name = req.body.name; - product.price = req.body.price; - product.image = req.body.image; - product.brand = req.body.brand; - product.category = req.body.category; - product.countInStock = req.body.countInStock; - product.description = req.body.description; - const updatedProduct = await product.save(); - if (updatedProduct) { - return res - .status(200) - .send({ message: 'Product Updated', data: updatedProduct }); - } - } - return res.status(500).send({ message: ' Error in Updating Product.' }); -}); - -router.delete('/:id', isAuth, isAdmin, async (req, res) => { - const deletedProduct = await Product.findById(req.params.id); - if (deletedProduct) { - await deletedProduct.remove(); - res.send({ message: 'Product Deleted' }); - } else { - res.send('Error in Deletion.'); - } -}); - -router.post('/', isAuth, isAdmin, async (req, res) => { - const product = new Product({ - name: req.body.name, - price: req.body.price, - image: req.body.image, - brand: req.body.brand, - category: req.body.category, - countInStock: req.body.countInStock, - description: req.body.description, - rating: req.body.rating, - numReviews: req.body.numReviews, - }); - const newProduct = await product.save(); - if (newProduct) { - return res - .status(201) - .send({ message: 'New Product Created', data: newProduct }); - } - return res.status(500).send({ message: ' Error in Creating Product.' }); -}); - -export default router; diff --git a/backend/routes/uploadRoute.js b/backend/routes/uploadRoute.js deleted file mode 100644 index c962954..0000000 --- a/backend/routes/uploadRoute.js +++ /dev/null @@ -1,42 +0,0 @@ -import express from 'express'; -import multer from 'multer'; -import multerS3 from 'multer-s3'; -import aws from 'aws-sdk'; -import config from '../config'; - -const storage = multer.diskStorage({ - destination(req, file, cb) { - cb(null, 'uploads/'); - }, - filename(req, file, cb) { - cb(null, `${Date.now()}.jpg`); - }, -}); - -const upload = multer({ storage }); - -const router = express.Router(); - -router.post('/', upload.single('image'), (req, res) => { - res.send(`/${req.file.path}`); -}); - -aws.config.update({ - accessKeyId: config.accessKeyId, - secretAccessKey: config.secretAccessKey, -}); -const s3 = new aws.S3(); -const storageS3 = multerS3({ - s3, - bucket: 'amazona-bucket', - acl: 'public-read', - contentType: multerS3.AUTO_CONTENT_TYPE, - key(req, file, cb) { - cb(null, file.originalname); - }, -}); -const uploadS3 = multer({ storage: storageS3 }); -router.post('/s3', uploadS3.single('image'), (req, res) => { - res.send(req.file.location); -}); -export default router; diff --git a/backend/routes/userRoute.js b/backend/routes/userRoute.js deleted file mode 100644 index 40ab7d4..0000000 --- a/backend/routes/userRoute.js +++ /dev/null @@ -1,80 +0,0 @@ -import express from 'express'; -import User from '../models/userModel'; -import { getToken, isAuth } from '../util'; - -const router = express.Router(); - -router.put('/:id', isAuth, async (req, res) => { - const userId = req.params.id; - const user = await User.findById(userId); - if (user) { - user.name = req.body.name || user.name; - user.email = req.body.email || user.email; - user.password = req.body.password || user.password; - const updatedUser = await user.save(); - res.send({ - _id: updatedUser.id, - name: updatedUser.name, - email: updatedUser.email, - isAdmin: updatedUser.isAdmin, - token: getToken(updatedUser), - }); - } else { - res.status(404).send({ message: 'User Not Found' }); - } -}); - -router.post('/signin', async (req, res) => { - const signinUser = await User.findOne({ - email: req.body.email, - password: req.body.password, - }); - if (signinUser) { - res.send({ - _id: signinUser.id, - name: signinUser.name, - email: signinUser.email, - isAdmin: signinUser.isAdmin, - token: getToken(signinUser), - }); - } else { - res.status(401).send({ message: 'Invalid Email or Password.' }); - } -}); - -router.post('/register', async (req, res) => { - const user = new User({ - name: req.body.name, - email: req.body.email, - password: req.body.password, - }); - const newUser = await user.save(); - if (newUser) { - res.send({ - _id: newUser.id, - name: newUser.name, - email: newUser.email, - isAdmin: newUser.isAdmin, - token: getToken(newUser), - }); - } else { - res.status(401).send({ message: 'Invalid User Data.' }); - } -}); - -router.get('/createadmin', async (req, res) => { - try { - const user = new User({ - name: 'Basir', - email: 'admin@example.com', - password: '1234', - isAdmin: true, - }); - const newUser = await user.save(); - res.send(newUser); - } catch (error) { - res.send({ message: error.message }); - } -}); - -export default router; diff --git a/backend/server.js b/backend/server.js deleted file mode 100644 index f3abd1c..0000000 --- a/backend/server.js +++ /dev/null @@ -1,37 +0,0 @@ -import express from 'express'; -import path from 'path'; -import mongoose from 'mongoose'; -import bodyParser from 'body-parser'; -import config from './config'; -import userRoute from './routes/userRoute'; -import productRoute from './routes/productRoute'; -import orderRoute from './routes/orderRoute'; -import uploadRoute from './routes/uploadRoute'; - -const mongodbUrl = config.MONGODB_URL; -mongoose - .connect(mongodbUrl, { - useNewUrlParser: true, - useUnifiedTopology: true, - useCreateIndex: true, - }) - .catch((error) => console.log(error.reason)); - -const app = express(); -app.use(bodyParser.json()); -app.use('/api/uploads', uploadRoute); -app.use('/api/users', userRoute); -app.use('/api/products', productRoute); -app.use('/api/orders', orderRoute); -app.get('/api/config/paypal', (req, res) => { - res.send(config.PAYPAL_CLIENT_ID); -}); -app.use('/uploads', express.static(path.join(__dirname, '/../uploads'))); -app.use(express.static(path.join(__dirname, '/../frontend/build'))); -app.get('*', (req, res) => { - res.sendFile(path.join(`${__dirname}/../frontend/build/index.html`)); -}); - -app.listen(config.PORT, () => { - console.log('Server started at http://localhost:5000'); -}); diff --git a/backend/util.js b/backend/util.js deleted file mode 100644 index 36504db..0000000 --- a/backend/util.js +++ /dev/null @@ -1,44 +0,0 @@ -import jwt from 'jsonwebtoken'; -import config from './config'; -const getToken = (user) => { - return jwt.sign( - { - _id: user._id, - name: user.name, - email: user.email, - isAdmin: user.isAdmin, - }, - config.JWT_SECRET, - { - expiresIn: '48h', - } - ); -}; - -const isAuth = (req, res, next) => { - const token = req.headers.authorization; - - if (token) { - const onlyToken = token.slice(7, token.length); - jwt.verify(onlyToken, config.JWT_SECRET, (err, decode) => { - if (err) { - return res.status(401).send({ message: 'Invalid Token' }); - } - req.user = decode; - next(); - return; - }); - } else { - return res.status(401).send({ message: 'Token is not supplied.' }); - } -}; - -const isAdmin = (req, res, next) => { - console.log(req.user); - if (req.user && req.user.isAdmin) { - return next(); - } - return res.status(401).send({ message: 'Admin Token is not valid.' }); -}; - -export { getToken, isAuth, isAdmin }; diff --git a/template/index.html b/template/index.html index a50a099..d194b2e 100644 --- a/template/index.html +++ b/template/index.html @@ -13,7 +13,7 @@ - amazona + E-co
diff --git a/frontend/src/store.js b/src/store.js similarity index 100% rename from frontend/src/store.js rename to src/store.js diff --git a/template/images/d1.jpg b/template/images/d1.jpg deleted file mode 100644 index d1291d67339df4305de8578539a58c7c6c1f9d47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54648 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

+)`R|<2?Bx0Ws`&MRhbv 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%0Ae~bSn3gA@@iZW5SUSG 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 - - - - - Amazona - - - -

-
-
- - amazona -
- -
- -
-
-
    -
  • -
    - product - -
    Nike
    -
    $60
    -
    4.5 Stars (10 Reviews)
    -
    -
  • -
  • -
    - product - -
    Nike
    -
    $60
    -
    4.5 Stars (10 Reviews)
    -
    -
  • -
  • -
    - product - -
    Nike
    -
    $60
    -
    4.5 Stars (10 Reviews)
    -
    -
  • -
  • -
    - product - -
    Nike
    -
    $60
    -
    4.5 Stars (10 Reviews)
    -
    -
  • -
  • -
    - product - -
    Nike
    -
    $60
    -
    4.5 Stars (10 Reviews)
    -
    -
  • -
  • -
    - product - -
    Nike
    -
    $60
    -
    4.5 Stars (10 Reviews)
    -
    -
  • - -
-
- -
-
- All right reserved. -
-
- - - - \ No newline at end of file diff --git a/template/style.css b/template/style.css deleted file mode 100644 index 4ffa9b0..0000000 --- a/template/style.css +++ /dev/null @@ -1,134 +0,0 @@ -html{ - font-size: 62.5%; /* 16px * 62.5 = 10px = 1rem */ - box-sizing: border-box; -} -body{ - font: 1.6rem Helvetica; - height: 100vh; - margin: 0; -} -.grid-container{ - display: grid; - grid-template-areas: - "header" - "main" - "footer"; - grid-template-columns: 1fr; - grid-template-rows: 5rem 1fr 5rem; - height: 100%; -} -.header{ - grid-area: header; - background-color: #203040; - color: #ffffff; - display: flex; - justify-content: space-between; - align-items: center; - padding: 0.5rem; -} -.brand a{ - color: #ffffff; - font-size: 3rem; - font-weight: bold; - text-decoration: none; -} -.header-links a{ - color:#ffffff; - text-decoration: none; - padding: 1rem; - -} -.header-links a:hover{ - color:#ff8000; -} -.main{ - grid-area: main; -} -.footer{ - grid-area: footer; - background-color: #203040; - color: #ffffff; - display: flex; - justify-content: center; - align-items: center; -} -a{ - text-decoration: none; -} -a:hover{ - color:#ff8000 -} -/* Home Screen */ -.products { - display: flex; - justify-content: center; - align-items: center; - flex-wrap: wrap; -} -.products li { - list-style-type: none; - padding: 0; - flex: 0 1 34rem; - margin: 1rem; - height: 50rem; - border-bottom: .1rem #c0c0c0 solid; -} -.product{ - display: flex; - flex-direction: column; - justify-content: space-between; - height: 100%; -} -.product-name{ - font-size: 2rem; - font-weight: bold; -} -.product-brand{ - font-size: 1.2rem; - color:#808080; -} -.product-price{ - font-size: 2rem; - font-weight: bold; -} -.product-image{ - max-width: 34rem; - max-height: 34rem; -} -.product-rating{ - margin-bottom: 1rem; -} -/* Sidebar */ - -.brand button { - font-size: 3rem; - padding: .5rem; - background: none; - border: none; - color:#ffffff; - cursor: pointer; -} -.sidebar{ - position: fixed; - transform: translateX(-30rem); - width: 30rem; - background-color: #f0f0f0; - height: 100%; -} -.sidebar.open{ - transform: translateX(0); -} - -.sidebar-close-button{ - border-radius: 50%; - border: .1rem #000000 solid; - width: 3rem; - height: 3rem; - padding: .5rem; - font-size: 2rem; - padding-top: 0; - cursor: pointer; - position: absolute; - right: .5rem; - top: 1.5rem -} \ No newline at end of file From ed33cffba13e26c52f795b716074c0582f083991 Mon Sep 17 00:00:00 2001 From: Jumara Pimenta Date: Sat, 24 Jul 2021 18:05:16 -0400 Subject: [PATCH 05/22] menu --- src/App.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/App.js b/src/App.js index b2756bc..19c1a6f 100644 --- a/src/App.js +++ b/src/App.js @@ -16,10 +16,12 @@ function App() { document.querySelector(".sidebar").classList.remove("open"); }; return ( + <>
-
+
+ logo do projeto @@ -69,6 +71,7 @@ function App() {
All right reserved.
+ <> ); } From 218f5ce26d2ab3c654e7b3b3f7248dad193680b5 Mon Sep 17 00:00:00 2001 From: Jumara Pimenta Date: Sat, 24 Jul 2021 19:15:44 -0400 Subject: [PATCH 06/22] =?UTF-8?q?envia=20modifica=C3=A7=C3=B5es=20no=20men?= =?UTF-8?q?u?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 4 ++-- src/index.css | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/App.js b/src/App.js index 19c1a6f..086654d 100644 --- a/src/App.js +++ b/src/App.js @@ -4,6 +4,8 @@ import "./App.css"; import HomeScreen from "./screens/HomeScreen"; import ProductScreen from "./screens/ProductScreen"; import { useSelector } from "react-redux"; +import LogoEco from "./../src/assets/ecologo.png"; + function App() { const userSignin = useSelector((state) => state.userSignin); @@ -16,7 +18,6 @@ function App() { document.querySelector(".sidebar").classList.remove("open"); }; return ( - <>
@@ -71,7 +72,6 @@ function App() {
All right reserved.
- <> ); } diff --git a/src/index.css b/src/index.css index edec067..b4acf88 100644 --- a/src/index.css +++ b/src/index.css @@ -28,13 +28,18 @@ button { } .header { grid-area: header; - background-color: #FFF0A5; + background-color: #FFB03B ; color: #ffffff; display: flex; justify-content: space-between; align-items: center; padding: 0.5rem; } + +.buttonMenu { + margin-bottom: 3rem; +} + .brand a { color: #ffffff; font-size: 3rem; @@ -43,8 +48,8 @@ button { } .imgLogo{ - display: flex; - width: 12rem; + width: 10rem; + margin-top: 2rem; } .header-links a { color: #ffffff; @@ -67,6 +72,7 @@ button { } a { text-decoration: none; + color: #8E2800; } a:hover { color: #ff8000; @@ -77,6 +83,7 @@ a:hover { justify-content: center; align-items: center; flex-wrap: wrap; + margin-top: 5rem; } .products li { list-style-type: none; @@ -105,8 +112,9 @@ a:hover { font-weight: bold; } .product-image { - max-width: 34rem; + max-width: 28rem; max-height: 34rem; + border-radius: 3rem; } .product-rating { margin-bottom: 1rem; From c3acc01c928bab427391aecdccbae50e8f207868 Mon Sep 17 00:00:00 2001 From: xXMauricioHXx Date: Sun, 25 Jul 2021 12:34:16 -0300 Subject: [PATCH 07/22] added manifest.yml --- manifest.yml | 11 +++++++++++ package.json | 1 + server.js | 10 ++++++++++ 3 files changed, 22 insertions(+) create mode 100644 manifest.yml create mode 100644 server.js diff --git a/manifest.yml b/manifest.yml new file mode 100644 index 0000000..52a2c22 --- /dev/null +++ b/manifest.yml @@ -0,0 +1,11 @@ +applications: + - name: call-for-code-2021 + path: . + command: node server.js + instances: 1 + routes: + - route: maratona-cf-exemplo.mybluemix.net + random-route: true + memory: 128M + env: + PORT: 3000 diff --git a/package.json b/package.json index d8b2e58..320c3e1 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2", "axios": "^0.19.2", + "express": "^4.17.1", "js-cookie": "^2.2.1", "react": "^16.12.0", "react-dom": "^16.12.0", diff --git a/server.js b/server.js new file mode 100644 index 0000000..930eec6 --- /dev/null +++ b/server.js @@ -0,0 +1,10 @@ +const express = require('express'); +const path = require('path'); +const serveStatic = require('serve-static'); + +const app = express(); +app.use(serveStatic(path.join(__dirname, 'build'))); + +var port = process.env.PORT || 5000; +app.listen(port); +console.log('server started ' + port); From 952ec111d763f524baf44598acfb8d2f39df6d16 Mon Sep 17 00:00:00 2001 From: Jumara Pimenta Date: Sun, 25 Jul 2021 15:24:08 -0400 Subject: [PATCH 08/22] =?UTF-8?q?envia=20modifica=C3=A7=C3=B5es=20no=20est?= =?UTF-8?q?ilo=20da=20p=C3=A1gina=20inicial=20de=20produtos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 23 +++++++----- "src/assets/localiza\303\247\303\243o.png" | Bin 0 -> 834 bytes src/index.css | 41 +++++++++++++++------ src/screens/HomeScreen.js | 35 ++---------------- src/screens/ProductScreen.js | 6 +-- 5 files changed, 49 insertions(+), 56 deletions(-) create mode 100644 "src/assets/localiza\303\247\303\243o.png" diff --git a/src/App.js b/src/App.js index 086654d..4ac87fc 100644 --- a/src/App.js +++ b/src/App.js @@ -6,7 +6,6 @@ import ProductScreen from "./screens/ProductScreen"; import { useSelector } from "react-redux"; import LogoEco from "./../src/assets/ecologo.png"; - function App() { const userSignin = useSelector((state) => state.userSignin); const { userInfo } = userSignin; @@ -21,11 +20,15 @@ function App() {
-
- - - logo do projeto - +
+
+ +
+
+ + logo do projeto + +
Cart @@ -48,17 +51,17 @@ function App() {
@@ -69,7 +72,7 @@ function App() {
-
All right reserved.
+
E-co
); diff --git "a/src/assets/localiza\303\247\303\243o.png" "b/src/assets/localiza\303\247\303\243o.png" new file mode 100644 index 0000000000000000000000000000000000000000..85f350a7146868c34a7ec2798373f2a681a4a2a8 GIT binary patch literal 834 zcmV-I1HJr-P)fKy4;m)I`<_4Oz&&vmhQH>@<$s8 zn#(n>c^6szjk_U5uy!2t;M$Q!>qcasQ2PN(SlR zYMfM1Ix;2C<|ML-go=EdhlKe8*tEK7MITJ4uuay%fi)H--1T|*55NXyWGRU+WdHyG M07*qoM6N<$f@Q3DeE .rating > span:last-child { /* Sidebar */ +.brand { + display: flex; + align-items: center; +} + .brand button { font-size: 3rem; padding: 0.5rem; @@ -455,6 +471,7 @@ tbody > tr:nth-child(odd) { max-width: 45rem; justify-content: space-between; align-items: center; + margin-top: 7rem; } .filter input, .filter button, diff --git a/src/screens/HomeScreen.js b/src/screens/HomeScreen.js index 01f5b98..8770e0a 100644 --- a/src/screens/HomeScreen.js +++ b/src/screens/HomeScreen.js @@ -1,9 +1,9 @@ import React, { useState, useEffect } from "react"; import { Link } from "react-router-dom"; -import axios from "axios"; import { useSelector, useDispatch } from "react-redux"; import { listProducts } from "../actions/productActions"; import Rating from "../components/Rating"; +import Local from "./../assets/localização.png"; function HomeScreen(props) { const [searchKeyword, setSearchKeyword] = useState(""); @@ -32,32 +32,6 @@ function HomeScreen(props) { return ( <> - {category &&

{category}

} - -
    -
  • -
    - setSearchKeyword(e.target.value)} - /> - -
    -
  • -
  • - Sort By{" "} - -
  • -
- {loading ? ( -
Loading...
- ) : error ? ( -
{error}
- ) : (
    {products.map((product) => (
  • @@ -69,23 +43,22 @@ function HomeScreen(props) { alt="product" /> +
    ${product.price}
    {product.name}
    -
    ${product.price}
    -
    Cidade: {product.address.city}
    + />
    +
    logo delocalizaçãoCity: {product.address.city}
))} - )} ); } diff --git a/src/screens/ProductScreen.js b/src/screens/ProductScreen.js index 2a89d2a..b037284 100644 --- a/src/screens/ProductScreen.js +++ b/src/screens/ProductScreen.js @@ -62,6 +62,9 @@ function ProductScreen(props) {
    +
  • + Price: ${product.price} +
  • {product.name}

  • @@ -73,9 +76,6 @@ function ProductScreen(props) { /> -
  • - Price: ${product.price} -
  • Description:
    {product.description}
    From 1bf961e69aeaaccb386274a1579d962ee49f2e5f Mon Sep 17 00:00:00 2001 From: Allana Evellyn Date: Sun, 25 Jul 2021 17:23:18 -0300 Subject: [PATCH 09/22] Changes in products page --- public/index.html | 3 +++ src/App.css | 1 + src/index.css | 24 ++++++++++++++++++++++-- src/screens/ProductScreen.js | 5 +---- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/public/index.html b/public/index.html index 47b095d..b21ee49 100644 --- a/public/index.html +++ b/public/index.html @@ -9,6 +9,9 @@ name="description" content="Web site created using create-react-app" /> + + +