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
@@ -0,0 +1,431 @@
# OmsorgCoreClient\TimeEntriesApi
All URIs are relative to http://localhost, except if the operation defines another base path.
| Method | HTTP request | Description |
| ------------- | ------------- | ------------- |
| [**apiTimeEntriesGet()**](TimeEntriesApi.md#apiTimeEntriesGet) | **GET** /api/time-entries | |
| [**apiTimeEntriesIdDecisionPost()**](TimeEntriesApi.md#apiTimeEntriesIdDecisionPost) | **POST** /api/time-entries/{id}/decision | |
| [**apiTimeEntriesIdDelete()**](TimeEntriesApi.md#apiTimeEntriesIdDelete) | **DELETE** /api/time-entries/{id} | |
| [**apiTimeEntriesIdGet()**](TimeEntriesApi.md#apiTimeEntriesIdGet) | **GET** /api/time-entries/{id} | |
| [**apiTimeEntriesIdPut()**](TimeEntriesApi.md#apiTimeEntriesIdPut) | **PUT** /api/time-entries/{id} | |
| [**apiTimeEntriesIdSubmitPost()**](TimeEntriesApi.md#apiTimeEntriesIdSubmitPost) | **POST** /api/time-entries/{id}/submit | |
| [**apiTimeEntriesPost()**](TimeEntriesApi.md#apiTimeEntriesPost) | **POST** /api/time-entries | |
## `apiTimeEntriesGet()`
```php
apiTimeEntriesGet($status_id, $employee_id, $order_id, $page, $page_size): \OmsorgCoreClient\Model\TimeEntryResponsePagedResponse
```
### Example
```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');
// Configure Bearer (JWT) authorization: Bearer
$config = OmsorgCoreClient\Configuration::getDefaultConfiguration()->setAccessToken('YOUR_ACCESS_TOKEN');
$apiInstance = new OmsorgCoreClient\Api\TimeEntriesApi(
// 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_id = 'status_id_example'; // string
$employee_id = 'employee_id_example'; // string
$order_id = 'order_id_example'; // string
$page = 1; // int
$page_size = 20; // int
try {
$result = $apiInstance->apiTimeEntriesGet($status_id, $employee_id, $order_id, $page, $page_size);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling TimeEntriesApi->apiTimeEntriesGet: ', $e->getMessage(), PHP_EOL;
}
```
### Parameters
| Name | Type | Description | Notes |
| ------------- | ------------- | ------------- | ------------- |
| **status_id** | **string**| | [optional] |
| **employee_id** | **string**| | [optional] |
| **order_id** | **string**| | [optional] |
| **page** | **int**| | [optional] [default to 1] |
| **page_size** | **int**| | [optional] [default to 20] |
### Return type
[**\OmsorgCoreClient\Model\TimeEntryResponsePagedResponse**](../Model/TimeEntryResponsePagedResponse.md)
### Authorization
[Bearer](../../README.md#Bearer)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: `text/plain`, `application/json`, `text/json`
[[Back to top]](#) [[Back to API list]](../../README.md#endpoints)
[[Back to Model list]](../../README.md#models)
[[Back to README]](../../README.md)
## `apiTimeEntriesIdDecisionPost()`
```php
apiTimeEntriesIdDecisionPost($id, $time_entry_decision_request): \OmsorgCoreClient\Model\TimeEntryResponse
```
### Example
```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');
// Configure Bearer (JWT) authorization: Bearer
$config = OmsorgCoreClient\Configuration::getDefaultConfiguration()->setAccessToken('YOUR_ACCESS_TOKEN');
$apiInstance = new OmsorgCoreClient\Api\TimeEntriesApi(
// 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
);
$id = 'id_example'; // string
$time_entry_decision_request = new \OmsorgCoreClient\Model\TimeEntryDecisionRequest(); // \OmsorgCoreClient\Model\TimeEntryDecisionRequest
try {
$result = $apiInstance->apiTimeEntriesIdDecisionPost($id, $time_entry_decision_request);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling TimeEntriesApi->apiTimeEntriesIdDecisionPost: ', $e->getMessage(), PHP_EOL;
}
```
### Parameters
| Name | Type | Description | Notes |
| ------------- | ------------- | ------------- | ------------- |
| **id** | **string**| | |
| **time_entry_decision_request** | [**\OmsorgCoreClient\Model\TimeEntryDecisionRequest**](../Model/TimeEntryDecisionRequest.md)| | [optional] |
### Return type
[**\OmsorgCoreClient\Model\TimeEntryResponse**](../Model/TimeEntryResponse.md)
### Authorization
[Bearer](../../README.md#Bearer)
### HTTP request headers
- **Content-Type**: `application/json`, `text/json`, `application/*+json`
- **Accept**: `text/plain`, `application/json`, `text/json`
[[Back to top]](#) [[Back to API list]](../../README.md#endpoints)
[[Back to Model list]](../../README.md#models)
[[Back to README]](../../README.md)
## `apiTimeEntriesIdDelete()`
```php
apiTimeEntriesIdDelete($id)
```
### Example
```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');
// Configure Bearer (JWT) authorization: Bearer
$config = OmsorgCoreClient\Configuration::getDefaultConfiguration()->setAccessToken('YOUR_ACCESS_TOKEN');
$apiInstance = new OmsorgCoreClient\Api\TimeEntriesApi(
// 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
);
$id = 'id_example'; // string
try {
$apiInstance->apiTimeEntriesIdDelete($id);
} catch (Exception $e) {
echo 'Exception when calling TimeEntriesApi->apiTimeEntriesIdDelete: ', $e->getMessage(), PHP_EOL;
}
```
### Parameters
| Name | Type | Description | Notes |
| ------------- | ------------- | ------------- | ------------- |
| **id** | **string**| | |
### Return type
void (empty response body)
### Authorization
[Bearer](../../README.md#Bearer)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../../README.md#endpoints)
[[Back to Model list]](../../README.md#models)
[[Back to README]](../../README.md)
## `apiTimeEntriesIdGet()`
```php
apiTimeEntriesIdGet($id): \OmsorgCoreClient\Model\TimeEntryResponse
```
### Example
```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');
// Configure Bearer (JWT) authorization: Bearer
$config = OmsorgCoreClient\Configuration::getDefaultConfiguration()->setAccessToken('YOUR_ACCESS_TOKEN');
$apiInstance = new OmsorgCoreClient\Api\TimeEntriesApi(
// 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
);
$id = 'id_example'; // string
try {
$result = $apiInstance->apiTimeEntriesIdGet($id);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling TimeEntriesApi->apiTimeEntriesIdGet: ', $e->getMessage(), PHP_EOL;
}
```
### Parameters
| Name | Type | Description | Notes |
| ------------- | ------------- | ------------- | ------------- |
| **id** | **string**| | |
### Return type
[**\OmsorgCoreClient\Model\TimeEntryResponse**](../Model/TimeEntryResponse.md)
### Authorization
[Bearer](../../README.md#Bearer)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: `text/plain`, `application/json`, `text/json`
[[Back to top]](#) [[Back to API list]](../../README.md#endpoints)
[[Back to Model list]](../../README.md#models)
[[Back to README]](../../README.md)
## `apiTimeEntriesIdPut()`
```php
apiTimeEntriesIdPut($id, $update_time_entry_request): \OmsorgCoreClient\Model\TimeEntryResponse
```
### Example
```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');
// Configure Bearer (JWT) authorization: Bearer
$config = OmsorgCoreClient\Configuration::getDefaultConfiguration()->setAccessToken('YOUR_ACCESS_TOKEN');
$apiInstance = new OmsorgCoreClient\Api\TimeEntriesApi(
// 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
);
$id = 'id_example'; // string
$update_time_entry_request = new \OmsorgCoreClient\Model\UpdateTimeEntryRequest(); // \OmsorgCoreClient\Model\UpdateTimeEntryRequest
try {
$result = $apiInstance->apiTimeEntriesIdPut($id, $update_time_entry_request);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling TimeEntriesApi->apiTimeEntriesIdPut: ', $e->getMessage(), PHP_EOL;
}
```
### Parameters
| Name | Type | Description | Notes |
| ------------- | ------------- | ------------- | ------------- |
| **id** | **string**| | |
| **update_time_entry_request** | [**\OmsorgCoreClient\Model\UpdateTimeEntryRequest**](../Model/UpdateTimeEntryRequest.md)| | [optional] |
### Return type
[**\OmsorgCoreClient\Model\TimeEntryResponse**](../Model/TimeEntryResponse.md)
### Authorization
[Bearer](../../README.md#Bearer)
### HTTP request headers
- **Content-Type**: `application/json`, `text/json`, `application/*+json`
- **Accept**: `text/plain`, `application/json`, `text/json`
[[Back to top]](#) [[Back to API list]](../../README.md#endpoints)
[[Back to Model list]](../../README.md#models)
[[Back to README]](../../README.md)
## `apiTimeEntriesIdSubmitPost()`
```php
apiTimeEntriesIdSubmitPost($id): \OmsorgCoreClient\Model\TimeEntryResponse
```
### Example
```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');
// Configure Bearer (JWT) authorization: Bearer
$config = OmsorgCoreClient\Configuration::getDefaultConfiguration()->setAccessToken('YOUR_ACCESS_TOKEN');
$apiInstance = new OmsorgCoreClient\Api\TimeEntriesApi(
// 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
);
$id = 'id_example'; // string
try {
$result = $apiInstance->apiTimeEntriesIdSubmitPost($id);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling TimeEntriesApi->apiTimeEntriesIdSubmitPost: ', $e->getMessage(), PHP_EOL;
}
```
### Parameters
| Name | Type | Description | Notes |
| ------------- | ------------- | ------------- | ------------- |
| **id** | **string**| | |
### Return type
[**\OmsorgCoreClient\Model\TimeEntryResponse**](../Model/TimeEntryResponse.md)
### Authorization
[Bearer](../../README.md#Bearer)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: `text/plain`, `application/json`, `text/json`
[[Back to top]](#) [[Back to API list]](../../README.md#endpoints)
[[Back to Model list]](../../README.md#models)
[[Back to README]](../../README.md)
## `apiTimeEntriesPost()`
```php
apiTimeEntriesPost($create_time_entry_request): \OmsorgCoreClient\Model\TimeEntryResponse
```
### Example
```php
<?php
require_once(__DIR__ . '/vendor/autoload.php');
// Configure Bearer (JWT) authorization: Bearer
$config = OmsorgCoreClient\Configuration::getDefaultConfiguration()->setAccessToken('YOUR_ACCESS_TOKEN');
$apiInstance = new OmsorgCoreClient\Api\TimeEntriesApi(
// 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
);
$create_time_entry_request = new \OmsorgCoreClient\Model\CreateTimeEntryRequest(); // \OmsorgCoreClient\Model\CreateTimeEntryRequest
try {
$result = $apiInstance->apiTimeEntriesPost($create_time_entry_request);
print_r($result);
} catch (Exception $e) {
echo 'Exception when calling TimeEntriesApi->apiTimeEntriesPost: ', $e->getMessage(), PHP_EOL;
}
```
### Parameters
| Name | Type | Description | Notes |
| ------------- | ------------- | ------------- | ------------- |
| **create_time_entry_request** | [**\OmsorgCoreClient\Model\CreateTimeEntryRequest**](../Model/CreateTimeEntryRequest.md)| | [optional] |
### Return type
[**\OmsorgCoreClient\Model\TimeEntryResponse**](../Model/TimeEntryResponse.md)
### Authorization
[Bearer](../../README.md#Bearer)
### HTTP request headers
- **Content-Type**: `application/json`, `text/json`, `application/*+json`
- **Accept**: `text/plain`, `application/json`, `text/json`
[[Back to top]](#) [[Back to API list]](../../README.md#endpoints)
[[Back to Model list]](../../README.md#models)
[[Back to README]](../../README.md)