-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
24 changed files
with
5,300 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,3 +22,4 @@ dist-ssr | |
*.njsproj | ||
*.sln | ||
*.sw? | ||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
module.exports = { | ||
env: { | ||
node: true, // Indica que estás en un entorno de Node.js | ||
es2021: true // O la versión de ECMAScript que estés usando | ||
}, | ||
extends: [ | ||
'eslint:recommended', // Usar las configuraciones recomendadas por ESLint | ||
], | ||
parserOptions: { | ||
ecmaVersion: 12, // O la versión de ECMAScript que estés usando | ||
sourceType: 'module', | ||
}, | ||
rules: { | ||
// Aquí puedes añadir o sobrescribir reglas específicas | ||
}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
const {Sequelize} = require('sequelize'); | ||
|
||
const connection = 'postgresql://test_db_owner:Lqn84hbsNPvG@ep-purple-voice-a5bgc10s.us-east-2.aws.neon.tech/test_db?sslmode=require' | ||
|
||
const sequelize = new Sequelize(connection, { | ||
dialect: 'postgres', | ||
dialectOptions: { | ||
ssl: { | ||
require: true, | ||
rejectUnauthorized: false | ||
} | ||
} | ||
}); | ||
|
||
// Synchronize all models | ||
try { | ||
sequelize.authenticate() | ||
sequelize.sync({alter: true}) // force: true elimina las tablas existentes y las vuelve a crear, usa con precaución | ||
.then(() => { | ||
console.log('Database & tables created!') | ||
}) | ||
.catch(error => { | ||
console.error('Unable to create tables, shutting down...', error) | ||
}) | ||
console.log('Connection to the database has been established successfully.') | ||
} catch (error) { | ||
console.error('Unable to connect to the database:', error) | ||
} | ||
|
||
module.exports = sequelize; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
const express = require("express") | ||
const meetService = require('../service/MeetService') | ||
|
||
const router = express.Router() | ||
|
||
router.post('/', (request, response) => { | ||
response.setHeader('Content-Type', 'application/json') | ||
|
||
const meet = { | ||
meetUrl: request.body.meetUrl, | ||
meetDate: request.body.meetDate, | ||
price: request.body.price | ||
} | ||
|
||
const newMeet = meetService.save(meet) | ||
|
||
response.status(201).send(newMeet) | ||
}) | ||
|
||
router.get('/', async (request, response) => { | ||
const url = request.query.url | ||
|
||
if (!url) { | ||
response.status(400).send({message: 'Url parameter is required'}) | ||
return | ||
} | ||
|
||
const meet = await meetService.getByUrl(url) | ||
if (meet) { | ||
response.status(200).send(meet) | ||
} else { | ||
response.status(404).send({message: 'Meet not found'}) | ||
} | ||
}) | ||
router.get('/all', async (request, response) => { | ||
const meets = await meetService.getAll() | ||
response.status(200).send(meets) | ||
}) | ||
|
||
module.exports = router |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
const express = require("express") | ||
const router = express.Router() | ||
|
||
const PurchaseService = require("../service/PurchaseService"); | ||
router.post('/', async (req, res) => { | ||
try { | ||
const purchase = req.body; | ||
const savedPurchase = await PurchaseService.save(purchase); | ||
res.json(savedPurchase); | ||
} catch (error) { | ||
res.status(500).json({error: error.message}); | ||
} | ||
}) | ||
|
||
module.exports = router |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
const express = require("express") | ||
const router = express.Router() | ||
|
||
const stripe = require('stripe')('sk_test_51PSHknKnVUk9u0R7NE00UeVyiOzpnfGxGYnLG6ViHxy2eOpDXfYCQTU28Xnfuh9MPvg7qwi5hQp4ArEBjJhjv73z005BOmZJSK') | ||
|
||
router.post('/create-checkout-session', async (req, res) => { | ||
//TODO encriptar y parsear a bse64 datos del retorno de la respuesta | ||
try { | ||
const meetId = req.body.meetId | ||
const userId = req.body.userId | ||
const session = await stripe.checkout.sessions.create({ | ||
payment_method_types: ['card'], | ||
line_items: [ | ||
{ | ||
price: 'price_1PSI1tKnVUk9u0R7xH1FCwss', | ||
quantity: 1, | ||
}, | ||
], | ||
mode: 'payment', | ||
success_url: 'http://localhost:5173/dashboard?state=succeeded&meetId=' + meetId + '&userId=' + userId, | ||
cancel_url: 'http://localhost:5173/dashboard?state=canceled&meetId=' + meetId + '&userId=' + userId, | ||
}) | ||
|
||
res.json({sessionId: session.id}) | ||
} catch (error) { | ||
res.status(500).json({error: error.message}) | ||
} | ||
}) | ||
|
||
module.exports = router |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
const express = require("express") | ||
const router = express.Router() | ||
const userService = require("../service/UserService"); | ||
|
||
function validateEmail(email) { | ||
const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ | ||
return re.test(email) | ||
} | ||
|
||
function validatePassword(password) { | ||
return password.length >= 8 | ||
} | ||
|
||
router.post('/register', async (req, res) => { | ||
const {user, date, password} = req.body | ||
|
||
const errors = {} | ||
|
||
if (!user) { | ||
errors.user = "El email es requerido" | ||
} else if (!validateEmail(user)) { | ||
errors.user = "El formato del email no es válido" | ||
} | ||
|
||
const today = new Date() | ||
const majorityAgeDate = new Date(today.getFullYear() - 18, 0, 1) | ||
|
||
if (!date) { | ||
errors.date = "La fecha de nacimiento es requerida" | ||
} else { | ||
const userDate = new Date(date) | ||
if (userDate > majorityAgeDate) { | ||
errors.date = "Debes ser mayor de 18 años" | ||
} | ||
} | ||
|
||
if (!password) { | ||
errors.password = "La contraseña es requerida" | ||
} else if (!validatePassword(password)) { | ||
errors.password = "La contraseña debe tener al menos 8 caracteres" | ||
} | ||
|
||
if (Object.keys(errors).length > 0) { | ||
return res.status(400).json({errors}) | ||
} | ||
|
||
const userFound = await userService.save({email: user, birthDate: date, password}) | ||
if (userFound === null) { | ||
const errorResponse = {message: 'El email ya está registrado'} | ||
return res.status(409).json(errorResponse) | ||
} | ||
|
||
res.status(201).json({message: 'Registro exitoso'}) | ||
}) | ||
|
||
router.post('/login', async (req, res) => { | ||
const { user, password } = req.body | ||
|
||
const errors = {} | ||
|
||
if (!user) { | ||
errors.user = "El email es requerido" | ||
} else if (!validateEmail(user)) { | ||
errors.user = "El formato del email no es válido" | ||
} | ||
|
||
if (!password) { | ||
errors.password = "La contraseña es requerida" | ||
} | ||
|
||
if (Object.keys(errors).length > 0) { | ||
return res.status(400).json({ errors }) | ||
} | ||
|
||
const userFound = await userService.login(user, password) | ||
|
||
if (!userFound) { | ||
return res.status(404).json({ message: 'Usuario o contraseña incorrectos' }) | ||
} | ||
|
||
res.status(200).json(userFound) | ||
}) | ||
|
||
//TODO agregar endpoint que consulte el rol desde la DB | ||
|
||
module.exports = router |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
require('dotenv').config() | ||
|
||
const express = require("express") | ||
const cors = require('cors') | ||
|
||
const meetController = require('./controller/MeetController') | ||
const stripeController = require('./controller/StripeController') | ||
const userController = require('./controller/UserController') | ||
const purchaseController = require('./controller/PurchaseController') | ||
|
||
const app = express() | ||
const port = process.env.PORT ? process.env.PORT : 5000 | ||
|
||
const corsOptions = { | ||
origin: '*', | ||
methods: ['GET', 'POST', 'PUT', 'DELETE'], | ||
allowedHeaders: ['Content-Type', 'Authorization'], | ||
} | ||
|
||
app.use(cors(corsOptions)) | ||
app.use(express.json()) | ||
|
||
app.use('/api/meets', meetController) | ||
app.use('/api/users', userController) | ||
app.use('/api/stripe', stripeController) | ||
app.use('/api/purchases', purchaseController) | ||
|
||
|
||
app.get('/', (request, response) => { | ||
response.status(200).json({ | ||
message: "Service is up!" | ||
}) | ||
}) | ||
|
||
app.listen(port, async function () { | ||
console.log(" ➜ Local: Server Listening on port " + port + " (http://localhost:" + port + ")") | ||
}) |
Oops, something went wrong.