feat: edit volume

This commit is contained in:
Nicolas Meienberger
2025-09-03 21:42:18 +02:00
parent ca4bd4a619
commit 91020e6f23
17 changed files with 790 additions and 319 deletions

View File

@@ -1,6 +1,14 @@
// This file is auto-generated by @hey-api/openapi-ts
import { type Options, listVolumes, createVolume, testConnection, deleteVolume } from "../sdk.gen";
import {
type Options,
listVolumes,
createVolume,
testConnection,
deleteVolume,
getVolume,
updateVolume,
} from "../sdk.gen";
import { queryOptions, type UseMutationOptions, type DefaultError } from "@tanstack/react-query";
import type {
ListVolumesData,
@@ -10,6 +18,9 @@ import type {
TestConnectionResponse,
DeleteVolumeData,
DeleteVolumeResponse,
GetVolumeData,
UpdateVolumeData,
UpdateVolumeResponse,
} from "../types.gen";
import { client as _heyApiClient } from "../client.gen";
@@ -169,3 +180,42 @@ export const deleteVolumeMutation = (
};
return mutationOptions;
};
export const getVolumeQueryKey = (options: Options<GetVolumeData>) => createQueryKey("getVolume", options);
/**
* Get a volume by name
*/
export const getVolumeOptions = (options: Options<GetVolumeData>) => {
return queryOptions({
queryFn: async ({ queryKey, signal }) => {
const { data } = await getVolume({
...options,
...queryKey[0],
signal,
throwOnError: true,
});
return data;
},
queryKey: getVolumeQueryKey(options),
});
};
/**
* Update a volume's configuration
*/
export const updateVolumeMutation = (
options?: Partial<Options<UpdateVolumeData>>,
): UseMutationOptions<UpdateVolumeResponse, DefaultError, Options<UpdateVolumeData>> => {
const mutationOptions: UseMutationOptions<UpdateVolumeResponse, DefaultError, Options<UpdateVolumeData>> = {
mutationFn: async (localOptions) => {
const { data } = await updateVolume({
...options,
...localOptions,
throwOnError: true,
});
return data;
},
};
return mutationOptions;
};

View File

@@ -10,6 +10,12 @@ import type {
TestConnectionResponses,
DeleteVolumeData,
DeleteVolumeResponses,
GetVolumeData,
GetVolumeResponses,
GetVolumeErrors,
UpdateVolumeData,
UpdateVolumeResponses,
UpdateVolumeErrors,
} from "./types.gen";
import { client as _heyApiClient } from "./client.gen";
@@ -83,3 +89,29 @@ export const deleteVolume = <ThrowOnError extends boolean = false>(
...options,
});
};
/**
* Get a volume by name
*/
export const getVolume = <ThrowOnError extends boolean = false>(options: Options<GetVolumeData, ThrowOnError>) => {
return (options.client ?? _heyApiClient).get<GetVolumeResponses, GetVolumeErrors, ThrowOnError>({
url: "/api/v1/volumes/{name}",
...options,
});
};
/**
* Update a volume's configuration
*/
export const updateVolume = <ThrowOnError extends boolean = false>(
options: Options<UpdateVolumeData, ThrowOnError>,
) => {
return (options.client ?? _heyApiClient).put<UpdateVolumeResponses, UpdateVolumeErrors, ThrowOnError>({
url: "/api/v1/volumes/{name}",
...options,
headers: {
"Content-Type": "application/json",
...options.headers,
},
});
};

View File

@@ -31,9 +31,9 @@ export type CreateVolumeData = {
| {
backend: "nfs";
exportPath: string;
port: number;
server: string;
version: "3" | "4" | "4.1";
port?: number | string;
}
| {
backend: "smb";
@@ -70,9 +70,9 @@ export type TestConnectionData = {
| {
backend: "nfs";
exportPath: string;
port: number;
server: string;
version: "3" | "4" | "4.1";
port?: number | string;
}
| {
backend: "smb";
@@ -115,6 +115,114 @@ export type DeleteVolumeResponses = {
export type DeleteVolumeResponse = DeleteVolumeResponses[keyof DeleteVolumeResponses];
export type GetVolumeData = {
body?: never;
path: {
name: string;
};
query?: never;
url: "/api/v1/volumes/{name}";
};
export type GetVolumeErrors = {
/**
* Volume not found
*/
404: unknown;
};
export type GetVolumeResponses = {
/**
* Volume details
*/
200: {
config:
| {
backend: "directory";
}
| {
backend: "nfs";
exportPath: string;
server: string;
version: "3" | "4" | "4.1";
port?: number | string;
}
| {
backend: "smb";
};
createdAt: number;
name: string;
path: string;
type: string;
updatedAt: number;
};
};
export type GetVolumeResponse = GetVolumeResponses[keyof GetVolumeResponses];
export type UpdateVolumeData = {
body?: {
config:
| {
backend: "directory";
}
| {
backend: "nfs";
exportPath: string;
server: string;
version: "3" | "4" | "4.1";
port?: number | string;
}
| {
backend: "smb";
};
};
path: {
name: string;
};
query?: never;
url: "/api/v1/volumes/{name}";
};
export type UpdateVolumeErrors = {
/**
* Volume not found
*/
404: unknown;
};
export type UpdateVolumeResponses = {
/**
* Volume updated successfully
*/
200: {
message: string;
volume: {
config:
| {
backend: "directory";
}
| {
backend: "nfs";
exportPath: string;
server: string;
version: "3" | "4" | "4.1";
port?: number | string;
}
| {
backend: "smb";
};
createdAt: number;
name: string;
path: string;
type: string;
updatedAt: number;
};
};
};
export type UpdateVolumeResponse = UpdateVolumeResponses[keyof UpdateVolumeResponses];
export type ClientOptions = {
baseUrl: "http://localhost:3000" | (string & {});
};