-
Notifications
You must be signed in to change notification settings - Fork 7
/
usecasestodo.ts
163 lines (163 loc) · 7.49 KB
/
usecasestodo.ts
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
export const useCasesTodo = {
owner: {
fields: [
"appointmentsTotal",
"ratingsTotal",
"haveDelivery",
"typeTax",
"costByTimeDriving",
"fixedTax",
"fidelityTaxPoints",
"minimumTimeForReSchedule",
],
},
pushByOwner: [
{
rules: [
"owner pode mandar push ou email pra usuario desde que esse usuario seja seu cliente",
],
},
],
products: { fields: ["quantity", "name"] },
packagesCombo: { fields: ["arrayServices", "total"] },
services: {
fields: [
"productsQuantityNeeded",
"productId",
"promotionalPrice",
"price",
"finalPrice",
"havePromotionalPrice",
"hasFidelityGenerator",
"appointmentsTotal",
"canPayWithFidelityPoints",
],
rules: [
"se havePromotionalPrice for true finalPrice é promotionalPrice, caso contrário é price",
],
useCases: [
"retornar média de preço do salão pegando todos os preços e dividindo",
"retornar lista de todos os serviços cadastrados de owner active true e ordena-los pelo finalPrice ou" +
"appointmentsTotal",
],
},
request: [
{
statusTypes: [
"status 0 é solicitado",
"status 1 é confirmado",
"status 2 é cancelado pelo owner",
"status 3 é cancelado pelo client",
"status 4 é reagendamento pendente devido a conflito de agenda",
"status 5 é reagendamento solicitado pelo owner",
"status 6 é reagendamento solicitado pelo client",
"status 7 é reagendamento confirmado ou pelo owner ou pelo client",
"status 8 é reagendamento negado ou pelo owner ou pelo client",
"status 9 é quando o cliente avalia",
"status 10 é quando o owner efetiva o pedido, nesse momento é criado um registro em order",
"status 11 é quando o cliente avalia pedido já efetivado",
],
rules: [
"status só pode ser 0 se for passado no addRequest, no update não pode",
"status só pode ser 1 se status anterior for 0 e se o agendamento tiver data de início no futuro",
"status só pode ser 2 se status anterior for 0 e se o agendamento tiver data de início no futuro e esse futuro for maior que 50 min",
"status só pode ser 3 se status anterior for 0 e se o agendamento tiver data de início no futuro e esse futuro for maior minimumTimeForReSchedule do owner",
"status só pode ser 4 se status anterior for 0",
"status só pode ser 5 se status anterior for 0,4,3",
"status só pode ser 5 se status anterior for 1,7,2 e a data de inicio for maior que ao menos 50min da data presente",
"status só pode ser 6 se status anterior for 0, 4, ou 2",
"status só pode ser 6 se status anterior for 1,7,3 e a data de inicio for maior que ao menos minimumTimeForReSchedule do owner contando a data presente",
"status só pode ser 7 se status anterior for 5 ou 6 e se o agendamento tiver data de início no futuro e esse futuro for maior que 50 min",
"status só pode ser 8 se status anterior for 5 ou 6 e se o agendamento tiver data de início no futuro e esse futuro for maior que 50 min",
"status só pode ser 9 se status anterior for 1, 7 e se o agendamento tiver data de início no passado e esse passado tiver distancia minima de 3 dias",
"status só pode ser 10 se status anterior for 1, 7 ou 9 e se o agendamento tiver data de início no passado",
"status só pode ser 11 se status anterior for 10 e se o agendamento tiver data de início no passado e esse passado tiver distancia minima de 3 dias",
],
cron: [
"pedidos no passado que tiverem status 0,5 ou 6 passam a ser status 4",
"status === 0 manda push pro owner e professional",
"status === 1 manda push pro cliente e cria reminders",
"status === 2 manda push pro client",
"status === 3 manda push pro owner e professional",
"status === 4 manda push pro owner,professional e client",
"status === 5 manda push pro client e deleta reminders associados",
"status === 6 manda push pro owner e professional e deleta reminders associados",
"status === 7 manda push pro owner,professional e client e deleta reminders associados e cria novos",
"status === 8 manda push pro owner,professional e client",
"status === 9 || status === 11 manda push pro owner e professional",
],
},
],
order: [
{
fields: [
"percentageAdopted",
"paymentForm",
"orderPaidByClient",
"comissionPaidByOwner",
"comissionValue",
"totalValue===extraCost+normalCost",
"professionalId",
"ownerId",
"requestId",
"clientId",
"extraCost",
"normalCost",
"haveFidelity",
"pointsUsed", //CAMPO EM formato de preço ja
"appointmentDate",
"createdAt",
],
useCases: [
"owner marca comissao como paga comissionPaidByOwner e pedido orderPaidByClient",
"após criação ( ou seja, foi efetivado), incrementar o numero appointmentsTotal do serviço associado e incrementar o appointmentsTotal do profissional e do salão",
"retornar comissoes de um determinado profissional num periodo de tempo calculando a soma de comissionValue e totalValue",
"retornar total de um determinado salao podendo filtrar por profissional",
],
rules: [
"pra criar a comissao a data de inicio da request associada deve estar no passado",
],
},
],
fidelity: [
"owner define quantos reais vale cada ponto de fidelidade ex: 20reais valem 1 ponto fidelityTaxPoints",
"define em services o campo hasFidelityGenerator pra saber se o serviço contempla a fidelidade",
"define em services o campo canPayWithFidelityPoints pra saber se o serviço pode ser trocado por pontos",
"campo points em user pra saber quantos pontos o cliente acumulou",
"após efetivação do pedido os pontos sao somados pro cliente",
],
ride: [
{
fields: [
"requestId",
"driverUserType",
"origin",
"destiny",
"status",
"distance",
"distanceTime",
"maxCostEstimated",
"minCostEstimated",
"finalCost",
"costDefinedByOwner",
"initDate",
"endDateEstimated",
"endDate",
],
rules: [
"driverUserType pode ser professional/owner ou client",
"o registro inicia no status 0, ou seja, nem saiu pra entrega ainda",
"status === 1 é quando saiu e ja esta a caminho, só pode ser 1 se o anterior for 0 e só pode ser disparado pelo driverUserType responsavel",
"status === 2 é quando chegou e só pode ser 2 se o anterior for 1, e ele pode ser mudado tanto pelo cliente como pelo owner",
"caso seja status 2 o owner/professional indica qto custou a corrida no finalCost",
"se driverUserType for owner ou professional,na hora de salvar o costDefinedByOwner pegar o costByTimeDriving e multiplicar pelo tempo de viagem distanceTime, define o min subtraindo 5 reais e o max adicionando 5 reais ou pega o fixedTax e coloca nos 2 costs",
],
toDo: [
"criar field haveDelivery no owner",
"criar field typeTax por tempo ou taxa fixa",
"caso esse campo seja por tempo exigir pro salao preencher um campo costByTimeDriving o valor da taxa cobrada por tempo de viagem caso seja fixa um campo chamado fixedTax pra cobrar taxa fixa",
],
},
],
};
export const commands = ["ncu --interactive --format group"];