Skip to content

Commit b1a4b4c

Browse files
authored
Merge pull request #8 from Axel77g/feature/create-use-case-implementation-and-refacto-express-part
Feature/create use case implementation and refacto express part
2 parents 465d1bb + 9dd301e commit b1a4b4c

File tree

21 files changed

+165
-284
lines changed

21 files changed

+165
-284
lines changed
Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
"use server";
22

3-
import {Siret} from "@domain/shared/value-object/Siret";
4-
import {createUnregisterDealerUseCase} from "@application/inventoryManagement/usecases/dealer/UnregisterDealerUseCase";
5-
import {
6-
inventoryManagementEventRepository
7-
} from "@infrastructureCore/repositories/inventoryManagement/inventoryManagementEventRepository";
83
import {abort, ActionResponse, success} from "@/hooks/useServerForm";
9-
import {dealerRepository} from "@infrastructureCore/repositories/inventoryManagement/dealerRepository";
4+
import {
5+
unregisterDealerUseCase
6+
} from "@infrastructureCore/useCaseImplementation/InventoryManagement/unregisterDealerUseCase";
107

118
export interface UnregisterDealerActionState extends ActionResponse{
129
siretString:string
1310
}
1411

1512
export async function unregisterDealerAction(state : UnregisterDealerActionState){
16-
const siret = Siret.create(state.siretString)
17-
if(siret instanceof Error) return siret
18-
const unregisterDealerUseCase = createUnregisterDealerUseCase(inventoryManagementEventRepository, dealerRepository)
19-
const response = await unregisterDealerUseCase({siret})
20-
if(!response.success) return abort(response.error.message)
21-
return success(response.value)
13+
const result = await unregisterDealerUseCase({siret : state.siretString})
14+
if(!result.success) return abort(result.error.message)
15+
return success(result.value)
2216
}
Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,25 @@
11
"use server";
2-
3-
42
import {useServerForm} from "@/hooks/useServerForm";
53
import {registerOrderRequest} from "@infrastructureCore/requests/inventoryManagement/registerOrderRequest";
6-
import {Siret} from "@domain/shared/value-object/Siret";
7-
import {OrderLine} from "@domain/inventoryManagement/value-object/OrderLine";
8-
import {createRegisterOrderUseCase} from "@application/inventoryManagement/usecases/order/RegisterOrderUseCase";
9-
import {
10-
inventoryManagementEventRepository
11-
} from "@infrastructureCore/repositories/inventoryManagement/inventoryManagementEventRepository";
12-
import {dealerRepository} from "@infrastructureCore/repositories/inventoryManagement/dealerRepository";
13-
import {
14-
inventorySparePartRepository
15-
} from "@infrastructureCore/repositories/inventoryManagement/inventorySparePartRepository";
164
import {updateOrderStatusRequest} from "@infrastructureCore/requests/inventoryManagement/updateOrderStatusRequest";
17-
import {createUpdateOrderStatusUseCase} from "@application/inventoryManagement/usecases/order/UpdateOrderStatusUseCase";
18-
import {orderRepository} from "@infrastructureCore/repositories/inventoryManagement/orderRepository";
19-
import {ApplicationException} from "@shared/ApplicationException";
5+
import {registerOrderUseCase} from "@infrastructureCore/useCaseImplementation/InventoryManagement/registerOrderUseCase";
6+
import {
7+
updateOrderStatusUseCase
8+
} from "@infrastructureCore/useCaseImplementation/InventoryManagement/updateOrderStatusUseCase";
209

2110
export async function registerOrder(prevState:any, formData: FormData){
2211
return useServerForm(formData, registerOrderRequest, async (payload, success, abort)=>{
23-
const siret = Siret.create(payload.dealerSiret)
24-
if(siret instanceof Error) return abort(siret.message)
25-
const orderLines = payload.orderLines.map((line) => {
26-
return OrderLine.create(line)
27-
})
28-
if(orderLines.some((line) => line instanceof ApplicationException)) return abort("Invalid order lines")
29-
const registerOrderUseCase = createRegisterOrderUseCase(inventoryManagementEventRepository,dealerRepository,inventorySparePartRepository)
30-
const result = await registerOrderUseCase({
31-
...payload,
32-
dealer: siret,
33-
orderLines : orderLines as OrderLine[]
34-
})
12+
const result = await registerOrderUseCase(payload)
3513
if(!result.success) return abort(result.error.message)
3614
return success(result.value)
3715
})
3816

3917
}
4018

