Skip to content

Commit 6b52324

Browse files
committed
aws-cloud-storage
0 parents  commit 6b52324

File tree

5,065 files changed

+2381815
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

5,065 files changed

+2381815
-0
lines changed

app.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const express = require("express");
2+
const userRouters = require("./routers/userRouters");
3+
const errorController = require("./controllers/errorController");
4+
5+
const app = express();
6+
7+
app.use(express.json());
8+
9+
app.use("/api/v1/users", userRouters);
10+
app.use(errorController);
11+
12+
module.exports = app;

aws-config.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const AWS = require("AWS");
2+
3+
// * Configuration AWS
4+
AWS.config.update({
5+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
6+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
7+
region: process.env.AWS_REGION,
8+
});

classes/ErrorProvider.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module.exports = class ErrorProvider extends Error {
2+
constructor(statusCode, status, message) {
3+
super(message);
4+
5+
this.statusCode = statusCode;
6+
this.status = status;
7+
8+
Error.captureStackTrace(this, this.constructor);
9+
}
10+
};

config.env

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
NODE_ENV=development
2+
PORT=8000
3+
URI=mongodb+srv://sehsyntes:[email protected]/?retryWrites=true&w=majority
4+
JWT_SECRET=aws-cloud-object-storage-secret
5+
JWT_EXPIRES_IN=1d
6+
AWS_ACCESS_KEY_ID=AKIATAVM4EY6AYN64YNU
7+
AWS_SECRET_ACCESS_KEY=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
8+
AWS_REGION=eu-north-1
9+
AWS_BUCKET=instamern
10+
AWS_ACL=public-read

controllers/errorController.js

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
const { JsonWebTokenError, TokenExpiredError } = require("jsonwebtoken");
2+
const ErrorProvider = require("../classes/ErrorProvider");
3+
4+
// ! 409: Duplicate Error
5+
const uniqueError = (err) => {
6+
if (err.keyPattern.hasOwnProperty("username"))
7+
return new ErrorProvider(409, "fail", "That user is already exists.");
8+
9+
return new ErrorProvider(409, "fail", err.message);
10+
};
11+
12+
// ! 403: Forbidden
13+
const validationError = (err) => {
14+
const messages = err.messages.split(",");
15+
16+
const message = messages
17+
.map((message, index) => message.split(":").at(index === 0 ? 2 : 1))
18+
.join("")
19+
.trim();
20+
21+
return new ErrorProvider(403, "fail", err.message);
22+
};
23+
24+
const jsonWebTokenError = () =>
25+
new ErrorProvider(401, "fail", "Authentication failed.");
26+
27+
const tokenExpiredError = () =>
28+
new ErrorProvider(401, "fail", "Authentication expired.");
29+
30+
module.exports = async (err, req, res, next) => {
31+
if (process.env.NODE_ENV === "production") {
32+
if (err.code === 11000) err = uniqueError(err);
33+
if (err.name === "ValidationError") err = validationError(err);
34+
if (err instanceof JsonWebTokenError) err = jsonWebTokenError();
35+
if (err instanceof TokenExpiredError) err = tokenExpiredError();
36+
}
37+
38+
err.statusCode = err.statusCode || 500;
39+
err.status = err.status || "error";
40+
41+
res.status(err.status).json({
42+
status: err.status,
43+
message: err.message,
44+
});
45+
46+
next();
47+
};

controllers/userController.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const ErrorProvider = require("../classes/ErrorProvider");
2+
const User = require("../models/User");
3+
4+
exports.uploadPhoto = async (req, res, next) => {
5+
try {
6+
if (!req.file)
7+
next(new ErrorProvider(404, "fail", "Not found photo to upload."));
8+
} catch (e) {
9+
next(e);
10+
}
11+
};

models/User.js

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const mongoose = require("mongoose");
2+
3+
const userSchema = new mongoose.Schema({
4+
username: {
5+
type: String,
6+
required: [true, "@username is required."],
7+
minlength: [3, "@username cannot be shorter than 3 characters."],
8+
maxlength: [12, "@username connot be longer than 12 characters."],
9+
trim: true,
10+
},
11+
12+
photo: String,
13+
});
14+
15+
const User = mongoose.model("User", userSchema);
16+
17+
module.exports = User;

node_modules/.bin/mime

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/semver

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/uuid

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)