Skip to content

Commit

Permalink
Merge pull request #95 from bas-kirill/feature/openapi-delete-instrum…
Browse files Browse the repository at this point in the history
…ent-by-id

feat(delete-instrument-by-id): use openapi for client and server side
  • Loading branch information
bas-kirill authored Aug 22, 2024
2 parents 819dcde + 28d88de commit 5cb2bbd
Show file tree
Hide file tree
Showing 20 changed files with 274 additions and 142 deletions.
1 change: 1 addition & 0 deletions client/src/generated/.openapi-generator/FILES
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
api.ts
api/add-favorite-api.ts
api/basic-login-api.ts
api/delete-instrument-by-id-api.ts
api/get-instrument-by-id-api.ts
api/get-instrument-types-api.ts
api/get-instruments-by-criteria-api.ts
Expand Down
1 change: 1 addition & 0 deletions client/src/generated/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

export * from "./api/add-favorite-api";
export * from "./api/basic-login-api";
export * from "./api/delete-instrument-by-id-api";
export * from "./api/get-instrument-by-id-api";
export * from "./api/get-instrument-types-api";
export * from "./api/get-instruments-by-criteria-api";
Expand Down
27 changes: 27 additions & 0 deletions client/src/generated/model/add-favorite-request-body.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* tslint:disable */
/* eslint-disable */
/**
* Client Error
* Client Error
*
* The version of the OpenAPI document: 1.0.0
* Contact: [email protected]
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/

/**
*
* @export
* @interface AddFavoriteRequestBody
*/
export interface AddFavoriteRequestBody {
/**
*
* @type {number}
* @memberof AddFavoriteRequestBody
*/
instrument_id: number;
}
27 changes: 27 additions & 0 deletions client/src/generated/model/client-error.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* tslint:disable */
/* eslint-disable */
/**
* Client Error
* Client Error
*
* The version of the OpenAPI document: 1.0.0
* Contact: [email protected]
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/

/**
*
* @export
* @interface ClientError
*/
export interface ClientError {
/**
* Error description
* @type {string}
* @memberof ClientError
*/
message: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export interface GetInstrumentByCriteriaPageResponse {
* @type {Array<InstrumentDetail>}
* @memberof GetInstrumentByCriteriaPageResponse
*/
content?: Array<InstrumentDetail>;
content: Array<InstrumentDetail>;
/**
* The number of items in the content.
* @type {number}
Expand Down
31 changes: 31 additions & 0 deletions client/src/generated/model/list-favorite-response-body.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/* tslint:disable */
/* eslint-disable */
/**
* Client Error
* Client Error
*
* The version of the OpenAPI document: 1.0.0
* Contact: [email protected]
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/

// May contain unused imports in some cases
// @ts-ignore
import type { InstrumentDetail } from "./instrument-detail";

/**
*
* @export
* @interface ListFavoriteResponseBody
*/
export interface ListFavoriteResponseBody {
/**
*
* @type {Array<InstrumentDetail>}
* @memberof ListFavoriteResponseBody
*/
content: Array<InstrumentDetail>;
}
27 changes: 27 additions & 0 deletions client/src/generated/model/remove-favorite-request-body.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* tslint:disable */
/* eslint-disable */
/**
* Client Error
* Client Error
*
* The version of the OpenAPI document: 1.0.0
* Contact: [email protected]
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/

/**
*
* @export
* @interface RemoveFavoriteRequestBody
*/
export interface RemoveFavoriteRequestBody {
/**
*
* @type {number}
* @memberof RemoveFavoriteRequestBody
*/
instrument_id: number;
}
17 changes: 12 additions & 5 deletions client/src/pages/catalogue/api/loader.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
import { fetchFavoriteInstrumentIdsList } from "shared/api/fetch-favorite-instrument-ids.list";
import {
CATALOGUE_DEFAULT_PAGE_NUMBER,
CATALOGUE_DEFAULT_PAGE_SIZE,
} from "shared/config";
import { GetInstrumentsByCriteriaPaginatedApi } from "generated/api";
import {
GetInstrumentsByCriteriaPaginatedApi,
ListFavoriteApi,
} from "generated/api";
import { GetInstrumentByCriteriaPageResponse } from "generated/model";

const getInstrumentsByCriteriaPaginated =
new GetInstrumentsByCriteriaPaginatedApi();

const listFavoriteApi = new ListFavoriteApi();

export interface CatalogueLoader {
instrumentPage: GetInstrumentByCriteriaPageResponse;
favoriteInstrumentIds: number[];
}

export const loader = async (): Promise<CatalogueLoader> => {
const instrumentsPagePromise =
const instrumentsPage =
await getInstrumentsByCriteriaPaginated.getInstrumentsByCriteriaPaginated(
CATALOGUE_DEFAULT_PAGE_SIZE,
CATALOGUE_DEFAULT_PAGE_NUMBER,
Expand All @@ -24,10 +28,13 @@ export const loader = async (): Promise<CatalogueLoader> => {
withCredentials: true,
},
);
const favoriteInstrumentIds = await fetchFavoriteInstrumentIdsList();

const favoriteInstrumentDetails = await listFavoriteApi.listFavorite();
const favoriteInstrumentIds = favoriteInstrumentDetails.data.content.map(
(favorite) => favorite.id,
);
return {
instrumentPage: instrumentsPagePromise.data,
instrumentPage: instrumentsPage.data,
favoriteInstrumentIds: favoriteInstrumentIds,
};
};
42 changes: 28 additions & 14 deletions client/src/pages/catalogue/ui/Catalogue.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,17 @@ import {
import { SearchBarForm } from "./SearchBarForm";
import { NavigationBar } from "./NavigationBar";
import { CatalogueLoader } from "pages/catalogue";
import { fetchFavoriteInstrumentIdsList } from "shared/api/fetch-favorite-instrument-ids.list";
import { getInstrumentsByCriteriaPaginated } from "shared/api/instruments-by-criteria-paginated";
import { InstrumentDetail } from "generated/model";
import {
type GetInstrumentCriteriaRequestBody,
InstrumentDetail,
} from "generated/model";
import { GetInstrumentsByCriteriaPaginatedApi } from "generated/api/get-instruments-by-criteria-paginated-api";
import { ListFavoriteApi } from "generated/api/list-favorite-api";

const getInstrumentsByCriteriaPaginated =
new GetInstrumentsByCriteriaPaginatedApi();

const listFavoriteApi = new ListFavoriteApi();

export function Catalogue() {
useJwt();
Expand All @@ -38,9 +46,13 @@ export function Catalogue() {
);

useEffect(() => {
fetchFavoriteInstrumentIdsList().then((ids) =>
setFavoriteInstrumentIds(ids),
);
listFavoriteApi
.listFavorite()
.then((favorites) =>
setFavoriteInstrumentIds(
favorites.data.content.map((favorite) => favorite.id),
),
);

if (instrumentName === "") {
filters.instrumentName = null;
Expand All @@ -49,14 +61,16 @@ export function Catalogue() {
filters.instrumentName = instrumentName;
}

getInstrumentsByCriteriaPaginated(
filters,
CATALOGUE_DEFAULT_PAGE_SIZE,
pageNumber,
).then((r) => {
setInstruments(r.content);
totalPages.current = r.totalPages;
});
getInstrumentsByCriteriaPaginated
.getInstrumentsByCriteriaPaginated(
CATALOGUE_DEFAULT_PAGE_SIZE,
pageNumber,
JSON.stringify(filters, null, 2) as GetInstrumentCriteriaRequestBody,
)
.then((r) => {
setInstruments(r.data.content);
totalPages.current = r.data.total_pages;
});
}, [filters, instrumentName, pageNumber]);

return (
Expand Down
8 changes: 5 additions & 3 deletions client/src/pages/instrument/ui/InstrumentActions.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
import React, { useState } from "react";
import "./InstrumentActions.css";
import { useNavigate } from "react-router-dom";
import { deleteInstrument } from "shared/api/delete-instrument";
import Jwt from "domain/model/jwt";
import { LOGIN } from "shared/config/paths";
import { Modal } from "widgets/modal";
import { InstrumentId } from "domain/model/instrument-id";
import { InstrumentDetail } from "generated/model";
import { DeleteInstrumentByIdApi } from "generated/api/delete-instrument-by-id-api";

interface Props {
instrument: InstrumentDetail;
}

const deleteInstrumentById = new DeleteInstrumentByIdApi();

export const InstrumentActions = (props: Props) => {
const [deleteSuccessModal, setDeleteSuccessModal] = useState<boolean>(false);
const [deleteErrorModal, setDeleteErrorModal] = useState<boolean>(false);
const navigate = useNavigate();

const handleOnDeleteInstrument = () => {
deleteInstrument(InstrumentId.from(props.instrument.id))
deleteInstrumentById
.deleteInstrumentById(props.instrument.id)
.then(() => {
setDeleteSuccessModal(true);
})
Expand Down
31 changes: 0 additions & 31 deletions client/src/shared/api/delete-instrument.ts

This file was deleted.

17 changes: 0 additions & 17 deletions client/src/shared/api/fetch-favorite-instrument-ids.list.ts

This file was deleted.

28 changes: 0 additions & 28 deletions client/src/shared/api/instruments-by-criteria-paginated.ts

This file was deleted.

22 changes: 0 additions & 22 deletions client/src/shared/api/instruments-by-criteria.list.ts

This file was deleted.

6 changes: 0 additions & 6 deletions client/src/shared/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
import { deleteInstrument } from "./api/delete-instrument";
import { getInstrumentsByCriteria } from "./api/instruments-by-criteria.list";
import { fetchFavoriteInstrumentIdsList } from "./api/fetch-favorite-instrument-ids.list";
import { InstrumentCard } from "./ui/instrument-card/InstrumentCard";

import {
Expand All @@ -15,9 +12,6 @@ import {
} from "./config/frontend";

export {
deleteInstrument,
getInstrumentsByCriteria,
fetchFavoriteInstrumentIdsList,
InstrumentCard,
SERVER_URL,
API_INSTRUMENTS,
Expand Down
Loading

0 comments on commit 5cb2bbd

Please sign in to comment.