4119
export async function updateOrderStatus(prevState: any, formData: FormData){
42-
console.log("ici")
4320
return useServerForm(formData, updateOrderStatusRequest, async(payload, success, abort)=>{
44-
const updateOrderStatusUseCase = createUpdateOrderStatusUseCase(inventoryManagementEventRepository,orderRepository)
45-
const response = await updateOrderStatusUseCase(payload)
46-
if(!response.success) return abort(response.error.message)
47-
return success(response.value)
21+
const result = await updateOrderStatusUseCase(payload)
22+
if(!result.success) return abort(result.error.message);
23+
return success(result.value)
4824
})
4925
}
Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,23 @@
1-
import {Siret} from "@domain/shared/value-object/Siret";
21
import {ErrorCallout} from "@/components/ErrorCallout";
3-
import {createShowOrderHistoryUseCase} from "@application/inventoryManagement/usecases/order/ShowOrderHistoryUseCase";
4-
import {createShowDealerUseCase} from "@application/inventoryManagement/usecases/dealer/ShowDealerUseCase";
5-
import {dealerRepository} from "@infrastructureCore/repositories/inventoryManagement/dealerRepository";
6-
import {orderRepository} from "@infrastructureCore/repositories/inventoryManagement/orderRepository";
72
import RegisterOrderForm from "@/app/dealers/[siret]/orders/RegisterOrderForm";
83
import HeadingTile from "@/components/HeadingTitle";
94
import {Order} from "@domain/inventoryManagement/entities/Order";
105
import {ListOrders} from "@/app/dealers/[siret]/orders/ListOrders";
6+
import {
7+
showOrderHistoryUseCase
8+
} from "@infrastructureCore/useCaseImplementation/InventoryManagement/showOrderHistoryUseCase";
119

1210
export default async function DealerOrderPage(pageProps: { params: Promise<{siret: string}>}){
13-
const {siret : siretString} = await pageProps.params;
14-
const siret = Siret.create(siretString);
15-
if(siret instanceof Error) return <ErrorCallout>{siret.message}</ErrorCallout>
16-
const showOrdersHistoryUseCase = createShowOrderHistoryUseCase(createShowDealerUseCase(dealerRepository), orderRepository)
17-
const ordersHistory = await showOrdersHistoryUseCase({siret})
18-
if(!ordersHistory.success) return <ErrorCallout>{ordersHistory.error.message}</ErrorCallout>
19-
11+
const {siret } = await pageProps.params;
12+
const result = await showOrderHistoryUseCase({siret})
13+
if(!result.success) return <ErrorCallout>{result.error.message}</ErrorCallout>
2014
function getOrderDTO(order : Order) : any {
2115
return JSON.parse(JSON.stringify(order))
2216
}
23-
2417
return <div>
25-
<HeadingTile>Commandes du concessionnaire {siret.getValue()}</HeadingTile>
26-
<ListOrders orders={ordersHistory.value.map((order)=> getOrderDTO(order))} siretString={siretString}/>
18+
<HeadingTile>Commandes du concessionnaire {siret}</HeadingTile>
19+
<ListOrders orders={result.value.map((order)=> getOrderDTO(order))} siretString={siret}/>
2720
<br/>
28-
<RegisterOrderForm siret={siretString}/>
21+
<RegisterOrderForm siret={siret}/>
2922
</div>
3023
}

backend/src/infrastructure/frameworks/nextjs/app/dealers/[siret]/page.tsx

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,35 @@
11
"use server";
22

3-
import {Siret} from "@domain/shared/value-object/Siret";
4-
import {createShowDealerUseCase} from "@application/inventoryManagement/usecases/dealer/ShowDealerUseCase";
5-
import {dealerRepository} from "@infrastructureCore/repositories/inventoryManagement/dealerRepository";
63
import {UnregisterActionButton} from "@/app/dealers/[siret]/UnregisterActionButton";
74
import {ErrorCallout} from "@/components/ErrorCallout";
85
import {Button} from "@/components/Button";
96
import Link from "next/link";
7+
import {showDealerUseCase} from "@infrastructureCore/useCaseImplementation/InventoryManagement/showDealerUseCase";
108

