feat: Add race upload functionality and file transfer endpoints

- Implemented IRaceUploadCommunicationClient with methods for saving races, creating race points, indexing race points, retrieving race details, and uploading files to the receiver.
- Added ReceiveFilePath option to CatalogCommunicationOptions for file transfer configuration.
- Enhanced CatalogCommunicationServiceCollectionExtensions to validate ReceiveFilePath.
- Developed RaceUploadCommunicationClient to handle race-related API interactions, including saving race data and uploading processed images.
- Updated API documentation to reflect new race upload and file transfer endpoints.
- Modified Avalonia UI to support race creation and processed image uploads, including new input fields and buttons.
- Introduced RaceSaveRequest and ReceiveFileUploadRequest models for structured data handling.
This commit is contained in:
MaddoScientisto 2026-02-28 16:54:08 +01:00
commit 15b1da4371
11 changed files with 675 additions and 97 deletions

View file

@ -34,6 +34,8 @@ tags:
description: Admin photo/type/log endpoints (command-driven)
- name: Media
description: Thumbnail/original photo retrieval
- name: FileTransfer
description: Low-level raw file receiver used by legacy race photo export flow
- name: Public
description: Public-facing login/user/photo endpoints mapped in web.xml
@ -172,6 +174,19 @@ paths:
descrizionePuntoFoto: "Start"
pathRelativoFoto: "start/"
tipoPuntoFoto: "A"
saveRace:
value:
cmd: asq
act: save
id_gara: 0
descrizione: "Gara Demo 2026"
dataGaraInizio: "2026-05-10"
dataGaraFine: "2026-05-10"
id_tipoGara: 1
flgEventoInLinea: 0
flgTipoIndex: 1
pathBase: "2026/gara-demo/"
flgFree: 0
indexFoto:
value:
cmd: indexFoto
@ -232,6 +247,60 @@ paths:
htmlCommandResponse:
value: "<html>...messaggi/bean rendering...</html>"
/ReceiveFile.abl:
post:
tags: [FileTransfer]
summary: Raw file receiver used by legacy 3-piano to WWW transfer
description: |
Endpoint mapped to `ReceiveFileSvlt`.
The legacy client sends raw file bytes in request body and query parameters for destination metadata.
Query parameters:
- `name`: destination filename
- `path`: absolute/target remote directory
- `overwriteRemoteFile`: `true|false`
- `bs`: optional buffer size hint
Note: decompiled servlet marks this endpoint as non-secure in code (`isSecureServlet=false`).
security: []
parameters:
- name: name
in: query
required: true
schema:
type: string
- name: path
in: query
required: true
schema:
type: string
- name: overwriteRemoteFile
in: query
required: false
schema:
type: boolean
default: false
- name: bs
in: query
required: false
schema:
type: integer
minimum: 1
requestBody:
required: true
content:
application/octet-stream:
schema:
type: string
format: binary
responses:
'200':
description: Receiver accepted the stream (response body is implementation-specific/plain text)
content:
text/plain:
schema:
type: string
/admin/pg/Foto.abl:
get:
tags: [PhotoAdmin]
@ -546,6 +615,8 @@ components:
cmd:
type: string
enum:
- asq
- ni
- addPuntoFoto
- delPuntoFoto
- modPuntoFoto
@ -586,6 +657,20 @@ components:
dataGaraFine:
type: string
format: date
id_tipoGara:
type: integer
format: int64
flgEventoInLinea:
type: integer
enum: [0, 1, 2]
flgTipoIndex:
type: integer
enum: [0, 1]
flgFree:
type: integer
enum: [0, 1]
localita:
type: string
GaraLoadImgMultipartRequest:
type: object