Skip to content

Commit 070b0e8

Browse files
authored
Merge pull request #5 from Axel77g/add-birth-date-driver
Add birth date driver
2 parents 0e9de0f + b31495f commit 070b0e8

File tree

14 files changed

+35
-6
lines changed

14 files changed

+35
-6
lines changed

backend/src/application/testDrive/projections/DriversProjection.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export class DriversProjection extends AbstractProjection {
4343
firstName: event.payload.firstName || driverResponse.value.firstName,
4444
lastName: event.payload.lastName || driverResponse.value.lastName,
4545
email: event.payload.email || driverResponse.value.email,
46+
birthDate: driverResponse.value.birthDate,
4647
driverLicensedAt: driverResponse.value.driverLicensedAt,
4748
documents: []
4849
})

backend/src/application/testDrive/usecases/driver/RegisterDriverUseCase.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export interface RegisterDriverInput extends IInputUseCase{
1111
firstName : string ,
1212
lastName: string,
1313
email: string,
14+
birthDate: Date,
1415
driverLicensedAt: Date,
1516
}
1617

@@ -31,6 +32,7 @@ export const createRegisterDriverUseCase = (_eventRepository: EventRepository, d
3132
firstName: input.firstName,
3233
lastName: input.lastName,
3334
email: input.email,
35+
birthDate: input.birthDate,
3436
driverLicensedAt: input.driverLicensedAt,
3537
documents: []
3638
})

backend/src/domain/testDrive/entities/Driver.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,23 @@ export interface DriverDTO{
99
firstName: string;
1010
lastName: string;
1111
email: string;
12+
birthDate: Date;
1213
driverLicensedAt: Date;
1314
documents : DriverDocuments[];
1415
}
1516

1617
export class Driver{
1718
static errors = {
1819
INVALID_DRIVER_LICENSE_DATE: new ApplicationException("Driver.INVALID_DRIVER_LICENSE_DATE", "Invalid driver license date"),
20+
NEED_TO_BE_18: new ApplicationException("Driver.NEED_TO_BE_18", "Driver need to be 18 years old")
1921
}
2022

2123
constructor(
2224
public readonly driverLicenseId: DriverLicenseId,
2325
public readonly firstName: string,
2426
public readonly lastName: string,
2527
public readonly email: string,
28+
public readonly birthDate: Date,
2629
public readonly driverLicensedAt: Date,
2730
public readonly documents : DriverDocuments[]
2831
) {}
@@ -36,6 +39,7 @@ export class Driver{
3639
firstName: object.firstName,
3740
lastName: object.lastName,
3841
email: object.email,
42+
birthDate: object.birthDate,
3943
driverLicensedAt: object.driverLicensedAt,
4044
documents: object.documents
4145
})
@@ -46,15 +50,18 @@ export class Driver{
4650
firstName: string,
4751
lastName: string,
4852
email: string,
53+
birthDate: Date,
4954
driverLicensedAt: Date,
5055
documents : DriverDocuments[]
5156
}) {
5257
if (object.driverLicensedAt > new Date()) return Driver.errors.INVALID_DRIVER_LICENSE_DATE;
58+
if(new Date().getFullYear() - object.birthDate.getFullYear() < 18) return Driver.errors.NEED_TO_BE_18;
5359
return new Driver(
5460
object.driverLicenseId,
5561
object.firstName,
5662
object.lastName,
5763
object.email,
64+
object.birthDate,
5865
object.driverLicensedAt,
5966
object.documents
6067
)
@@ -66,6 +73,7 @@ export class Driver{
6673
firstName: this.firstName,
6774
lastName: this.lastName,
6875
email: this.email,
76+
birthDate: this.birthDate,
6977
driverLicensedAt: this.driverLicensedAt,
7078
documents: this.documents
7179
})
@@ -81,6 +89,7 @@ export class Driver{
8189
object.firstName || this.firstName,
8290
object.lastName || this.lastName,
8391
object.email || this.email,
92+
this.birthDate,
8493
this.driverLicensedAt,
8594
this.documents
8695
)