119
export default async function DealerShowPage(pageProps : {searchProps: any, params: any}){
12-
const {siret:siretString} = await pageProps.params
13-
const siret = Siret.create(siretString)
14-
if(siret instanceof Error) return <ErrorCallout>{siret.message}</ErrorCallout>
15-
const showDealerUseCase = createShowDealerUseCase(dealerRepository);
16-
const dealerResponse = await showDealerUseCase({siret})
17-
if(!dealerResponse.success) return <ErrorCallout>{dealerResponse.error.message}</ErrorCallout>
18-
19-
20-
10+
const {siret} = await pageProps.params
11+
const result = await showDealerUseCase({siret})
12+
if(!result.success) return <ErrorCallout>{result.error.message}</ErrorCallout>
13+
const {value} = result
2114
return <div>
22-
<div className={'font-semibold text-2xl'}> #{dealerResponse.value.siret.getValue()} {dealerResponse.value.name}</div>
15+
<div className={'font-semibold text-2xl'}> #{value.siret.getValue()} {value.name}</div>
2316

2417
<h4 className={"text-xl"}>Adresse</h4>
2518
<ul>
26-
<li>Pays : <b>{dealerResponse.value.address.country}</b></li>
27-
<li>Ville : <b>{dealerResponse.value.address.city}</b></li>
28-
<li>Code postal : <b>{dealerResponse.value.address.postalCode}</b></li>
29-
<li>Rue : <b>{dealerResponse.value.address.street}</b></li>
30-
19+
<li>Pays : <b>{value.address.country}</b></li>
20+
<li>Ville : <b>{value.address.city}</b></li>
21+
<li>Code postal : <b>{value.address.postalCode}</b></li>
22+
<li>Rue : <b>{value.address.street}</b></li>
3123
</ul>
3224

3325
<br/>
3426

35-
<UnregisterActionButton siretString={siretString}/>
27+
<UnregisterActionButton siretString={siret}/>
3628

37-
<Link href={`/dealers/${siretString}/stock`} >
29+
<Link href={`/dealers/${siret}/stock`} >
3830
<Button >Voir le stock</Button>
3931
</Link>
40-
<Link href={`/dealers/${siretString}/orders`} >
32+
<Link href={`/dealers/${siret}/orders`} >
4133
<Button >Voir les des commandes</Button>
4234
</Link>
4335
</div>

backend/src/infrastructure/frameworks/nextjs/app/dealers/[siret]/stock/actions.ts

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,20 @@
22

33
import {useServerForm} from "@/hooks/useServerForm";
44
import {updateStockRequest} from "@infrastructureCore/requests/inventoryManagement/updateStockRequest";
5-
import {Siret} from "@domain/shared/value-object/Siret";
65
import {
7-
createAddSparePartInStockUseCase
8-
} from "@application/inventoryManagement/usecases/stock/AddSparePartInStockUseCase";
9-
import {stockRepository} from "@infrastructureCore/repositories/inventoryManagement/stockRepository";
6+
removeSparePartInStockUseCase
7+
} from "@infrastructureCore/useCaseImplementation/InventoryManagement/removeSparePartInStockUseCase";
108
import {
11-
createRemoveSparePartInStockUseCase
12-
} from "@application/inventoryManagement/usecases/stock/RemoveSparePartInStockUseCase";
13-
import {
14-
inventoryManagementEventRepository
15-
} from "@infrastructureCore/repositories/inventoryManagement/inventoryManagementEventRepository";
16-
import {
17-
inventorySparePartRepository
18-
} from "@infrastructureCore/repositories/inventoryManagement/inventorySparePartRepository";
19-
import {notificationServices} from "@infrastructureCore/services/notificationServices";
20-
import {
21-
createGetInventorySparePartUseCase
22-
} from "@application/inventoryManagement/usecases/inventorySparePart/GetInventorySparePartUseCase";
9+
addSparePartInStockUseCase
10+
} from "@infrastructureCore/useCaseImplementation/InventoryManagement/addSparePartInStockUseCase";
2311
import {Result} from "@shared/Result";
2412

