Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
A
ajs12_shop
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Egor Kremnev
ajs12_shop
Commits
2c21f1d4
Commit
2c21f1d4
authored
Apr 20, 2023
by
Egor Kremnev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add mongoose
parent
6667ac63
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
353 additions
and
50 deletions
+353
-50
config.js
api_client/config.js
+5
-1
fileDb.js
api_client/db/fileDb.js
+0
-27
index.js
api_client/index.js
+19
-8
Product.js
api_client/models/Product.js
+19
-0
package-lock.json
api_client/package-lock.json
+274
-0
package.json
api_client/package.json
+2
-0
products.js
api_client/routes/products.js
+32
-12
ProductItem.jsx
...client/src/components/Product/ProductItem/ProductItem.jsx
+1
-1
Products.jsx
front_client/src/containers/Products/Products.jsx
+1
-1
No files found.
api_client/config.js
View file @
2c21f1d4
...
@@ -4,5 +4,9 @@ const rootPath = __dirname;
...
@@ -4,5 +4,9 @@ const rootPath = __dirname;
module
.
exports
=
{
module
.
exports
=
{
rootPath
,
rootPath
,
port
:
8001
,
port
:
8001
,
uploadPath
:
path
.
join
(
rootPath
,
'public'
,
'uploads'
)
uploadPath
:
path
.
join
(
rootPath
,
'public'
,
'uploads'
),
db
:
{
host
:
'mongodb://localhost'
,
database
:
'shop'
,
}
};
};
api_client/db/fileDb.js
deleted
100644 → 0
View file @
6667ac63
const
fs
=
require
(
'fs'
);
const
fileName
=
'./db/db.json'
;
let
data
=
[];
module
.
exports
=
{
init
()
{
try
{
const
content
=
fs
.
readFileSync
(
fileName
);
data
=
JSON
.
parse
(
content
.
toString
());
}
catch
(
e
)
{
}
},
getItems
()
{
return
data
;
},
getItem
(
id
)
{
return
data
.
find
(
item
=>
item
.
id
===
id
);
},
addItem
(
item
)
{
data
.
push
(
item
);
this
.
save
();
},
save
()
{
fs
.
writeFileSync
(
fileName
,
JSON
.
stringify
(
data
));
}
};
api_client/index.js
View file @
2c21f1d4
const
cors
=
require
(
'cors'
);
const
cors
=
require
(
'cors'
);
const
express
=
require
(
'express'
);
const
express
=
require
(
'express'
);
const
app
=
express
();
const
app
=
express
();
const
{
port
}
=
require
(
'./config'
);
const
{
port
,
db
:
dbConfig
}
=
require
(
'./config'
);
const
createProductsRoutes
=
require
(
'./routes/products'
);
const
createProductsRoutes
=
require
(
'./routes/products'
);
const
fileDb
=
require
(
'./db/fileDb'
);
const
mongoose
=
require
(
'mongoose'
);
fileDb
.
init
();
app
.
use
(
cors
());
app
.
use
(
cors
());
app
.
use
(
express
.
json
());
app
.
use
(
express
.
json
());
app
.
use
(
express
.
static
(
'public'
));
app
.
use
(
express
.
static
(
'public'
));
app
.
use
(
'/api/v1/products'
,
createProductsRoutes
(
fileDb
));
app
.
use
(
'/api/v1/products'
,
createProductsRoutes
());
const
run
=
async
()
=>
{
await
mongoose
.
connect
(
dbConfig
.
host
+
'/'
+
dbConfig
.
database
,
{
useNewUrlParser
:
true
}
);
app
.
listen
(
port
,
()
=>
{
console
.
log
(
"Server running at http://localhost:"
+
port
);
});
process
.
on
(
'exit'
,
()
=>
{
mongoose
.
disconnect
();
});
};
app
.
listen
(
port
,
()
=>
{
run
().
catch
(
e
=>
console
.
error
(
e
));
console
.
log
(
"Server running at http://localhost:"
+
port
);
});
api_client/models/Product.js
0 → 100644
View file @
2c21f1d4
const
mongoose
=
require
(
'mongoose'
);
const
Schema
=
mongoose
.
Schema
;
const
ProductSchema
=
new
Schema
({
title
:
{
required
:
true
,
type
:
String
},
price
:
{
required
:
true
,
type
:
Number
},
description
:
String
,
image
:
String
});
const
Product
=
mongoose
.
model
(
'Product'
,
ProductSchema
);
module
.
exports
=
Product
;
api_client/package-lock.json
View file @
2c21f1d4
...
@@ -12,6 +12,8 @@
...
@@ -12,6 +12,8 @@
"cors"
:
"^2.8.5"
,
"cors"
:
"^2.8.5"
,
"express"
:
"^4.18.2"
,
"express"
:
"^4.18.2"
,
"fix-esm"
:
"^1.0.1"
,
"fix-esm"
:
"^1.0.1"
,
"mongodb"
:
"^5.3.0"
,
"mongoose"
:
"^7.0.4"
,
"multer"
:
"^1.4.5-lts.1"
,
"multer"
:
"^1.4.5-lts.1"
,
"nanoid"
:
"^4.0.2"
"nanoid"
:
"^4.0.2"
},
},
...
@@ -463,6 +465,25 @@
...
@@ -463,6 +465,25 @@
"@jridgewell/sourcemap-codec"
:
"1.4.14"
"@jridgewell/sourcemap-codec"
:
"1.4.14"
}
}
},
},
"node_modules/@types/node"
:
{
"version"
:
"18.15.12"
,
"resolved"
:
"https://registry.npmjs.org/@types/node/-/node-18.15.12.tgz"
,
"integrity"
:
"sha512-Wha1UwsB3CYdqUm2PPzh/1gujGCNtWVUYF0mB00fJFoR4gTyWTDPjSm+zBF787Ahw8vSGgBja90MkgFwvB86Dg=="
},
"node_modules/@types/webidl-conversions"
:
{
"version"
:
"7.0.0"
,
"resolved"
:
"https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz"
,
"integrity"
:
"sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog=="
},
"node_modules/@types/whatwg-url"
:
{
"version"
:
"8.2.2"
,
"resolved"
:
"https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz"
,
"integrity"
:
"sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA=="
,
"dependencies"
:
{
"@types/node"
:
"*"
,
"@types/webidl-conversions"
:
"*"
}
},
"node_modules/abbrev"
:
{
"node_modules/abbrev"
:
{
"version"
:
"1.1.1"
,
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
,
...
@@ -602,6 +623,14 @@
...
@@ -602,6 +623,14 @@
"node"
:
"^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
"node"
:
"^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
}
},
},
"node_modules/bson"
:
{
"version"
:
"5.2.0"
,
"resolved"
:
"https://registry.npmjs.org/bson/-/bson-5.2.0.tgz"
,
"integrity"
:
"sha512-HevkSpDbpUfsrHWmWiAsNavANKYIErV2ePXllp1bwq5CDreAaFVj6RVlZpJnxK4WWDCJ/5jMUpaY6G526q3Hjg=="
,
"engines"
:
{
"node"
:
">=14.20.1"
}
},
"node_modules/buffer-from"
:
{
"node_modules/buffer-from"
:
{
"version"
:
"1.1.2"
,
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz"
,
...
@@ -1079,6 +1108,11 @@
...
@@ -1079,6 +1108,11 @@
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
,
"integrity"
:
"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
"integrity"
:
"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
},
"node_modules/ip"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ip/-/ip-2.0.0.tgz"
,
"integrity"
:
"sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
},
"node_modules/ipaddr.js"
:
{
"node_modules/ipaddr.js"
:
{
"version"
:
"1.9.1"
,
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
,
...
@@ -1161,6 +1195,14 @@
...
@@ -1161,6 +1195,14 @@
"node"
:
">=6"
"node"
:
">=6"
}
}
},
},
"node_modules/kareem"
:
{
"version"
:
"2.5.1"
,
"resolved"
:
"https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz"
,
"integrity"
:
"sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA=="
,
"engines"
:
{
"node"
:
">=12.0.0"
}
},
"node_modules/lru-cache"
:
{
"node_modules/lru-cache"
:
{
"version"
:
"5.1.1"
,
"version"
:
"5.1.1"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"
,
...
@@ -1177,6 +1219,12 @@
...
@@ -1177,6 +1219,12 @@
"node"
:
">= 0.6"
"node"
:
">= 0.6"
}
}
},
},
"node_modules/memory-pager"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz"
,
"integrity"
:
"sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="
,
"optional"
:
true
},
"node_modules/merge-descriptors"
:
{
"node_modules/merge-descriptors"
:
{
"version"
:
"1.0.1"
,
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"
,
...
@@ -1251,6 +1299,145 @@
...
@@ -1251,6 +1299,145 @@
"mkdirp"
:
"bin/cmd.js"
"mkdirp"
:
"bin/cmd.js"
}
}
},
},
"node_modules/mongodb"
:
{
"version"
:
"5.3.0"
,
"resolved"
:
"https://registry.npmjs.org/mongodb/-/mongodb-5.3.0.tgz"
,
"integrity"
:
"sha512-Wy/sbahguL8c3TXQWXmuBabiLD+iVmz+tOgQf+FwkCjhUIorqbAxRbbz00g4ZoN4sXIPwpAlTANMaGRjGGTikQ=="
,
"dependencies"
:
{
"bson"
:
"^5.2.0"
,
"mongodb-connection-string-url"
:
"^2.6.0"
,
"socks"
:
"^2.7.1"
},
"engines"
:
{
"node"
:
">=14.20.1"
},
"optionalDependencies"
:
{
"saslprep"
:
"^1.0.3"
},
"peerDependencies"
:
{
"@aws-sdk/credential-providers"
:
"^3.201.0"
,
"mongodb-client-encryption"
:
">=2.3.0 <3"
,
"snappy"
:
"^7.2.2"
},
"peerDependenciesMeta"
:
{
"@aws-sdk/credential-providers"
:
{
"optional"
:
true
},
"mongodb-client-encryption"
:
{
"optional"
:
true
},
"snappy"
:
{
"optional"
:
true
}
}
},
"node_modules/mongodb-connection-string-url"
:
{
"version"
:
"2.6.0"
,
"resolved"
:
"https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz"
,
"integrity"
:
"sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ=="
,
"dependencies"
:
{
"@types/whatwg-url"
:
"^8.2.1"
,
"whatwg-url"
:
"^11.0.0"
}
},
"node_modules/mongoose"
:
{
"version"
:
"7.0.4"
,
"resolved"
:
"https://registry.npmjs.org/mongoose/-/mongoose-7.0.4.tgz"
,
"integrity"
:
"sha512-MEmQOOqQUvW1PJcji64NtA2EFGHrEvk9o4g//isVYSJW2+8Y8u49C2qFBKzn1t6/l9onQn012o/PcFqR6ixQpQ=="
,
"dependencies"
:
{
"bson"
:
"^5.0.1"
,
"kareem"
:
"2.5.1"
,
"mongodb"
:
"5.1.0"
,
"mpath"
:
"0.9.0"
,
"mquery"
:
"5.0.0"
,
"ms"
:
"2.1.3"
,
"sift"
:
"16.0.1"
},
"engines"
:
{
"node"
:
">=14.0.0"
},
"funding"
:
{
"type"
:
"opencollective"
,
"url"
:
"https://opencollective.com/mongoose"
}
},
"node_modules/mongoose/node_modules/mongodb"
:
{
"version"
:
"5.1.0"
,
"resolved"
:
"https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz"
,
"integrity"
:
"sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw=="
,
"dependencies"
:
{
"bson"
:
"^5.0.1"
,
"mongodb-connection-string-url"
:
"^2.6.0"
,
"socks"
:
"^2.7.1"
},
"engines"
:
{
"node"
:
">=14.20.1"
},
"optionalDependencies"
:
{
"saslprep"
:
"^1.0.3"
},
"peerDependencies"
:
{
"@aws-sdk/credential-providers"
:
"^3.201.0"
,
"mongodb-client-encryption"
:
"^2.3.0"
,
"snappy"
:
"^7.2.2"
},
"peerDependenciesMeta"
:
{
"@aws-sdk/credential-providers"
:
{
"optional"
:
true
},
"mongodb-client-encryption"
:
{
"optional"
:
true
},
"snappy"
:
{
"optional"
:
true
}
}
},
"node_modules/mongoose/node_modules/ms"
:
{
"version"
:
"2.1.3"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
,
"integrity"
:
"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/mpath"
:
{
"version"
:
"0.9.0"
,
"resolved"
:
"https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz"
,
"integrity"
:
"sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew=="
,
"engines"
:
{
"node"
:
">=4.0.0"
}
},
"node_modules/mquery"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz"
,
"integrity"
:
"sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg=="
,
"dependencies"
:
{
"debug"
:
"4.x"
},
"engines"
:
{
"node"
:
">=14.0.0"
}
},
"node_modules/mquery/node_modules/debug"
:
{
"version"
:
"4.3.4"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
,
"integrity"
:
"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
,
"dependencies"
:
{
"ms"
:
"2.1.2"
},
"engines"
:
{
"node"
:
">=6.0"
},
"peerDependenciesMeta"
:
{
"supports-color"
:
{
"optional"
:
true
}
}
},
"node_modules/mquery/node_modules/ms"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
,
"integrity"
:
"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/ms"
:
{
"node_modules/ms"
:
{
"version"
:
"2.0.0"
,
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
...
@@ -1450,6 +1637,14 @@
...
@@ -1450,6 +1637,14 @@
"integrity"
:
"sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
,
"integrity"
:
"sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
,
"dev"
:
true
"dev"
:
true
},
},
"node_modules/punycode"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz"
,
"integrity"
:
"sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
,
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/qs"
:
{
"node_modules/qs"
:
{
"version"
:
"6.11.0"
,
"version"
:
"6.11.0"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.11.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.11.0.tgz"
,
...
@@ -1541,6 +1736,18 @@
...
@@ -1541,6 +1736,18 @@
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
},
"node_modules/saslprep"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz"
,
"integrity"
:
"sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag=="
,
"optional"
:
true
,
"dependencies"
:
{
"sparse-bitfield"
:
"^3.0.3"
},
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/semver"
:
{
"node_modules/semver"
:
{
"version"
:
"5.7.1"
,
"version"
:
"5.7.1"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
,
...
@@ -1610,6 +1817,11 @@
...
@@ -1610,6 +1817,11 @@
"url"
:
"https://github.com/sponsors/ljharb"
"url"
:
"https://github.com/sponsors/ljharb"
}
}
},
},
"node_modules/sift"
:
{
"version"
:
"16.0.1"
,
"resolved"
:
"https://registry.npmjs.org/sift/-/sift-16.0.1.tgz"
,
"integrity"
:
"sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
},
"node_modules/simple-update-notifier"
:
{
"node_modules/simple-update-notifier"
:
{
"version"
:
"1.1.0"
,
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz"
,
...
@@ -1631,6 +1843,37 @@
...
@@ -1631,6 +1843,37 @@
"semver"
:
"bin/semver.js"
"semver"
:
"bin/semver.js"
}
}
},
},
"node_modules/smart-buffer"
:
{
"version"
:
"4.2.0"
,
"resolved"
:
"https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz"
,
"integrity"
:
"sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
,
"engines"
:
{
"node"
:
">= 6.0.0"
,
"npm"
:
">= 3.0.0"
}
},
"node_modules/socks"
:
{
"version"
:
"2.7.1"
,
"resolved"
:
"https://registry.npmjs.org/socks/-/socks-2.7.1.tgz"
,
"integrity"
:
"sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ=="
,
"dependencies"
:
{
"ip"
:
"^2.0.0"
,
"smart-buffer"
:
"^4.2.0"
},
"engines"
:
{
"node"
:
">= 10.13.0"
,
"npm"
:
">= 3.0.0"
}
},
"node_modules/sparse-bitfield"
:
{
"version"
:
"3.0.3"
,
"resolved"
:
"https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz"
,
"integrity"
:
"sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ=="
,
"optional"
:
true
,
"dependencies"
:
{
"memory-pager"
:
"^1.0.2"
}
},
"node_modules/statuses"
:
{
"node_modules/statuses"
:
{
"version"
:
"2.0.1"
,
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
,
...
@@ -1711,6 +1954,17 @@
...
@@ -1711,6 +1954,17 @@
"nodetouch"
:
"bin/nodetouch.js"
"nodetouch"
:
"bin/nodetouch.js"
}
}
},
},
"node_modules/tr46"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz"
,
"integrity"
:
"sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA=="
,
"dependencies"
:
{
"punycode"
:
"^2.1.1"
},
"engines"
:
{
"node"
:
">=12"
}
},
"node_modules/type-is"
:
{
"node_modules/type-is"
:
{
"version"
:
"1.6.18"
,
"version"
:
"1.6.18"
,
"resolved"
:
"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
,
"resolved"
:
"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
,
...
@@ -1788,6 +2042,26 @@
...
@@ -1788,6 +2042,26 @@
"node"
:
">= 0.8"
"node"
:
">= 0.8"
}
}
},
},
"node_modules/webidl-conversions"
:
{
"version"
:
"7.0.0"
,
"resolved"
:
"https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz"
,
"integrity"
:
"sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="
,
"engines"
:
{
"node"
:
">=12"
}
},
"node_modules/whatwg-url"
:
{
"version"
:
"11.0.0"
,
"resolved"
:
"https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz"
,
"integrity"
:
"sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ=="
,
"dependencies"
:
{
"tr46"
:
"^3.0.0"
,
"webidl-conversions"
:
"^7.0.0"
},
"engines"
:
{
"node"
:
">=12"
}
},
"node_modules/xtend"
:
{
"node_modules/xtend"
:
{
"version"
:
"4.0.2"
,
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
,
...
...
api_client/package.json
View file @
2c21f1d4
...
@@ -15,6 +15,8 @@
...
@@ -15,6 +15,8 @@
"cors"
:
"^2.8.5"
,
"cors"
:
"^2.8.5"
,
"express"
:
"^4.18.2"
,
"express"
:
"^4.18.2"
,
"fix-esm"
:
"^1.0.1"
,
"fix-esm"
:
"^1.0.1"
,
"mongodb"
:
"^5.3.0"
,
"mongoose"
:
"^7.0.4"
,
"multer"
:
"^1.4.5-lts.1"
,
"multer"
:
"^1.4.5-lts.1"
,
"nanoid"
:
"^4.0.2"
"nanoid"
:
"^4.0.2"
},
},
...
...
api_client/routes/products.js
View file @
2c21f1d4
...
@@ -4,6 +4,7 @@ const {nanoid} = require('fix-esm').require('nanoid');
...
@@ -4,6 +4,7 @@ const {nanoid} = require('fix-esm').require('nanoid');
const
multer
=
require
(
'multer'
);
const
multer
=
require
(
'multer'
);
const
path
=
require
(
'path'
);
const
path
=
require
(
'path'
);
const
{
uploadPath
}
=
require
(
'./../config'
);
const
{
uploadPath
}
=
require
(
'./../config'
);
const
Product
=
require
(
'../models/Product'
);
const
storage
=
multer
.
diskStorage
({
const
storage
=
multer
.
diskStorage
({
destination
:
(
req
,
file
,
cb
)
=>
{
destination
:
(
req
,
file
,
cb
)
=>
{
...
@@ -16,25 +17,44 @@ const storage = multer.diskStorage({
...
@@ -16,25 +17,44 @@ const storage = multer.diskStorage({
const
upload
=
multer
({
storage
});
const
upload
=
multer
({
storage
});
const
createRoutes
=
(
db
)
=>
{
const
createRoutes
=
()
=>
{
router
.
post
(
'/'
,
upload
.
single
(
'image'
),
(
req
,
res
)
=>
{
router
.
post
(
'/'
,
upload
.
single
(
'image'
),
async
(
req
,
res
)
=>
{
const
item
=
{...
req
.
body
,
id
:
nanoid
()
};
const
productData
=
{...
req
.
body
};
if
(
req
.
file
)
item
.
image
=
req
.
file
.
filename
;
if
(
req
.
file
)
productData
.
image
=
req
.
file
.
filename
;
else
productData
.
image
=
null
;
db
.
addItem
(
item
);
try
{
res
.
send
(
item
);
const
product
=
new
Product
(
productData
);
res
.
status
(
201
)
.
send
(
await
product
.
save
());
}
catch
(
e
)
{
res
.
status
(
400
)
.
send
(
e
);
}
});
});
router
.
get
(
'/'
,
(
req
,
res
)
=>
{
router
.
get
(
'/'
,
async
(
req
,
res
)
=>
{
res
.
send
(
db
.
getItems
());
try
{
res
.
send
(
await
Product
.
find
());
}
catch
(
e
)
{
res
.
sendStatus
(
500
);
}
});
});
router
.
get
(
'/:id'
,
(
req
,
res
)
=>
{
router
.
get
(
'/:id'
,
async
(
req
,
res
)
=>
{
const
item
=
db
.
getItem
(
req
.
params
.
id
);
try
{
const
result
=
await
Product
.
findById
(
req
.
params
.
id
);
if
(
result
)
return
res
.
send
(
result
);
if
(
item
)
res
.
send
(
item
);
res
.
sendStatus
(
404
);
res
.
sendStatus
(
404
);
}
catch
(
e
)
{
res
.
sendStatus
(
500
);
}
});
});
return
router
;
return
router
;
...
...
front_client/src/components/Product/ProductItem/ProductItem.jsx
View file @
2c21f1d4
...
@@ -25,7 +25,7 @@ const ProductItem = ({product}) => {
...
@@ -25,7 +25,7 @@ const ProductItem = ({product}) => {
</
strong
>
</
strong
>
</
CardContent
>
</
CardContent
>
<
CardActions
>
<
CardActions
>
<
IconButton
component=
{
Link
}
to=
{
PRODUCT_VIEW
.
replace
(
':id'
,
product
.
id
)
}
>
<
IconButton
component=
{
Link
}
to=
{
PRODUCT_VIEW
.
replace
(
':id'
,
product
.
_
id
)
}
>
<
ArrowForwardIosIcon
/>
<
ArrowForwardIosIcon
/>
</
IconButton
>
</
IconButton
>
</
CardActions
>
</
CardActions
>
...
...
front_client/src/containers/Products/Products.jsx
View file @
2c21f1d4
...
@@ -44,7 +44,7 @@ const Products = () => {
...
@@ -44,7 +44,7 @@ const Products = () => {
{
{
products
.
map
(
product
=>
(
products
.
map
(
product
=>
(
<
ProductItem
<
ProductItem
key=
{
product
.
id
}
key=
{
product
.
_
id
}
product=
{
product
}
product=
{
product
}
/>
/>
))
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment