From 7bd4856134c37c31e19a49778bbcd6b28efe98c2 Mon Sep 17 00:00:00 2001 From: yuriy Date: Wed, 25 Jan 2023 10:46:20 +0300 Subject: [PATCH] swagger file --- README.md | 5 +- swagger.yml | 1440 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1444 insertions(+), 1 deletion(-) create mode 100644 swagger.yml diff --git a/README.md b/README.md index e722bc1..970a91c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ -# ApiV1 +# HRBox API + + + diff --git a/swagger.yml b/swagger.yml new file mode 100644 index 0000000..6464135 --- /dev/null +++ b/swagger.yml @@ -0,0 +1,1440 @@ +swagger: '2.0' +info: + description: | + HRBox mobile app API + + Since HRBOX is multitenant application you need to find out domain and endpoint to start working with this API + + (Option 1) QR-code will contain this info - hrbox://bind/?url={url} where {url} will be url to /mobile/bind method. You should make POST request to this URL sending "device" param in body just like described in /mobile/bind method. In the response you will find endpoint + + (Option 2) Manual bind - user will provice you with {domain} {email} and {password} and you should send this info to https://{domain}/api/v2/mobile/manual-bind like described in /mobile/manual-bind method. In the response you will find endpoint + + Once you will get endpoint and tenantId, use it in every request you make, using endpoint as base path, and passing tenantId as header "x-hrbox-tenant-id: {tenantId}" + + To authorize you session, make call to {endpoint}/mobile/auth sending "x-hrbox-tenant-id: {tenantId}" header, and sending body that described in /mobile/auth method + + To sign your requests with session id, pass folowing headers with each request: + + x-hrbox-tenant-id: {tenantId} + x-hrbox-device-id: {deviceId} + x-hrbox-session-id: {sessionId} + x-hrbox-session-code: {sessionSecret} + x-hrbox-embed: true + + {tenantId} - you will get this form /mobile/auth or /mobile/bind methods + {sessionId} - you will get this form /mobile/auth method + {sessionSecret} - you will get this form /mobile/auth method + the last one (x-hrbox-embed) is for opening web pages in WebView to remove website footer and header + + version: 2.0.0 + title: HRbox Mobile API + contact: + email: yuriy@hrbox.io +# host: api.hrbox.io +# basePath: /api/v2 +tags: + - name: mobile + description: Binding device and authorizing + - name: account + description: Methods for getting current user data (assignments, notifications etc.) + - name: department + description: Methods for browsing and searching through Org Structure + - name: user + description: Methods for getting user and employment information + - name: article + description: Methods News, Categories and Articles + - name: postcard + description: Methods for working with postcards + - name: dashboard + description: Methods for getting dashboards and widgets data +# schemes: +# - http +paths: + /mobile/bind/{id}/{token}: + post: + tags: + - mobile + summary: Bind device by token. This URL will be taken by parsing QR code + operationId: mobileBind + consumes: + - application/json + produces: + - application/json + parameters: + - name: id + in: path + description: ID + required: true + type: string + - name: token + in: path + description: ID + required: true + type: string + - in: body + name: body + description: Device info + required: true + schema: + type: object + properties: + device: + $ref: '#/definitions/device' + responses: + 200: + description: successful operation + schema: + type: object + properties: + accountSecret: + $ref: '#/definitions/accountSecret' + tenantInfo: + $ref: '#/definitions/tenantInfo' + 400: + description: Invalid input + 403: + description: Invalid id or token + + /mobile/request-two-factor: + post: + tags: + - mobile + summary: Запросить код двухфакторной аутентификации. Код будет выслан если она включена. + operationId: mobileRequestTwoFactor + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: body + description: Email Password and Device info. Also Code if 2FAuth enabled + required: true + schema: + type: object + properties: + email: + type: string + format: email + password: + type: string + format: password + responses: + 200: + description: Если Двухфакторная аутентификация включена и код был выслан то в ответе будет codeRequired = true иначе codeRequired=false + schema: + type: object + properties: + codeRequired: + type: boolean + tenantInfo: + $ref: '#/definitions/tenantInfo' + delayTime: + type: number + + 400: + description: Invalid input + 403: + description: Invalid Email or Password + 500: + description: Server Error + + /mobile/manual-bind: + post: + tags: + - mobile + summary: Bind device by user's emial and password + operationId: mobileManualBind + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: body + description: Email Password and Device info. Also Code if 2FAuth enabled + required: true + schema: + type: object + properties: + email: + type: string + format: email + password: + type: string + format: password + code: + type: string + format: password + description: two-factor authorization code + device: + $ref: '#/definitions/device' + responses: + 200: + description: successful operation + schema: + type: object + properties: + accountSecret: + $ref: '#/definitions/accountSecret' + tenantInfo: + $ref: '#/definitions/tenantInfo' + 400: + description: Invalid input + 403: + description: Invalid Email or Password + 500: + description: Server Error + + + /mobile/auth: + post: + tags: + - mobile + summary: Authorize user by accountSecret that you got from /mobile/bind or /mobile/manual-bind + operationId: mobileAuth + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: body + description: secret, userId and deviceId + required: true + schema: + type: object + properties: + secret: + type: string + format: email + userId: + type: string + deviceId: + type: string + responses: + 200: + description: successful authorization + schema: + type: object + properties: + sessionId: + type: string + sessionSecret: + type: string + tenantInfo: + $ref: '#/definitions/tenantInfo' + 400: + description: Invalid input + 401: + description: Authorization failed, secret is invalid + 404: + description: Device not found + 500: + description: Server Error + + /mobile/save-push-token: + post: + tags: + - mobile + summary: Save Firebase push token to server + operationId: mobileSavePushToken + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: body + description: token - the token that you get from Firebase Cloud Messaging. Provider should be "firebase", not other providers supported for now. deviceId - same device id that you used in bind or auth + required: true + schema: + type: object + properties: + token: + type: string + provider: + type: string + default: firebase + deviceId: + type: string + responses: + 200: + description: push token successfully saved + schema: + type: object + properties: + sucess: + type: boolean + default: true + 400: + description: Invalid input + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + + /mobile/unbind: + post: + tags: + - mobile + summary: Unbind device by deviceId + operationId: mobileUnbind + consumes: + - application/json + produces: + - application/json + parameters: + - name: deviceId + in: query + description: ID + required: true + type: string + responses: + 200: + description: successful operation + schema: + type: object + properties: + tenantInfo: + $ref: '#/definitions/tenantInfo' + 400: + description: Invalid input + 403: + description: Invalid Email or Password + 500: + description: Server Error + + /user/profile: + get: + tags: + - user + summary: Get User's profile info + operationId: userProfile + consumes: + - application/json + produces: + - application/json + parameters: + - name: id + in: query + description: User ID + required: true + type: string + responses: + 200: + description: User profile data + schema: + $ref: '#/definitions/userProfile' + 400: + description: Invalid input (malformed id) + 401: + description: Unathorized request + 403: + description: Unathorized request + 404: + description: User not found + 500: + description: Server Error + + /account/status-text: + post: + tags: + - account + summary: Set user's status text + operationId: accountStatusText + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: body + description: user's status text + required: true + schema: + type: object + properties: + activeTypes: + type: string + responses: + 200: + description: status text saved + schema: + type: object + properties: + activeTypes: + type: string + 400: + description: Invalid input + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + + /account/status-active-types: + post: + tags: + - account + summary: Set user's active statuses + operationId: accountStatusActiveTypes + consumes: + - application/json + produces: + - application/json + parameters: + - in: body + name: body + description: user's active statuses + required: true + schema: + type: object + properties: + activeTypes: + type: array + items: + type: string + responses: + 200: + description: user's active statuses saved + schema: + type: object + properties: + statusTypes: + type: array + items: + type: string + 400: + description: Invalid input + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + + /notifications/pushes: + get: + tags: + - notifications + summary: Push notifications index. Infinite scroll done by paginating with {page} parameter + operationId: notificationPushes + consumes: + - application/json + produces: + - application/json + parameters: + - name: per-page + in: query + description: How many items return in one page + type: integer + default: 10 + - name: page + in: query + description: Current page + type: integer + default: 1 + responses: + 200: + description: Returns array of push notifications and pagination related data + schema: + type: object + properties: + _meta: + $ref: '#/definitions/meta' + data: + type: array + items: + $ref: '#/definitions/notification' + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + + /notifications/mark-seen: + post: + tags: + - notifications + summary: Mark notification as seen + operationId: notificationMarkSeen + consumes: + - application/json + produces: + - application/json + parameters: + - in: query + name: notificationId + description: notificationId + required: true + type: string + format: uuid + responses: + 200: + description: Notification marked as seen + schema: + type: object + properties: + badge: + type: number + description: unseen notification count + date: + type: string + format: date + 400: + description: Invalid input + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + /notifications/mark-seen-all: + post: + tags: + - notifications + summary: Mark all notifications as seen + operationId: notificationMarkSeenAll + consumes: + - application/json + produces: + - application/json + responses: + 200: + description: All marked as seen + schema: + type: object + properties: + badge: + type: number + description: unseen notification count + date: + type: string + format: date + 400: + description: Invalid input + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + + /department/tree-node: + get: + tags: + - department + summary: Get departments inner struture + operationId: departmentTreeNode + consumes: + - application/json + produces: + - application/json + parameters: + - name: id + in: query + description: Parent department ID + type: string + responses: + 200: + description: Department children (Departments and Users) type="user" - means user node, type="department" - means department node. [isBoss], [position] are "user" only properties. [employemntsCount], [empty] - are "department" only properties. + schema: + type: object + properties: + id: + type: string + format: uuid + name: + type: string + default: "Department name" + path: + type: string + default: "Department hierarchy path" + items: + type: array + items: + $ref: '#/definitions/structureItem' + 400: + description: Invalid input (malformed id) + 401: + description: Unathorized request + 403: + description: Unathorized request + 404: + description: Department not found + 500: + description: Server Error + #["office"] + /department/search: + get: + tags: + - department + summary: Search Org Structure for matching users and departments + operationId: departmentSearch + consumes: + - application/json + produces: + - application/json + parameters: + - name: q + in: query + description: Search query string + type: string + responses: + 200: + description: Search results (Departments and Users) type="user" - means user node, type="department" - means department node. [isBoss], [position] are "user" only properties. [employemntsCount], [empty] - are "department" only properties. + schema: + type: object + properties: + q: + type: string + default: "Search query string" + items: + type: array + items: + $ref: '#/definitions/structureItem' + 400: + description: Invalid input + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + + + /postcard/user-view: + get: + tags: + - postcard + summary: Details about postcard sent to user + operationId: postcardUserView + consumes: + - application/json + produces: + - application/json + parameters: + - name: id + in: query + description: UserPostcard item ID + required: true + type: string + responses: + 200: + description: Postcard details + schema: + $ref: '#/definitions/userPostcard' + 400: + description: Invalid input (malformed id) + 401: + description: Unathorized request + 403: + description: Unathorized request + 404: + description: Postcard not found + 500: + description: Server Error + + /article/news: + get: + tags: + - article + summary: News index. Infinite scroll done by paginating with {page} parameter + operationId: articleNews + consumes: + - application/json + produces: + - application/json + parameters: + - name: per-page + in: query + description: How many items return in one page + type: integer + default: 10 + - name: page + in: query + description: Current page + type: integer + default: 1 + responses: + 200: + description: Returns array of news and pagination related data + schema: + type: object + properties: + _meta: + $ref: '#/definitions/meta' + data: + type: array + items: + $ref: '#/definitions/article' + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + + /article/category: + get: + tags: + - article + summary: Browse or search catalog categories. Displays catalog items which can be category or article + operationId: articleCategory + consumes: + - application/json + produces: + - application/json + parameters: + - name: id + in: query + description: ID of category + type: string + - name: q + in: query + description: Search query string + type: string + responses: + 200: + description: Contents of category or search results (categories and articles). entity="category" - means category node, entity="article" - means article node. Category id can be used in /article/category method to browse its content + schema: + type: object + properties: + category: + type: object + description: Current category + properties: + id: + type: string + format: uuid + title: + type: string + default: "Current category name" + q: + type: string + default: "Search query string" + items: + type: array + items: + $ref: '#/definitions/catalogItem' + 400: + description: Invalid input + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + + /dashboard: + get: + tags: + - dashboard + summary: Get dashboards and widgets by specifying needed widgets through get parameter. Personal user feed widgets starts with "my" prefix. Global company feed widgets starts with "upd" prefix + operationId: dashboard + consumes: + - application/json + produces: + - application/json + parameters: + - name: widgets + in: query + description: names of required widgets separated with comma. For example - widgets=myLms,mySurvey,myAchievements,myTeam,myFavorites,myPostcards + type: string + enum: + - myLms + - mySurvey + - myAchievements + - myTeam + - myFavorites + - myPostcards + - updNews + - updVoting + - updIdeas + - updAchievements + - updBirthday + - updNewbies + - updBooks + - name: info + in: query + description: names of required info separated with comma. For example - info=profileBrief,notificationsBadge. notificationsBadge - Current notification bell badge value. profileBrief - Current user brief info + type: string + enum: + - profileBrief + - notificationsBadge + responses: + 200: + description: Rreturns all the dashboard data about requested widgets. In responce object only requested info/widgets keys will be presented. If widget is not available for current user, this widget will not exists in responce of will be null + schema: + type: object + properties: + profileBrief: + $ref: '#/definitions/profileBrief' + description: Current user brief info + notificationsBadge: + type: integer + default: 0 + description: Current notification bell badge value + widgets: + type: object + properties: + myLms: + description: User feed - Assigned test and courses + $ref: '#/definitions/dashboardWidget' + mySurvey: + description: User feed - Assigned surveys + $ref: '#/definitions/dashboardWidget' + myAchievements: + description: User feed - Assigned achievements + $ref: '#/definitions/dashboardWidget' + myTeam: + description: User feed - Teammates of current user + $ref: '#/definitions/dashboardWidget' + myFavorites: + description: User feed - Favorites (in development, not used) + $ref: '#/definitions/dashboardWidget' + myPostcards: + description: User feed - Recevied postcards + $ref: '#/definitions/dashboardWidget' + updNews: + description: Company feed - New news + $ref: '#/definitions/dashboardWidget' + updVoting: + description: Company feed - New contests + $ref: '#/definitions/dashboardWidget' + updIdeas: + description: Company feed - New ideas + $ref: '#/definitions/dashboardWidget' + updAchievements: + description: Company feed - New achievements achieved by users + $ref: '#/definitions/dashboardWidget' + updBirthday: + description: Company feed - Users that have birthday today + $ref: '#/definitions/dashboardWidget' + updNewbies: + description: Company feed - Recently employed employees + $ref: '#/definitions/dashboardWidget' + updBooks: + description: Company feed - New books in library + $ref: '#/definitions/dashboardWidget' + 400: + description: Invalid input + 401: + description: Unathorized request + 403: + description: Unathorized request + 500: + description: Server Error + +definitions: + + accountSecret: + type: object + properties: + userId: + type: string + format: uuid + secret: + type: string + format: uuid + tenantId: + type: integer + format: int64 + default: 101 + xml: + name: accountSecret + + tenantInfo: + type: object + properties: + endpoint: + type: string + default: https://demo.hrbox.io/api/v2 + tenantId: + type: integer + format: int64 + default: 101 + tenantName: + type: string + default: Demo Company + domain: + type: string + default: demo.hrbox.io + brandColor: + type: string + default: #FF0000 + logoUrl: + type: string + default: https://demo.hrbox.io/logo.png + logoSqUrl: + type: string + default: https://demo.hrbox.io/logo-sq.png + xml: + name: tenantInfo + + userProfile: + type: object + properties: + id: + type: string + format: uuid + name: + type: string + default: "Chintan Rana" + first_name: + type: string + default: "Chintan" + last_name: + type: string + default: "Rana" + middle_name: + type: string + default: null + faceUrl: + type: string + default: "https://pentest.hrbox.io/file/user-face/46f838be-1b51-43ea-988e-fce2f73f6302/300.jpg" + iconUrl: + type: string + default: "https://pentest.hrbox.io/file/user-face/46f838be-1b51-43ea-988e-fce2f73f6302/60.jpg" + reg_status_id: + type: integer + default: 3 + gender_id: + type: integer + default: 1 + country_id: + type: string + default: "ru" + timezone_id: + type: string + default: "Europe/Moscow" + city_id: + type: string + default: "BBDAEADC-FCCA-ABCB-AEFE-FBDCEAFAAEDB" + isBoss: + type: boolean + default: false + is_external: + type: boolean + default: false + bithdayDate: + type: string + default: "29 of May" + cityName: + type: string + default: "Moscow" + region: + type: string + default: "Arizona" + office: + type: string + default: "106a" + description: Office number + employment: + $ref: '#/definitions/employment' + emails: + type: array + items: + $ref: '#/definitions/contact' + phones: + type: array + items: + $ref: '#/definitions/contact' + messengers: + type: array + items: + $ref: '#/definitions/contact' + achievements: + type: array + items: + $ref: '#/definitions/achievement' + userGroupsVisible: + type: array + items: + $ref: '#/definitions/userGroup' + + structureItem: + type: object + properties: + type: + type: string + enum: + - department + - user + id: + type: string + format: uuid + name: + type: string + default: "Name of department or user" + isBoss: + type: boolean + default: false + description: For user only + iconUrl: + type: string + default: "https://pentest.hrbox.io/file/resize/60x0/299c6542-c541-4296-a528-90f08d835b8b.png" + description: User's face uamge url + position: + type: string + description: User's employment position + employmentsCount: + type: integer + default: 0 + description: Amount of employees in department + empty: + type: boolean + default: false + description: If department is empty + + catalogItem: + type: object + properties: + entity: + type: string + description: Tells whether its category or article + enum: + - category + - article + id: + type: string + format: uuid + title: + type: string + url: + type: string + description: + type: string + thumbUrl: + type: string + description: Thumbnail image url + status_id: + type: integer + description: 1 - active, 2 - disabledy, 3 - deleted + default: 1 + enum: + - 1 + - 2 + - 3 + thumb_style_id: + type: integer + description: Type of thumb 1 - image + picture, 2 - text only, 3 - image only (square image) + default: 1 + enum: + - 1 + - 2 + - 3 + tags: + type: array + items: + $ref: '#/definitions/tag' + + article: + type: object + properties: + id: + type: string + format: uuid + title: + type: string + url: + type: string + imageUrl: + type: string + description: + type: string + thumb_style_id: + type: integer + description: Type of thumb 1 - image + picture, 2 - text only, 3 - image only (square image) + default: 1 + enum: + - 1 + - 2 + - 3 + post_type_id: + type: integer + description: Post type 2 - only url (redirect to another page), 3 - page with actual content + default: 2 + enum: + - 2 + - 3 + created_at: + type: string + format: datetime + publish_at: + type: string + format: datetime + description: Date and time from when article available to view by users + updated_at: + type: string + format: datetime + status_id: + type: integer + description: 1 - active, 2 - disabledy, 3 - deleted + default: 1 + enum: + - 1 + - 2 + - 3 + likesCount: + type: integer + viewsCount: + type: integer + commentsCount: + type: integer + tags: + type: array + items: + $ref: '#/definitions/tag' + + tag: + type: object + properties: + id: + type: string + format: uuid + name: + type: string + + meta: + type: object + properties: + totalCount: + type: integer + default: 0 + description: Total items count in database + pageCount: + type: integer + default: 1 + description: How much pages there are with current perPage value + currentPage: + type: integer + default: 1 + description: Current page number + perPage: + type: integer + default: 10 + description: How much items per page + + contact: + type: object + properties: + value: + type: string + default: "dev@hrbox.io" + description: Email of phone number + type: + type: string + default: "corporate" + enum: + - corporate + - personal + readonly: + type: boolean + default: true + + notification: + type: object + properties: + id: + type: string + format: uuid + subject: + type: string + text: + type: string + params: + type: object + properties: + url: + type: string + default: "Url that should be opened if user taps on Notification, and there are no any other logic exists for this type of notification" + description: Property os optional. Url that should be opened if user taps on Notification, and there are no any other logic exists for this type of notification + imageUrl: + type: string + default: "Property os optional" + description: Property is optional + notificationTypeId: + type: string + enum: + - user-postcard + - two-factor + - etc. + description: Serverside identifier of notification type. Sme logic can depend on it + created_at: + type: string + format: datetime + seen_at: + type: string + format: datetime + description: if not null - notification was viewed by user + + userPostcard: + type: object + properties: + id: + type: string + format: uuid + user_id: + type: string + format: uuid + postcard_id: + type: string + format: uuid + text: + type: string + status_id: + type: integer + description: 1 - active, 2 - disabled, 3 - deleted + enum: + - 1 + - 2 + - 3 + settings: + type: object + properties: + hide_signature: + type: boolean + description: Is this postcard anonymous + status_view_id: + type: integer + description: 1 - visible to everyone, 2 - visible only to recipient + enum: + - 1 + - 2 + created_at: + type: string + format: date + senderId: + type: string + format: uuid? + senderName: + type: string + default: "Alex" + senderIconUrl: + type: string + description: Sender user's face icon + imageUrl: + description: Postcard's iamge + type: string + is_seen: + type: boolean + description: Did user seen this postcard? + + userGroup: + type: object + properties: + id: + type: string + format: uuid + name: + type: string + default: Managers + description: + type: string + default: "All the managers" + iconUrl: + type: string + default: "https://pentest.hrbox.io/file/resize/60x0/299c6542-c541-4296-a528-90f08d835b8b.png" + thumbUrl: + type: string + default: "https://pentest.hrbox.io/file/resize/400x0/299c6542-c541-4296-a528-90f08d835b8b.png" + + achievement: + type: object + properties: + id: + type: string + format: uuid + title: + type: string + default: Best sales of Year + description: + type: string + default: One who sold most this year + imageUrl: + type: string + default: "https://pentest.hrbox.io/file/resize/400x0/299c6542-c541-4296-a528-90f08d835b8b.png" + iconUrl: + type: string + default: "https://pentest.hrbox.io/file/resize/60x0/299c6542-c541-4296-a528-90f08d835b8b.png" + + employment: + type: object + properties: + id: + type: string + format: uuid + experience: + type: string + default: 1 year 2 months + position: + type: string + default: Chief Salesman + department: + $ref: '#/definitions/departmentLabel' + chiefUser: + $ref: '#/definitions/userLabel' + + departmentLabel: + type: object + properties: + id: + type: string + format: uuid + name: + type: string + default: Marketing + departmentPath: + type: string + default: "Company / Sales / Marketing" + + userLabel: + type: object + properties: + id: + type: string + format: uuid + name: + type: string + default: Alex + faceUrl: + type: string + default: "https://pentest.hrbox.io/file/user-face/46f838be-1b51-43ea-988e-fce2f73f6302/300.jpg" + iconUrl: + type: string + default: "https://pentest.hrbox.io/file/user-face/46f838be-1b51-43ea-988e-fce2f73f6302/60.jpg" + device: + type: object + properties: + id: + type: string + format: uuid + name: + type: string + default: Alex's iPhone + model: + type: string + default: iPhone + os: + type: string + default: iOS + osVersion: + type: string + default: 14.0.1 + xml: + name: device + + profileBrief: + type: object + properties: + userId: + type: string + format: uuid + name: + type: string + position: + type: string + experience: + type: string + departmentName: + type: string + photoUrl: + type: string + faceUrl: + type: string + iconUrl: + type: string + statusText: + type: string + statusTypes: + type: array + items: + $ref: '#/definitions/profileStatusType' + xml: + name: profileBrief + + profileStatusType: + type: object + properties: + id: + type: string + label: + type: string + enabled: + type: boolean + xml: + name: item + + dashboardWidget: + type: object + properties: + ref: + type: string + label: + type: string + url: + type: string + totalCount: + type: integer + format: int64 + items: + type: array + items: + $ref: '#/definitions/dashboardWidgetItem' + xml: + name: widgetId + + dashboardWidgetItem: + type: object + properties: + id: + type: string + format: uuid + itemTitle: + type: string + itemUrl: + type: string + itemImageUrl: + type: string + itemDate: + type: string + format: datetime + itemTip: + type: string + itemEntityId: + type: integer + format: int64 + actorId: + type: string + format: uuid + actorName: + type: string + actorIconUrl: + type: string + actionTitle: + type: string + actionStyle: + type: string + description: define color + enum: + - info + - success + - warning + - danger + xml: + name: item + +# Added by API Auto Mocking Plugin +# host: api.hrbox.io +# basePath: /api/v2 +schemes: + - https +# Added by API Auto Mocking Plugin +host: virtserver.swaggerhub.com +basePath: /hrbox.io/Mobile/2.0.0 \ No newline at end of file