Migrate omsorgapp to browser SPA, add Docker/CI build setup
Docker-Images bauen und veröffentlichen / build (, omsorgCore/Dockerfile, omsorgcore) (push) Successful in 3s
Docker-Images bauen und veröffentlichen / build (, omsorgWeb/Dockerfile, omsorgweb) (push) Failing after 4s
Docker-Images bauen und veröffentlichen / build (VITE_OMSORG_CORE_URL=${{ vars.OMSORG_CORE_PUBLIC_URL }}, omsorgapp/Dockerfile, omsorgapp) (push) Successful in 3s

- omsorgapp: drop Electron, run as a plain Vite/React browser app; refresh
  token moves to an HttpOnly cookie (omsorgCore), CORS added for the new
  browser origin, document download/preview switched to Blob-based browser
  APIs.
- Add Dockerfiles for omsorgCore, omsorgapp, and omsorgWeb, a docker-compose.yml
  wiring Postgres/MySQL/all three apps together, and a Gitea Actions workflow
  that builds and pushes images to the repo's container registry on push to
  main and on version tags.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Felix Kemmler
2026-08-10 17:42:45 +02:00
co-authored by Claude Sonnet 5
parent e9e96a57dc
commit 598dfcd38a
461 changed files with 59753 additions and 2859 deletions
@@ -52,18 +52,23 @@ require_once(__DIR__ . '/vendor/autoload.php');
$config = OmsorgCoreClient\Configuration::getDefaultConfiguration()->setAccessToken('YOUR_ACCESS_TOKEN');
$apiInstance = new OmsorgCoreClient\Api\AdminEmailApi(
$apiInstance = new OmsorgCoreClient\Api\AbsencesApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client(),
$config
);
$status = 'status_example'; // string
$type = 'type_example'; // string
$employee_id = 'employee_id_example'; // string
$page = 1; // int
$page_size = 20; // int
try {
$result = $apiInstance->apiAdminEmailPasswordResetTemplateGet();
$result = $apiInstance->apiAbsencesGet($status, $type, $employee_id, $page, $page_size);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling AdminEmailApi->apiAdminEmailPasswordResetTemplateGet: ', $e->getMessage(), PHP_EOL;
echo 'Exception when calling AbsencesApi->apiAbsencesGet: ', $e->getMessage(), PHP_EOL;
}
```
@@ -74,6 +79,12 @@ All URIs are relative to *http://localhost*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*AbsencesApi* | [**apiAbsencesGet**](docs/Api/AbsencesApi.md#apiabsencesget) | **GET** /api/absences |
*AbsencesApi* | [**apiAbsencesIdDecisionPost**](docs/Api/AbsencesApi.md#apiabsencesiddecisionpost) | **POST** /api/absences/{id}/decision |
*AbsencesApi* | [**apiAbsencesIdDelete**](docs/Api/AbsencesApi.md#apiabsencesiddelete) | **DELETE** /api/absences/{id} |
*AbsencesApi* | [**apiAbsencesIdGet**](docs/Api/AbsencesApi.md#apiabsencesidget) | **GET** /api/absences/{id} |
*AbsencesApi* | [**apiAbsencesIdPut**](docs/Api/AbsencesApi.md#apiabsencesidput) | **PUT** /api/absences/{id} |
*AbsencesApi* | [**apiAbsencesPost**](docs/Api/AbsencesApi.md#apiabsencespost) | **POST** /api/absences |
*AdminEmailApi* | [**apiAdminEmailPasswordResetTemplateGet**](docs/Api/AdminEmailApi.md#apiadminemailpasswordresettemplateget) | **GET** /api/admin/email/password-reset-template |
*AdminEmailApi* | [**apiAdminEmailTestSendPost**](docs/Api/AdminEmailApi.md#apiadminemailtestsendpost) | **POST** /api/admin/email/test-send |
*AdminSessionsApi* | [**apiAdminSessionsGet**](docs/Api/AdminSessionsApi.md#apiadminsessionsget) | **GET** /api/admin/sessions |
@@ -90,22 +101,36 @@ Class | Method | HTTP request | Description
*AuthApi* | [**apiAuthPasswordPolicyGet**](docs/Api/AuthApi.md#apiauthpasswordpolicyget) | **GET** /api/auth/password-policy |
*AuthApi* | [**apiAuthRefreshPost**](docs/Api/AuthApi.md#apiauthrefreshpost) | **POST** /api/auth/refresh |
*ContractsApi* | [**apiContractsGet**](docs/Api/ContractsApi.md#apicontractsget) | **GET** /api/contracts |
*ContractsApi* | [**apiContractsIdDelete**](docs/Api/ContractsApi.md#apicontractsiddelete) | **DELETE** /api/contracts/{id} |
*ContractsApi* | [**apiContractsIdGet**](docs/Api/ContractsApi.md#apicontractsidget) | **GET** /api/contracts/{id} |
*ContractsApi* | [**apiContractsIdPut**](docs/Api/ContractsApi.md#apicontractsidput) | **PUT** /api/contracts/{id} |
*ContractsApi* | [**apiContractsPost**](docs/Api/ContractsApi.md#apicontractspost) | **POST** /api/contracts |
*DocumentsApi* | [**apiDocumentsGet**](docs/Api/DocumentsApi.md#apidocumentsget) | **GET** /api/documents |
*DocumentsApi* | [**apiDocumentsIdDelete**](docs/Api/DocumentsApi.md#apidocumentsiddelete) | **DELETE** /api/documents/{id} |
*DocumentsApi* | [**apiDocumentsIdDownloadGet**](docs/Api/DocumentsApi.md#apidocumentsiddownloadget) | **GET** /api/documents/{id}/download |
*DocumentsApi* | [**apiDocumentsIdPut**](docs/Api/DocumentsApi.md#apidocumentsidput) | **PUT** /api/documents/{id} |
*DocumentsApi* | [**apiDocumentsPost**](docs/Api/DocumentsApi.md#apidocumentspost) | **POST** /api/documents |
*EmployeesApi* | [**apiEmployeesGet**](docs/Api/EmployeesApi.md#apiemployeesget) | **GET** /api/employees |
*EmployeesApi* | [**apiEmployeesIdDelete**](docs/Api/EmployeesApi.md#apiemployeesiddelete) | **DELETE** /api/employees/{id} |
*EmployeesApi* | [**apiEmployeesIdGet**](docs/Api/EmployeesApi.md#apiemployeesidget) | **GET** /api/employees/{id} |
*EmployeesApi* | [**apiEmployeesIdPut**](docs/Api/EmployeesApi.md#apiemployeesidput) | **PUT** /api/employees/{id} |
*EmployeesApi* | [**apiEmployeesPost**](docs/Api/EmployeesApi.md#apiemployeespost) | **POST** /api/employees |
*FacilitiesApi* | [**apiFacilitiesGet**](docs/Api/FacilitiesApi.md#apifacilitiesget) | **GET** /api/facilities |
*FacilitiesApi* | [**apiFacilitiesIdDelete**](docs/Api/FacilitiesApi.md#apifacilitiesiddelete) | **DELETE** /api/facilities/{id} |
*FacilitiesApi* | [**apiFacilitiesIdGet**](docs/Api/FacilitiesApi.md#apifacilitiesidget) | **GET** /api/facilities/{id} |
*FacilitiesApi* | [**apiFacilitiesIdPut**](docs/Api/FacilitiesApi.md#apifacilitiesidput) | **PUT** /api/facilities/{id} |
*FacilitiesApi* | [**apiFacilitiesPost**](docs/Api/FacilitiesApi.md#apifacilitiespost) | **POST** /api/facilities |
*FacilityContactsApi* | [**apiFacilitiesFacilityIdContactsGet**](docs/Api/FacilityContactsApi.md#apifacilitiesfacilityidcontactsget) | **GET** /api/facilities/{facilityId}/contacts |
*FacilityContactsApi* | [**apiFacilitiesFacilityIdContactsIdDelete**](docs/Api/FacilityContactsApi.md#apifacilitiesfacilityidcontactsiddelete) | **DELETE** /api/facilities/{facilityId}/contacts/{id} |
*FacilityContactsApi* | [**apiFacilitiesFacilityIdContactsIdPut**](docs/Api/FacilityContactsApi.md#apifacilitiesfacilityidcontactsidput) | **PUT** /api/facilities/{facilityId}/contacts/{id} |
*FacilityContactsApi* | [**apiFacilitiesFacilityIdContactsPost**](docs/Api/FacilityContactsApi.md#apifacilitiesfacilityidcontactspost) | **POST** /api/facilities/{facilityId}/contacts |
*FacilityQualificationRatesApi* | [**apiFacilitiesFacilityIdQualificationRatesGet**](docs/Api/FacilityQualificationRatesApi.md#apifacilitiesfacilityidqualificationratesget) | **GET** /api/facilities/{facilityId}/qualification-rates |
*FacilityQualificationRatesApi* | [**apiFacilitiesFacilityIdQualificationRatesIdDelete**](docs/Api/FacilityQualificationRatesApi.md#apifacilitiesfacilityidqualificationratesiddelete) | **DELETE** /api/facilities/{facilityId}/qualification-rates/{id} |
*FacilityQualificationRatesApi* | [**apiFacilitiesFacilityIdQualificationRatesIdPut**](docs/Api/FacilityQualificationRatesApi.md#apifacilitiesfacilityidqualificationratesidput) | **PUT** /api/facilities/{facilityId}/qualification-rates/{id} |
*FacilityQualificationRatesApi* | [**apiFacilitiesFacilityIdQualificationRatesPost**](docs/Api/FacilityQualificationRatesApi.md#apifacilitiesfacilityidqualificationratespost) | **POST** /api/facilities/{facilityId}/qualification-rates |
*HealthApi* | [**apiHealthGet**](docs/Api/HealthApi.md#apihealthget) | **GET** /api/health |
*OrdersApi* | [**apiOrdersGet**](docs/Api/OrdersApi.md#apiordersget) | **GET** /api/orders |
*OrdersApi* | [**apiOrdersIdDelete**](docs/Api/OrdersApi.md#apiordersiddelete) | **DELETE** /api/orders/{id} |
*OrdersApi* | [**apiOrdersIdGet**](docs/Api/OrdersApi.md#apiordersidget) | **GET** /api/orders/{id} |
*OrdersApi* | [**apiOrdersIdPut**](docs/Api/OrdersApi.md#apiordersidput) | **PUT** /api/orders/{id} |
*OrdersApi* | [**apiOrdersPost**](docs/Api/OrdersApi.md#apiorderspost) | **POST** /api/orders |
@@ -113,6 +138,29 @@ Class | Method | HTTP request | Description
*RolesApi* | [**apiRolesIdGet**](docs/Api/RolesApi.md#apirolesidget) | **GET** /api/roles/{id} |
*RolesApi* | [**apiRolesIdPermissionsPut**](docs/Api/RolesApi.md#apirolesidpermissionsput) | **PUT** /api/roles/{id}/permissions |
*RolesApi* | [**apiRolesPost**](docs/Api/RolesApi.md#apirolespost) | **POST** /api/roles |
*TimeEntriesApi* | [**apiTimeEntriesGet**](docs/Api/TimeEntriesApi.md#apitimeentriesget) | **GET** /api/time-entries |
*TimeEntriesApi* | [**apiTimeEntriesIdDecisionPost**](docs/Api/TimeEntriesApi.md#apitimeentriesiddecisionpost) | **POST** /api/time-entries/{id}/decision |
*TimeEntriesApi* | [**apiTimeEntriesIdDelete**](docs/Api/TimeEntriesApi.md#apitimeentriesiddelete) | **DELETE** /api/time-entries/{id} |
*TimeEntriesApi* | [**apiTimeEntriesIdGet**](docs/Api/TimeEntriesApi.md#apitimeentriesidget) | **GET** /api/time-entries/{id} |
*TimeEntriesApi* | [**apiTimeEntriesIdPut**](docs/Api/TimeEntriesApi.md#apitimeentriesidput) | **PUT** /api/time-entries/{id} |
*TimeEntriesApi* | [**apiTimeEntriesIdSubmitPost**](docs/Api/TimeEntriesApi.md#apitimeentriesidsubmitpost) | **POST** /api/time-entries/{id}/submit |
*TimeEntriesApi* | [**apiTimeEntriesPost**](docs/Api/TimeEntriesApi.md#apitimeentriespost) | **POST** /api/time-entries |
*TrashApi* | [**apiTrashAbsencesGet**](docs/Api/TrashApi.md#apitrashabsencesget) | **GET** /api/trash/absences |
*TrashApi* | [**apiTrashAbsencesIdRestorePost**](docs/Api/TrashApi.md#apitrashabsencesidrestorepost) | **POST** /api/trash/absences/{id}/restore |
*TrashApi* | [**apiTrashContractsGet**](docs/Api/TrashApi.md#apitrashcontractsget) | **GET** /api/trash/contracts |
*TrashApi* | [**apiTrashContractsIdRestorePost**](docs/Api/TrashApi.md#apitrashcontractsidrestorepost) | **POST** /api/trash/contracts/{id}/restore |
*TrashApi* | [**apiTrashEmployeesGet**](docs/Api/TrashApi.md#apitrashemployeesget) | **GET** /api/trash/employees |
*TrashApi* | [**apiTrashEmployeesIdRestorePost**](docs/Api/TrashApi.md#apitrashemployeesidrestorepost) | **POST** /api/trash/employees/{id}/restore |
*TrashApi* | [**apiTrashFacilitiesGet**](docs/Api/TrashApi.md#apitrashfacilitiesget) | **GET** /api/trash/facilities |
*TrashApi* | [**apiTrashFacilitiesIdRestorePost**](docs/Api/TrashApi.md#apitrashfacilitiesidrestorepost) | **POST** /api/trash/facilities/{id}/restore |
*TrashApi* | [**apiTrashFacilityContactsGet**](docs/Api/TrashApi.md#apitrashfacilitycontactsget) | **GET** /api/trash/facility-contacts |
*TrashApi* | [**apiTrashFacilityContactsIdRestorePost**](docs/Api/TrashApi.md#apitrashfacilitycontactsidrestorepost) | **POST** /api/trash/facility-contacts/{id}/restore |
*TrashApi* | [**apiTrashFacilityQualificationRatesGet**](docs/Api/TrashApi.md#apitrashfacilityqualificationratesget) | **GET** /api/trash/facility-qualification-rates |
*TrashApi* | [**apiTrashFacilityQualificationRatesIdRestorePost**](docs/Api/TrashApi.md#apitrashfacilityqualificationratesidrestorepost) | **POST** /api/trash/facility-qualification-rates/{id}/restore |
*TrashApi* | [**apiTrashOrdersGet**](docs/Api/TrashApi.md#apitrashordersget) | **GET** /api/trash/orders |
*TrashApi* | [**apiTrashOrdersIdRestorePost**](docs/Api/TrashApi.md#apitrashordersidrestorepost) | **POST** /api/trash/orders/{id}/restore |
*TrashApi* | [**apiTrashTimeEntriesGet**](docs/Api/TrashApi.md#apitrashtimeentriesget) | **GET** /api/trash/time-entries |
*TrashApi* | [**apiTrashTimeEntriesIdRestorePost**](docs/Api/TrashApi.md#apitrashtimeentriesidrestorepost) | **POST** /api/trash/time-entries/{id}/restore |
*UsersApi* | [**apiUsersGet**](docs/Api/UsersApi.md#apiusersget) | **GET** /api/users |
*UsersApi* | [**apiUsersIdPermissionOverridesGet**](docs/Api/UsersApi.md#apiusersidpermissionoverridesget) | **GET** /api/users/{id}/permission-overrides |
*UsersApi* | [**apiUsersIdPermissionOverridesOverrideIdDelete**](docs/Api/UsersApi.md#apiusersidpermissionoverridesoverrideiddelete) | **DELETE** /api/users/{id}/permission-overrides/{overrideId} |
@@ -131,23 +179,32 @@ Class | Method | HTTP request | Description
## Models
- [AbsenceDecisionRequest](docs/Model/AbsenceDecisionRequest.md)
- [AbsenceResponse](docs/Model/AbsenceResponse.md)
- [AbsenceResponsePagedResponse](docs/Model/AbsenceResponsePagedResponse.md)
- [AddUserPermissionOverrideRequest](docs/Model/AddUserPermissionOverrideRequest.md)
- [AuditEventCategory](docs/Model/AuditEventCategory.md)
- [AuditLogEntryResponse](docs/Model/AuditLogEntryResponse.md)
- [AuditLogEntryResponsePagedResponse](docs/Model/AuditLogEntryResponsePagedResponse.md)
- [ChangePasswordRequest](docs/Model/ChangePasswordRequest.md)
- [ContractResponse](docs/Model/ContractResponse.md)
- [ContractResponsePagedResponse](docs/Model/ContractResponsePagedResponse.md)
- [CreateAbsenceRequest](docs/Model/CreateAbsenceRequest.md)
- [CreateContractRequest](docs/Model/CreateContractRequest.md)
- [CreateEmployeeRequest](docs/Model/CreateEmployeeRequest.md)
- [CreateFacilityContactRequest](docs/Model/CreateFacilityContactRequest.md)
- [CreateFacilityQualificationRateRequest](docs/Model/CreateFacilityQualificationRateRequest.md)
- [CreateFacilityRequest](docs/Model/CreateFacilityRequest.md)
- [CreateOrderRequest](docs/Model/CreateOrderRequest.md)
- [CreateRoleRequest](docs/Model/CreateRoleRequest.md)
- [CreateTimeEntryRequest](docs/Model/CreateTimeEntryRequest.md)
- [CreateUserRequest](docs/Model/CreateUserRequest.md)
- [CreateValueListItemRequest](docs/Model/CreateValueListItemRequest.md)
- [DocumentResponse](docs/Model/DocumentResponse.md)
- [EmployeeResponse](docs/Model/EmployeeResponse.md)
- [EmployeeResponsePagedResponse](docs/Model/EmployeeResponsePagedResponse.md)
- [FacilityContactResponse](docs/Model/FacilityContactResponse.md)
- [FacilityQualificationRateResponse](docs/Model/FacilityQualificationRateResponse.md)
- [FacilityResponse](docs/Model/FacilityResponse.md)
- [FacilityResponsePagedResponse](docs/Model/FacilityResponsePagedResponse.md)
- [ForgotPasswordRequestRequest](docs/Model/ForgotPasswordRequestRequest.md)
@@ -159,23 +216,42 @@ Class | Method | HTTP request | Description
- [LoginResponse](docs/Model/LoginResponse.md)
- [LogoutRequest](docs/Model/LogoutRequest.md)
- [MeResponse](docs/Model/MeResponse.md)
- [ModuleType](docs/Model/ModuleType.md)
- [OrderResponse](docs/Model/OrderResponse.md)
- [OrderResponsePagedResponse](docs/Model/OrderResponsePagedResponse.md)
- [PasswordPolicyResponse](docs/Model/PasswordPolicyResponse.md)
- [PasswordResetTemplateResponse](docs/Model/PasswordResetTemplateResponse.md)
- [PermissionAction](docs/Model/PermissionAction.md)
- [PermissionDto](docs/Model/PermissionDto.md)
- [PermissionEffect](docs/Model/PermissionEffect.md)
- [PermissionScope](docs/Model/PermissionScope.md)
- [RefreshRequest](docs/Model/RefreshRequest.md)
- [ResetUserPasswordRequest](docs/Model/ResetUserPasswordRequest.md)
- [RolePermissionsResponse](docs/Model/RolePermissionsResponse.md)
- [RoleResponse](docs/Model/RoleResponse.md)
- [SendTestEmailRequest](docs/Model/SendTestEmailRequest.md)
- [SessionResponse](docs/Model/SessionResponse.md)
- [TimeEntryDecisionRequest](docs/Model/TimeEntryDecisionRequest.md)
- [TimeEntryResponse](docs/Model/TimeEntryResponse.md)
- [TimeEntryResponsePagedResponse](docs/Model/TimeEntryResponsePagedResponse.md)
- [TrashAbsenceResponse](docs/Model/TrashAbsenceResponse.md)
- [TrashContractResponse](docs/Model/TrashContractResponse.md)
- [TrashEmployeeResponse](docs/Model/TrashEmployeeResponse.md)
- [TrashFacilityContactResponse](docs/Model/TrashFacilityContactResponse.md)
- [TrashFacilityQualificationRateResponse](docs/Model/TrashFacilityQualificationRateResponse.md)
- [TrashFacilityResponse](docs/Model/TrashFacilityResponse.md)
- [TrashOrderResponse](docs/Model/TrashOrderResponse.md)
- [TrashTimeEntryResponse](docs/Model/TrashTimeEntryResponse.md)
- [UpdateAbsenceRequest](docs/Model/UpdateAbsenceRequest.md)
- [UpdateContractRequest](docs/Model/UpdateContractRequest.md)
- [UpdateDocumentRequest](docs/Model/UpdateDocumentRequest.md)
- [UpdateEmployeeRequest](docs/Model/UpdateEmployeeRequest.md)
- [UpdateFacilityContactRequest](docs/Model/UpdateFacilityContactRequest.md)
- [UpdateFacilityQualificationRateRequest](docs/Model/UpdateFacilityQualificationRateRequest.md)
- [UpdateFacilityRequest](docs/Model/UpdateFacilityRequest.md)
- [UpdateOrderRequest](docs/Model/UpdateOrderRequest.md)
- [UpdateRolePermissionsRequest](docs/Model/UpdateRolePermissionsRequest.md)
- [UpdateTimeEntryRequest](docs/Model/UpdateTimeEntryRequest.md)
- [UpdateUserRequest](docs/Model/UpdateUserRequest.md)
- [UpdateValueListItemRequest](docs/Model/UpdateValueListItemRequest.md)
- [UserPermissionOverrideResponse](docs/Model/UserPermissionOverrideResponse.md)