diff --git a/package-lock.json b/package-lock.json index 989a1507..59555a28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "vue": "^3.0.7", "vue-i18n": "^9.0.0", "vue-router": "^4.0.4", + "vue3-autocounter": "^1.0.6", "vue3-markdown-it": "^1.0.7", "vuex": "^4.0.0", "vuex-oidc": "^3.10.2" @@ -3687,6 +3688,17 @@ "vue": "^3.0.0" } }, + "node_modules/vue3-autocounter": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vue3-autocounter/-/vue3-autocounter-1.0.6.tgz", + "integrity": "sha512-jOgCD2WaOjt/tOAAGKDm2DTyQRdKyfqJv5ElUz/vR0ZJgUd4yDd6UX6+2YU3LQpY4qoFNZkzLloAfALAqK041g==", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "vue": "^3.0.5" + } + }, "node_modules/vue3-markdown-it": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/vue3-markdown-it/-/vue3-markdown-it-1.0.9.tgz", @@ -6665,6 +6677,12 @@ "@vue/devtools-api": "^6.0.0-beta.14" } }, + "vue3-autocounter": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/vue3-autocounter/-/vue3-autocounter-1.0.6.tgz", + "integrity": "sha512-jOgCD2WaOjt/tOAAGKDm2DTyQRdKyfqJv5ElUz/vR0ZJgUd4yDd6UX6+2YU3LQpY4qoFNZkzLloAfALAqK041g==", + "requires": {} + }, "vue3-markdown-it": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/vue3-markdown-it/-/vue3-markdown-it-1.0.9.tgz", diff --git a/package.json b/package.json index cd9d8d4e..c85d2ce4 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "vue": "^3.0.7", "vue-i18n": "^9.0.0", "vue-router": "^4.0.4", + "vue3-autocounter": "^1.0.6", "vue3-markdown-it": "^1.0.7", "vuex": "^4.0.0", "vuex-oidc": "^3.10.2" diff --git a/public/feature-icons/discuss.png b/public/feature-icons/discuss.png new file mode 100644 index 00000000..7a33ef61 Binary files /dev/null and b/public/feature-icons/discuss.png differ diff --git a/public/feature-icons/github.png b/public/feature-icons/github.png new file mode 100644 index 00000000..ea6ff545 Binary files /dev/null and b/public/feature-icons/github.png differ diff --git a/public/feature-icons/vote.png b/public/feature-icons/vote.png new file mode 100644 index 00000000..dfd208f4 Binary files /dev/null and b/public/feature-icons/vote.png differ diff --git a/src/main.ts b/src/main.ts index 97f6bffb..42569bbb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,6 +7,8 @@ import App from './App.vue'; import messages from '@intlify/vite-plugin-vue-i18n/messages'; import VueMarkdownIt from 'vue3-markdown-it'; +import Vue3Autocounter from 'vue3-autocounter'; + import dayjs from 'dayjs'; import localizedFormat from 'dayjs/plugin/localizedFormat'; import relativeTime from 'dayjs/plugin/relativeTime'; @@ -130,4 +132,6 @@ app.component("ProgressBar", ProgressBar); app.component('Message', Message); app.component('Timeline', Timeline); +app.component('Autocounter', Vue3Autocounter); + app.mount('#app'); diff --git a/src/types/bazaar-api.ts b/src/types/bazaar-api.ts index 44e57309..e43dfb07 100644 --- a/src/types/bazaar-api.ts +++ b/src/types/bazaar-api.ts @@ -29,20 +29,17 @@ export interface Statistic { numberOfVotes?: number; } -export interface Attachment { +export interface Category { /** @format int32 */ id?: number; name: string; - description?: string; - mimeType: string; - identifier: string; - fileUrl: string; + description: string; /** * @format int32 * @min 0 */ - requirementId?: number; + projectId?: number; creator?: User; /** @format date-time */ @@ -50,6 +47,17 @@ export interface Attachment { /** @format date-time */ lastUpdatedDate?: string; + + /** @format date-time */ + lastActivity?: string; + + /** @format int32 */ + numberOfRequirements?: number; + + /** @format int32 */ + numberOfFollowers?: number; + userContext?: UserContext; + additionalProperties?: Record; } export interface User { @@ -75,17 +83,35 @@ export interface User { email?: string; } -export interface Category { +export interface UserContext { + /** The role the user has within the project. Only returned when requesting project resources. */ + userRole?: "ProjectMember" | "ProjectManager" | "ProjectAdmin"; + + /** Only returned when requesting requirement resources. */ + userVoted?: "UP_VOTE" | "DOWN_VOTE" | "NO_VOTE"; + isFollower: boolean; + + /** Only returned when requesting requirement resources. */ + isDeveloper?: boolean; + + /** Only returned when requesting requirement resources. */ + isContributor?: boolean; +} + +export interface Attachment { /** @format int32 */ id?: number; name: string; - description: string; + description?: string; + mimeType: string; + identifier: string; + fileUrl: string; /** * @format int32 * @min 0 */ - projectId?: number; + requirementId: number; creator?: User; /** @format date-time */ @@ -93,32 +119,6 @@ export interface Category { /** @format date-time */ lastUpdatedDate?: string; - - /** @format date-time */ - lastActivity?: string; - - /** @format int32 */ - numberOfRequirements?: number; - - /** @format int32 */ - numberOfFollowers?: number; - userContext?: UserContext; - additionalProperties?: Record; -} - -export interface UserContext { - /** The role the user has within the project. Only returned when requesting project resources. */ - userRole?: "ProjectMember" | "ProjectManager" | "ProjectAdmin"; - - /** Only returned when requesting requirement resources. */ - userVoted?: "UP_VOTE" | "DOWN_VOTE" | "NO_VOTE"; - isFollower: boolean; - - /** Only returned when requesting requirement resources. */ - isDeveloper?: boolean; - - /** Only returned when requesting requirement resources. */ - isContributor?: boolean; } export interface Comment { @@ -191,7 +191,7 @@ export interface Project { export interface Requirement { /** @format int32 */ id?: number; - name?: string; + name: string; description: string; /** @format date-time */ @@ -337,6 +337,23 @@ export namespace Version { } } +export namespace UserStatistics { + /** + * No description + * @name GetUserStatistics + * @summary This method allows to retrieve statistics about the users of the Requirements Bazaar. + * @request GET:/user-statistics + * @secure + */ + export namespace GetUserStatistics { + export type RequestParams = {}; + export type RequestQuery = { start?: string; end?: string }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = Statistic; + } +} + export namespace Statistics { /** * No description @@ -371,54 +388,6 @@ export namespace Notifications { } } -export namespace Attachments { - /** - * No description - * @tags attachments - * @name CreateAttachment - * @summary This method allows to create a new attachment. - * @request POST:/attachments - * @secure - */ - export namespace CreateAttachment { - export type RequestParams = {}; - export type RequestQuery = {}; - export type RequestBody = Attachment; - export type RequestHeaders = {}; - export type ResponseBody = Attachment; - } - /** - * No description - * @tags attachments - * @name GetAttachment - * @summary This method allows to retrieve a certain attachment - * @request GET:/attachments/{attachmentId} - * @secure - */ - export namespace GetAttachment { - export type RequestParams = { attachmentId: number }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = Attachment; - } - /** - * No description - * @tags attachments - * @name DeleteAttachment - * @summary This method deletes a specific attachment. - * @request DELETE:/attachments/{attachmentId} - * @secure - */ - export namespace DeleteAttachment { - export type RequestParams = { attachmentId: number }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = Attachment; - } -} - export namespace Categories { /** * No description @@ -702,12 +671,27 @@ export namespace Projects { /** * No description * @tags projects - * @name UpdateMembership + * @name AddMember + * @summary This method allows to add a project member. + * @request POST:/projects/{projectId}/members + * @secure + */ + export namespace AddMember { + export type RequestParams = { projectId: number }; + export type RequestQuery = {}; + export type RequestBody = ProjectMember; + export type RequestHeaders = {}; + export type ResponseBody = void; + } + /** + * No description + * @tags projects + * @name UpdateMember * @summary This method allows to modify the project members. * @request PUT:/projects/{projectId}/members * @secure */ - export namespace UpdateMembership { + export namespace UpdateMember { export type RequestParams = { projectId: number }; export type RequestQuery = {}; export type RequestBody = ProjectMember[]; @@ -749,59 +733,16 @@ export namespace Projects { * @tags projects * @name RemoveMember * @summary This method allows to remove a project member. - * @request DELETE:/projects/{projectId}/members/{memberId} + * @request DELETE:/projects/{projectId}/members/{memberUserId} * @secure */ export namespace RemoveMember { - export type RequestParams = { projectId: number; memberId: number }; + export type RequestParams = { projectId: number; memberUserId: number }; export type RequestQuery = {}; export type RequestBody = never; export type RequestHeaders = {}; export type ResponseBody = void; } - /** - * No description - * @tags projects - * @name GetCategoriesForProject - * @summary This method returns the list of categories under a given project. - * @request GET:/projects/{projectId}/categories - * @secure - */ - export namespace GetCategoriesForProject { - export type RequestParams = { projectId: number }; - export type RequestQuery = { - page?: number; - per_page?: number; - search?: string; - sort?: ("name" | "date" | "last_activity" | "requirement" | "follower")[]; - sortDirection?: "ASC" | "DESC"; - }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = Category[]; - } - /** - * No description - * @tags projects - * @name GetRequirementsForProject - * @summary This method returns the list of requirements for a specific project. - * @request GET:/projects/{projectId}/requirements - * @secure - */ - export namespace GetRequirementsForProject { - export type RequestParams = { projectId: number }; - export type RequestQuery = { - page?: number; - per_page?: number; - search?: string; - state?: "all" | "open" | "realized"; - sort?: ("date" | "last_activity" | "name" | "vote" | "comment" | "follower")[]; - sortDirection?: "ASC" | "DESC"; - }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = Requirement[]; - } /** * No description * @tags projects @@ -820,6 +761,7 @@ export namespace Projects { sortDirection?: "ASC" | "DESC"; filters?: ("all" | "created" | "following")[]; ids?: number[]; + recursive?: boolean; }; export type RequestBody = never; export type RequestHeaders = {}; @@ -858,32 +800,17 @@ export namespace Projects { /** * No description * @tags projects - * @name GetProject - * @summary This method allows to retrieve a certain project. - * @request GET:/projects/{projectId} - * @secure - */ - export namespace GetProject { - export type RequestParams = { projectId: number }; - export type RequestQuery = {}; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = Project; - } - /** - * No description - * @tags projects - * @name DeleteProject - * @summary This method deletes a specific project. - * @request DELETE:/projects/{projectId} + * @name GetStatisticsForProject + * @summary This method allows to retrieve statistics for one project. + * @request GET:/projects/{projectId}/statistics * @secure */ - export namespace DeleteProject { + export namespace GetStatisticsForProject { export type RequestParams = { projectId: number }; - export type RequestQuery = {}; + export type RequestQuery = { since?: string }; export type RequestBody = never; export type RequestHeaders = {}; - export type ResponseBody = void; + export type ResponseBody = Statistic; } /** * No description @@ -933,88 +860,116 @@ export namespace Projects { /** * No description * @tags projects - * @name GetContributorsForProject - * @summary This method returns the list of contributors for a specific project. - * @request GET:/projects/{projectId}/contributors + * @name GetCategoriesForProject + * @summary This method returns the list of categories under a given project. + * @request GET:/projects/{projectId}/categories * @secure */ - export namespace GetContributorsForProject { + export namespace GetCategoriesForProject { export type RequestParams = { projectId: number }; - export type RequestQuery = {}; + export type RequestQuery = { + page?: number; + per_page?: number; + search?: string; + sort?: ("name" | "date" | "last_activity" | "requirement" | "follower")[]; + sortDirection?: "ASC" | "DESC"; + }; export type RequestBody = never; export type RequestHeaders = {}; - export type ResponseBody = ProjectContributors; + export type ResponseBody = Category[]; } /** * No description * @tags projects - * @name GetFeedbacksForProject - * @summary This method returns the list of given feedbacks for a specific project. - * @request GET:/projects/{projectId}/feedbacks + * @name GetRequirementsForProject + * @summary This method returns the list of requirements for a specific project. + * @request GET:/projects/{projectId}/requirements * @secure */ - export namespace GetFeedbacksForProject { + export namespace GetRequirementsForProject { export type RequestParams = { projectId: number }; export type RequestQuery = { page?: number; per_page?: number; search?: string; - state?: "all" | "open"; - sort?: "date"[]; + state?: "all" | "open" | "realized"; + sort?: ("date" | "last_activity" | "name" | "vote" | "comment" | "follower")[]; sortDirection?: "ASC" | "DESC"; }; export type RequestBody = never; export type RequestHeaders = {}; - export type ResponseBody = Feedback[]; + export type ResponseBody = Requirement[]; } /** * No description * @tags projects - * @name GetTagsForProject - * @summary This method returns the list of tags under a given project. - * @request GET:/projects/{projectId}/tags + * @name GetProject + * @summary This method allows to retrieve a certain project. + * @request GET:/projects/{projectId} * @secure */ - export namespace GetTagsForProject { + export namespace GetProject { export type RequestParams = { projectId: number }; export type RequestQuery = {}; export type RequestBody = never; export type RequestHeaders = {}; - export type ResponseBody = Tag[]; + export type ResponseBody = Project; } /** * No description * @tags projects - * @name CreateTag - * @summary This method adds a new tag to a given project. - * @request POST:/projects/{projectId}/tags + * @name DeleteProject + * @summary This method deletes a specific project. + * @request DELETE:/projects/{projectId} * @secure */ - export namespace CreateTag { + export namespace DeleteProject { export type RequestParams = { projectId: number }; export type RequestQuery = {}; - export type RequestBody = Tag; + export type RequestBody = never; export type RequestHeaders = {}; - export type ResponseBody = Tag; + export type ResponseBody = void; } /** * No description * @tags projects - * @name GetStatisticsForProject - * @summary This method allows to retrieve statistics for one project. - * @request GET:/projects/{projectId}/statistics + * @name GetContributorsForProject + * @summary This method returns the list of contributors for a specific project. + * @request GET:/projects/{projectId}/contributors * @secure */ - export namespace GetStatisticsForProject { + export namespace GetContributorsForProject { export type RequestParams = { projectId: number }; - export type RequestQuery = { since?: string }; + export type RequestQuery = {}; export type RequestBody = never; export type RequestHeaders = {}; - export type ResponseBody = Statistic; + export type ResponseBody = ProjectContributors; } -} - -export namespace Requirements { + /** + * No description + * @tags projects + * @name GetFeedbacksForProject + * @summary This method returns the list of given feedbacks for a specific project. + * @request GET:/projects/{projectId}/feedbacks + * @secure + */ + export namespace GetFeedbacksForProject { + export type RequestParams = { projectId: number }; + export type RequestQuery = { + page?: number; + per_page?: number; + search?: string; + state?: "all" | "open"; + sort?: "date"[]; + sortDirection?: "ASC" | "DESC"; + }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = Feedback[]; + } +} + +export namespace Requirements { /** * No description * @tags requirements @@ -1173,21 +1128,6 @@ export namespace Requirements { export type RequestHeaders = {}; export type ResponseBody = Comment[]; } - /** - * No description - * @tags requirements - * @name GetAttachmentsForRequirement - * @summary This method returns the list of attachments for a specific requirement. - * @request GET:/requirements/{requirementId}/attachments - * @secure - */ - export namespace GetAttachmentsForRequirement { - export type RequestParams = { requirementId: number }; - export type RequestQuery = { page?: number; per_page?: number }; - export type RequestBody = never; - export type RequestHeaders = {}; - export type ResponseBody = Attachment[]; - } /** * No description * @tags requirements @@ -1338,6 +1278,21 @@ export namespace Requirements { export type RequestHeaders = {}; export type ResponseBody = RequirementContributors; } + /** + * No description + * @tags requirements + * @name GetAttachmentsForRequirement + * @summary This method returns the list of attachments for a specific requirement. + * @request GET:/requirements/{requirementId}/attachments + * @secure + */ + export namespace GetAttachmentsForRequirement { + export type RequestParams = { requirementId: number }; + export type RequestQuery = { page?: number; per_page?: number }; + export type RequestBody = never; + export type RequestHeaders = {}; + export type ResponseBody = Attachment[]; + } } export namespace Users { @@ -1439,6 +1394,24 @@ export namespace Users { } } +export namespace Webhook { + /** + * No description + * @tags webhook + * @name HandleWebhook + * @summary Webhook Endpoint + * @request POST:/webhook/{projectId}/github + * @secure + */ + export namespace HandleWebhook { + export type RequestParams = { projectId: number }; + export type RequestQuery = {}; + export type RequestBody = string; + export type RequestHeaders = { "X-GitHub-Event"?: string; "X-Hub-Signature-256"?: string }; + export type ResponseBody = void; + } +} + export type QueryParamsType = Record; export type ResponseFormat = keyof Omit; @@ -1675,6 +1648,25 @@ export class Api extends HttpClient + this.request({ + path: `/user-statistics`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), + }; statistics = { /** * No description @@ -1711,63 +1703,6 @@ export class Api extends HttpClient - this.request({ - path: `/attachments`, - method: "POST", - body: body, - secure: true, - type: ContentType.Json, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags attachments - * @name GetAttachment - * @summary This method allows to retrieve a certain attachment - * @request GET:/attachments/{attachmentId} - * @secure - */ - getAttachment: (attachmentId: number, params: RequestParams = {}) => - this.request({ - path: `/attachments/${attachmentId}`, - method: "GET", - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags attachments - * @name DeleteAttachment - * @summary This method deletes a specific attachment. - * @request DELETE:/attachments/{attachmentId} - * @secure - */ - deleteAttachment: (attachmentId: number, params: RequestParams = {}) => - this.request({ - path: `/attachments/${attachmentId}`, - method: "DELETE", - secure: true, - format: "json", - ...params, - }), - }; categories = { /** * No description @@ -2123,12 +2058,31 @@ export class Api extends HttpClient + this.request({ + path: `/projects/${projectId}/members`, + method: "POST", + body: body, + secure: true, + type: ContentType.Json, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name UpdateMember * @summary This method allows to modify the project members. * @request PUT:/projects/{projectId}/members * @secure */ - updateMembership: (projectId: number, body: ProjectMember[], params: RequestParams = {}) => + updateMember: (projectId: number, body: ProjectMember[], params: RequestParams = {}) => this.request({ path: `/projects/${projectId}/members`, method: "PUT", @@ -2182,76 +2136,17 @@ export class Api extends HttpClient + removeMember: (projectId: number, memberUserId: number, params: RequestParams = {}) => this.request({ - path: `/projects/${projectId}/members/${memberId}`, + path: `/projects/${projectId}/members/${memberUserId}`, method: "DELETE", secure: true, ...params, }), - /** - * No description - * - * @tags projects - * @name GetCategoriesForProject - * @summary This method returns the list of categories under a given project. - * @request GET:/projects/{projectId}/categories - * @secure - */ - getCategoriesForProject: ( - projectId: number, - query?: { - page?: number; - per_page?: number; - search?: string; - sort?: ("name" | "date" | "last_activity" | "requirement" | "follower")[]; - sortDirection?: "ASC" | "DESC"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/projects/${projectId}/categories`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - - /** - * No description - * - * @tags projects - * @name GetRequirementsForProject - * @summary This method returns the list of requirements for a specific project. - * @request GET:/projects/{projectId}/requirements - * @secure - */ - getRequirementsForProject: ( - projectId: number, - query?: { - page?: number; - per_page?: number; - search?: string; - state?: "all" | "open" | "realized"; - sort?: ("date" | "last_activity" | "name" | "vote" | "comment" | "follower")[]; - sortDirection?: "ASC" | "DESC"; - }, - params: RequestParams = {}, - ) => - this.request({ - path: `/projects/${projectId}/requirements`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - /** * No description * @@ -2270,6 +2165,7 @@ export class Api extends HttpClient @@ -2326,37 +2222,21 @@ export class Api extends HttpClient - this.request({ - path: `/projects/${projectId}`, + getStatisticsForProject: (projectId: number, query?: { since?: string }, params: RequestParams = {}) => + this.request({ + path: `/projects/${projectId}/statistics`, method: "GET", + query: query, secure: true, format: "json", ...params, }), - /** - * No description - * - * @tags projects - * @name DeleteProject - * @summary This method deletes a specific project. - * @request DELETE:/projects/{projectId} - * @secure - */ - deleteProject: (projectId: number, params: RequestParams = {}) => - this.request({ - path: `/projects/${projectId}`, - method: "DELETE", - secure: true, - ...params, - }), - /** * No description * @@ -2420,15 +2300,26 @@ export class Api extends HttpClient - this.request({ - path: `/projects/${projectId}/contributors`, + getCategoriesForProject: ( + projectId: number, + query?: { + page?: number; + per_page?: number; + search?: string; + sort?: ("name" | "date" | "last_activity" | "requirement" | "follower")[]; + sortDirection?: "ASC" | "DESC"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: `/projects/${projectId}/categories`, method: "GET", + query: query, secure: true, format: "json", ...params, @@ -2438,25 +2329,25 @@ export class Api extends HttpClient - this.request({ - path: `/projects/${projectId}/feedbacks`, + this.request({ + path: `/projects/${projectId}/requirements`, method: "GET", query: query, secure: true, @@ -2468,14 +2359,14 @@ export class Api extends HttpClient - this.request({ - path: `/projects/${projectId}/tags`, + getProject: (projectId: number, params: RequestParams = {}) => + this.request({ + path: `/projects/${projectId}`, method: "GET", secure: true, format: "json", @@ -2486,18 +2377,33 @@ export class Api extends HttpClient - this.request({ - path: `/projects/${projectId}/tags`, - method: "POST", - body: body, + deleteProject: (projectId: number, params: RequestParams = {}) => + this.request({ + path: `/projects/${projectId}`, + method: "DELETE", + secure: true, + ...params, + }), + + /** + * No description + * + * @tags projects + * @name GetContributorsForProject + * @summary This method returns the list of contributors for a specific project. + * @request GET:/projects/{projectId}/contributors + * @secure + */ + getContributorsForProject: (projectId: number, params: RequestParams = {}) => + this.request({ + path: `/projects/${projectId}/contributors`, + method: "GET", secure: true, - type: ContentType.Json, format: "json", ...params, }), @@ -2506,14 +2412,25 @@ export class Api extends HttpClient - this.request({ - path: `/projects/${projectId}/statistics`, + getFeedbacksForProject: ( + projectId: number, + query?: { + page?: number; + per_page?: number; + search?: string; + state?: "all" | "open"; + sort?: "date"[]; + sortDirection?: "ASC" | "DESC"; + }, + params: RequestParams = {}, + ) => + this.request({ + path: `/projects/${projectId}/feedbacks`, method: "GET", query: query, secure: true, @@ -2725,29 +2642,6 @@ export class Api extends HttpClient - this.request({ - path: `/requirements/${requirementId}/attachments`, - method: "GET", - query: query, - secure: true, - format: "json", - ...params, - }), - /** * No description * @@ -2932,6 +2826,29 @@ export class Api extends HttpClient + this.request({ + path: `/requirements/${requirementId}/attachments`, + method: "GET", + query: query, + secure: true, + format: "json", + ...params, + }), }; users = { /** @@ -3055,4 +2972,24 @@ export class Api extends HttpClient + this.request({ + path: `/webhook/${projectId}/github`, + method: "POST", + body: body, + secure: true, + type: ContentType.Json, + ...params, + }), + }; } diff --git a/src/views/About.vue b/src/views/About.vue index 270aca46..62909d45 100644 --- a/src/views/About.vue +++ b/src/views/About.vue @@ -43,6 +43,13 @@ our open source repositories, by sending us design proposals, or by volunteering to translate the page to one of your native languages. Simply drop us an email at reqbaz@dbis.rwth-aachen.de and tell us about your idea.

+ +

Used Third Party Resources

+ +