diff --git a/Back/skydiveLogs-api.Business/Interface/IStatsService.cs b/Back/skydiveLogs-api.Business/Interface/IStatsService.cs index 2f23af2..2b20d23 100644 --- a/Back/skydiveLogs-api.Business/Interface/IStatsService.cs +++ b/Back/skydiveLogs-api.Business/Interface/IStatsService.cs @@ -22,5 +22,7 @@ namespace skydiveLogs_api.Business.Interface IEnumerable GetStatsForLastMonthByDz(); IEnumerable GetStatsForLastMonthByJumpType(); + + SimpleSummary GetSimpleSummary(); } } diff --git a/Back/skydiveLogs-api.Business/StatsService.cs b/Back/skydiveLogs-api.Business/StatsService.cs index 1475135..af6e597 100644 --- a/Back/skydiveLogs-api.Business/StatsService.cs +++ b/Back/skydiveLogs-api.Business/StatsService.cs @@ -159,6 +159,20 @@ namespace skydiveLogs_api.Business .ToList(); } + public SimpleSummary GetSimpleSummary() + { + var allJumps = _jumpRepository.GetAll(); + + var lastJump = allJumps.OrderByDescending(j => j.JumpDate).FirstOrDefault(); + + return new SimpleSummary + { + LastJump = lastJump, + TotalJumps = allJumps.Count(), + TotalCutaways = allJumps.Where(j => j.WithCutaway).Count() + }; + } + private readonly IJumpRepository _jumpRepository; } } diff --git a/Back/skydiveLogs-api.Model/SimpleSummary.cs b/Back/skydiveLogs-api.Model/SimpleSummary.cs new file mode 100644 index 0000000..39459e8 --- /dev/null +++ b/Back/skydiveLogs-api.Model/SimpleSummary.cs @@ -0,0 +1,11 @@ +namespace skydiveLogs_api.Model +{ + public class SimpleSummary + { + public int TotalJumps { get; set; } + + public int TotalCutaways { get; set; } + + public Jump LastJump { get; set; } + } +} diff --git a/Back/skydiveLogs-api.Model/Statistic.cs b/Back/skydiveLogs-api.Model/Statistic.cs index 197b4aa..7aacd02 100644 --- a/Back/skydiveLogs-api.Model/Statistic.cs +++ b/Back/skydiveLogs-api.Model/Statistic.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace skydiveLogs_api.Model +namespace skydiveLogs_api.Model { public class Statistic { diff --git a/Back/skydiveLogs-api/Controllers/StatsController.cs b/Back/skydiveLogs-api/Controllers/StatsController.cs index a7c1780..f831730 100644 --- a/Back/skydiveLogs-api/Controllers/StatsController.cs +++ b/Back/skydiveLogs-api/Controllers/StatsController.cs @@ -21,6 +21,15 @@ namespace skydiveLogs_api.Controllers _mapper = mapper; } + [HttpGet("Simple")] + [EnableCors] + public SimpleSummaryResp Simple() + { + var result = _statsService.GetSimpleSummary(); + + return _mapper.Map(result); + } + [HttpGet("ByDz")] [EnableCors] public IEnumerable ByDz() diff --git a/Back/skydiveLogs-api/DataContract/SimpleSummaryResp.cs b/Back/skydiveLogs-api/DataContract/SimpleSummaryResp.cs new file mode 100644 index 0000000..4329148 --- /dev/null +++ b/Back/skydiveLogs-api/DataContract/SimpleSummaryResp.cs @@ -0,0 +1,11 @@ +namespace skydiveLogs_api.DataContract +{ + public class SimpleSummaryResp + { + public int TotalJumps { get; set; } + + public int TotalCutaways { get; set; } + + public JumpResp LastJump { get; set; } + } +} diff --git a/Back/skydiveLogs-api/Mapper/ModelProfile.cs b/Back/skydiveLogs-api/Mapper/ModelProfile.cs index 0e99c05..68f60f2 100644 --- a/Back/skydiveLogs-api/Mapper/ModelProfile.cs +++ b/Back/skydiveLogs-api/Mapper/ModelProfile.cs @@ -18,6 +18,8 @@ namespace skydiveLogs_api.Mapper CreateMap(); CreateMap(); CreateMap(); + + CreateMap(); } } } diff --git a/Front/skydivelogs-app/src/app/summary/summary.component.css b/Front/skydivelogs-app/src/app/summary/summary.component.css index 1003f9d..bda661c 100644 --- a/Front/skydivelogs-app/src/app/summary/summary.component.css +++ b/Front/skydivelogs-app/src/app/summary/summary.component.css @@ -3,8 +3,13 @@ } .labelTab { - margin: 5px; + padding: 5px; cursor: pointer; text-decoration: underline; font-weight: bold; + background-color: lightgray; +} + +.labelTab.selected { + background-color: gray !important; } diff --git a/Front/skydivelogs-app/src/app/summary/summary.component.html b/Front/skydivelogs-app/src/app/summary/summary.component.html index 991d514..2565b6b 100644 --- a/Front/skydivelogs-app/src/app/summary/summary.component.html +++ b/Front/skydivelogs-app/src/app/summary/summary.component.html @@ -1,26 +1,28 @@
- - 850 + + : {{ totalJumps }}
- - 1 + + : {{ totalCutaways }}
- - 5 Février 2020 à Barcelonnette + + : {{ lastJump }}
- - - - - - - + + + + + + +
diff --git a/Front/skydivelogs-app/src/app/summary/summary.component.ts b/Front/skydivelogs-app/src/app/summary/summary.component.ts index e773a32..3c58e8a 100644 --- a/Front/skydivelogs-app/src/app/summary/summary.component.ts +++ b/Front/skydivelogs-app/src/app/summary/summary.component.ts @@ -32,17 +32,27 @@ export class SummaryComponent implements OnInit { private _shownStats: Map; public StatType = StatType; + public totalJumps: number; + public totalCutaways: number; + public lastJump: string; + constructor( - private serviceApi: StatsService, - private serviceComm: ServiceComm + private _serviceApi: StatsService, + private _serviceComm: ServiceComm ) { } ngOnInit() { this.initShownStats(); - this.serviceComm.UpdatedComponentTitle('Summary'); + this._serviceComm.UpdatedComponentTitle('Summary'); - const statsResult = this.serviceApi.getStatsOfJumps(); + const statsResult = this._serviceApi.getStatsOfJumps(); + + statsResult.simpleSummary.subscribe(data => { + this.totalJumps = data.totalJumps; + this.totalCutaways = data.totalCutaways; + this.lastJump = data.lastJump.jumpDate + ' (' + data.lastJump.dropZone.name + ')'; + }); statsResult.statsByDz.subscribe(data => { this.dsNbJumpByDz = new MatTableDataSource(data); diff --git a/Front/skydivelogs-app/src/models/stats.ts b/Front/skydivelogs-app/src/models/stats.ts index 3c584e5..7f19a3c 100644 --- a/Front/skydivelogs-app/src/models/stats.ts +++ b/Front/skydivelogs-app/src/models/stats.ts @@ -1,4 +1,5 @@ import { Observable } from 'rxjs'; +import { JumpResp } from './jump'; export enum StatType { ForLastMonth = 1, @@ -11,6 +12,8 @@ export enum StatType { } export class StatsResp { + public simpleSummary: Observable; + public statsByDz: Observable>; public statsByAircraft: Observable>; public statsByGear: Observable>; @@ -21,6 +24,18 @@ export class StatsResp { public statsForLastMonth: Observable; } +export class SimpleSummary { + constructor(data: any) { + this.totalJumps = data.totalJumps; + this.totalCutaways = data.totalCutaways; + this.lastJump = new JumpResp(data.lastJump); + } + + public totalJumps: number; + public totalCutaways: number; + public lastJump: JumpResp; +} + export class StatsByDzResp { constructor(data: any) { Object.assign(this, data); diff --git a/Front/skydivelogs-app/src/services/stats.service.ts b/Front/skydivelogs-app/src/services/stats.service.ts index f807f2c..1fee099 100644 --- a/Front/skydivelogs-app/src/services/stats.service.ts +++ b/Front/skydivelogs-app/src/services/stats.service.ts @@ -1,8 +1,8 @@ -import { Injectable } from "@angular/core"; -import { HttpClient, HttpHeaders } from "@angular/common/http"; -import { Observable } from "rxjs"; -import { map } from "rxjs/operators"; -import { environment } from "../environments/environment"; +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { environment } from '../environments/environment'; import { StatsResp, StatsByDzResp, @@ -11,20 +11,23 @@ import { StatsByGearResp, StatsByYearResp, StatsForLastMonthResp, - StatsForLastYearResp -} from "../models/stats"; + StatsForLastYearResp, + SimpleSummary +} from '../models/stats'; @Injectable() export class StatsService { private readonly headers = new HttpHeaders({ - "Access-Control-Allow-Origin": environment.urlApi + 'Access-Control-Allow-Origin': environment.urlApi }); - constructor(private http: HttpClient) {} + constructor(private http: HttpClient) { } public getStatsOfJumps(): StatsResp { const resultats = new StatsResp(); + resultats.simpleSummary = this.getSimpleSummary(); + resultats.statsByDz = this.getStatsByDz(); resultats.statsByAircraft = this.getStatsByAircraft(); resultats.statsByJumpType = this.getStatsByJumpType(); @@ -37,6 +40,19 @@ export class StatsService { return resultats; } + private getSimpleSummary(): Observable { + return this.http + .get>(`${environment.urlApi}/api/Stats/Simple`, { + headers: this.headers + }) + .pipe( + map(response => { + const stats = new SimpleSummary(response); + return stats; + }) + ); + } + private getStatsByDz(): Observable> { return this.http .get>(`${environment.urlApi}/api/Stats/ByDz`, {