backend/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ async function main(){
4747

4848
const result = await rDriverUseCase({
4949
driverLicenseId,
50+
birthDate: new Date(),
5051
driverLicensedAt : new Date(),
5152
firstName:"John",
5253
lastName:"Doe",

backend/src/infrastructure/common/entityMappers/DriverMapper.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export class DriverMapper{
1010
firstName: driver.firstName,
1111
lastName: driver.lastName,
1212
email: driver.email,
13+
birthDate: driver.birthDate,
1314
driverLicensedAt: driver.driverLicensedAt,
1415
documents: driver.documents
1516
})
@@ -22,6 +23,7 @@ export class DriverMapper{
2223
driver.firstName,
2324
driver.lastName,
2425
driver.email,
26+
driver.birthDate,
2527
driver.driverLicensedAt,
2628
driver.documents
2729
)

backend/src/infrastructure/frameworks/core/requests/testDrive/registerDriverRequest.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ export const registerDriverRequest = z.object({
66
firstName : z.string().min(2),
77
lastName : z.string().min(2),
88
email: z.string().email(),
9+
birthDate: dateParser,
910
driverLicensedAt: dateParser
1011
})

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
import {updateOrderStatusRequest} from "@infrastructureCore/requests/inventoryManagement/updateOrderStatusRequest";
1717
import {createUpdateOrderStatusUseCase} from "@application/inventoryManagement/usecases/order/UpdateOrderStatusUseCase";
1818
import {orderRepository} from "@infrastructureCore/repositories/inventoryManagement/orderRepository";
19+
import {ApplicationException} from "@shared/ApplicationException";
1920

2021
export async function registerOrder(prevState:any, formData: FormData){
2122
return useServerForm(formData, registerOrderRequest, async (payload, success, abort)=>{
@@ -24,11 +25,12 @@ export async function registerOrder(prevState:any, formData: FormData){
2425
const orderLines = payload.orderLines.map((line) => {
2526
return OrderLine.create(line)
2627
})
28+
if(orderLines.some((line) => line instanceof ApplicationException)) return abort("Invalid order lines")
2729
const registerOrderUseCase = createRegisterOrderUseCase(inventoryManagementEventRepository,dealerRepository,inventorySparePartRepository)
2830
const result = await registerOrderUseCase({
2931
...payload,
3032
dealer: siret,
31-
orderLines
33+
orderLines : orderLines as OrderLine[]
3234
})
3335
if(!result.success) return abort(result.error.message)
3436
return success(result.value)

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ import {createRegisterDealerUseCase} from "@application/inventoryManagement/usec
88
import {
99
inventoryManagementEventRepository
1010
} from "@infrastructureCore/repositories/inventoryManagement/inventoryManagementEventRepository";
11+
import {dealerRepository} from "@infrastructureCore/repositories/inventoryManagement/dealerRepository";
1112

1213
export async function registerDealer(prevState: any, formData: FormData){
1314
return useServerForm(formData,registerDealerRequest, async (payload, success, abort) =>{
1415
const address = Address.create(payload.address)
1516
if(address instanceof Error) return abort(address.message)
1617
const siret = Siret.create(payload.siret)
1718
if(siret instanceof Error) return abort(siret.message)
18-
const registerDealerUseCase = createRegisterDealerUseCase(inventoryManagementEventRepository)
19+
const registerDealerUseCase = createRegisterDealerUseCase(inventoryManagementEventRepository, dealerRepository)
1920
const registerResponse = await registerDealerUseCase({
2021
siret,
2122
name: payload.name,

backend/src/infrastructure/frameworks/nextjs/app/drivers/DriverRegisterForm.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ interface DriverRegisterFormProps {
1010
firstName ?: string | undefined
1111
lastName ?: string | undefined,
1212
email ?: string | undefined
13+
birthDate?: string | undefined
1314
driverLicensedAt ?: string | undefined
1415
}
1516

@@ -31,6 +32,7 @@ export default function DriverRegisterForm(){
3132
<Input type="text" name="lastName" label={"Nom de famille"} placeholder={"Nom de famille du conduteur"} value={state.lastName}/>
3233
<Input type="text" name="email" label={"Email"} value={state.email} placeholder={"email@example.com"}/>
3334
<Input type="text" name="driverLicenseId" placeholder={"Numéro du permis de conduire"} label={"Numéro du permis de conduire"} value={state.driverLicenseId}/>
35+
<Input type="date" name="birthDate" placeholder={"Date de naissance"} label={"Date de naissance"} value={state.birthDate}/>
3436
<Input type="date" name="driverLicensedAt" placeholder={"Obtention du permis de conduire"} label={"Obtention du permis de conduire"} value={state.driverLicensedAt}/>
3537
<Button>Ajouter un conducteur</Button>
3638
</Form>

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ interface DriverPatchFormProps {
1111
firstName ?: string | undefined
1212
lastName ?: string | undefined,
1313
email ?: string | undefined
14+
birthDate?: Date
1415
driverLicensedAt ?: Date
1516
}
1617

@@ -31,7 +32,8 @@ export default function DriverPatchForm({ driver } : {driver : DriverPatchFormPr
3132
<Input type="text" name="firstName" value={state?.firstName ?? driver.firstName} label={"Prénom"} placeholder={"Prénom du conducteur"}/>
3233
<Input type="text" name="lastName" value={state?.lastName ?? driver.lastName} label={"Nom de famille"} placeholder={"Nom de famille du conducteur"}/>
3334
<Input type="text" name="email" value={state?.email ?? driver.email} label={"Email"} placeholder={"example@email.com"}/>
34-
<Input type="text" label={"Email"} disabled={true} name="driverLicensedAt" placeholder={"Obtention du permis de conduire"} value={driver.driverLicensedAt?.toLocaleString()}/>
35+
<Input type="text" name="birthDate" placeholder={"Date de naissance"} label={"Date de naissance"} disabled value={driver.birthDate?.toLocaleString()}/>
36+
<Input type="text" label={"Obtention du permis de conduire"} disabled name="driverLicensedAt" placeholder={"Obtention du permis de conduire"} value={driver.driverLicensedAt?.toLocaleString()}/>
3537
<Button>Modifier le conducteur</Button>
3638
</Form>
3739
)

0 commit comments

Comments
 (0)