< Summary

Information
Class: client.ts
Assembly: app.api
File(s): /home/runner/work/ClutterStock/ClutterStock/frontend/app/api/client.ts
Tag: 58_25416222083
Line coverage
66%
Covered lines: 20
Uncovered lines: 10
Coverable lines: 30
Total lines: 102
Line coverage: 66.6%
Branch coverage
37%
Covered branches: 3
Total branches: 8
Branch coverage: 37.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/ClutterStock/ClutterStock/frontend/app/api/client.ts

#LineLine coverage
 1import type { components } from "~/api/types";
 2import { del, get, post, put } from "~/api/typed";
 3import { isApiProblem } from "~/api/problem";
 4
 25async function nullOn404<T>(promise: Promise<T>): Promise<T | null> {
 26  try {
 27    return await promise;
 8  } catch (error) {
 9    // The wrapper throws Response so problem details survive RR7's SSR
 10    // serialization; ApiProblemError is the legacy/test path.
 111    if (error instanceof Response && error.status === 404) return null;
 012    if (isApiProblem(error) && error.status === 404) return null;
 013    throw error;
 14  }
 15}
 16
 17/* Locations */
 18export type LocationResponse =
 19  components["schemas"]["ClutterStock.Contracts.Locations.LocationResponse"];
 20export type AddLocationRequest =
 21  components["schemas"]["ClutterStock.Contracts.Locations.AddLocationRequest"];
 22export type UpdateLocationRequest =
 23  components["schemas"]["ClutterStock.Contracts.Locations.UpdateLocationRequest"];
 24
 225export const getLocations = (request?: Request): Promise<LocationResponse[]> =>
 26  get("/api/v1/locations", { ssrRequest: request });
 27
 128export const getLocation = (id: number, request?: Request): Promise<LocationResponse | null> =>
 229  nullOn404(get("/api/v1/locations/{id}", { params: { id }, ssrRequest: request }));
 30
 131export const createLocation = (
 32  body: AddLocationRequest,
 033  request?: Request,
 34): Promise<LocationResponse> => post("/api/v1/locations", { body, ssrRequest: request });
 35
 136export const updateLocation = (
 37  id: number,
 38  body: UpdateLocationRequest,
 039  request?: Request,
 40): Promise<LocationResponse> =>
 41  put("/api/v1/locations/{id}", { params: { id }, body, ssrRequest: request });
 42
 143export const deleteLocation = (id: number, request?: Request): Promise<void> =>
 44  del("/api/v1/locations/{id}", { params: { id }, ssrRequest: request });
 45
 46/* Rooms */
 47export type RoomResponse =
 48  components["schemas"]["ClutterStock.Contracts.Rooms.RoomResponse"];
 49export type AddRoomRequest =
 50  components["schemas"]["ClutterStock.Contracts.Rooms.AddRoomRequest"];
 51export type UpdateRoomRequest =
 52  components["schemas"]["ClutterStock.Contracts.Rooms.UpdateRoomRequest"];
 53
 154export const getRooms = (request?: Request): Promise<RoomResponse[]> =>
 55  get("/api/v1/rooms", { ssrRequest: request });
 56
 157export const getRoom = (id: number, request?: Request): Promise<RoomResponse | null> =>
 058  nullOn404(get("/api/v1/rooms/{id}", { params: { id }, ssrRequest: request }));
 59
 160export const createRoom = (
 61  body: AddRoomRequest,
 062  request?: Request,
 63): Promise<RoomResponse> => post("/api/v1/rooms", { body, ssrRequest: request });
 64
 165export const updateRoom = (
 66  id: number,
 67  body: UpdateRoomRequest,
 068  request?: Request,
 69): Promise<RoomResponse> =>
 70  put("/api/v1/rooms/{id}", { params: { id }, body, ssrRequest: request });
 71
 172export const deleteRoom = (id: number, request?: Request): Promise<void> =>
 73  del("/api/v1/rooms/{id}", { params: { id }, ssrRequest: request });
 74
 75/* Items */
 76export type ItemResponse =
 77  components["schemas"]["ClutterStock.Contracts.Items.ItemResponse"];
 78export type AddItemRequest =
 79  components["schemas"]["ClutterStock.Contracts.Items.AddItemRequest"];
 80export type UpdateItemRequest =
 81  components["schemas"]["ClutterStock.Contracts.Items.UpdateItemRequest"];
 82
 183export const getItems = (request?: Request): Promise<ItemResponse[]> =>
 84  get("/api/v1/items", { ssrRequest: request });
 85
 186export const getItem = (id: number, request?: Request): Promise<ItemResponse | null> =>
 087  nullOn404(get("/api/v1/items/{id}", { params: { id }, ssrRequest: request }));
 88
 189export const createItem = (
 90  body: AddItemRequest,
 091  request?: Request,
 92): Promise<ItemResponse> => post("/api/v1/items", { body, ssrRequest: request });
 93
 194export const updateItem = (
 95  id: number,
 96  body: UpdateItemRequest,
 097  request?: Request,
 98): Promise<ItemResponse> =>
 99  put("/api/v1/items/{id}", { params: { id }, body, ssrRequest: request });
 100
 1101export const deleteItem = (id: number, request?: Request): Promise<void> =>
 102  del("/api/v1/items/{id}", { params: { id }, ssrRequest: request });