Skip to content

Commit

Permalink
feat: #4 define api and mock for Availability
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianrbp committed Aug 7, 2024
1 parent 328b695 commit e55e3cf
Show file tree
Hide file tree
Showing 3 changed files with 309 additions and 4 deletions.
70 changes: 70 additions & 0 deletions frontend/src/api/AvailabilityApi.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import EngineersAvailabilityServiceAWeek1 from "@/mock/eng_availability_a_w1.json";
import { AvailabilityPayload, DayAvailability } from "./types";

const isMock = process.env.VUE_APP_USE_MOCK === "true";

export const requestAvailabilities = async (
serviceId: number,
weekId: string
): Promise<DayAvailability[]> => {
if (isMock) {
return new Promise<DayAvailability[]>((resolve) => {
setTimeout(() => {
if (serviceId === 1) {
resolve(EngineersAvailabilityServiceAWeek1.data);
} else {
resolve(EngineersAvailabilityServiceAWeek1.data);
}
}, 500);
});
} else {
try {
const response = await fetch(
`/api/company_services/${serviceId}//engineers/availability?week=${weekId}`
);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const { data } = await response.json();
return data;
} catch (error) {
console.error(error);
console.error("Failed to fetch shifts");
throw new Error("Failed to fetch shifts");
}
}
};

export const storeAvailabilities = async (
serviceId: number,
availabilityPayload: AvailabilityPayload
): Promise<string> => {
if (isMock) {
return "Disponibilidades guardadas con éxito";
} else {
try {
const response = await fetch(
`/api/company_services/${serviceId}/engineers/availability`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(availabilityPayload),
}
);

if (response.ok) {
return "Disponibilidades guardadas con éxito";
} else {
const errorData = await response.json();
console.error(`Error: ${errorData.message}`);
return "Error al guardar disponibilidades";
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} catch (error: any) {
console.error(`Error: ${error.message}`);
return "Error al guardar disponibilidades";
}
}
};
34 changes: 30 additions & 4 deletions frontend/src/api/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,41 @@ export interface Timeblock {
engineer: Engineer | null;
}

export interface Engineer {
id: number;
name: string;
color: string;
hours_assigned?: number;
}

export interface EngineersResponse {
data: Engineer[];
status: number;
statusText: string;
}

export interface Engineer {
interface EngineerAvailability {
id: number;
name: string;
color: string;
hours_assigned?: number;
available: boolean;
}

interface TimeBlockAv {
time: string;
engineers: EngineerAvailability[];
}

export interface DayAvailability {
day: string;
times: TimeBlockAv[];
}

export interface AvailabilityResponse {
availability: DayAvailability[];
status: number;
statusText: string;
}

export interface AvailabilityPayload {
week: string;
availability: DayAvailability[];
}
209 changes: 209 additions & 0 deletions frontend/src/mock/eng_availability_a_w1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
{
"data": [
{
"day": "Lunes 05 de Agosto",
"times": [
{
"time": "09:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": false },
{ "id": 3, "available": true }
]
},
{
"time": "10:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": true },
{ "id": 3, "available": false }
]
},
{
"time": "11:00",
"engineers": [
{ "id": 1, "available": false },
{ "id": 2, "available": true },
{ "id": 3, "available": true }
]
}
]
},
{
"day": "Martes 06 de Agosto",
"times": [
{
"time": "09:00",
"engineers": [
{ "id": 1, "available": false },
{ "id": 2, "available": true },
{ "id": 3, "available": true }
]
},
{
"time": "10:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": false },
{ "id": 3, "available": true }
]
},
{
"time": "11:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": true },
{ "id": 3, "available": false }
]
}
]
},
{
"day": "Miercoles 07 de Agosto",
"times": [
{
"time": "09:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": false },
{ "id": 3, "available": true }
]
},
{
"time": "10:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": true },
{ "id": 3, "available": false }
]
},
{
"time": "11:00",
"engineers": [
{ "id": 1, "available": false },
{ "id": 2, "available": true },
{ "id": 3, "available": true }
]
}
]
},
{
"day": "Jueves 08 de Agosto",
"times": [
{
"time": "09:00",
"engineers": [
{ "id": 1, "available": false },
{ "id": 2, "available": true },
{ "id": 3, "available": true }
]
},
{
"time": "10:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": false },
{ "id": 3, "available": true }
]
},
{
"time": "11:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": true },
{ "id": 3, "available": false }
]
}
]
},
{
"day": "Viernes 09 de Agosto",
"times": [
{
"time": "09:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": false },
{ "id": 3, "available": true }
]
},
{
"time": "10:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": true },
{ "id": 3, "available": false }
]
},
{
"time": "11:00",
"engineers": [
{ "id": 1, "available": false },
{ "id": 2, "available": true },
{ "id": 3, "available": true }
]
}
]
},
{
"day": "Sabado 10 de Agosto",
"times": [
{
"time": "09:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": false },
{ "id": 3, "available": true }
]
},
{
"time": "10:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": true },
{ "id": 3, "available": false }
]
},
{
"time": "11:00",
"engineers": [
{ "id": 1, "available": false },
{ "id": 2, "available": true },
{ "id": 3, "available": true }
]
}
]
},
{
"day": "Domingo 11 de Agosto",
"times": [
{
"time": "09:00",
"engineers": [
{ "id": 1, "available": false },
{ "id": 2, "available": true },
{ "id": 3, "available": true }
]
},
{
"time": "10:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": false },
{ "id": 3, "available": true }
]
},
{
"time": "11:00",
"engineers": [
{ "id": 1, "available": true },
{ "id": 2, "available": true },
{ "id": 3, "available": false }
]
}
]
}
],
"status": 200,
"statusText": "OK"
}

0 comments on commit e55e3cf

Please sign in to comment.