1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 12:19:35 +01:00

feat: TUI-Screens für Inventar und Produktion + API-Client Typ-Migration

Neue TUI-Features:
- Inventar: Lageorte auflisten, anlegen, bearbeiten, (de-)aktivieren
- Produktion: Rezepte auflisten, anlegen, Detail-Ansicht
- Navigation erweitert (Hauptmenü, Routing)

API-Client auf generierte OpenAPI-Typen umgestellt:
- 6 neue Alias-Dateien in @effigenix/types (supplier, category, article,
  customer, inventory, production)
- api-client Re-Exports direkt von @effigenix/types statt via Resources
- Backend: @Schema(requiredProperties) auf 16 Response-Records
- Backend: OpenApiCustomizer für application-layer DTOs (UserDTO, RoleDTO)

Hinweis: Backend-Endpoints für GET /api/recipes und
GET /api/inventory/storage-locations/{id} fehlen noch (separate Issues).
This commit is contained in:
Sebastian Frick 2026-02-19 13:45:35 +01:00
parent bee3f28b5f
commit c26d72fbe7
48 changed files with 2090 additions and 474 deletions

View file

@ -22,6 +22,8 @@ export { createCategoriesResource } from './resources/categories.js';
export { createSuppliersResource } from './resources/suppliers.js';
export { createArticlesResource } from './resources/articles.js';
export { createCustomersResource } from './resources/customers.js';
export { createStorageLocationsResource } from './resources/storage-locations.js';
export { createRecipesResource } from './resources/recipes.js';
export {
ApiError,
AuthenticationError,
@ -29,12 +31,15 @@ export {
RefreshTokenExpiredError,
} from './errors.js';
export type { ValidationErrorDetail } from './errors.js';
// Auth types (no generated alias, stay in resource)
export type {
LoginRequest,
LoginResponse,
RefreshTokenRequest,
AuthResource,
} from './resources/auth.js';
// Types from @effigenix/types (generated OpenAPI aliases)
export type {
UserDTO,
RoleDTO,
@ -42,18 +47,7 @@ export type {
UpdateUserRequest,
ChangePasswordRequest,
AssignRoleRequest,
UsersResource,
} from './resources/users.js';
export type { RolesResource } from './resources/roles.js';
export type {
ProductCategoryDTO,
CreateCategoryRequest,
UpdateCategoryRequest,
CategoriesResource,
} from './resources/categories.js';
export type {
SupplierDTO,
SupplierStatus,
AddressDTO,
ContactInfoDTO,
PaymentTermsDTO,
@ -64,36 +58,57 @@ export type {
RateSupplierRequest,
AddCertificateRequest,
RemoveCertificateRequest,
SuppliersResource,
} from './resources/suppliers.js';
export type {
ProductCategoryDTO,
CreateCategoryRequest,
UpdateCategoryRequest,
ArticleDTO,
ArticleStatus,
SalesUnitDTO,
Unit,
PriceModel,
CreateArticleRequest,
UpdateArticleRequest,
AddSalesUnitRequest,
UpdateSalesUnitPriceRequest,
ArticlesResource,
} from './resources/articles.js';
export { UNIT_LABELS, PRICE_MODEL_LABELS } from './resources/articles.js';
export type {
CustomerDTO,
CustomerType,
CustomerStatus,
CustomerPreference,
DeliveryRhythm,
DeliveryAddressDTO,
FrameContractDTO,
ContractLineItemDTO,
CreateCustomerRequest,
UpdateCustomerRequest,
AddDeliveryAddressRequest,
SetFrameContractLineItem,
SetFrameContractRequest,
StorageLocationDTO,
TemperatureRangeDTO,
CreateStorageLocationRequest,
UpdateStorageLocationRequest,
RecipeDTO,
IngredientDTO,
CreateRecipeRequest,
AddRecipeIngredientRequest,
} from '@effigenix/types';
// Resource types (runtime, stay in resource files)
export type { UsersResource } from './resources/users.js';
export type { RolesResource } from './resources/roles.js';
export type { CategoriesResource } from './resources/categories.js';
export type { SuppliersResource, SupplierStatus } from './resources/suppliers.js';
export type { ArticlesResource, ArticleStatus, Unit, PriceModel } from './resources/articles.js';
export { UNIT_LABELS, PRICE_MODEL_LABELS } from './resources/articles.js';
export type {
CustomersResource,
CustomerType,
CustomerStatus,
CustomerPreference,
DeliveryRhythm,
} from './resources/customers.js';
export { CUSTOMER_PREFERENCE_LABELS, DELIVERY_RHYTHM_LABELS } from './resources/customers.js';
export type {
StorageLocationsResource,
StorageType,
StorageLocationFilter,
} from './resources/storage-locations.js';
export { STORAGE_TYPE_LABELS } from './resources/storage-locations.js';
export type { RecipesResource, RecipeType, RecipeStatus } from './resources/recipes.js';
export { RECIPE_TYPE_LABELS } from './resources/recipes.js';
import { createApiClient } from './client.js';
import { createAuthResource } from './resources/auth.js';
@ -103,6 +118,8 @@ import { createCategoriesResource } from './resources/categories.js';
import { createSuppliersResource } from './resources/suppliers.js';
import { createArticlesResource } from './resources/articles.js';
import { createCustomersResource } from './resources/customers.js';
import { createStorageLocationsResource } from './resources/storage-locations.js';
import { createRecipesResource } from './resources/recipes.js';
import type { TokenProvider } from './token-provider.js';
import type { ApiConfig } from '@effigenix/config';
@ -124,6 +141,8 @@ export function createEffigenixClient(
suppliers: createSuppliersResource(axiosClient),
articles: createArticlesResource(axiosClient),
customers: createCustomersResource(axiosClient),
storageLocations: createStorageLocationsResource(axiosClient),
recipes: createRecipesResource(axiosClient),
};
}