-
Notifications
You must be signed in to change notification settings - Fork 0
/
notes.txt
137 lines (124 loc) · 4.57 KB
/
notes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
1 - modelo de dominio User -> Role
2 - nova classe Role
3 - alterar classe User
3.1 - relacionar N-N com Role
3.2 - adicionar get
3.3 - addRole
3.4 - hasRole
3.5 - Testar com o H2
3.6 - adicionar no seed (ROLE_CLIENT no lugar de OPERATOR e senha encriptada)
4 - Adicionar as dependencias SpringSecurity, AuthorizationServer e ResourceServer
4.1 - Role impl GrantedAuthority e Override no getAuthority
4.2 - User impl UserDetails
4.3 - username = email
4.4 - getAuthorities retorna roles
4.5 - os 4 metodos relacionados a conta retornam true
5 - adicionar pacote projections
5.1 - adicionar a projection
5.2 - adicionar UserRepository com nativeQuery
5.3 - implementar UserService
6 - adicionar valores de configuracao no app.props
7 - Checklist do Oauth2
7.1 - adicionar pasta config
7.2 - adicionar classes @Config de AuthServer e ResourceServer
7.3 - adicionar pacote customgrant
7.4 - adicionar classes do projeto demo e ajustar os imports
7.5 - testar o login
8 - Controle de acesso por perfil e rota
8.1 - adicionar nos controllers (insert, update e delete) a annotation de autorizacao ADMIN
9 - Obter o usuario logado
9.1 - No UserService criar um metodo protegido para retornar o usuario autenticado pelo username do claims do token
9.2 - No UserRepository criar um metodo queryMethod que retorna Optional<User> por email
9.3 - Criar um DTO para o usuario
9.4 - No UserService criar metodo para recuperar o user logado (transactional readonly)
9.5 - Criar UserController com a operacao para recuperar o usuario logado restrita para requisicoes autenticadas (hasAnyRole)
10 - Criar um DTO para os dados minimos do Produto
10.1 - alterar o findAll para retornar o DTO anterior
10.2 - ajustar o Service
11 - Criar CategoryDTO
11.1 - adicionar list @NotEmpty de categories no ProductDTO
11.2 - no service no insert/update copiar as categorias para o repository
12 - Criar ClientDTO
Long id
String name
construtor com argumentos
construtor recebendo a entidade User
getters
12.1 - PaymentDTO
Long id
Instant moment
construtor com argumentos
construtor recebendo a entidade Payment
getters
12.2 - criar OrderItemDTO
Long productId
String name
Double price
Integer quantity
construtor com argumentos
construtor recebendo a entidade OrderItem
getters
adicionar metodo Double getSubTotal = price * quantity
12.3 - Criar o OrderDTO
Long id
Instant moment
OrderStatus status
ClientDTO client
PaymentDTO payment
List<OrderItemDTO> items
construtor com argumentos
construtor recebendo a entidade Order
getters
adicionar metodo Double getTotal
12.4 - Criar OrderRepository
12.5 - Criar OrderService
metodo findById
12.6 - Criar um OrderController
/orders
/{id}
12 - Salvando pedido (15:10")
nova interface OrderItemRepository <OrderItem, OrderItemPK>
adicionar validacoes no OrderDTO (items nao pode ser vazio)
OrderService operacao transacional para salvar Order
order : Order
moment now()
status.WATING
adicionar referencia para OrderItemRepository
adicionar o UserService e recuperar o usuario
adicionar referencia para ProductRepository
para cada OrderItemDTO
pegar uma referencia de produto pelo ID -> product : Product
new OrderItem(order, product, itemDTO->quantity, product->price)
order->items->add(item)
orderRepository.save(order)
orderItemRepository.saveAll(order->items)
OrderController novo metodo insert para qualquer cliente logado
no OrderItemDTO
adicionar o imgUrl nos atributos
no construtor e no construtor da entidade
get
13 - Controle de acesso self
OrderController, alterar findById para ROLE_CLIENT e ROLE_ADMIN
Criar uma exception ForbiddenException
no handler adicionar tratamento para acesso proibido
na classe User
metodo boolean hasRole(String role)
Criar classe AuthService
referenciar UserService
metodo validateSelfOrAdmin(userId)
recuperar o user
se user nao e ADMIN e nao tem o mesmo userId
ForbiddenException
OrderService
injetar AuthService
antes de retornar orderDTO validar se o usuario logado eh admin ou eh o dono do pedido
14 - criar CategoryRepository
criar CategoryService
metodo transacional retorna List de CategoryDTO
criar CategoryController
metodo GET findAll
15 - Validacoes de dados
ProductDTO
price @NotNull
ValidationError
addError remover se x -> x.getFieldName().equals(fieldName) antes de adicionar