0
backend-technologies
Programming QuickApp

Running QuickApp with different backend technologies

Introduction

QuickApp is a web application framework that is designed to aid developers create Angular web applications quickly. It comes with several common application features such as login, user management, role (permission based) management already implemented.

The focus of quickapp is all about speed of development. How to get a working, running application quickly whilst following best programming practices.

Backends

QuickApp comes with a default ASP.NET Core backend implementation. To implement other backends such as java, node, php, python, etc you will need to implement the APIs as defined in this Swagger API document: http://quickapp-pro.ebenmonney.com/swagger/v1/swagger.json.

Test the API from here: http://quickapp-pro.ebenmonney.com/swagger (Swagger UI)

// 20180122101848
// http://quickapp-pro.ebenmonney.com/swagger/v1/swagger.json

{
  "swagger": "2.0",
  "info": {
    "version": "v1",
    "title": "QuickApp API"
  },
  "basePath": "/",
  "paths": {
    "/api/Account/users/me": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersMeGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "$ref": "#/definitions/UserViewModel" }
          }
        }
      },
      "put": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersMePut",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "user",
            "in": "body",
            "required": false,
            "schema": { "$ref": "#/definitions/UserEditViewModel" }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      },
      "patch": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersMePatch",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "patch",
            "in": "body",
            "required": false,
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/Operation" }
            }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      }
    },
    "/api/Account/users/{id}": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersByIdGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "$ref": "#/definitions/UserViewModel" }
          }
        }
      },
      "put": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersByIdPut",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "user",
            "in": "body",
            "required": false,
            "schema": { "$ref": "#/definitions/UserEditViewModel" }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      },
      "delete": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersByIdDelete",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "$ref": "#/definitions/UserViewModel" }
          }
        }
      },
      "patch": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersByIdPatch",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "patch",
            "in": "body",
            "required": false,
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/Operation" }
            }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      }
    },
    "/api/Account/users/username/{userName}": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersUsernameByUserNameGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "parameters": [
          {
            "name": "userName",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "$ref": "#/definitions/UserViewModel" }
          }
        }
      }
    },
    "/api/Account/users": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/UserViewModel" }
            }
          }
        }
      },
      "post": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersPost",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "user",
            "in": "body",
            "required": false,
            "schema": { "$ref": "#/definitions/UserEditViewModel" }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      }
    },
    "/api/Account/users/{page}/{pageSize}": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersByPageByPageSizeGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "parameters": [
          {
            "name": "page",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "pageSize",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/UserViewModel" }
            }
          }
        }
      }
    },
    "/api/Account/users/unblock/{id}": {
      "put": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersUnblockByIdPut",
        "consumes": [],
        "produces": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": { "200": { "description": "Success" } }
      }
    },
    "/api/Account/users/me/preferences": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersMePreferencesGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "type": "string" }
          }
        }
      },
      "put": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountUsersMePreferencesPut",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "data",
            "in": "body",
            "required": false,
            "schema": { "type": "string" }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      }
    },
    "/api/Account/roles/{id}": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountRolesByIdGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "$ref": "#/definitions/RoleViewModel" }
          }
        }
      },
      "put": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountRolesByIdPut",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "role",
            "in": "body",
            "required": false,
            "schema": { "$ref": "#/definitions/RoleViewModel" }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      },
      "delete": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountRolesByIdDelete",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "$ref": "#/definitions/RoleViewModel" }
          }
        }
      }
    },
    "/api/Account/roles/name/{name}": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountRolesNameByNameGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "$ref": "#/definitions/RoleViewModel" }
          }
        }
      }
    },
    "/api/Account/roles": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountRolesGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/RoleViewModel" }
            }
          }
        }
      },
      "post": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountRolesPost",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "role",
            "in": "body",
            "required": false,
            "schema": { "$ref": "#/definitions/RoleViewModel" }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      }
    },
    "/api/Account/roles/{page}/{pageSize}": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountRolesByPageByPageSizeGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "parameters": [
          {
            "name": "page",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "pageSize",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/RoleViewModel" }
            }
          }
        }
      }
    },
    "/api/Account/permissions": {
      "get": {
        "tags": [ "Account" ],
        "operationId": "ApiAccountPermissionsGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/PermissionViewModel" }
            }
          }
        }
      }
    },
    "/api/Customer": {
      "get": {
        "tags": [ "Customer" ],
        "operationId": "ApiCustomerGet",
        "consumes": [],
        "produces": [],
        "responses": { "200": { "description": "Success" } }
      },
      "post": {
        "tags": [ "Customer" ],
        "operationId": "ApiCustomerPost",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "value",
            "in": "body",
            "required": false,
            "schema": { "type": "string" }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      }
    },
    "/api/Customer/throw": {
      "get": {
        "tags": [ "Customer" ],
        "operationId": "ApiCustomerThrowGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": { "$ref": "#/definitions/CustomerViewModel" }
            }
          }
        }
      }
    },
    "/api/Customer/email": {
      "get": {
        "tags": [ "Customer" ],
        "operationId": "ApiCustomerEmailGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "type": "string" }
          }
        }
      }
    },
    "/api/Customer/{id}": {
      "get": {
        "tags": [ "Customer" ],
        "operationId": "ApiCustomerByIdGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": { "type": "string" }
          }
        }
      },
      "put": {
        "tags": [ "Customer" ],
        "operationId": "ApiCustomerByIdPut",
        "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ],
        "produces": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "value",
            "in": "body",
            "required": false,
            "schema": { "type": "string" }
          }
        ],
        "responses": { "200": { "description": "Success" } }
      },
      "delete": {
        "tags": [ "Customer" ],
        "operationId": "ApiCustomerByIdDelete",
        "consumes": [],
        "produces": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": { "200": { "description": "Success" } }
      }
    },
    "/api/Home": {
      "get": {
        "tags": [ "Home" ],
        "operationId": "ApiHomeGet",
        "consumes": [],
        "produces": [ "text/plain", "application/json", "text/json" ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "type": "array",
              "items": { "type": "string" }
            }
          }
        }
      }
    }
  },
  "definitions": {
    "UserViewModel": {
      "required": [ "userName", "email" ],
      "type": "object",
      "properties": {
        "id": { "type": "string" },
        "userName": {
          "maxLength": 200,
          "minLength": 2,
          "type": "string"
        },
        "fullName": { "type": "string" },
        "email": {
          "maxLength": 200,
          "minLength": 0,
          "type": "string"
        },
        "jobTitle": { "type": "string" },
        "phoneNumber": { "type": "string" },
        "configuration": { "type": "string" },
        "isEnabled": { "type": "boolean" },
        "isLockedOut": { "type": "boolean" },
        "roles": {
          "type": "array",
          "items": { "type": "string" }
        }
      }
    },
    "UserEditViewModel": {
      "required": [ "userName", "email" ],
      "type": "object",
      "properties": {
        "currentPassword": { "type": "string" },
        "newPassword": {
          "minLength": 6,
          "type": "string"
        },
        "isLockedOut": { "type": "boolean" },
        "id": { "type": "string" },
        "userName": {
          "maxLength": 200,
          "minLength": 2,
          "type": "string"
        },
        "fullName": { "type": "string" },
        "email": {
          "maxLength": 200,
          "minLength": 0,
          "type": "string"
        },
        "jobTitle": { "type": "string" },
        "phoneNumber": { "type": "string" },
        "configuration": { "type": "string" },
        "isEnabled": { "type": "boolean" },
        "roles": {
          "type": "array",
          "items": { "type": "string" }
        }
      }
    },
    "Operation": {
      "type": "object",
      "properties": {
        "value": { "type": "object" },
        "path": { "type": "string" },
        "op": { "type": "string" },
        "from": { "type": "string" }
      }
    },
    "RoleViewModel": {
      "required": [ "name" ],
      "type": "object",
      "properties": {
        "id": { "type": "string" },
        "name": {
          "maxLength": 200,
          "minLength": 2,
          "type": "string"
        },
        "description": { "type": "string" },
        "usersCount": {
          "format": "int32",
          "type": "integer"
        },
        "permissions": {
          "type": "array",
          "items": { "$ref": "#/definitions/PermissionViewModel" }
        }
      }
    },
    "PermissionViewModel": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "value": { "type": "string" },
        "groupName": { "type": "string" },
        "description": { "type": "string" }
      }
    },
    "CustomerViewModel": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": { "type": "string" },
        "email": { "type": "string" },
        "phoneNumber": { "type": "string" },
        "address": { "type": "string" },
        "city": { "type": "string" },
        "gender": { "type": "string" },
        "orders": {
          "type": "array",
          "items": { "$ref": "#/definitions/OrderViewModel" }
        }
      }
    },
    "OrderViewModel": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "discount": {
          "format": "double",
          "type": "number"
        },
        "comments": { "type": "string" }
      }
    }
  },
  "securityDefinitions": {
    "BearerAuth": {
      "name": "Authorization",
      "in": "header",
      "type": "apiKey",
      "description": "Login with your bearer authentication token. e.g. Bearer <auth-token>"
    }
  }
}

 

You Might Also Like...

2 Comments

  • Reply
    Azzam
    October 7, 2018 at 9:01 pm

    Can you eliminate elaborate a little more on how to use different backend? Thanks

  • Reply
    bnrashed
    July 24, 2019 at 2:18 pm

    HI Eden
    can i use this temp with MySQL in replace of SQL server with Entity framework core

Leave a Reply