From 284b18a1a7147d3afb612de2273f57d424999db5 Mon Sep 17 00:00:00 2001 From: Iulia Dormenco Date: Fri, 4 Dec 2020 12:46:57 +0200 Subject: [PATCH 1/2] rename classes and fields to english, reorganize files --- .../Controllers/StatisticsController.cs | 133 ++++++++---------- .../Handlers/MiniStatisticsQueryHandler.cs | 25 ++-- .../Handlers/MiniStatisticsRequests.cs | 24 ---- .../Handlers/StatisticsQueryBuilder.cs | 35 ++--- .../Handlers/StatisticsQueryHandler.cs | 47 +++---- .../Models/FilterStatisticsModel.cs | 10 ++ .../Models/OptionStatisticsModel.cs | 8 ++ .../Models/SimpleStatisticsModel.cs | 16 +-- .../Models/StatisticsGroupingTypes.cs | 4 +- .../Models/StatisticsOptionsModel.cs | 8 +- .../StatisticsProfile.cs} | 14 +- .../Queries/AnswersQuery.cs | 9 ++ .../Queries/CountiesVisitedQuery.cs | 9 ++ .../Queries/FlaggedAnswersQuery.cs | 9 ++ .../Queries/LoggedInObserversQuery.cs | 9 ++ .../Queries/NotesUploadedQuery.cs | 9 ++ .../Queries/StationsVisitedQuery.cs | 9 ++ .../Queries/StatisticsObserverNumberQuery.cs | 10 ++ .../Queries/StatisticsPaginatedQuery.cs | 4 +- .../Queries/StatisticsQuery.cs | 4 +- .../StatisticsTopIrregularitiesQuery.cs | 12 ++ 21 files changed, 209 insertions(+), 199 deletions(-) delete mode 100644 src/api/VoteMonitor.Api.Statistics/Handlers/MiniStatisticsRequests.cs create mode 100644 src/api/VoteMonitor.Api.Statistics/Models/FilterStatisticsModel.cs create mode 100644 src/api/VoteMonitor.Api.Statistics/Models/OptionStatisticsModel.cs rename src/api/VoteMonitor.Api.Statistics/{Models/SimpleStatisticsFilter.cs => Profiles/StatisticsProfile.cs} (58%) create mode 100644 src/api/VoteMonitor.Api.Statistics/Queries/AnswersQuery.cs create mode 100644 src/api/VoteMonitor.Api.Statistics/Queries/CountiesVisitedQuery.cs create mode 100644 src/api/VoteMonitor.Api.Statistics/Queries/FlaggedAnswersQuery.cs create mode 100644 src/api/VoteMonitor.Api.Statistics/Queries/LoggedInObserversQuery.cs create mode 100644 src/api/VoteMonitor.Api.Statistics/Queries/NotesUploadedQuery.cs create mode 100644 src/api/VoteMonitor.Api.Statistics/Queries/StationsVisitedQuery.cs create mode 100644 src/api/VoteMonitor.Api.Statistics/Queries/StatisticsObserverNumberQuery.cs create mode 100644 src/api/VoteMonitor.Api.Statistics/Queries/StatisticsTopIrregularitiesQuery.cs diff --git a/src/api/VoteMonitor.Api.Statistics/Controllers/StatisticsController.cs b/src/api/VoteMonitor.Api.Statistics/Controllers/StatisticsController.cs index 07845b11..ff1f27e2 100644 --- a/src/api/VoteMonitor.Api.Statistics/Controllers/StatisticsController.cs +++ b/src/api/VoteMonitor.Api.Statistics/Controllers/StatisticsController.cs @@ -7,7 +7,6 @@ using System.Threading.Tasks; using VoteMonitor.Api.Core; using VoteMonitor.Api.Core.Options; -using VoteMonitor.Api.Statistics.Handlers; using VoteMonitor.Api.Statistics.Models; using VoteMonitor.Api.Statistics.Queries; @@ -29,7 +28,7 @@ public StatisticsController(IMediator mediator, IConfiguration configuration, IO } private int NgoId => this.GetIdOngOrDefault(_configuration.GetValue("DefaultIdOng")); - private bool Organizer => this.GetOrganizatorOrDefault(_configuration.GetValue("DefaultOrganizator")); + private bool IsOrganizer => this.GetOrganizatorOrDefault(_configuration.GetValue("DefaultOrganizator")); /// /// Returns top counties by observer number @@ -39,12 +38,12 @@ public StatisticsController(IMediator mediator, IConfiguration configuration, IO [HttpGet] [Route("observerNumber")] [Authorize("NgoAdmin")] - public async Task> NumarObservatori(PagingModel model) + public async Task> ObserverNumber(PagingModel model) { - return await _mediator.Send(new StatisticsObserversNumberQuery + return await _mediator.Send(new StatisticsObserverNumberQuery { - IdONG = NgoId, - Organizator = Organizer, + NgoId = NgoId, + IsOrganizer = IsOrganizer, PageSize = model.PageSize, Page = model.Page, CacheHours = _cacheOptions.Hours, @@ -57,26 +56,26 @@ public async Task> NumarObservatori(Pagin /// Returns top counties or polling stations by number of irregularities /// /// Pagination details (default Page=1, PageSize=20) - /// Grouping (0 - County | 1 - PollingStation) - /// FormCode (formeCode for which you want to retrieve statistics, use empty string "" for all forms) + /// GroupingType (0 - County | 1 - PollingStation) + /// FormCode (formCode for which you want to retrieve statistics, use empty string "" for all forms) /// /// [HttpGet] [Route("irregularities")] [Authorize("NgoAdmin")] - public async Task> Irregularities(SimpleStatisticsFilter model) + public async Task> Irregularities(FilterStatisticsModel model) { - if (model.GroupingType == StatisticsGroupingTypes.Sectie) + if (model.GroupingType == StatisticsGroupingTypes.PollingStation) { model.PageSize = PagingDefaultsConstants.DEFAULT_PAGE_SIZE; } - return await _mediator.Send(new StatisticiTopSesizariQuery + return await _mediator.Send(new StatisticsTopIrregularitiesQuery { - IdONG = NgoId, - Organizator = Organizer, - Grupare = model.GroupingType, - Formular = model.FormCode, + NgoId = NgoId, + IsOrganizer = IsOrganizer, + GroupType = model.GroupingType, + FormCode = model.FormCode, Page = model.Page, PageSize = model.PageSize, CacheHours = _cacheOptions.Hours, @@ -95,12 +94,12 @@ public async Task> Irregularities(SimpleS [Authorize("NgoAdmin")] public async Task> CountiesIrregularities(PagingModel model) { - return await _mediator.Send(new StatisticiTopSesizariQuery + return await _mediator.Send(new StatisticsTopIrregularitiesQuery { - IdONG = NgoId, - Organizator = Organizer, - Grupare = StatisticsGroupingTypes.Judet, - Formular = null, + NgoId = NgoId, + IsOrganizer = IsOrganizer, + GroupType = StatisticsGroupingTypes.County, + FormCode = null, Page = model.Page, PageSize = model.PageSize, CacheHours = _cacheOptions.Hours, @@ -119,16 +118,12 @@ public async Task> CountiesIrregularities [Authorize("NgoAdmin")] public async Task> PollingStationIrregularities(PagingModel model) { - var idONG = this.GetIdOngOrDefault(_configuration.GetValue("DefaultIdOng")); - var organizator = this.GetOrganizatorOrDefault(_configuration.GetValue("DefaultOrganizator")); - model.PageSize = PagingDefaultsConstants.DEFAULT_PAGE_SIZE; - - return await _mediator.Send(new StatisticiTopSesizariQuery + return await _mediator.Send(new StatisticsTopIrregularitiesQuery { - IdONG = NgoId, - Organizator = Organizer, - Grupare = StatisticsGroupingTypes.Sectie, - Formular = null, + NgoId = NgoId, + IsOrganizer = IsOrganizer, + GroupType = StatisticsGroupingTypes.PollingStation, + FormCode = null, Page = model.Page, PageSize = model.PageSize, CacheHours = _cacheOptions.Hours, @@ -147,12 +142,12 @@ public async Task> PollingStationIrregula [Authorize("NgoAdmin")] public async Task> CountiesOpeningIrregularities(PagingModel model) { - return await _mediator.Send(new StatisticiTopSesizariQuery + return await _mediator.Send(new StatisticsTopIrregularitiesQuery { - IdONG = NgoId, - Organizator = Organizer, - Grupare = StatisticsGroupingTypes.Judet, - Formular = "A", + NgoId = NgoId, + IsOrganizer = IsOrganizer, + GroupType = StatisticsGroupingTypes.County, + FormCode = "A", Page = model.Page, PageSize = model.PageSize, CacheHours = _cacheOptions.Hours, @@ -169,18 +164,14 @@ public async Task> CountiesOpeningIrregul [HttpGet] [Route("pollingStationOpeningIrregularities")] [Authorize("NgoAdmin")] - public async Task> PollingStationOpeningIrregularities(PagingModel model) + public async Task> PollingStationsOpeningIrregularities(PagingModel model) { - var idONG = this.GetIdOngOrDefault(_configuration.GetValue("DefaultIdOng")); - var organizator = this.GetOrganizatorOrDefault(_configuration.GetValue("DefaultOrganizator")); - model.PageSize = PagingDefaultsConstants.DEFAULT_PAGE_SIZE; - - return await _mediator.Send(new StatisticiTopSesizariQuery + return await _mediator.Send(new StatisticsTopIrregularitiesQuery { - IdONG = NgoId, - Organizator = Organizer, - Grupare = StatisticsGroupingTypes.Sectie, - Formular = "A", + NgoId = NgoId, + IsOrganizer = IsOrganizer, + GroupType = StatisticsGroupingTypes.PollingStation, + FormCode = "A", Page = model.Page, PageSize = model.PageSize, CacheHours = _cacheOptions.Hours, @@ -199,12 +190,12 @@ public async Task> PollingStationOpeningI [Authorize("NgoAdmin")] public async Task> CountiesByCountingIrregularities(PagingModel model) { - return await _mediator.Send(new StatisticiTopSesizariQuery + return await _mediator.Send(new StatisticsTopIrregularitiesQuery { - IdONG = NgoId, - Organizator = Organizer, - Grupare = StatisticsGroupingTypes.Judet, - Formular = "C", + NgoId = NgoId, + IsOrganizer = IsOrganizer, + GroupType = StatisticsGroupingTypes.County, + FormCode = "C", Page = model.Page, PageSize = model.PageSize, CacheHours = _cacheOptions.Hours, @@ -223,16 +214,12 @@ public async Task> CountiesByCountingIrre [Authorize("NgoAdmin")] public async Task> PollingStationsByCountingIrregularities(PagingModel model) { - var idONG = this.GetIdOngOrDefault(_configuration.GetValue("DefaultIdOng")); - var organizator = this.GetOrganizatorOrDefault(_configuration.GetValue("DefaultOrganizator")); - model.PageSize = PagingDefaultsConstants.DEFAULT_PAGE_SIZE; - - return await _mediator.Send(new StatisticiTopSesizariQuery + return await _mediator.Send(new StatisticsTopIrregularitiesQuery { - IdONG = NgoId, - Organizator = Organizer, - Grupare = StatisticsGroupingTypes.Sectie, - Formular = "C", + NgoId = NgoId, + IsOrganizer = IsOrganizer, + GroupType = StatisticsGroupingTypes.PollingStation, + FormCode = "C", Page = model.Page, PageSize = model.PageSize, CacheHours = _cacheOptions.Hours, @@ -248,15 +235,15 @@ public async Task> PollingStationsByCount /// Id - the questionId to retrieve statistics for /// [HttpGet] - [Route("RaspunsuriNumarareOptiuni")] + [Route("countAnswersByQuestion")] [Authorize("NgoAdmin")] public async Task CountAnswersForQuestion(OptionsFilterModel model) { return await _mediator.Send(new StatisticsOptionsQuery { QuestionId = model.QuestionId, - IdONG = NgoId, - Organizator = Organizer, + NgoId = NgoId, + IsOrganizer = IsOrganizer, CacheHours = _cacheOptions.Hours, CacheMinutes = _cacheOptions.Minutes, CacheSeconds = _cacheOptions.Seconds @@ -268,42 +255,42 @@ public async Task CountAnswersForQuestion(OptionsFilterM [Route("mini/answers")] public async Task Answers() { - return await _mediator.Send(new AnswersRequest()); + return await _mediator.Send(new AnswersQuery()); } [HttpGet] [AllowAnonymous] [Route("mini/stations")] public async Task StationsVisited() { - return await _mediator.Send(new StationsVisitedRequest()); + return await _mediator.Send(new StationsVisitedQuery()); } [HttpGet] [AllowAnonymous] [Route("mini/counties")] public async Task Counties() { - return await _mediator.Send(new CountiesVisitedRequest()); + return await _mediator.Send(new CountiesVisitedQuery()); } [HttpGet] [AllowAnonymous] [Route("mini/notes")] public async Task Notes() { - return await _mediator.Send(new NotesUploadedRequest()); + return await _mediator.Send(new NotesUploadedQuery()); } [HttpGet] [AllowAnonymous] [Route("mini/loggedinobservers")] public async Task LoggedInObservers() { - return await _mediator.Send(new LoggedInObserversRequest()); + return await _mediator.Send(new LoggedInObserversQuery()); } [HttpGet] [AllowAnonymous] [Route("mini/flaggedanswers")] public async Task FlaggedAnswers() { - return await _mediator.Send(new FlaggedAnswersRequest()); + return await _mediator.Send(new FlaggedAnswersQuery()); } [HttpGet] [AllowAnonymous] @@ -312,12 +299,12 @@ public async Task> All() { var list = new List { - await _mediator.Send(new AnswersRequest()), - await _mediator.Send(new StationsVisitedRequest()), - await _mediator.Send(new CountiesVisitedRequest()), - await _mediator.Send(new NotesUploadedRequest()), - await _mediator.Send(new LoggedInObserversRequest()), - await _mediator.Send(new FlaggedAnswersRequest()) + await _mediator.Send(new AnswersQuery()), + await _mediator.Send(new StationsVisitedQuery()), + await _mediator.Send(new CountiesVisitedQuery()), + await _mediator.Send(new NotesUploadedQuery()), + await _mediator.Send(new LoggedInObserversQuery()), + await _mediator.Send(new FlaggedAnswersQuery()) }; return list; diff --git a/src/api/VoteMonitor.Api.Statistics/Handlers/MiniStatisticsQueryHandler.cs b/src/api/VoteMonitor.Api.Statistics/Handlers/MiniStatisticsQueryHandler.cs index 12294dbc..c887c2ce 100644 --- a/src/api/VoteMonitor.Api.Statistics/Handlers/MiniStatisticsQueryHandler.cs +++ b/src/api/VoteMonitor.Api.Statistics/Handlers/MiniStatisticsQueryHandler.cs @@ -4,17 +4,18 @@ using System.Threading; using System.Threading.Tasks; using VoteMonitor.Api.Statistics.Models; +using VoteMonitor.Api.Statistics.Queries; using VoteMonitor.Entities; namespace VoteMonitor.Api.Statistics.Handlers { public class MiniStatisticsQueryHandler : - IRequestHandler, - IRequestHandler, - IRequestHandler, - IRequestHandler, - IRequestHandler, - IRequestHandler + IRequestHandler, + IRequestHandler, + IRequestHandler, + IRequestHandler, + IRequestHandler, + IRequestHandler { private readonly VoteMonitorContext _context; @@ -23,7 +24,7 @@ public MiniStatisticsQueryHandler(VoteMonitorContext context) _context = context; } - public async Task Handle(AnswersRequest message, CancellationToken token) + public async Task Handle(AnswersQuery message, CancellationToken token) { var number = await _context.Answers .Include(a => a.Observer) @@ -38,7 +39,7 @@ public async Task Handle(AnswersRequest message, Cancella Value = number.ToString() }; } - public async Task Handle(StationsVisitedRequest message, CancellationToken token) + public async Task Handle(StationsVisitedQuery message, CancellationToken token) { var number = await _context.Answers .Include(a => a.Observer) @@ -55,7 +56,7 @@ public async Task Handle(StationsVisitedRequest message, Value = number.ToString() }; } - public async Task Handle(CountiesVisitedRequest message, CancellationToken token) + public async Task Handle(CountiesVisitedQuery message, CancellationToken token) { var number = await _context.Answers .Include(a => a.Observer) @@ -72,7 +73,7 @@ public async Task Handle(CountiesVisitedRequest message, Value = number.ToString() }; } - public async Task Handle(NotesUploadedRequest message, CancellationToken token) + public async Task Handle(NotesUploadedQuery message, CancellationToken token) { var number = await _context.Notes .Include(n => n.Observer) @@ -87,7 +88,7 @@ public async Task Handle(NotesUploadedRequest message, Ca Value = number.ToString() }; } - public async Task Handle(LoggedInObserversRequest message, CancellationToken token) + public async Task Handle(LoggedInObserversQuery message, CancellationToken token) { var number = await _context.PollingStationInfos .Include(a => a.Observer) @@ -104,7 +105,7 @@ public async Task Handle(LoggedInObserversRequest message Value = number.ToString() }; } - public async Task Handle(FlaggedAnswersRequest message, CancellationToken token) + public async Task Handle(FlaggedAnswersQuery message, CancellationToken token) { var number = await _context.Answers .Include(a => a.Observer) diff --git a/src/api/VoteMonitor.Api.Statistics/Handlers/MiniStatisticsRequests.cs b/src/api/VoteMonitor.Api.Statistics/Handlers/MiniStatisticsRequests.cs deleted file mode 100644 index f219f475..00000000 --- a/src/api/VoteMonitor.Api.Statistics/Handlers/MiniStatisticsRequests.cs +++ /dev/null @@ -1,24 +0,0 @@ -using MediatR; -using VoteMonitor.Api.Statistics.Models; - -namespace VoteMonitor.Api.Statistics.Handlers -{ - public class AnswersRequest : IRequest - { - } - public class StationsVisitedRequest : IRequest - { - } - public class FlaggedAnswersRequest : IRequest - { - } - public class CountiesVisitedRequest : IRequest - { - } - public class NotesUploadedRequest : IRequest - { - } - public class LoggedInObserversRequest : IRequest - { - } -} diff --git a/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryBuilder.cs b/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryBuilder.cs index b6d05ebe..7f6b9a0f 100644 --- a/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryBuilder.cs +++ b/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryBuilder.cs @@ -25,42 +25,25 @@ public void Append(string statement) /// Adds an AND condition to the WHERE clause /// Filters statistics by FormCode /// - public void AndFormularFilter(string formular) + public void AndFormCodeFilter(string formCode) { - if (!string.IsNullOrEmpty(formular)) + if (!string.IsNullOrEmpty(formCode)) { - Query = $"{Query} AND f.Code = '{formular}'"; - CacheKey = $"{CacheKey}-{formular}"; + Query = $"{Query} AND f.Code = '{formCode}'"; + CacheKey = $"{CacheKey}-{formCode}"; } } /// /// Adds an AND condition to the WHERE clause - /// Filters statistics by IdNgo if the ong is admin + /// Filters statistics by gnoId if the ngo is admin /// - public void AndOngFilter(bool organizator, int idONG) + public void AndOngFilter(bool isOrganizer, int ngoId) { - if (!organizator) + if (!isOrganizer) { - Query = $"{Query} AND O.IdNgo = {idONG}"; - CacheKey = $"{CacheKey}-{idONG}"; - } - else - { - CacheKey = $"{CacheKey}-Organizer"; - } - } - - /// - /// Adds a WHERE clause - /// Filters statistics by IdNgo if the ong is admin - /// - public void WhereOngFilter(bool organizator, int idONG) - { - if (!organizator) - { - Query = $"{Query} WHERE O.IdNgo = {idONG}"; - CacheKey = $"{CacheKey}-{idONG}"; + Query = $"{Query} AND O.IdNgo = {ngoId}"; + CacheKey = $"{CacheKey}-{ngoId}"; } else { diff --git a/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryHandler.cs b/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryHandler.cs index e4d6a00e..47b2cf90 100644 --- a/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryHandler.cs +++ b/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryHandler.cs @@ -15,8 +15,8 @@ namespace VoteMonitor.Api.Statistics.Handlers { public class StatisticsQueryHandler : - IRequestHandler>, - IRequestHandler>, + IRequestHandler>, + IRequestHandler>, IRequestHandler { private readonly VoteMonitorContext _context; @@ -44,7 +44,7 @@ FROM Answers AS A CacheKey = $"StatisticiOptiuni-{message.QuestionId}" }; - queryBuilder.AndOngFilter(message.Organizator, message.IdONG); + queryBuilder.AndOngFilter(message.IsOrganizer, message.NgoId); queryBuilder.Append("GROUP BY O.Text, O.Id, OQ.Flagged"); return await _cacheService.GetOrSaveDataInCacheAsync(queryBuilder.CacheKey, @@ -57,12 +57,12 @@ FROM Answers AS A return new StatisticsOptionsModel { QuestionId = message.QuestionId, - Options = records.Select(s => new OptiuniStatisticsModel + Options = records.Select(s => new OptionStatisticsModel { OptionId = s.Code, Label = s.Label, Value = s.Value.ToString(), - Flagged = s.Flagged + IsFlagged = s.Flagged }) .ToList(), Total = records.Sum(s => s.Value) @@ -75,7 +75,7 @@ FROM Answers AS A ); } - public async Task> Handle(StatisticsObserversNumberQuery message, CancellationToken token) + public async Task> Handle(StatisticsObserverNumberQuery message, CancellationToken token) { var queryBuilder = new StatisticsQueryBuilder { @@ -87,12 +87,11 @@ FROM Answers a (nolock) CacheKey = "StatisticiObservatori" }; - queryBuilder.AndOngFilter(message.Organizator, message.IdONG); - //queryBuilder.Append("GROUP BY J.Name ORDER BY Value DESC"); + queryBuilder.AndOngFilter(message.IsOrganizer, message.NgoId); queryBuilder.Append("group by CountyCode order by [Value] desc"); - // get or save all records in cache - var records = await _cacheService.GetOrSaveDataInCacheAsync(queryBuilder.CacheKey, + var records = await _cacheService.GetOrSaveDataInCacheAsync( + queryBuilder.CacheKey, async () => await _context.SimpleStatistics .FromSqlRaw(queryBuilder.Query) .ToListAsync(cancellationToken: token), @@ -102,7 +101,6 @@ FROM Answers a (nolock) } ); - // perform count and pagination on the records retrieved from the cache var pagedList = records.Paginate(message.Page, message.PageSize); return new ApiListResponse @@ -110,18 +108,18 @@ FROM Answers a (nolock) Data = pagedList.Select(x => _mapper.Map(x)).ToList(), Page = message.Page, PageSize = message.PageSize, - TotalItems = records.Count() + TotalItems = records.Count }; } - public async Task> Handle(StatisticiTopSesizariQuery message, CancellationToken token) + public async Task> Handle(StatisticsTopIrregularitiesQuery message, CancellationToken token) { - return message.Grupare == StatisticsGroupingTypes.Judet - ? await GetSesizariJudete(message, token) - : await GetSesizariSectii(message, token); + return message.GroupType == StatisticsGroupingTypes.County + ? await GetCountyIrregularities(message, token) + : await GetPollingStationIrregularities(message, token); } - private async Task> GetSesizariJudete(StatisticiTopSesizariQuery message, CancellationToken token) + private async Task> GetCountyIrregularities(StatisticsTopIrregularitiesQuery message, CancellationToken token) { var queryBuilder = new StatisticsQueryBuilder { @@ -137,11 +135,10 @@ FROM Answers AS R CacheKey = "StatisticiJudete" }; - queryBuilder.AndOngFilter(message.Organizator, message.IdONG); - queryBuilder.AndFormularFilter(message.Formular); + queryBuilder.AndOngFilter(message.IsOrganizer, message.NgoId); + queryBuilder.AndFormCodeFilter(message.FormCode); queryBuilder.Append("GROUP BY R.CountyCode ORDER BY Value DESC"); - // get or save all records in cache var records = await _cacheService.GetOrSaveDataInCacheAsync(queryBuilder.CacheKey, async () => await _context.SimpleStatistics .FromSqlRaw(queryBuilder.Query) @@ -152,7 +149,6 @@ FROM Answers AS R } ); - // perform count and pagination on the records retrieved from the cache var pagedList = records.Paginate(message.Page, message.PageSize); return new ApiListResponse @@ -164,7 +160,7 @@ FROM Answers AS R }; } - private async Task> GetSesizariSectii(StatisticiTopSesizariQuery message, CancellationToken token) + private async Task> GetPollingStationIrregularities(StatisticsTopIrregularitiesQuery message, CancellationToken token) { var queryBuilder = new StatisticsQueryBuilder { @@ -176,15 +172,14 @@ FROM Answers AS R INNER JOIN Questions I ON I.Id = RD.IdQuestion INNER JOIN FormSections fs on i.IdSection = fs.Id INNER JOIN Forms f on fs.IdForm = f.Id - WHERE RD.Flagged = 1 AND N.IsActive =1 AND O.IsTestObserver = 0", + WHERE RD.IsFlagged = 1 AND N.IsActive =1 AND O.IsTestObserver = 0", CacheKey = "StatisticiSectii" }; - queryBuilder.AndOngFilter(message.Organizator, message.IdONG); - queryBuilder.AndFormularFilter(message.Formular); + queryBuilder.AndOngFilter(message.IsOrganizer, message.NgoId); + queryBuilder.AndFormCodeFilter(message.FormCode); queryBuilder.Append("GROUP BY R.CountyCode, R.PollingStationNumber"); - // get or save paginated response in cache return await _cacheService.GetOrSaveDataInCacheAsync($"{queryBuilder.CacheKey}-{message.Page}", async () => diff --git a/src/api/VoteMonitor.Api.Statistics/Models/FilterStatisticsModel.cs b/src/api/VoteMonitor.Api.Statistics/Models/FilterStatisticsModel.cs new file mode 100644 index 00000000..2d9e3847 --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Models/FilterStatisticsModel.cs @@ -0,0 +1,10 @@ +using VoteMonitor.Api.Core; + +namespace VoteMonitor.Api.Statistics.Models +{ + public class FilterStatisticsModel : PagingModel + { + public string FormCode { get; set; } + public StatisticsGroupingTypes GroupingType { get; set; } + } +} diff --git a/src/api/VoteMonitor.Api.Statistics/Models/OptionStatisticsModel.cs b/src/api/VoteMonitor.Api.Statistics/Models/OptionStatisticsModel.cs new file mode 100644 index 00000000..f40f9f6b --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Models/OptionStatisticsModel.cs @@ -0,0 +1,8 @@ +namespace VoteMonitor.Api.Statistics.Models +{ + public class OptionStatisticsModel : SimpleStatisticsModel + { + public int OptionId { get; set; } + public bool IsFlagged { get; set; } + } +} \ No newline at end of file diff --git a/src/api/VoteMonitor.Api.Statistics/Models/SimpleStatisticsModel.cs b/src/api/VoteMonitor.Api.Statistics/Models/SimpleStatisticsModel.cs index 30fe0f46..e890c9d4 100644 --- a/src/api/VoteMonitor.Api.Statistics/Models/SimpleStatisticsModel.cs +++ b/src/api/VoteMonitor.Api.Statistics/Models/SimpleStatisticsModel.cs @@ -1,22 +1,8 @@ -using MediatR; -using VoteMonitor.Api.Core; -using VoteMonitor.Api.Statistics.Queries; - -namespace VoteMonitor.Api.Statistics.Models +namespace VoteMonitor.Api.Statistics.Models { public class SimpleStatisticsModel { public string Label { get; set; } public string Value { get; set; } } - - public class StatisticsObserversNumberQuery : StatisticsPaginatedQuery, IRequest> - { - } - - public class StatisticiTopSesizariQuery : StatisticsPaginatedQuery, IRequest> - { - public string Formular { get; set; } - public StatisticsGroupingTypes Grupare { get; set; } - } } diff --git a/src/api/VoteMonitor.Api.Statistics/Models/StatisticsGroupingTypes.cs b/src/api/VoteMonitor.Api.Statistics/Models/StatisticsGroupingTypes.cs index 6b3b5013..92e8be29 100644 --- a/src/api/VoteMonitor.Api.Statistics/Models/StatisticsGroupingTypes.cs +++ b/src/api/VoteMonitor.Api.Statistics/Models/StatisticsGroupingTypes.cs @@ -2,7 +2,7 @@ { public enum StatisticsGroupingTypes { - Judet, - Sectie + County, + PollingStation } } diff --git a/src/api/VoteMonitor.Api.Statistics/Models/StatisticsOptionsModel.cs b/src/api/VoteMonitor.Api.Statistics/Models/StatisticsOptionsModel.cs index e541f164..9697aca8 100644 --- a/src/api/VoteMonitor.Api.Statistics/Models/StatisticsOptionsModel.cs +++ b/src/api/VoteMonitor.Api.Statistics/Models/StatisticsOptionsModel.cs @@ -5,13 +5,7 @@ namespace VoteMonitor.Api.Statistics.Models public class StatisticsOptionsModel { public int QuestionId { get; set; } - public IList Options { get; set; } + public IList Options { get; set; } public int Total { get; set; } } - - public class OptiuniStatisticsModel : SimpleStatisticsModel - { - public int OptionId { get; set; } - public bool Flagged { get; set; } - } } diff --git a/src/api/VoteMonitor.Api.Statistics/Models/SimpleStatisticsFilter.cs b/src/api/VoteMonitor.Api.Statistics/Profiles/StatisticsProfile.cs similarity index 58% rename from src/api/VoteMonitor.Api.Statistics/Models/SimpleStatisticsFilter.cs rename to src/api/VoteMonitor.Api.Statistics/Profiles/StatisticsProfile.cs index 7ea5f7a1..e251b700 100644 --- a/src/api/VoteMonitor.Api.Statistics/Models/SimpleStatisticsFilter.cs +++ b/src/api/VoteMonitor.Api.Statistics/Profiles/StatisticsProfile.cs @@ -1,15 +1,9 @@ using AutoMapper; -using VoteMonitor.Api.Core; +using VoteMonitor.Api.Statistics.Models; using VoteMonitor.Entities; -namespace VoteMonitor.Api.Statistics.Models +namespace VoteMonitor.Api.Statistics.Profiles { - public class SimpleStatisticsFilter : PagingModel - { - public string FormCode { get; set; } - public StatisticsGroupingTypes GroupingType { get; set; } - } - public class StatisticsProfile : Profile { public StatisticsProfile() @@ -19,7 +13,7 @@ public StatisticsProfile() .ForMember(dest => dest.Value, c => c.MapFrom(src => src.Value.ToString())); CreateMap() - .ForMember(dest => dest.Value, c => c.MapFrom(src => src.Value.ToString())); + .ForMember(dest => dest.Value, c => c.MapFrom(src => src.Value.ToString())); } } -} +} \ No newline at end of file diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/AnswersQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/AnswersQuery.cs new file mode 100644 index 00000000..cfe6cfbd --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Queries/AnswersQuery.cs @@ -0,0 +1,9 @@ +using MediatR; +using VoteMonitor.Api.Statistics.Models; + +namespace VoteMonitor.Api.Statistics.Queries +{ + public class AnswersQuery : IRequest + { + } +} \ No newline at end of file diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/CountiesVisitedQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/CountiesVisitedQuery.cs new file mode 100644 index 00000000..18a87183 --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Queries/CountiesVisitedQuery.cs @@ -0,0 +1,9 @@ +using MediatR; +using VoteMonitor.Api.Statistics.Models; + +namespace VoteMonitor.Api.Statistics.Queries +{ + public class CountiesVisitedQuery : IRequest + { + } +} \ No newline at end of file diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/FlaggedAnswersQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/FlaggedAnswersQuery.cs new file mode 100644 index 00000000..6aa9993b --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Queries/FlaggedAnswersQuery.cs @@ -0,0 +1,9 @@ +using MediatR; +using VoteMonitor.Api.Statistics.Models; + +namespace VoteMonitor.Api.Statistics.Queries +{ + public class FlaggedAnswersQuery : IRequest + { + } +} \ No newline at end of file diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/LoggedInObserversQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/LoggedInObserversQuery.cs new file mode 100644 index 00000000..79281aaa --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Queries/LoggedInObserversQuery.cs @@ -0,0 +1,9 @@ +using MediatR; +using VoteMonitor.Api.Statistics.Models; + +namespace VoteMonitor.Api.Statistics.Queries +{ + public class LoggedInObserversQuery : IRequest + { + } +} \ No newline at end of file diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/NotesUploadedQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/NotesUploadedQuery.cs new file mode 100644 index 00000000..ffbb6ee9 --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Queries/NotesUploadedQuery.cs @@ -0,0 +1,9 @@ +using MediatR; +using VoteMonitor.Api.Statistics.Models; + +namespace VoteMonitor.Api.Statistics.Queries +{ + public class NotesUploadedQuery : IRequest + { + } +} \ No newline at end of file diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/StationsVisitedQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/StationsVisitedQuery.cs new file mode 100644 index 00000000..e81dc2b6 --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Queries/StationsVisitedQuery.cs @@ -0,0 +1,9 @@ +using MediatR; +using VoteMonitor.Api.Statistics.Models; + +namespace VoteMonitor.Api.Statistics.Queries +{ + public class StationsVisitedQuery : IRequest + { + } +} diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsObserverNumberQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsObserverNumberQuery.cs new file mode 100644 index 00000000..c1d36056 --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsObserverNumberQuery.cs @@ -0,0 +1,10 @@ +using MediatR; +using VoteMonitor.Api.Core; +using VoteMonitor.Api.Statistics.Models; + +namespace VoteMonitor.Api.Statistics.Queries +{ + public class StatisticsObserverNumberQuery : StatisticsPaginatedQuery, IRequest> + { + } +} \ No newline at end of file diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsPaginatedQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsPaginatedQuery.cs index f7b72e4e..2681e9f3 100644 --- a/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsPaginatedQuery.cs +++ b/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsPaginatedQuery.cs @@ -5,8 +5,8 @@ namespace VoteMonitor.Api.Statistics.Queries public class StatisticsPaginatedQuery : PagingModel { - public int IdONG { get; set; } - public bool Organizator { get; set; } + public int NgoId { get; set; } + public bool IsOrganizer { get; set; } public int CacheHours { get; set; } public int CacheMinutes { get; set; } public int CacheSeconds { get; set; } diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsQuery.cs index d64feabd..c64aac09 100644 --- a/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsQuery.cs +++ b/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsQuery.cs @@ -2,8 +2,8 @@ { public class StatisticsQuery { - public int IdONG { get; set; } - public bool Organizator { get; set; } + public int NgoId { get; set; } + public bool IsOrganizer { get; set; } public int CacheHours { get; set; } public int CacheMinutes { get; set; } public int CacheSeconds { get; set; } diff --git a/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsTopIrregularitiesQuery.cs b/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsTopIrregularitiesQuery.cs new file mode 100644 index 00000000..64783df7 --- /dev/null +++ b/src/api/VoteMonitor.Api.Statistics/Queries/StatisticsTopIrregularitiesQuery.cs @@ -0,0 +1,12 @@ +using MediatR; +using VoteMonitor.Api.Core; +using VoteMonitor.Api.Statistics.Models; + +namespace VoteMonitor.Api.Statistics.Queries +{ + public class StatisticsTopIrregularitiesQuery : StatisticsPaginatedQuery, IRequest> + { + public string FormCode { get; set; } + public StatisticsGroupingTypes GroupType { get; set; } + } +} \ No newline at end of file From bbc797d657d9cd5f1003a3952a1122c685384171 Mon Sep 17 00:00:00 2001 From: Iulia Dormenco Date: Sat, 30 Jan 2021 12:22:57 +0200 Subject: [PATCH 2/2] revert raw sql change --- .../Handlers/StatisticsQueryHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryHandler.cs b/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryHandler.cs index 47b2cf90..0b4c7700 100644 --- a/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryHandler.cs +++ b/src/api/VoteMonitor.Api.Statistics/Handlers/StatisticsQueryHandler.cs @@ -172,7 +172,7 @@ FROM Answers AS R INNER JOIN Questions I ON I.Id = RD.IdQuestion INNER JOIN FormSections fs on i.IdSection = fs.Id INNER JOIN Forms f on fs.IdForm = f.Id - WHERE RD.IsFlagged = 1 AND N.IsActive =1 AND O.IsTestObserver = 0", + WHERE RD.Flagged = 1 AND N.IsActive =1 AND O.IsTestObserver = 0", CacheKey = "StatisticiSectii" };