2019-07-29 14:33:28 +02:00
unit mvccontroller;
interface
uses
MVCFramework
, MVCFramework. Commons
, MVCFramework. Logger
, MVCFramework. JWT
, Generics. Collections
2019-08-05 16:25:30 +02:00
, Swag. Common. Types
2019-07-29 14:33:28 +02:00
;
( *
2019-08-05 16:25:30 +02:00
Title: Swagger Petstore
Description: This is a sample server Petstore server. You can find out more about Swagger at [ http: //swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.
License: Apache 2.0
2019-07-29 14:33:28 +02:00
* )
type
2019-08-05 16:25:30 +02:00
TApiResponse = class
[ MVCFormat( 'int32' ) ]
code : integer ;
2019-07-29 14:33:28 +02:00
2019-08-05 16:25:30 +02:00
& type : string ;
2019-07-29 14:33:28 +02:00
2019-08-05 16:25:30 +02:00
message : string ;
2019-07-29 14:33:28 +02:00
2019-08-05 16:25:30 +02:00
end ;
TCategory = class
[ MVCFormat( 'int64' ) ]
id : Int64 ;
2019-07-29 14:33:28 +02:00
2019-08-05 16:25:30 +02:00
name : string ;
2019-07-29 14:33:28 +02:00
end ;
2019-08-05 16:25:30 +02:00
TOrder = class
[ MVCFormat( 'int64' ) ]
id : Int64 ;
[ MVCFormat( 'int64' ) ]
petId : Int64 ;
[ MVCFormat( 'int32' ) ]
quantity : integer ;
[ MVCFormat( 'date-time' ) ]
shipDate : string ;
[ MVCDoc( 'Order Status' ) ]
status : string ;
complete : boolean ;
end ;
TPet = class
[ MVCFormat( 'int64' ) ]
id : Int64 ;
category : TCategory;
name : string ;
photoUrls : array of string ;
tags : array of TTag;
[ MVCDoc( 'pet status in the store' ) ]
status : string ;
end ;
TTag = class
[ MVCFormat( 'int64' ) ]
id : Int64 ;
2019-07-29 14:33:28 +02:00
name : string ;
2019-08-05 16:25:30 +02:00
end ;
TUser = class
2019-07-29 14:33:28 +02:00
[ MVCFormat( 'int64' ) ]
2019-08-05 16:25:30 +02:00
id : Int64 ;
2019-07-29 14:33:28 +02:00
2019-08-05 16:25:30 +02:00
username : string ;
2019-07-29 14:33:28 +02:00
2019-08-05 16:25:30 +02:00
firstName : string ;
2019-07-29 14:33:28 +02:00
2019-08-05 16:25:30 +02:00
lastName : string ;
2019-07-29 14:33:28 +02:00
2019-08-05 16:25:30 +02:00
email : string ;
password : string ;
phone : string ;
[ MVCDoc( 'User Status' ) ]
[ MVCFormat( 'int32' ) ]
userStatus : integer ;
2019-07-29 14:33:28 +02:00
end ;
2019-08-05 16:25:30 +02:00
[ MVCPath( '/v2' ) ]
2019-07-29 14:33:28 +02:00
TMyMVCController = class( TMVCController)
2019-08-05 16:25:30 +02:00
[ MVCPath( '/pet' ) ]
[ MVCHTTPMethod( [ httpPOST] ) ]
[ MVCParam( 'body' , rpiBody, TPet) ]
[ MVCResponse( HTTP_STATUS. MethodNotAllowed, 'Invalid input' ) ]
procedure AddPet;
[ MVCPath( '/pet' ) ]
[ MVCHTTPMethod( [ httpPUT] ) ]
[ MVCParam( 'body' , rpiBody, TPet) ]
[ MVCResponse( HTTP_STATUS. MethodNotAllowed, 'Validation exception' ) ]
[ MVCResponse( HTTP_STATUS. NotFound, 'Pet not found' ) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid ID supplied' ) ]
procedure UpdatePet;
[ MVCDoc( 'Multiple status values can be provided with comma separated strings' ) ]
[ MVCPath( '/pet/findByStatus' ) ]
[ MVCHTTPMethod( [ httpGET] ) ]
[ MVCParam( 'status' , rpiQuery, stpArray) ]
[ MVCResponseList( HTTP_STATUS. OK, 'successful operation' , TPet) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid status value' ) ]
procedure FindPetsByStatus;
[ MVCDoc( 'Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.' ) ]
[ MVCPath( '/pet/findByTags' ) ]
[ MVCHTTPMethod( [ httpGET] ) ]
[ MVCParam( 'tags' , rpiQuery, stpArray) ]
[ MVCResponseList( HTTP_STATUS. OK, 'successful operation' , TPet) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid tag value' ) ]
procedure FindPetsByTags;
[ MVCDoc( 'Returns a single pet' ) ]
[ MVCPath( '/pet/($petId)' ) ]
[ MVCHTTPMethod( [ httpGET] ) ]
[ MVCResponse( HTTP_STATUS. OK, 'successful operation' , TPet) ]
[ MVCResponse( HTTP_STATUS. NotFound, 'Pet not found' ) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid ID supplied' ) ]
procedure GetPetById( [ MVCDoc( 'ID of pet to return' ) ] [ MVCPathParam( stpInteger, '' , 'int64' ) ] petId: Int64 ) ;
[ MVCPath( '/pet/($petId)' ) ]
[ MVCHTTPMethod( [ httpPOST] ) ]
[ MVCParam( 'name' , rpiFormData, stpString) ]
[ MVCParam( 'status' , rpiFormData, stpString) ]
[ MVCResponse( HTTP_STATUS. MethodNotAllowed, 'Invalid input' ) ]
procedure UpdatePetWithForm( [ MVCDoc( 'ID of pet that needs to be updated' ) ] [ MVCPathParam( stpInteger, '' , 'int64' ) ] petId: Int64 ) ;
[ MVCPath( '/pet/($petId)' ) ]
[ MVCHTTPMethod( [ httpDELETE] ) ]
[ MVCParam( 'api_key' , rpiHeader, stpString) ]
[ MVCResponse( HTTP_STATUS. NotFound, 'Pet not found' ) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid ID supplied' ) ]
procedure DeletePet( [ MVCDoc( 'Pet id to delete' ) ] [ MVCPathParam( stpInteger, '' , 'int64' ) ] petId: Int64 ) ;
[ MVCPath( '/pet/($petId)/uploadImage' ) ]
[ MVCHTTPMethod( [ httpPOST] ) ]
[ MVCParam( 'additionalMetadata' , rpiFormData, stpString) ]
[ MVCParam( 'file' , rpiFormData, stpFile) ]
[ MVCResponse( HTTP_STATUS. OK, 'successful operation' , TApiResponse) ]
procedure UploadFile( [ MVCDoc( 'ID of pet to update' ) ] [ MVCPathParam( stpInteger, '' , 'int64' ) ] petId: Int64 ) ;
[ MVCDoc( 'Returns a map of status codes to quantities' ) ]
[ MVCPath( '/store/inventory' ) ]
[ MVCHTTPMethod( [ httpGET] ) ]
procedure GetInventory;
[ MVCPath( '/store/order' ) ]
[ MVCHTTPMethod( [ httpPOST] ) ]
[ MVCParam( 'body' , rpiBody, TOrder) ]
[ MVCResponse( HTTP_STATUS. OK, 'successful operation' , TOrder) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid Order' ) ]
procedure PlaceOrder;
[ MVCDoc( 'For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions' ) ]
[ MVCPath( '/store/order/($orderId)' ) ]
[ MVCHTTPMethod( [ httpGET] ) ]
[ MVCResponse( HTTP_STATUS. OK, 'successful operation' , TOrder) ]
[ MVCResponse( HTTP_STATUS. NotFound, 'Order not found' ) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid ID supplied' ) ]
procedure GetOrderById( [ MVCDoc( 'ID of pet that needs to be fetched' ) ] [ MVCPathParam( stpInteger, '' , 'int64' ) ] orderId: Int64 ) ;
[ MVCDoc( 'For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors' ) ]
[ MVCPath( '/store/order/($orderId)' ) ]
[ MVCHTTPMethod( [ httpDELETE] ) ]
[ MVCResponse( HTTP_STATUS. NotFound, 'Order not found' ) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid ID supplied' ) ]
procedure DeleteOrder( [ MVCDoc( 'ID of the order that needs to be deleted' ) ] [ MVCPathParam( stpInteger, '' , 'int64' ) ] orderId: Int64 ) ;
[ MVCDoc( 'This can only be done by the logged in user.' ) ]
[ MVCPath( '/user' ) ]
[ MVCHTTPMethod( [ httpPOST] ) ]
[ MVCParam( 'body' , rpiBody, TUser) ]
[ MVCResponse( HTTP_STATUS. OK, 'successful operation' ) ]
procedure CreateUser;
[ MVCPath( '/user/createWithArray' ) ]
[ MVCHTTPMethod( [ httpPOST] ) ]
[ MVCParam( 'body' , rpiBody, stpNotDefined) ]
[ MVCResponse( HTTP_STATUS. OK, 'successful operation' ) ]
procedure CreateUsersWithArrayInput;
[ MVCPath( '/user/createWithList' ) ]
[ MVCHTTPMethod( [ httpPOST] ) ]
[ MVCParam( 'body' , rpiBody, stpNotDefined) ]
[ MVCResponse( HTTP_STATUS. OK, 'successful operation' ) ]
procedure CreateUsersWithListInput;
[ MVCPath( '/user/login' ) ]
[ MVCHTTPMethod( [ httpGET] ) ]
[ MVCParam( 'username' , rpiQuery, stpString) ]
[ MVCParam( 'password' , rpiQuery, stpString) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid username/password supplied' ) ]
procedure LoginUser;
[ MVCPath( '/user/logout' ) ]
[ MVCHTTPMethod( [ httpGET] ) ]
[ MVCResponse( HTTP_STATUS. OK, 'successful operation' ) ]
procedure LogoutUser;
[ MVCPath( '/user/($username)' ) ]
[ MVCHTTPMethod( [ httpGET] ) ]
[ MVCResponse( HTTP_STATUS. OK, 'successful operation' , TUser) ]
[ MVCResponse( HTTP_STATUS. NotFound, 'User not found' ) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid username supplied' ) ]
procedure GetUserByName( [ MVCDoc( 'The name that needs to be fetched. Use user1 for testing. ' ) ] [ MVCPathParam( stpString) ] username: String ) ;
[ MVCDoc( 'This can only be done by the logged in user.' ) ]
[ MVCPath( '/user/($username)' ) ]
[ MVCHTTPMethod( [ httpPUT] ) ]
[ MVCParam( 'body' , rpiBody, TUser) ]
[ MVCResponse( HTTP_STATUS. NotFound, 'User not found' ) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid user supplied' ) ]
procedure UpdateUser( [ MVCDoc( 'name that need to be updated' ) ] [ MVCPathParam( stpString) ] username: String ) ;
[ MVCDoc( 'This can only be done by the logged in user.' ) ]
[ MVCPath( '/user/($username)' ) ]
[ MVCHTTPMethod( [ httpDELETE] ) ]
[ MVCResponse( HTTP_STATUS. NotFound, 'User not found' ) ]
[ MVCResponse( HTTP_STATUS. BadRequest, 'Invalid username supplied' ) ]
procedure DeleteUser( [ MVCDoc( 'The name that needs to be deleted' ) ] [ MVCPathParam( stpString) ] username: String ) ;
2019-07-29 14:33:28 +02:00
end ;
implementation
uses
Swag. Doc
;
2019-08-05 16:25:30 +02:00
procedure TMyMVCController. AddPet;
var
paramBody : TPet;
begin
paramBody : = Context. Request. BodyAs< TPet> ;
// 405 Invalid input
end ;
procedure TMyMVCController. UpdatePet;
var
paramBody : TPet;
begin
paramBody : = Context. Request. BodyAs< TPet> ;
// 405 Validation exception
// 404 Pet not found
// 400 Invalid ID supplied
end ;
procedure TMyMVCController. FindPetsByStatus;
var
paramStatus : String ;
Pet : TObjectList< TPet> ;
begin
paramStatus : = Context. Request. Params[ 'status' ] ;
Pet : = Context. Request. BodyAsListOf< TPet> ;
{TODO: Implement filling Pet }
Render( HTTP_STATUS. OK, Pet) ;
// 400 Invalid status value
end ;
procedure TMyMVCController. FindPetsByTags;
var
paramTags : String ;
Pet : TObjectList< TPet> ;
begin
paramTags : = Context. Request. Params[ 'tags' ] ;
Pet : = Context. Request. BodyAsListOf< TPet> ;
{TODO: Implement filling Pet }
Render( HTTP_STATUS. OK, Pet) ;
// 400 Invalid tag value
end ;
procedure TMyMVCController. GetPetById( petId: Int64 ) ;
var
Pet : TPet;
begin
Pet : = TPet. Create;
{TODO: Implement filling Pet }
Render( HTTP_STATUS. OK, Pet) ;
// 404 Pet not found
// 400 Invalid ID supplied
end ;
procedure TMyMVCController. UpdatePetWithForm( petId: Int64 ) ;
2019-07-29 14:33:28 +02:00
var
2019-08-05 16:25:30 +02:00
paramName : String ;
paramStatus : String ;
2019-07-29 14:33:28 +02:00
begin
2019-08-05 16:25:30 +02:00
paramName : = Context. Request. Params[ 'name' ] ;
paramStatus : = Context. Request. Params[ 'status' ] ;
// 405 Invalid input
2019-07-29 14:33:28 +02:00
end ;
2019-08-05 16:25:30 +02:00
procedure TMyMVCController. DeletePet( petId: Int64 ) ;
2019-07-29 14:33:28 +02:00
var
2019-08-05 16:25:30 +02:00
paramApi_key : String ;
2019-07-29 14:33:28 +02:00
begin
2019-08-05 16:25:30 +02:00
paramApi_key : = Context. Request. Params[ 'api_key' ] ;
// 404 Pet not found
// 400 Invalid ID supplied
2019-07-29 14:33:28 +02:00
end ;
2019-08-05 16:25:30 +02:00
procedure TMyMVCController. UploadFile( petId: Int64 ) ;
2019-07-29 14:33:28 +02:00
var
2019-08-05 16:25:30 +02:00
paramAdditionalMetadata : String ;
paramFile : String ;
ApiResponse : TApiResponse;
2019-07-29 14:33:28 +02:00
begin
2019-08-05 16:25:30 +02:00
paramAdditionalMetadata : = Context. Request. Params[ 'additionalMetadata' ] ;
paramFile : = Context. Request. Params[ 'file' ] ;
ApiResponse : = TApiResponse. Create;
{TODO: Implement filling ApiResponse }
Render( HTTP_STATUS. OK, ApiResponse) ;
end ;
procedure TMyMVCController. GetInventory;
begin
end ;
procedure TMyMVCController. PlaceOrder;
var
paramBody : TOrder;
Order : TOrder;
begin
paramBody : = Context. Request. BodyAs< TOrder> ;
Order : = TOrder. Create;
{TODO: Implement filling Order }
Render( HTTP_STATUS. OK, Order) ;
// 400 Invalid Order
end ;
procedure TMyMVCController. GetOrderById( orderId: Int64 ) ;
var
Order : TOrder;
begin
Order : = TOrder. Create;
{TODO: Implement filling Order }
Render( HTTP_STATUS. OK, Order) ;
// 404 Order not found
// 400 Invalid ID supplied
end ;
procedure TMyMVCController. DeleteOrder( orderId: Int64 ) ;
begin
// 404 Order not found
// 400 Invalid ID supplied
end ;
procedure TMyMVCController. CreateUser;
var
paramBody : TUser;
begin
paramBody : = Context. Request. BodyAs< TUser> ;
// default successful operation
end ;
procedure TMyMVCController. CreateUsersWithArrayInput;
var
paramBody : TObjectList< TUser> ;
begin
paramBody : = Context. Request. BodyAsListOf< TUser> ;
// default successful operation
end ;
procedure TMyMVCController. CreateUsersWithListInput;
var
paramBody : TObjectList< TUser> ;
begin
paramBody : = Context. Request. BodyAsListOf< TUser> ;
// default successful operation
end ;
procedure TMyMVCController. LoginUser;
var
paramUsername : String ;
paramPassword : String ;
begin
paramUsername : = Context. Request. Params[ 'username' ] ;
paramPassword : = Context. Request. Params[ 'password' ] ;
// 400 Invalid username/password supplied
end ;
procedure TMyMVCController. LogoutUser;
begin
// default successful operation
end ;
procedure TMyMVCController. GetUserByName( username: String ) ;
var
User : TUser;
begin
User : = TUser. Create;
{TODO: Implement filling User }
Render( HTTP_STATUS. OK, User) ;
// 404 User not found
// 400 Invalid username supplied
2019-07-29 14:33:28 +02:00
end ;
2019-08-05 16:25:30 +02:00
procedure TMyMVCController. UpdateUser( username: String ) ;
2019-07-29 14:33:28 +02:00
var
2019-08-05 16:25:30 +02:00
paramBody : TUser;
2019-07-29 14:33:28 +02:00
begin
2019-08-05 16:25:30 +02:00
paramBody : = Context. Request. BodyAs< TUser> ;
// 404 User not found
// 400 Invalid user supplied
2019-07-29 14:33:28 +02:00
end ;
2019-08-05 16:25:30 +02:00
procedure TMyMVCController. DeleteUser( username: String ) ;
2019-07-29 14:33:28 +02:00
begin
2019-08-05 16:25:30 +02:00
// 404 User not found
// 400 Invalid username supplied
2019-07-29 14:33:28 +02:00
end ;
end .