diff --git a/.angular-cli.json b/.angular-cli.json index 2454891..8600971 100644 --- a/.angular-cli.json +++ b/.angular-cli.json @@ -19,6 +19,7 @@ "testTsconfig": "tsconfig.spec.json", "prefix": "app", "styles": [ + "../node_modules/semantic-ui-css/semantic.css", "styles.css" ], "scripts": [], diff --git a/package-lock.json b/package-lock.json index 2818b3a..ff86de6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1180,6 +1180,11 @@ "hoek": "2.16.3" } }, + "bowser": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.3.tgz", + "integrity": "sha512-/gp96UlcFw5DbV2KQPCqTqi0Mb9gZRyDAHiDsGEH+4B/KOQjeoE5lM1PxlVX8DQDvfEfitmC1rW2Oy8fk/XBDg==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2371,6 +2376,11 @@ "dev": true, "optional": true }, + "date-fns": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.0.0-alpha.1.tgz", + "integrity": "sha512-4gYdF1rDgv9X/0ko69pt+FgpQtDU5rgqZVmckIOhDicfCSTndwHMhUhLJw+pa4DlPdzIkEBtHg6L6VlQ6ueD1g==" + }, "date-format": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", @@ -2787,6 +2797,11 @@ "integrity": "sha1-SpJzTgBEyM8LFVO+V+riGkxuX6s=", "dev": true }, + "element-closest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/element-closest/-/element-closest-2.0.2.tgz", + "integrity": "sha1-cqdAoQdFM4LijfnOXbtajfD5Zuw=" + }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", @@ -3313,8 +3328,7 @@ "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "extend-shallow": { "version": "3.0.2", @@ -5828,6 +5842,11 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-ua-webview": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-ua-webview/-/is-ua-webview-1.0.1.tgz", + "integrity": "sha512-0/ex7fXiKlsAOs8IbGi9nzYu6eTCHNUmK0wa2QlQ3zuxejGYjoG5ROJ51dsek4Ut2RMD5xaFwB/H0XUWrpTHlQ==" + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -6066,6 +6085,11 @@ "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", "dev": true }, + "jquery": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + }, "js-base64": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", @@ -7223,6 +7247,20 @@ "dev": true, "optional": true }, + "ng2-semantic-ui": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/ng2-semantic-ui/-/ng2-semantic-ui-0.9.7.tgz", + "integrity": "sha512-A7I3c1n65OXKa7YVxq6I2DjgWgKcyInVjSpze1hm73HPEEULoUSGBOK8IxbUxUUWiVvC6aGHd+IuoE4EkAIS0w==", + "requires": { + "bowser": "1.9.3", + "date-fns": "2.0.0-alpha.1", + "element-closest": "2.0.2", + "extend": "3.0.1", + "is-ua-webview": "1.0.1", + "popper.js": "1.14.3", + "rxjs": "5.5.7" + } + }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", @@ -8188,6 +8226,11 @@ "find-up": "2.1.0" } }, + "popper.js": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.3.tgz", + "integrity": "sha1-FDj5jQRqz3tNeM1QK/QYrGTU8JU=" + }, "portfinder": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", @@ -9260,6 +9303,14 @@ "node-forge": "0.7.1" } }, + "semantic-ui-css": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/semantic-ui-css/-/semantic-ui-css-2.3.1.tgz", + "integrity": "sha512-8M2OkoKZHfEnNUYB4Ha8q+tTAWN/g17X2l6HUg6n3DP4QDJLQl1xyhnRvM9UhJpsRvkRqgWgQLbRA6cl7Ep2dw==", + "requires": { + "jquery": "3.3.1" + } + }, "semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", diff --git a/package.json b/package.json index e8c67a5..0b8fd0f 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,9 @@ "@angular/platform-browser-dynamic": "^5.2.0", "@angular/router": "^5.2.0", "core-js": "^2.4.1", + "ng2-semantic-ui": "^0.9.7", "rxjs": "^5.5.6", + "semantic-ui-css": "^2.3.1", "zone.js": "^0.8.19" }, "devDependencies": { diff --git a/src/app/admin/admin-routing.module.ts b/src/app/admin/admin-routing.module.ts new file mode 100644 index 0000000..62fd0fe --- /dev/null +++ b/src/app/admin/admin-routing.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { TeamListComponent} from './team-list/team-list.component'; +import { TeamService } from '../shared/service/team.service'; + +const routes: Routes = [ + { + path: 'admin/teams/list', + component: TeamListComponent, + // canActivate: [AuthGuardService, RoleGuardService], + resolve: { + teams: TeamService, + }, + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class AdminRoutingModule { +} diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts new file mode 100644 index 0000000..0734b47 --- /dev/null +++ b/src/app/admin/admin.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { AdminRoutingModule } from './admin-routing.module'; +import { TeamListComponent } from './team-list/team-list.component'; + +@NgModule({ + imports: [ + CommonModule, + AdminRoutingModule + ], + declarations: [TeamListComponent], + providers: [] +}) +export class AdminModule { } diff --git a/src/app/admin/team-list/team-list.component.css b/src/app/admin/team-list/team-list.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/admin/team-list/team-list.component.html b/src/app/admin/team-list/team-list.component.html new file mode 100644 index 0000000..9570673 --- /dev/null +++ b/src/app/admin/team-list/team-list.component.html @@ -0,0 +1,26 @@ +
+

Teams

+
+
+ + + + + + + + + + + + + + + +
TeamMembers
+ + {{team.name}}{{fancyMemberNames(team)}}
+
+
+
\ No newline at end of file diff --git a/src/app/admin/team-list/team-list.component.spec.ts b/src/app/admin/team-list/team-list.component.spec.ts new file mode 100644 index 0000000..ddcff09 --- /dev/null +++ b/src/app/admin/team-list/team-list.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TeamListComponent } from './team-list.component'; + +describe('TeamListComponent', () => { + let component: TeamListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ TeamListComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TeamListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/admin/team-list/team-list.component.ts b/src/app/admin/team-list/team-list.component.ts new file mode 100644 index 0000000..117949d --- /dev/null +++ b/src/app/admin/team-list/team-list.component.ts @@ -0,0 +1,36 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Title } from '@angular/platform-browser'; + +import { Team } from '../../shared/team'; +import { TeamService } from '../../shared/service/team.service'; + +@Component({ + selector: 'app-team-list', + templateUrl: './team-list.component.html', + styleUrls: ['./team-list.component.css'] +}) +export class TeamListComponent implements OnInit { + + constructor(private teamService: TeamService, + private titleService: Title, + private route: ActivatedRoute) { + } + + ngOnInit() { + this.titleService.setTitle('Teams : MTAStv'); + this.route.data.subscribe((data: {teams: Array}) => this.teams = data.teams); + } + + get teams(): Array { + return this.teamService.teams; + } + + set teams(teams: Array) { + this.teamService.teams = teams; + } + + public fancyMemberNames(team: Team): String { + return team.members.map(member => member.name).join(', '); + } +} diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts new file mode 100644 index 0000000..4c70708 --- /dev/null +++ b/src/app/app-routing.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +// import { HomeComponent } from "./home/home.component"; +// import { AuthGuardService } from "./auth/auth-guard.service"; +// import { PageNotFoundComponent } from "./page-not-found/page-not-found.component"; + +const routes: Routes = [ + // {path: '', component: HomeComponent, canActivate: [AuthGuardService]}, + // {path: '**', component: PageNotFoundComponent}, +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule { +} diff --git a/src/app/app.component.html b/src/app/app.component.html index fa2706a..90c6b64 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,20 +1 @@ - -
-

- Welcome to {{ title }}! -

- Angular Logo -
-

Here are some links to help you start:

- - + \ No newline at end of file diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 926975a..508cbf8 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,18 +1,32 @@ -import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { HttpClientModule } from '@angular/common/http'; +import { FormsModule } from '@angular/forms'; +import { SuiModule } from 'ng2-semantic-ui'; - +import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; - +import { TeamService } from './shared/service/team.service'; +import { SlideService } from './shared/service/slide.service'; +import { AdminModule } from './admin/admin.module'; +import { DisplayModule } from './display/display.module'; +import { CommitTrackerService } from './shared/service/commit-tracker.service'; @NgModule({ declarations: [ AppComponent ], imports: [ - BrowserModule + BrowserModule, + HttpClientModule, + FormsModule, + SuiModule, + DisplayModule, + AdminModule, + AppRoutingModule, // must be last RouterModule import for ** route to work ], - providers: [], + providers: [TeamService, SlideService, CommitTrackerService], bootstrap: [AppComponent] }) -export class AppModule { } +export class AppModule { +} diff --git a/src/app/display/commit-tracker/commit-tracker.component.css b/src/app/display/commit-tracker/commit-tracker.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/display/commit-tracker/commit-tracker.component.html b/src/app/display/commit-tracker/commit-tracker.component.html new file mode 100644 index 0000000..2f67923 --- /dev/null +++ b/src/app/display/commit-tracker/commit-tracker.component.html @@ -0,0 +1,35 @@ +
+

Commit tracker

+
+
+ + + + + + + + + + + + + + + + + + + + + +
Last activityChange subjectProjectBranchGerritStatus
{{commit.gerrit_time}}{{commit.gerrit_change_subject}}{{commit.gerrit_project}}{{commit.branch}}{{commit.gerrit_change_number}} +
{{CommitStatus.Verified}}
+
{{CommitStatus.CodeReview}}
+
{{CommitStatus.CommitFeedbackLoop}}
+
{{CommitStatus.ShortFeedbackLoop}}
+
{{CommitStatus.NightlyFeedbackLoop}}
+
+
+
+
\ No newline at end of file diff --git a/src/app/display/commit-tracker/commit-tracker.component.spec.ts b/src/app/display/commit-tracker/commit-tracker.component.spec.ts new file mode 100644 index 0000000..0872a3c --- /dev/null +++ b/src/app/display/commit-tracker/commit-tracker.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CommitTrackerComponent } from './commit-tracker.component'; + +describe('CommitTrackerComponent', () => { + let component: CommitTrackerComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CommitTrackerComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CommitTrackerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/display/commit-tracker/commit-tracker.component.ts b/src/app/display/commit-tracker/commit-tracker.component.ts new file mode 100644 index 0000000..9882651 --- /dev/null +++ b/src/app/display/commit-tracker/commit-tracker.component.ts @@ -0,0 +1,106 @@ +import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; +import { ActivatedRoute } from '@angular/router'; + +import { CommitTrackerService } from '../../shared/service/commit-tracker.service'; +import { Commit } from '../../shared/commit'; +import { CommitStatus } from '../../shared/commit-status.enum'; +import { Result } from '../../shared/result.enum'; + +@Component({ + selector: 'app-commit-tracker', + templateUrl: './commit-tracker.component.html', + styleUrls: ['./commit-tracker.component.css'] +}) +export class CommitTrackerComponent implements OnInit { + + public CommitStatus = CommitStatus; + + constructor(private commitTrackerService: CommitTrackerService, + private titleService: Title, + private route: ActivatedRoute) {} + + ngOnInit() { + this.titleService.setTitle('Commit-tracker : MTAStv'); + this.route.data.subscribe((data: {commits: Array}) => this.commits = data.commits); + } + + get commits(): Array { + return this.commitTrackerService.commits; + } + + set commits(commits: Array) { + this.commitTrackerService.commits = commits; + } + + public labelClasses(commit: Commit, commitStatus: String) { + const classes: Object = { + ui: true, + big: true, + circular: true, + label: true, + }; + + switch (commitStatus) { + case CommitStatus.Verified: + return Object.assign(classes, { + green: commit.gerrit_verified === 2, + yellow: commit.gerrit_verified === 0, + red: commit.gerrit_verified === -2, + }); + case CommitStatus.CodeReview: + return Object.assign(classes, { + green: commit.gerrit_code_review === 1, + yellow: commit.gerrit_code_review === 0, + red: commit.gerrit_code_review === -1, + }); + case CommitStatus.CommitFeedbackLoop: + return Object.assign(classes, { + green: commit.cfl_result === Result.Success, + yellow: commit.cfl_result === Result.Aborted, + orange: commit.cfl_result === Result.Unstable, + red: commit.cfl_result === Result.Failure, + brown: commit.cfl_result === Result.NotBuilt, + }); + case CommitStatus.ShortFeedbackLoop: + return Object.assign(classes, { + green: commit.sfl_result === Result.Success, + yellow: commit.sfl_result === Result.Aborted, + orange: commit.sfl_result === Result.Unstable, + red: commit.sfl_result === Result.Failure, + brown: commit.sfl_result === Result.NotBuilt, + }); + case CommitStatus.NightlyFeedbackLoop: + return Object.assign(classes, { + green: commit.nfl_result === Result.Success, + yellow: commit.nfl_result === Result.Aborted, + red: commit.nfl_result === Result.Failure, + }); + } + + return classes; + } + + public rowClasses(commit: Commit) { + return { + positive: this.isAllOk(commit), + negative: this.hasAnyFailure(commit) + }; + } + + private isAllOk(commit: Commit) { + return [ + commit.cfl_result, + commit.sfl_result, + commit.nfl_result, + ].every(result => result === Result.Success); + } + + private hasAnyFailure(commit: Commit) { + return [ + commit.cfl_result, + commit.sfl_result, + commit.nfl_result, + ].some(result => result === Result.Failure); + } +} diff --git a/src/app/display/display-routing.module.ts b/src/app/display/display-routing.module.ts new file mode 100644 index 0000000..ff69e15 --- /dev/null +++ b/src/app/display/display-routing.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { CommitTrackerComponent } from './commit-tracker/commit-tracker.component'; +import { CommitTrackerService } from '../shared/service/commit-tracker.service'; + +const routes: Routes = [ + { + path: 'commit-tracker', + component: CommitTrackerComponent, + // canActivate: [AuthGuardService, RoleGuardService], + resolve: { + commits: CommitTrackerService, + }, + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DisplayRoutingModule { } diff --git a/src/app/display/display.module.ts b/src/app/display/display.module.ts new file mode 100644 index 0000000..dad6dc0 --- /dev/null +++ b/src/app/display/display.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { DisplayRoutingModule } from './display-routing.module'; +import { CommitTrackerComponent } from './commit-tracker/commit-tracker.component'; + +@NgModule({ + imports: [ + CommonModule, + DisplayRoutingModule + ], + declarations: [CommitTrackerComponent] +}) +export class DisplayModule { } diff --git a/src/app/shared/build.ts b/src/app/shared/build.ts new file mode 100644 index 0000000..72cff11 --- /dev/null +++ b/src/app/shared/build.ts @@ -0,0 +1,18 @@ +import { Result } from './result.enum'; + +export class Build { + abort: boolean; + build: { + subBuild: Array; + }; + buildNumber: Number; + duration: String; + icon: String; + jobName: String; + parentBuildNumber: Number; + parentJobName: String; + phaseName: String; + result: Result; + retry: boolean; + url: String; +} diff --git a/src/app/shared/commit-status.enum.ts b/src/app/shared/commit-status.enum.ts new file mode 100644 index 0000000..6d97b19 --- /dev/null +++ b/src/app/shared/commit-status.enum.ts @@ -0,0 +1,7 @@ +export enum CommitStatus { + Verified = 'V', + CodeReview = 'C-R', + CommitFeedbackLoop = 'CFL', + ShortFeedbackLoop = 'SFL', + NightlyFeedbackLoop = 'NFL', +} diff --git a/src/app/shared/commit.ts b/src/app/shared/commit.ts new file mode 100644 index 0000000..999020f --- /dev/null +++ b/src/app/shared/commit.ts @@ -0,0 +1,44 @@ +import { Build } from './build'; +import { Result } from './result.enum'; + +export class Commit { + change_id: String; + branch: String; + owner: String; + gerrit_change_number: Number; + gerrit_change_subject: String; + gerrit_project: String; + gerrit_verified: Number; + gerrit_code_review: Number; + gerrit_time: String; + + cfl_id: Number; + cfl_build_number: Number; + cfl_timestamp: Number; + cfl_building: Number; + cfl_duration: Number; + cfl_result: Result; + cfl_sub_builds: Build; + + sfl_id: Number; + sfl_build_number: Number; + sfl_timestamp: Number; + sfl_building: Number; + sfl_duration: Number; + sfl_result: Result; + sfl_sub_builds: Build; + sfl_fail_count: Number; + sfl_skip_count: Number; + sfl_total_count: Number; + + nfl_id: Number; + nfl_build_number: Number; + nfl_timestamp: Number; + nfl_building: Number; + nfl_duration: Number; + nfl_result: Result; + nfl_sub_builds: Build; + nfl_fail_count: Number; + nfl_skip_count: Number; + nfl_total_count: Number; +} diff --git a/src/app/shared/member.ts b/src/app/shared/member.ts new file mode 100644 index 0000000..4682662 --- /dev/null +++ b/src/app/shared/member.ts @@ -0,0 +1,4 @@ +export class Member { + signum: String; + name: String; +} diff --git a/src/app/shared/result.enum.ts b/src/app/shared/result.enum.ts new file mode 100644 index 0000000..7e70c8d --- /dev/null +++ b/src/app/shared/result.enum.ts @@ -0,0 +1,7 @@ +export enum Result { + Aborted = 'ABORTED', + Failure = 'FAILURE', + NotBuilt = 'NOT_BUILT', + Success = 'SUCCESS', + Unstable = 'UNSTABLE', +} diff --git a/src/app/shared/service/commit-tracker.service.ts b/src/app/shared/service/commit-tracker.service.ts new file mode 100644 index 0000000..bd04278 --- /dev/null +++ b/src/app/shared/service/commit-tracker.service.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { Observable } from 'rxjs/Observable'; + +import { environment } from '../../../environments/environment'; +import { Commit } from '../commit'; +import { TeamService } from './team.service'; + +@Injectable() +export class CommitTrackerService implements Resolve> { + + private apiEndPoint = environment.commitTrackerApiUrl; + private cachedCommits: Array = []; + + constructor(private httpClient: HttpClient, + private teamService: TeamService) { } + + public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise> { + return this.getTeamCommits(this.teamService.teamMembers).toPromise(); + } + + public getTeamCommits(signums: Array): Observable> { + return this.httpClient.post>(this.apiEndPoint, { + json_signums: signums + }); + } + + get commits(): Array { + return this.cachedCommits; + } + + set commits(commits: Array) { + this.cachedCommits = commits; + } +} diff --git a/src/app/shared/service/slide.service.spec.ts b/src/app/shared/service/slide.service.spec.ts new file mode 100644 index 0000000..c38f45f --- /dev/null +++ b/src/app/shared/service/slide.service.spec.ts @@ -0,0 +1,15 @@ +import { TestBed, inject } from '@angular/core/testing'; + +import { SlideService } from './slide.service'; + +describe('SlideService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [SlideService] + }); + }); + + it('should be created', inject([SlideService], (service: SlideService) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/src/app/shared/service/slide.service.ts b/src/app/shared/service/slide.service.ts new file mode 100644 index 0000000..8bdb738 --- /dev/null +++ b/src/app/shared/service/slide.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class SlideService { + + constructor() { } + +} diff --git a/src/app/shared/service/sommit-tracker.service.spec.ts b/src/app/shared/service/sommit-tracker.service.spec.ts new file mode 100644 index 0000000..66db2d9 --- /dev/null +++ b/src/app/shared/service/sommit-tracker.service.spec.ts @@ -0,0 +1,15 @@ +import { TestBed, inject } from '@angular/core/testing'; + +import { CommitTrackerService } from './commit-tracker.service'; + +describe('CommitTrackerService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [CommitTrackerService] + }); + }); + + it('should be created', inject([CommitTrackerService], (service: CommitTrackerService) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/src/app/shared/service/team.service.spec.ts b/src/app/shared/service/team.service.spec.ts new file mode 100644 index 0000000..42ce51e --- /dev/null +++ b/src/app/shared/service/team.service.spec.ts @@ -0,0 +1,15 @@ +import { TestBed, inject } from '@angular/core/testing'; + +import { TeamService } from './team.service'; + +describe('TeamService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [TeamService] + }); + }); + + it('should be created', inject([TeamService], (service: TeamService) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/src/app/shared/service/team.service.ts b/src/app/shared/service/team.service.ts new file mode 100644 index 0000000..83446ee --- /dev/null +++ b/src/app/shared/service/team.service.ts @@ -0,0 +1,48 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; +import { Observable } from 'rxjs/Observable'; + +import { environment } from '../../../environments/environment'; +import { Team } from '../team'; + +@Injectable() +export class TeamService implements Resolve> { + + private apiEndPoint = environment.apiUrl + '/api/team'; + private cachedTeams: Array = []; + + constructor(private httpClient: HttpClient) { } + + public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise> { + return this.list().toPromise(); + } + + public list(): Observable> { + return this.httpClient.get>(this.apiEndPoint); + } + + public create(team: Team) { + return this.httpClient.post(this.apiEndPoint, team); + } + + public update(team: Team) { + return this.httpClient.put(`${this.apiEndPoint}/${team.id.toString()}`, team); + } + + public delete(team: Team) { + return this.httpClient.delete(`${this.apiEndPoint}/${team.id.toString()}`); + } + + get teams(): Array { + return this.cachedTeams; + } + + set teams(teams: Array) { + this.cachedTeams = teams; + } + + get teamMembers(): Array { + return ['eztoli', 'etamecs', 'esteist', 'emrtsis', 'erudvel']; + } +} diff --git a/src/app/shared/slide.ts b/src/app/shared/slide.ts new file mode 100644 index 0000000..73abaec --- /dev/null +++ b/src/app/shared/slide.ts @@ -0,0 +1,11 @@ +import { Team } from './team'; + +export class Slide { + id: Number; + title: String; + team: Team; + slideData: String; + isVisible: boolean; + createdAt: String; + updatedAt: String; +} diff --git a/src/app/shared/team.ts b/src/app/shared/team.ts new file mode 100644 index 0000000..2127d6d --- /dev/null +++ b/src/app/shared/team.ts @@ -0,0 +1,10 @@ +import { Member } from './member'; + +export class Team { + id: Number; + name: String; + members: Array; + isActive: boolean; + createdAt: String; + updatedAt: String; +} diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 3612073..7f8e77d 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -1,3 +1,5 @@ export const environment = { - production: true + production: true, + apiUrl: 'http://localhost:8080', + commitTrackerApiUrl: 'https://mtas-trex.rnd.ki.sw.ericsson.se:8080/committracker/api/' }; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index b7f639a..9b715da 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -4,5 +4,7 @@ // The list of which env maps to which file can be found in `.angular-cli.json`. export const environment = { - production: false + production: false, + apiUrl: 'http://localhost:8080', + commitTrackerApiUrl: 'https://mtas-trex.rnd.ki.sw.ericsson.se:8080/committracker/api/' }; diff --git a/src/styles.css b/src/styles.css index 90d4ee0..009c911 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1 +1,8 @@ /* You can add global styles to this file, and also import other style files */ +.main.container { + margin-top: 5em; +} + +.ui.checkbox > label[for] { + cursor: pointer; +}