Skip to content

Commit 3509b90

Browse files
committed
Done$ todoExample / @AleRzendee (#3)
1 parent b800755 commit 3509b90

File tree

10 files changed

+80
-0
lines changed

10 files changed

+80
-0
lines changed

src/dao/FactoryDAO.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import UserDAO from './UserDAO.js';
2+
3+
export default class FactoryDAO {
4+
static getUserDAO() {
5+
return new UserDAO();
6+
}
7+
}

src/dao/UserDAO.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export default class UserDAO {
2+
async getById(id) {
3+
return { _id: id, name: 'Test User', email: 'user@example.com', role: 'user' };
4+
}
5+
}

src/dtos/UserDTO.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export default class UserDTO {
2+
constructor(user) {
3+
this.id = user._id;
4+
this.name = user.name;
5+
this.email = user.email;
6+
this.role = user.role;
7+
}
8+
}

src/middleware/authorization.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export const authorize = (roles = []) => {
2+
return (req, res, next) => {
3+
const user = req.user || { role: 'user' }; // Simulação
4+
if (!roles.includes(user.role)) {
5+
return res.status(403).json({ message: 'Acesso negado' });
6+
}
7+
next();
8+
};
9+
};

src/models/Ticket.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const Ticket = {
2+
create: async (data) => {
3+
return { id: '123', ...data };
4+
}
5+
};
6+
7+
export default Ticket;

src/repositories/UserRepository.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import UserDTO from '../dtos/UserDTO.js';
2+
3+
export default class UserRepository {
4+
constructor(dao) {
5+
this.dao = dao;
6+
}
7+
8+
async getById(id) {
9+
const user = await this.dao.getById(id);
10+
return new UserDTO(user);
11+
}
12+
}

src/routes/carts.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import express from 'express';
2+
import { purchaseCart } from '../services/TicketService.js';
3+
const router = express.Router();
4+
5+
router.post('/:cid/purchase', async (req, res) => {
6+
const result = await purchaseCart(req.params.cid, 'user@example.com');
7+
res.json(result);
8+
});
9+
10+
export default router;

src/routes/products.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import express from 'express';
2+
const router = express.Router();
3+
router.post('/', (req, res) => res.send('Produto criado'));
4+
export default router;

src/routes/users.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import express from 'express';
2+
const router = express.Router();
3+
router.get('/current', (req, res) => {
4+
const user = { _id: '1', name: 'Alice', email: 'alice@example.com', role: 'user' };
5+
const dto = { id: user._id, name: user.name, email: user.email, role: user.role };
6+
res.json(dto);
7+
});
8+
export default router;

src/services/TicketService.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Ticket from '../models/Ticket.js';
2+
3+
export const purchaseCart = async (cartId, userEmail) => {
4+
return Ticket.create({
5+
code: 'ABC123',
6+
purchase_datetime: new Date(),
7+
amount: 100,
8+
purchaser: userEmail
9+
});
10+
};

0 commit comments

Comments
 (0)