2513
export async function updateDealerStock(prevState : any, formData : FormData){
26-
console.log(Number(formData.get('quantity')))
2714
return useServerForm(formData, updateStockRequest, async (payload, success, abort) =>{
28-
const siret = Siret.create(payload.siret)
29-
if(siret instanceof Error) return abort(siret.message)
3015
let response : Result;
31-
if(payload.quantity < 0){
32-
const removeSparePartInStockUseCase = createRemoveSparePartInStockUseCase(inventoryManagementEventRepository, stockRepository, inventorySparePartRepository, notificationServices)
33-
response = await removeSparePartInStockUseCase({
34-
...payload, siret, quantity : Math.abs(payload.quantity)
35-
})
36-
}else if(payload.quantity > 0){
37-
const addSparePartInStockUseCase = createAddSparePartInStockUseCase(inventoryManagementEventRepository, createGetInventorySparePartUseCase(inventorySparePartRepository))
38-
response = await addSparePartInStockUseCase({
39-
...payload, siret
40-
})
41-
}else{
42-
return abort("La quantité ne peut pas être nulle")
43-
}
16+
if(payload.quantity < 0) response = await removeSparePartInStockUseCase({...payload, quantity: Math.abs(payload.quantity)});
17+
else if(payload.quantity > 0) response = await addSparePartInStockUseCase(payload) ;
18+
else return abort("La quantité ne peut pas être nulle")
4419
if(!response.success) return abort(response.error.message)
4520
return success(response.value)
4621
})
Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
import {ErrorCallout} from "@/components/ErrorCallout";
2-
import {createShowDealerStockUseCase} from "@application/inventoryManagement/usecases/stock/ShowDealerStockUseCase";
3-
import {stockRepository} from "@infrastructureCore/repositories/inventoryManagement/stockRepository";
4-
import {Siret} from "@domain/shared/value-object/Siret";
52
import List from "@/components/List";
63
import ListItem from "@/components/ListItem";
74
import {AddOrRemoveSpareFromStockForm} from "@/app/dealers/[siret]/stock/AddOrRemoveSpareFromStockForm";
5+
import {
6+
showDealerStockUseCase
7+
} from "@infrastructureCore/useCaseImplementation/InventoryManagement/showDealerStockUseCase";
88

99
export default async function StockPage(pageProps: {params: Promise<{siret: string}>}){
10-
const {siret : siretString} = await pageProps.params
11-
const siret = Siret.create(siretString)
12-
if(siret instanceof Error) return <ErrorCallout>{siret.message}</ErrorCallout>
13-
const getDealerStockUseCase = createShowDealerStockUseCase(stockRepository)
14-
const result = await getDealerStockUseCase({siret})
10+
const {siret} = await pageProps.params
11+
const result = await showDealerStockUseCase({siret})
1512
if(!result.success) return <ErrorCallout>{result.error.message}</ErrorCallout>
1613
return <div>
1714
<List>
@@ -23,6 +20,6 @@ export default async function StockPage(pageProps: {params: Promise<{siret: stri
2320
))
2421
}
2522
</List>
26-
<AddOrRemoveSpareFromStockForm siret={siretString}/>
23+
<AddOrRemoveSpareFromStockForm siret={siret}/>
2724
</div>
2825
}

backend/src/infrastructure/frameworks/nextjs/app/dealers/actions.ts

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,14 @@
22

33
import {useServerForm} from "@/hooks/useServerForm";
44
import {registerDealerRequest} from "@infrastructureCore/requests/inventoryManagement/registerDealerRequest";
5-
import {Siret} from "@domain/shared/value-object/Siret";
6-
import {Address} from "@domain/shared/value-object/Address";
7-
import {createRegisterDealerUseCase} from "@application/inventoryManagement/usecases/dealer/RegisterDealerUseCase";
85
import {
9-
inventoryManagementEventRepository
10-
} from "@infrastructureCore/repositories/inventoryManagement/inventoryManagementEventRepository";
11-
import {dealerRepository} from "@infrastructureCore/repositories/inventoryManagement/dealerRepository";
6+
registerDealerUseCase
7+
} from "@infrastructureCore/useCaseImplementation/InventoryManagement/registerDealerUseCase";
128

