diff --git a/server/application-server/openapi.yaml b/server/application-server/openapi.yaml index 5981cf79..65d22dd4 100644 --- a/server/application-server/openapi.yaml +++ b/server/application-server/openapi.yaml @@ -99,6 +99,24 @@ paths: application/json: schema: $ref: "#/components/schemas/AuthUserInfo" + /activity/{login}: + get: + tags: + - activity-dashboard + operationId: getActivitiesByUser + parameters: + - name: login + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/Activities" components: schemas: PullRequestInfo: @@ -167,6 +185,25 @@ components: updatedAt: type: string format: date-time + Activities: + required: + - issues + - pullRequests + - reviews + type: object + properties: + pullRequests: + type: array + items: + $ref: "#/components/schemas/PullRequestInfo" + issues: + type: array + items: + $ref: "#/components/schemas/IssueInfo" + reviews: + type: array + items: + $ref: "#/components/schemas/PullRequestReviewInfo" LabelInfo: required: - color @@ -272,6 +309,52 @@ components: type: string scheduledTime: type: string + IssueInfo: + required: + - commentsCount + - htmlUrl + - id + - number + - state + - title + type: object + properties: + id: + type: integer + format: int64 + number: + type: integer + format: int32 + title: + type: string + state: + type: string + enum: + - OPEN + - CLOSED + commentsCount: + type: integer + format: int32 + author: + $ref: "#/components/schemas/UserInfo" + labels: + type: array + items: + $ref: "#/components/schemas/LabelInfo" + assignees: + type: array + items: + $ref: "#/components/schemas/UserInfo" + repositoryNameWithOwner: + type: string + htmlUrl: + type: string + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time PullRequestBaseInfo: required: - htmlUrl diff --git a/webapp/src/app/core/modules/openapi/.openapi-generator/FILES b/webapp/src/app/core/modules/openapi/.openapi-generator/FILES index 060dd8c4..2ef1d0a6 100644 --- a/webapp/src/app/core/modules/openapi/.openapi-generator/FILES +++ b/webapp/src/app/core/modules/openapi/.openapi-generator/FILES @@ -2,6 +2,8 @@ .openapi-generator-ignore README.md api.module.ts +api/activity-dashboard.service.ts +api/activity-dashboard.serviceInterface.ts api/admin.service.ts api/admin.serviceInterface.ts api/api.ts @@ -15,7 +17,9 @@ configuration.ts encoder.ts git_push.sh index.ts +model/activities.ts model/auth-user-info.ts +model/issue-info.ts model/label-info.ts model/leaderboard-entry.ts model/meta-data.ts diff --git a/webapp/src/app/core/modules/openapi/api/activity-dashboard.service.ts b/webapp/src/app/core/modules/openapi/api/activity-dashboard.service.ts new file mode 100644 index 00000000..1b5f4f40 --- /dev/null +++ b/webapp/src/app/core/modules/openapi/api/activity-dashboard.service.ts @@ -0,0 +1,161 @@ +/** + * Hephaestus API + * API documentation for the Hephaestus application server. + * + * The version of the OpenAPI document: 0.0.1 + * Contact: felixtj.dietrich@tum.de + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +/* tslint:disable:no-unused-variable member-ordering */ + +import { Inject, Injectable, Optional } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, + HttpResponse, HttpEvent, HttpParameterCodec, HttpContext + } from '@angular/common/http'; +import { CustomHttpParameterCodec } from '../encoder'; +import { Observable } from 'rxjs'; + +// @ts-ignore +import { Activities } from '../model/activities'; + +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS } from '../variables'; +import { Configuration } from '../configuration'; +import { + ActivityDashboardServiceInterface +} from './activity-dashboard.serviceInterface'; + + + +@Injectable({ + providedIn: 'root' +}) +export class ActivityDashboardService implements ActivityDashboardServiceInterface { + + protected basePath = 'http://localhost'; + public defaultHeaders = new HttpHeaders(); + public configuration = new Configuration(); + public encoder: HttpParameterCodec; + + constructor(protected httpClient: HttpClient, @Optional()@Inject(BASE_PATH) basePath: string|string[], @Optional() configuration: Configuration) { + if (configuration) { + this.configuration = configuration; + } + if (typeof this.configuration.basePath !== 'string') { + const firstBasePath = Array.isArray(basePath) ? basePath[0] : undefined; + if (firstBasePath != undefined) { + basePath = firstBasePath; + } + + if (typeof basePath !== 'string') { + basePath = this.basePath; + } + this.configuration.basePath = basePath; + } + this.encoder = this.configuration.encoder || new CustomHttpParameterCodec(); + } + + + // @ts-ignore + private addToHttpParams(httpParams: HttpParams, value: any, key?: string): HttpParams { + if (typeof value === "object" && value instanceof Date === false) { + httpParams = this.addToHttpParamsRecursive(httpParams, value); + } else { + httpParams = this.addToHttpParamsRecursive(httpParams, value, key); + } + return httpParams; + } + + private addToHttpParamsRecursive(httpParams: HttpParams, value?: any, key?: string): HttpParams { + if (value == null) { + return httpParams; + } + + if (typeof value === "object") { + if (Array.isArray(value)) { + (value as any[]).forEach( elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)); + } else if (value instanceof Date) { + if (key != null) { + httpParams = httpParams.append(key, (value as Date).toISOString().substring(0, 10)); + } else { + throw Error("key may not be null if value is Date"); + } + } else { + Object.keys(value).forEach( k => httpParams = this.addToHttpParamsRecursive( + httpParams, value[k], key != null ? `${key}.${k}` : k)); + } + } else if (key != null) { + httpParams = httpParams.append(key, value); + } else { + throw Error("key may not be null if value is not object or array"); + } + return httpParams; + } + + /** + * @param login + * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body. + * @param reportProgress flag to report request and response progress. + */ + public getActivitiesByUser(login: string, observe?: 'body', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable; + public getActivitiesByUser(login: string, observe?: 'response', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable>; + public getActivitiesByUser(login: string, observe?: 'events', reportProgress?: boolean, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable>; + public getActivitiesByUser(login: string, observe: any = 'body', reportProgress: boolean = false, options?: {httpHeaderAccept?: 'application/json', context?: HttpContext, transferCache?: boolean}): Observable { + if (login === null || login === undefined) { + throw new Error('Required parameter login was null or undefined when calling getActivitiesByUser.'); + } + + let localVarHeaders = this.defaultHeaders; + + let localVarHttpHeaderAcceptSelected: string | undefined = options && options.httpHeaderAccept; + if (localVarHttpHeaderAcceptSelected === undefined) { + // to determine the Accept header + const httpHeaderAccepts: string[] = [ + 'application/json' + ]; + localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts); + } + if (localVarHttpHeaderAcceptSelected !== undefined) { + localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected); + } + + let localVarHttpContext: HttpContext | undefined = options && options.context; + if (localVarHttpContext === undefined) { + localVarHttpContext = new HttpContext(); + } + + let localVarTransferCache: boolean | undefined = options && options.transferCache; + if (localVarTransferCache === undefined) { + localVarTransferCache = true; + } + + + let responseType_: 'text' | 'json' | 'blob' = 'json'; + if (localVarHttpHeaderAcceptSelected) { + if (localVarHttpHeaderAcceptSelected.startsWith('text')) { + responseType_ = 'text'; + } else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) { + responseType_ = 'json'; + } else { + responseType_ = 'blob'; + } + } + + let localVarPath = `/activity/${this.configuration.encodeParam({name: "login", value: login, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined})}`; + return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, + { + context: localVarHttpContext, + responseType: responseType_, + withCredentials: this.configuration.withCredentials, + headers: localVarHeaders, + observe: observe, + transferCache: localVarTransferCache, + reportProgress: reportProgress + } + ); + } + +} diff --git a/webapp/src/app/core/modules/openapi/api/activity-dashboard.serviceInterface.ts b/webapp/src/app/core/modules/openapi/api/activity-dashboard.serviceInterface.ts new file mode 100644 index 00000000..be47e6e8 --- /dev/null +++ b/webapp/src/app/core/modules/openapi/api/activity-dashboard.serviceInterface.ts @@ -0,0 +1,34 @@ +/** + * Hephaestus API + * API documentation for the Hephaestus application server. + * + * The version of the OpenAPI document: 0.0.1 + * Contact: felixtj.dietrich@tum.de + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { HttpHeaders } from '@angular/common/http'; + +import { Observable } from 'rxjs'; + +import { Activities } from '../model/models'; + + +import { Configuration } from '../configuration'; + + + +export interface ActivityDashboardServiceInterface { + defaultHeaders: HttpHeaders; + configuration: Configuration; + + /** + * + * + * @param login + */ + getActivitiesByUser(login: string, extraHttpRequestParams?: any): Observable; + +} diff --git a/webapp/src/app/core/modules/openapi/api/api.ts b/webapp/src/app/core/modules/openapi/api/api.ts index c5aae02f..524341bb 100644 --- a/webapp/src/app/core/modules/openapi/api/api.ts +++ b/webapp/src/app/core/modules/openapi/api/api.ts @@ -1,3 +1,6 @@ +export * from './activity-dashboard.service'; +import { ActivityDashboardService } from './activity-dashboard.service'; +export * from './activity-dashboard.serviceInterface'; export * from './admin.service'; import { AdminService } from './admin.service'; export * from './admin.serviceInterface'; @@ -10,4 +13,4 @@ export * from './meta.serviceInterface'; export * from './user.service'; import { UserService } from './user.service'; export * from './user.serviceInterface'; -export const APIS = [AdminService, LeaderboardService, MetaService, UserService]; +export const APIS = [ActivityDashboardService, AdminService, LeaderboardService, MetaService, UserService]; diff --git a/webapp/src/app/core/modules/openapi/model/activities.ts b/webapp/src/app/core/modules/openapi/model/activities.ts new file mode 100644 index 00000000..4528e625 --- /dev/null +++ b/webapp/src/app/core/modules/openapi/model/activities.ts @@ -0,0 +1,22 @@ +/** + * Hephaestus API + * API documentation for the Hephaestus application server. + * + * The version of the OpenAPI document: 0.0.1 + * Contact: felixtj.dietrich@tum.de + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { PullRequestInfo } from './pull-request-info'; +import { PullRequestReviewInfo } from './pull-request-review-info'; +import { IssueInfo } from './issue-info'; + + +export interface Activities { + pullRequests: Array; + issues: Array; + reviews: Array; +} + diff --git a/webapp/src/app/core/modules/openapi/model/issue-info.ts b/webapp/src/app/core/modules/openapi/model/issue-info.ts new file mode 100644 index 00000000..01ba9a7d --- /dev/null +++ b/webapp/src/app/core/modules/openapi/model/issue-info.ts @@ -0,0 +1,38 @@ +/** + * Hephaestus API + * API documentation for the Hephaestus application server. + * + * The version of the OpenAPI document: 0.0.1 + * Contact: felixtj.dietrich@tum.de + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ +import { LabelInfo } from './label-info'; +import { UserInfo } from './user-info'; + + +export interface IssueInfo { + id: number; + number: number; + title: string; + state: IssueInfo.StateEnum; + commentsCount: number; + author?: UserInfo; + labels?: Array; + assignees?: Array; + repositoryNameWithOwner?: string; + htmlUrl: string; + createdAt?: string; + updatedAt?: string; +} +export namespace IssueInfo { + export type StateEnum = 'OPEN' | 'CLOSED'; + export const StateEnum = { + Open: 'OPEN' as StateEnum, + Closed: 'CLOSED' as StateEnum + }; +} + + diff --git a/webapp/src/app/core/modules/openapi/model/models.ts b/webapp/src/app/core/modules/openapi/model/models.ts index b374d5fc..d3ecc3b4 100644 --- a/webapp/src/app/core/modules/openapi/model/models.ts +++ b/webapp/src/app/core/modules/openapi/model/models.ts @@ -1,4 +1,6 @@ +export * from './activities'; export * from './auth-user-info'; +export * from './issue-info'; export * from './label-info'; export * from './leaderboard-entry'; export * from './meta-data';