[#313] Création d'une page d'administration : modification/création d'un fournisseur (!20)

| 313| Création d'une page d'administration : modification/création d'un fournisseur |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [x] Pas de régression
- [ ] TU/TI/TF rédigée
- [x] TU/TI/TF OK
- [x] CHANGELOG modifié

Reviewed-on: https://gitea.malio.fr/MALIO-DEV/Ferme/pulls/20
Reviewed-by: Autin <tristan@yuno.malio.fr>
Co-authored-by: Matteo <matteo@yuno.malio.fr>
Co-committed-by: Matteo <matteo@yuno.malio.fr>
This commit is contained in:
Matteo
2026-02-12 08:22:17 +00:00
committed by Mattéo Dunoyer
parent 579bdba65b
commit d527e94bac
12 changed files with 589 additions and 56 deletions
+45
View File
@@ -0,0 +1,45 @@
import { useApi } from '~/composables/useApi'
import type { AddressData } from '~/services/dto/address-data'
export interface AddressPayload {
label: string
street: string
street2?: string | null
postalCode: string
city: string
countryCode: string
}
export interface AddressData extends AddressPayload {
id: number
}
export async function createAddress(
payload: AddressPayload
): Promise<AddressData> {
const api = useApi()
return await api.post<AddressData>('addresses', payload, {
toastErrorKey: 'errors.address.create',
toastSuccessKey: 'success.address.create',
})
}
export async function updateAddress(
id: number,
payload: AddressPayload
): Promise<AddressData> {
const api = useApi()
return await api.patch<AddressData>(`addresses/${id}`, payload, {
toastErrorKey: 'errors.address.update',
toastSuccessKey: 'success.address.update',
})
}
export async function getAddress(id: number): Promise<AddressData> {
const api = useApi()
return await api.get<AddressData>(`addresses/${id}`, {}, {
toastErrorKey: 'errors.address.fetch',
})
}
+10 -1
View File
@@ -6,5 +6,14 @@ export interface AddressData {
postalCode: string
city: string
countryCode: string
fullAddress?: string
}
export interface AddressFormData {
id?: number | null
label: string
street: string
street2?: string | null
postalCode: string
city: string
countryCode: string
}
+18 -2
View File
@@ -1,9 +1,25 @@
import type { AddressData } from '~/services/dto/address-data'
import type { AddressFormData } from "~/services/dto/address-data"
export type SupplierAddresses = AddressFormData[] | string[]
export interface SupplierData {
id: number
name: string
email?: string | null
phone?: string | null
addresses?: AddressData[] | null
addresses: SupplierAddresses
}
export interface SupplierFormData {
name: string
email?: string
phone?: string
addresses: AddressFormData[]
}
export type SupplierPayload = {
name: string
email?: string | null
phone?: string | null
addresses?: string[]
}
+31 -12
View File
@@ -1,23 +1,42 @@
import { useApi } from '~/composables/useApi'
import type { SupplierData } from '~/services/dto/supplier-data'
import { useApi } from "~/composables/useApi"
import type { SupplierData, SupplierPayload } from "~/services/dto/supplier-data"
export type SupplierListResponse =
| SupplierData[]
| { 'hydra:member'?: SupplierData[] }
| { "hydra:member"?: SupplierData[] }
export async function getSupplierList(): Promise<SupplierData[]> {
const api = useApi()
const response = await api.get<SupplierListResponse>('suppliers', {}, {
toastErrorKey: 'errors.supplier.list'
const response = await api.get<SupplierListResponse>("suppliers", {}, {
toastErrorKey: "errors.supplier.list",
})
if (Array.isArray(response)) {
return response
if (Array.isArray(response)) return response
if (response && typeof response === "object" && Array.isArray(response["hydra:member"])) {
return response["hydra:member"]
}
if (response && typeof response === 'object' && Array.isArray(response['hydra:member'])) {
return response['hydra:member']
}
return []
}
export async function getSupplier(id: number): Promise<SupplierData> {
const api = useApi()
return api.get<SupplierData>(`suppliers/${id}`, {}, {
toastErrorKey: "errors.supplier.fetch",
})
}
export async function updateSupplier(id: number, payload: Partial<SupplierPayload>): Promise<SupplierData> {
const api = useApi()
return api.patch<SupplierData>(`suppliers/${id}`, payload, {
toastErrorKey: "errors.supplier.update",
toastSuccessKey: "success.supplier.update",
})
}
export async function createSupplier(payload: SupplierPayload): Promise<SupplierData> {
const api = useApi()
return api.post<SupplierData>("suppliers", payload, {
toastErrorKey: "errors.supplier.create",
toastSuccessKey: "success.supplier.create",
})
}