From 701b62ae623c37680a40083d7bb4ee3b82022f67 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Sat, 30 Aug 2025 12:13:33 -0300 Subject: [PATCH] Bug 39190: Rename API from sftp_servers to file_transports This patch renames the entire API structure from SFTP-specific to generic file transport terminology to reflect the polymorphic nature of the system. API Changes: - Endpoints: /config/sftp_servers -> /config/file_transports - Parameters: sftp_server_id -> file_transport_id - Definitions: sftp_server -> file_transport - Controller: Config::SFTP::Servers -> Config::File::Transports File Changes: - api/v1/swagger/definitions/sftp_server.yaml -> file_transport.yaml - api/v1/swagger/paths/config_sftp_servers.yaml -> config_file_transports.yaml - Koha/REST/V1/Config/SFTP/Servers.pm -> Koha/REST/V1/Config/File/Transports.pm - t/db_dependent/api/v1/sftp_servers.t -> file_transports.t Updated References: - swagger.yaml: paths, definitions, parameters, tags - Template JavaScript: API URLs and variable names - Controller: package name, variable names, error messages - Tests: endpoints, parameters, descriptions - API mapping: to_api_mapping field name correction To test: 1. Apply this patch 2. Run: yarn api:bundle (to regenerate swagger bundle) 3. Run: prove t/db_dependent/api/v1/file_transports.t 4. All API tests should pass 5. Verify admin interface uses new API endpoints 6. Test CRUD operations work correctly The API now consistently uses 'file_transports' terminology matching the polymorphic file transport system that supports FTP, SFTP, and future transport types. Signed-off-by: Tomas Cohen Arazi --- Koha/File/Transport.pm | 2 +- .../{SFTP/Servers.pm => File/Transports.pm} | 44 +++--- .../{sftp_server.yaml => file_transport.yaml} | 10 +- ...rvers.yaml => config_file_transports.yaml} | 76 +++++------ api/v1/swagger/swagger.yaml | 24 ++-- .../prog/en/modules/admin/file_transports.tt | 26 ++-- .../v1/{sftp_servers.t => file_transports.t} | 127 +++++++++--------- 7 files changed, 153 insertions(+), 156 deletions(-) rename Koha/REST/V1/Config/{SFTP/Servers.pm => File/Transports.pm} (70%) rename api/v1/swagger/definitions/{sftp_server.yaml => file_transport.yaml} (84%) rename api/v1/swagger/paths/{config_sftp_servers.yaml => config_file_transports.yaml} (75%) rename t/db_dependent/api/v1/{sftp_servers.t => file_transports.t} (64%) diff --git a/Koha/File/Transport.pm b/Koha/File/Transport.pm index 47ba6eea853..fc7ac459b0e 100644 --- a/Koha/File/Transport.pm +++ b/Koha/File/Transport.pm @@ -142,7 +142,7 @@ on the API. =cut sub to_api_mapping { - return { id => 'sftp_server_id' }; + return { id => 'file_transport_id' }; } =head3 test_connection diff --git a/Koha/REST/V1/Config/SFTP/Servers.pm b/Koha/REST/V1/Config/File/Transports.pm similarity index 70% rename from Koha/REST/V1/Config/SFTP/Servers.pm rename to Koha/REST/V1/Config/File/Transports.pm index 0df33ee2c2c..d3f20f34028 100644 --- a/Koha/REST/V1/Config/SFTP/Servers.pm +++ b/Koha/REST/V1/Config/File/Transports.pm @@ -1,4 +1,4 @@ -package Koha::REST::V1::Config::SFTP::Servers; +package Koha::REST::V1::Config::File::Transports; # This file is part of Koha. # @@ -37,11 +37,11 @@ sub list { my $c = shift->openapi->valid_input or return; return try { - my $sftp_servers_set = Koha::File::Transports->new; - my $sftp_servers = $c->objects->search($sftp_servers_set); + my $file_transports_set = Koha::File::Transports->new; + my $file_transports = $c->objects->search($file_transports_set); return $c->render( status => 200, - openapi => $sftp_servers + openapi => $file_transports ); } catch { $c->unhandled_exception($_); @@ -58,14 +58,14 @@ sub get { my $c = shift->openapi->valid_input or return; return try { - my $sftp_server = Koha::File::Transports->find( $c->param('sftp_server_id') ); + my $file_transport = Koha::File::Transports->find( $c->param('file_transport_id') ); - return $c->render_resource_not_found("FTP/SFTP server") - unless $sftp_server; + return $c->render_resource_not_found("File transport") + unless $file_transport; return $c->render( status => 200, - openapi => $c->objects->to_api($sftp_server), + openapi => $c->objects->to_api($file_transport), ); } catch { $c->unhandled_exception($_); @@ -83,14 +83,14 @@ sub add { return try { - my $sftp_server = Koha::File::Transport->new_from_api( $c->req->json ); - $sftp_server->store->discard_changes; + my $file_transport = Koha::File::Transport->new_from_api( $c->req->json ); + $file_transport->store->discard_changes; - $c->res->headers->location( $c->req->url->to_string . '/' . $sftp_server->id ); + $c->res->headers->location( $c->req->url->to_string . '/' . $file_transport->id ); return $c->render( status => 201, - openapi => $c->objects->to_api($sftp_server), + openapi => $c->objects->to_api($file_transport), ); } catch { if ( blessed $_ and $_->isa('Koha::Exceptions::Object::DuplicateID') ) { @@ -116,18 +116,18 @@ Controller method that handles updating a Koha::File::Transport object sub update { my $c = shift->openapi->valid_input or return; - my $sftp_server = Koha::File::Transports->find( $c->param('sftp_server_id') ); + my $file_transport = Koha::File::Transports->find( $c->param('file_transport_id') ); - return $c->render_resource_not_found("FTP/SFTP server") - unless $sftp_server; + return $c->render_resource_not_found("File transport") + unless $file_transport; return try { - $sftp_server->set_from_api( $c->req->json ); - $sftp_server->store->discard_changes; + $file_transport->set_from_api( $c->req->json ); + $file_transport->store->discard_changes; return $c->render( status => 200, - openapi => $c->objects->to_api($sftp_server), + openapi => $c->objects->to_api($file_transport), ); } catch { if ( blessed $_ and $_->isa('Koha::Exceptions::Object::DuplicateID') ) { @@ -153,13 +153,13 @@ Controller method that handles deleting a Koha::File::Transport object sub delete { my $c = shift->openapi->valid_input or return; - my $sftp_server = Koha::File::Transports->find( $c->param('sftp_server_id') ); + my $file_transport = Koha::File::Transports->find( $c->param('file_transport_id') ); - return $c->render_resource_not_found("FTP/SFTP server") - unless $sftp_server; + return $c->render_resource_not_found("File transport") + unless $file_transport; return try { - $sftp_server->delete; + $file_transport->delete; return $c->render_resource_deleted; } catch { $c->unhandled_exception($_); diff --git a/api/v1/swagger/definitions/sftp_server.yaml b/api/v1/swagger/definitions/file_transport.yaml similarity index 84% rename from api/v1/swagger/definitions/sftp_server.yaml rename to api/v1/swagger/definitions/file_transport.yaml index 48216efae1b..8ad648577f9 100644 --- a/api/v1/swagger/definitions/sftp_server.yaml +++ b/api/v1/swagger/definitions/file_transport.yaml @@ -1,13 +1,13 @@ --- type: object properties: - sftp_server_id: + file_transport_id: type: integer - description: Internal FTP/SFTP server identifier + description: Internal File transport identifier readOnly: true name: type: string - description: Name of the FTP/SFTP server + description: Name of the File transport host: type: string description: FTP/SFTP host name (optional) @@ -20,7 +20,7 @@ properties: - ftp - sftp - file - description: Transport of FTP/SFTP server (optional) + description: Transport of File transport (optional) auth_mode: type: string enum: @@ -60,7 +60,7 @@ properties: type: - object - "null" - description: Most recent status of the FTP/SFTP server (optional) + description: Most recent status of the File transport (optional) debug: type: boolean description: If the SMTP connection is set to debug mode (optional) diff --git a/api/v1/swagger/paths/config_sftp_servers.yaml b/api/v1/swagger/paths/config_file_transports.yaml similarity index 75% rename from api/v1/swagger/paths/config_sftp_servers.yaml rename to api/v1/swagger/paths/config_file_transports.yaml index 4e6919192b2..81830faf050 100644 --- a/api/v1/swagger/paths/config_sftp_servers.yaml +++ b/api/v1/swagger/paths/config_file_transports.yaml @@ -1,11 +1,11 @@ --- -/config/sftp_servers: +/config/file_transports: get: - x-mojo-to: Config::SFTP::Servers#list - operationId: listSFTPServers + x-mojo-to: Config::File::Transports#list + operationId: listFileTransportServers tags: - - sftp_servers - summary: List FTP/SFTP servers + - file_transports + summary: List File transports produces: - application/json parameters: @@ -18,11 +18,11 @@ - $ref: "../swagger.yaml#/parameters/request_id_header" responses: "200": - description: A list of FTP/SFTP servers + description: A list of File transports schema: type: array items: - $ref: "../swagger.yaml#/definitions/sftp_server" + $ref: "../swagger.yaml#/definitions/file_transport" "400": description: | Bad request. Possible `error_code` attribute values: @@ -49,25 +49,25 @@ permissions: parameters: manage_file_transports post: - x-mojo-to: Config::SFTP::Servers#add - operationId: addSFTPServer + x-mojo-to: Config::File::Transports#add + operationId: addFileTransportServer tags: - - sftp_servers - summary: Add FTP/SFTP server + - file_transports + summary: Add File transport parameters: - name: body in: body - description: A JSON object representing a new FTP/SFTP server configuration + description: A JSON object representing a new File transport configuration required: true schema: - $ref: "../swagger.yaml#/definitions/sftp_server" + $ref: "../swagger.yaml#/definitions/file_transport" produces: - application/json responses: "201": - description: An FTP/SFTP server object + description: An File transport object schema: - $ref: "../swagger.yaml#/definitions/sftp_server" + $ref: "../swagger.yaml#/definitions/file_transport" "400": description: Bad request schema: @@ -98,22 +98,22 @@ x-koha-authorization: permissions: parameters: manage_file_transports -"/config/sftp_servers/{sftp_server_id}": +"/config/file_transports/{file_transport_id}": get: - x-mojo-to: Config::SFTP::Servers#get - operationId: getSFTPServer + x-mojo-to: Config::File::Transports#get + operationId: getFileTransportServer tags: - - sftp_servers - summary: Get FTP/SFTP server + - file_transports + summary: Get File transport parameters: - - $ref: "../swagger.yaml#/parameters/sftp_server_id_pp" + - $ref: "../swagger.yaml#/parameters/file_transport_id_pp" produces: - application/json responses: "200": - description: An FTP/SFTP server object + description: An File transport object schema: - $ref: "../swagger.yaml#/definitions/sftp_server" + $ref: "../swagger.yaml#/definitions/file_transport" "400": description: Bad request schema: @@ -141,26 +141,26 @@ permissions: parameters: manage_file_transports put: - x-mojo-to: Config::SFTP::Servers#update - operationId: updateSFTPServer + x-mojo-to: Config::File::Transports#update + operationId: updateFileTransportServer tags: - - sftp_servers - summary: Update FTP/SFTP server + - file_transports + summary: Update File transport parameters: - - $ref: "../swagger.yaml#/parameters/sftp_server_id_pp" + - $ref: "../swagger.yaml#/parameters/file_transport_id_pp" - name: body in: body - description: An FTP/SFTP server object + description: An File transport object required: true schema: - $ref: "../swagger.yaml#/definitions/sftp_server" + $ref: "../swagger.yaml#/definitions/file_transport" produces: - application/json responses: "200": - description: An FTP/SFTP server object + description: An File transport object schema: - $ref: "../swagger.yaml#/definitions/sftp_server" + $ref: "../swagger.yaml#/definitions/file_transport" "400": description: Bad request schema: @@ -192,18 +192,18 @@ permissions: parameters: manage_file_transports delete: - x-mojo-to: Config::SFTP::Servers#delete - operationId: deleteSFTPServer + x-mojo-to: Config::File::Transports#delete + operationId: deleteFileTransportServer tags: - - sftp_servers - summary: Delete FTP/SFTP server + - file_transports + summary: Delete File transport parameters: - - $ref: "../swagger.yaml#/parameters/sftp_server_id_pp" + - $ref: "../swagger.yaml#/parameters/file_transport_id_pp" produces: - application/json responses: "204": - description: FTP/SFTP server deleted + description: File transport deleted "400": description: Bad request schema: diff --git a/api/v1/swagger/swagger.yaml b/api/v1/swagger/swagger.yaml index 67c54647ccb..d1ca532726f 100644 --- a/api/v1/swagger/swagger.yaml +++ b/api/v1/swagger/swagger.yaml @@ -178,8 +178,8 @@ definitions: $ref: ./definitions/search_filter.yaml smtp_server: $ref: ./definitions/smtp_server.yaml - sftp_server: - $ref: ./definitions/sftp_server.yaml + file_transport: + $ref: ./definitions/file_transport.yaml suggestion: $ref: ./definitions/suggestion.yaml ticket: @@ -321,10 +321,10 @@ paths: $ref: ./paths/config_smtp_servers.yaml#/~1config~1smtp_servers "/config/smtp_servers/{smtp_server_id}": $ref: "./paths/config_smtp_servers.yaml#/~1config~1smtp_servers~1{smtp_server_id}" - /config/sftp_servers: - $ref: ./paths/config_sftp_servers.yaml#/~1config~1sftp_servers - "/config/sftp_servers/{sftp_server_id}": - $ref: "./paths/config_sftp_servers.yaml#/~1config~1sftp_servers~1{sftp_server_id}" + /config/file_transports: + $ref: ./paths/config_file_transports.yaml#/~1config~1file_transports + "/config/file_transports/{file_transport_id}": + $ref: "./paths/config_file_transports.yaml#/~1config~1file_transports~1{file_transport_id}" "/deleted/biblios": $ref: "./paths/deleted_biblios.yaml#/~1deleted~1biblios" "/deleted/biblios/{biblio_id}": @@ -961,10 +961,10 @@ parameters: name: smtp_server_id required: true type: integer - sftp_server_id_pp: - description: FTP/SFTP server internal identifier + file_transport_id_pp: + description: File transport internal identifier in: path - name: sftp_server_id + name: file_transport_id required: true type: integer suggestion_id_pp: @@ -1317,9 +1317,9 @@ tags: - description: "Manage SMTP servers configurations\n" name: smtp_servers x-displayName: SMTP servers - - description: "Manage FTP/SFTP servers configurations\n" - name: sftp_servers - x-displayName: FTP/SFTP servers + - description: "Manage file transport configurations\n" + name: file_transports + x-displayName: File transports - description: "Manage tickets\n" name: tickets x-displayName: Tickets diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/file_transports.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/file_transports.tt index 9692ec4fc12..56c01e175d3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/file_transports.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/file_transports.tt @@ -274,7 +274,7 @@
[% INCLUDE 'csrf-token.inc' %] - +
  1. @@ -415,7 +415,7 @@ [% ELSE %]
    - +
    @@ -475,10 +475,10 @@
    Name