139
export async function registerDealer(prevState: any, formData: FormData){
1410
return useServerForm(formData,registerDealerRequest, async (payload, success, abort) =>{
15-
const address = Address.create(payload.address)
16-
if(address instanceof Error) return abort(address.message)
17-
const siret = Siret.create(payload.siret)
18-
if(siret instanceof Error) return abort(siret.message)
19-
const registerDealerUseCase = createRegisterDealerUseCase(inventoryManagementEventRepository, dealerRepository)
20-
const registerResponse = await registerDealerUseCase({
21-
siret,
22-
name: payload.name,
23-
address,
24-
phoneNumber: payload.phoneNumber
25-
})
26-
if(!registerResponse.success) return abort(registerResponse.error.message)
27-
return success(registerResponse.value)
11+
const result = await registerDealerUseCase(payload)
12+
if(!result.success) return abort(result.error.message)
13+
return success(result.value)
2814
})
2915
}

backend/src/infrastructure/frameworks/nextjs/app/dealers/page.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,23 @@
11
import {useServerPagination} from "@/hooks/useServerPagination";
2-
import {createListDealerUseCase} from "@application/inventoryManagement/usecases/dealer/listDealerUseCase";
3-
import {dealerRepository} from "@infrastructureCore/repositories/inventoryManagement/dealerRepository";
42
import List from "@/components/List";
53
import ListItem from "@/components/ListItem";
64
import Chip from "@/components/Chip";
75
import Pagination from "@/components/Pagination";
86
import DealerRegisterForm from "@/app/dealers/DealerRegisterForm";
7+
import {ErrorCallout} from "@/components/ErrorCallout";
8+
import {listDealersUseCase} from "@infrastructureCore/useCaseImplementation/InventoryManagement/listDealersUseCase";
99

1010
export default async function DealersListPage(pageProps: {searchParams: any}) {
1111
const paginationQuery = await useServerPagination(pageProps);
12-
const listDealerUseCase = createListDealerUseCase(dealerRepository)
13-
const response = await listDealerUseCase(paginationQuery)
14-
if(!response.success) return <div>
15-
{response.error.message}
16-
</div>
17-
const {value,...pagination} = response
12+
const result = await listDealersUseCase(paginationQuery)
13+
if(!result.success) return <ErrorCallout>{result.error.message}</ErrorCallout>
14+
const {value,...pagination } = result
1815
return (
1916
<>
2017
<List>
2118
{
2219
value.map(dealer=>(
23-
<ListItem link={`/dealers/${dealer.siret.getValue()}`}>
20+
<ListItem key={dealer.siret.getValue()} link={`/dealers/${dealer.siret.getValue()}`}>
2421
<Chip>{dealer.siret.getValue()}</Chip>
2522
{dealer.name}
2623
</ListItem>

backend/src/infrastructure/frameworks/nextjs/app/drivers/[driverLicenseId]/DriverIncidentsList.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,17 @@
33
import {Driver} from "@domain/testDrive/entities/Driver";
44
import {PaginationObject} from "@/hooks/useServerPagination";
55
import List from "@/components/List";
6-
import {createListDriverIncidentsUseCase} from "@application/testDrive/usecases/incident/ListDriverIncidentsUseCase";
7-
import {incidentRepository} from "@infrastructureCore/repositories/testDrive/incidentRepository";
8-
import {driverRepository} from "@infrastructureCore/repositories/testDrive/driverRepository";
9-
import {Response} from "@expressApp/core/Response";
106
import ListItem from "@/components/ListItem";
117
import Chip from "@/components/Chip";
128
import Pagination from "@/components/Pagination";
9+
import {
10+
listDriverIncidentsUseCase
11+
} from "@infrastructureCore/useCaseImplementation/testDrive/listDriverIncidentsUseCase";
12+
import {ErrorCallout} from "@/components/ErrorCallout";
1313

1414
export default async function DriverIncidentsList(props: {driver : Driver, pagination: PaginationObject}){
15-
const listDriverIncidentsUseCase = createListDriverIncidentsUseCase(incidentRepository, driverRepository)
16-
const result = await listDriverIncidentsUseCase({driverLicenseId: props.driver.driverLicenseId, ...props.pagination})
17-
if(!result.success) return Response.Fail(400, result.error.message)
15+
const result = await listDriverIncidentsUseCase({driverLicenseId: props.driver.driverLicenseId.getValue(), ...props.pagination})
16+
if(!result.success) return <ErrorCallout>{result.error.message}</ErrorCallout>
1817
const {value, ...pagination } = result
1918

2019
return <div>

0 commit comments

Comments
 (0)