From 2bc53e6f11ba97c2f7664327065d5f7c954d7d57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Sun, 2 Jan 2022 13:39:20 +0100 Subject: [PATCH] feat: basic implementation of branch statistics --- coverage/coverage.out | 1465 +++++++++-------- models/compat/wakatime/v1/stats.go | 11 + models/compat/wakatime/v1/summaries.go | 15 +- models/duration.go | 4 + models/filters.go | 13 + models/heartbeat.go | 2 + models/summary.go | 17 +- repositories/summary.go | 2 + routes/compat/shields/v1/badge.go | 1 + routes/routes.go | 3 + routes/utils/summary_utils.go | 3 + services/duration_test.go | 2 + services/heartbeat.go | 1 + services/summary.go | 15 +- services/summary_test.go | 14 +- .../Wakapi API Tests.postman_collection.json | 6 +- 16 files changed, 844 insertions(+), 730 deletions(-) diff --git a/coverage/coverage.out b/coverage/coverage.out index 01e4129..67c6dd3 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -9,83 +9,54 @@ github.com/muety/wakapi/models/heartbeats.go:26.18,28.3 1 0 github.com/muety/wakapi/models/heartbeats.go:32.40,34.18 1 0 github.com/muety/wakapi/models/heartbeats.go:37.2,37.24 1 0 github.com/muety/wakapi/models/heartbeats.go:34.18,36.3 1 0 +github.com/muety/wakapi/models/mail_address.go:15.13,18.2 2 1 +github.com/muety/wakapi/models/mail_address.go:24.38,26.2 1 0 +github.com/muety/wakapi/models/mail_address.go:28.35,30.21 2 1 +github.com/muety/wakapi/models/mail_address.go:36.2,36.11 1 1 +github.com/muety/wakapi/models/mail_address.go:30.21,31.21 1 1 +github.com/muety/wakapi/models/mail_address.go:34.3,34.18 1 1 +github.com/muety/wakapi/models/mail_address.go:31.21,33.4 1 1 +github.com/muety/wakapi/models/mail_address.go:39.35,41.2 1 1 +github.com/muety/wakapi/models/mail_address.go:43.43,45.22 2 0 +github.com/muety/wakapi/models/mail_address.go:48.2,48.12 1 0 +github.com/muety/wakapi/models/mail_address.go:45.22,47.3 1 0 +github.com/muety/wakapi/models/mail_address.go:51.46,53.22 2 1 +github.com/muety/wakapi/models/mail_address.go:56.2,56.12 1 1 +github.com/muety/wakapi/models/mail_address.go:53.22,55.3 1 1 +github.com/muety/wakapi/models/mail_address.go:59.40,60.22 1 1 +github.com/muety/wakapi/models/mail_address.go:65.2,65.13 1 1 +github.com/muety/wakapi/models/mail_address.go:60.22,61.17 1 1 +github.com/muety/wakapi/models/mail_address.go:61.17,63.4 1 1 +github.com/muety/wakapi/models/project_label.go:14.39,16.2 1 0 +github.com/muety/wakapi/models/heartbeat.go:33.34,35.2 1 1 +github.com/muety/wakapi/models/heartbeat.go:37.65,39.46 2 1 +github.com/muety/wakapi/models/heartbeat.go:39.46,40.108 1 1 +github.com/muety/wakapi/models/heartbeat.go:40.108,43.4 2 1 +github.com/muety/wakapi/models/heartbeat.go:47.50,48.11 1 1 +github.com/muety/wakapi/models/heartbeat.go:63.2,63.15 1 1 +github.com/muety/wakapi/models/heartbeat.go:67.2,67.12 1 1 +github.com/muety/wakapi/models/heartbeat.go:49.22,50.18 1 1 +github.com/muety/wakapi/models/heartbeat.go:51.21,52.17 1 1 +github.com/muety/wakapi/models/heartbeat.go:53.23,54.19 1 1 +github.com/muety/wakapi/models/heartbeat.go:55.17,56.26 1 1 +github.com/muety/wakapi/models/heartbeat.go:57.22,58.18 1 1 +github.com/muety/wakapi/models/heartbeat.go:59.21,60.17 1 0 +github.com/muety/wakapi/models/heartbeat.go:63.15,65.3 1 1 +github.com/muety/wakapi/models/heartbeat.go:70.37,86.2 1 0 +github.com/muety/wakapi/models/heartbeat.go:94.41,96.16 2 0 +github.com/muety/wakapi/models/heartbeat.go:99.2,100.10 2 0 +github.com/muety/wakapi/models/heartbeat.go:96.16,98.3 1 0 +github.com/muety/wakapi/models/interval.go:39.47,40.23 1 0 +github.com/muety/wakapi/models/interval.go:45.2,45.14 1 0 +github.com/muety/wakapi/models/interval.go:40.23,41.13 1 0 +github.com/muety/wakapi/models/interval.go:41.13,43.4 1 0 github.com/muety/wakapi/models/language_mapping.go:11.42,13.2 1 0 github.com/muety/wakapi/models/language_mapping.go:15.51,17.2 1 0 github.com/muety/wakapi/models/language_mapping.go:19.52,21.2 1 0 -github.com/muety/wakapi/models/summary.go:60.29,62.2 1 1 -github.com/muety/wakapi/models/summary.go:64.35,66.2 1 0 -github.com/muety/wakapi/models/summary.go:68.37,76.2 7 1 -github.com/muety/wakapi/models/summary.go:78.35,80.2 1 1 -github.com/muety/wakapi/models/summary.go:82.57,91.2 1 1 -github.com/muety/wakapi/models/summary.go:93.64,95.2 1 0 -github.com/muety/wakapi/models/summary.go:108.33,113.26 4 1 -github.com/muety/wakapi/models/summary.go:120.2,120.37 1 1 -github.com/muety/wakapi/models/summary.go:125.2,126.16 2 1 -github.com/muety/wakapi/models/summary.go:129.2,129.33 1 1 -github.com/muety/wakapi/models/summary.go:113.26,114.30 1 1 -github.com/muety/wakapi/models/summary.go:114.30,116.4 1 1 -github.com/muety/wakapi/models/summary.go:120.37,122.3 1 0 -github.com/muety/wakapi/models/summary.go:126.16,128.3 1 0 -github.com/muety/wakapi/models/summary.go:129.33,131.3 1 1 -github.com/muety/wakapi/models/summary.go:135.56,141.28 5 1 -github.com/muety/wakapi/models/summary.go:145.2,146.42 2 1 -github.com/muety/wakapi/models/summary.go:153.2,154.15 2 1 -github.com/muety/wakapi/models/summary.go:141.28,143.3 1 1 -github.com/muety/wakapi/models/summary.go:146.42,147.22 1 0 -github.com/muety/wakapi/models/summary.go:147.22,149.9 2 0 -github.com/muety/wakapi/models/summary.go:154.15,155.28 1 1 -github.com/muety/wakapi/models/summary.go:155.28,157.4 1 0 -github.com/muety/wakapi/models/summary.go:157.9,163.4 1 1 -github.com/muety/wakapi/models/summary.go:167.45,172.16 4 0 -github.com/muety/wakapi/models/summary.go:175.2,175.39 1 0 -github.com/muety/wakapi/models/summary.go:179.2,179.30 1 0 -github.com/muety/wakapi/models/summary.go:172.16,174.3 1 0 -github.com/muety/wakapi/models/summary.go:175.39,177.3 1 0 -github.com/muety/wakapi/models/summary.go:182.73,184.55 2 1 -github.com/muety/wakapi/models/summary.go:189.2,189.16 1 1 -github.com/muety/wakapi/models/summary.go:184.55,185.31 1 1 -github.com/muety/wakapi/models/summary.go:185.31,187.4 1 1 -github.com/muety/wakapi/models/summary.go:192.88,194.55 2 1 -github.com/muety/wakapi/models/summary.go:202.2,202.16 1 1 -github.com/muety/wakapi/models/summary.go:194.55,195.31 1 1 -github.com/muety/wakapi/models/summary.go:195.31,196.23 1 1 -github.com/muety/wakapi/models/summary.go:199.4,199.46 1 1 -github.com/muety/wakapi/models/summary.go:196.23,197.13 1 1 -github.com/muety/wakapi/models/summary.go:205.73,207.34 2 1 -github.com/muety/wakapi/models/summary.go:210.2,210.14 1 1 -github.com/muety/wakapi/models/summary.go:207.34,209.3 1 1 -github.com/muety/wakapi/models/summary.go:213.56,216.55 3 0 -github.com/muety/wakapi/models/summary.go:223.2,223.12 1 0 -github.com/muety/wakapi/models/summary.go:216.55,217.31 1 0 -github.com/muety/wakapi/models/summary.go:217.31,218.44 1 0 -github.com/muety/wakapi/models/summary.go:218.44,220.5 1 0 -github.com/muety/wakapi/models/summary.go:226.58,228.16 2 0 -github.com/muety/wakapi/models/summary.go:231.2,231.16 1 0 -github.com/muety/wakapi/models/summary.go:228.16,230.3 1 0 -github.com/muety/wakapi/models/summary.go:234.71,235.63 1 1 -github.com/muety/wakapi/models/summary.go:275.2,282.10 7 1 -github.com/muety/wakapi/models/summary.go:235.63,238.45 2 1 -github.com/muety/wakapi/models/summary.go:247.3,247.31 1 1 -github.com/muety/wakapi/models/summary.go:254.3,254.31 1 1 -github.com/muety/wakapi/models/summary.go:271.3,271.16 1 1 -github.com/muety/wakapi/models/summary.go:238.45,239.32 1 1 -github.com/muety/wakapi/models/summary.go:244.4,244.14 1 1 -github.com/muety/wakapi/models/summary.go:239.32,240.24 1 1 -github.com/muety/wakapi/models/summary.go:240.24,242.6 1 1 -github.com/muety/wakapi/models/summary.go:247.31,249.60 1 1 -github.com/muety/wakapi/models/summary.go:249.60,251.5 1 1 -github.com/muety/wakapi/models/summary.go:254.31,256.60 1 1 -github.com/muety/wakapi/models/summary.go:256.60,257.55 1 1 -github.com/muety/wakapi/models/summary.go:257.55,259.6 1 1 -github.com/muety/wakapi/models/summary.go:259.11,267.6 1 1 -github.com/muety/wakapi/models/summary.go:285.57,286.30 1 1 -github.com/muety/wakapi/models/summary.go:291.2,291.43 1 0 -github.com/muety/wakapi/models/summary.go:286.30,287.28 1 1 -github.com/muety/wakapi/models/summary.go:287.28,289.4 1 1 -github.com/muety/wakapi/models/summary.go:294.50,298.2 1 1 -github.com/muety/wakapi/models/summary.go:300.33,302.2 1 1 -github.com/muety/wakapi/models/summary.go:304.43,306.2 1 1 -github.com/muety/wakapi/models/summary.go:308.38,310.2 1 1 +github.com/muety/wakapi/models/mail.go:19.44,23.2 3 0 +github.com/muety/wakapi/models/mail.go:25.44,29.2 3 0 +github.com/muety/wakapi/models/mail.go:31.32,44.2 1 0 +github.com/muety/wakapi/models/mail.go:46.41,48.2 1 0 github.com/muety/wakapi/models/user.go:11.13,13.2 1 1 github.com/muety/wakapi/models/user.go:82.36,83.22 1 1 github.com/muety/wakapi/models/user.go:86.2,87.16 2 1 @@ -111,19 +82,20 @@ github.com/muety/wakapi/models/alias.go:22.37,23.35 1 0 github.com/muety/wakapi/models/alias.go:28.2,28.14 1 0 github.com/muety/wakapi/models/alias.go:23.35,24.18 1 0 github.com/muety/wakapi/models/alias.go:24.18,26.4 1 0 -github.com/muety/wakapi/models/duration.go:23.55,36.2 2 0 -github.com/muety/wakapi/models/duration.go:38.39,40.16 2 0 -github.com/muety/wakapi/models/duration.go:43.2,44.10 2 0 -github.com/muety/wakapi/models/duration.go:40.16,42.3 1 0 -github.com/muety/wakapi/models/duration.go:47.49,48.11 1 0 -github.com/muety/wakapi/models/duration.go:61.2,61.15 1 0 -github.com/muety/wakapi/models/duration.go:65.2,65.12 1 0 -github.com/muety/wakapi/models/duration.go:49.22,50.18 1 0 -github.com/muety/wakapi/models/duration.go:51.21,52.17 1 0 -github.com/muety/wakapi/models/duration.go:53.23,54.19 1 0 -github.com/muety/wakapi/models/duration.go:55.17,56.26 1 0 -github.com/muety/wakapi/models/duration.go:57.22,58.18 1 0 -github.com/muety/wakapi/models/duration.go:61.15,63.3 1 0 +github.com/muety/wakapi/models/duration.go:24.55,38.2 2 0 +github.com/muety/wakapi/models/duration.go:40.39,42.16 2 0 +github.com/muety/wakapi/models/duration.go:45.2,46.10 2 0 +github.com/muety/wakapi/models/duration.go:42.16,44.3 1 0 +github.com/muety/wakapi/models/duration.go:49.49,50.11 1 0 +github.com/muety/wakapi/models/duration.go:65.2,65.15 1 0 +github.com/muety/wakapi/models/duration.go:69.2,69.12 1 0 +github.com/muety/wakapi/models/duration.go:51.22,52.18 1 0 +github.com/muety/wakapi/models/duration.go:53.21,54.17 1 0 +github.com/muety/wakapi/models/duration.go:55.23,56.19 1 0 +github.com/muety/wakapi/models/duration.go:57.17,58.26 1 0 +github.com/muety/wakapi/models/duration.go:59.22,60.18 1 0 +github.com/muety/wakapi/models/duration.go:61.21,62.17 1 0 +github.com/muety/wakapi/models/duration.go:65.15,67.3 1 0 github.com/muety/wakapi/models/durations.go:7.30,9.2 1 0 github.com/muety/wakapi/models/durations.go:11.40,13.2 1 0 github.com/muety/wakapi/models/durations.go:15.35,17.2 1 0 @@ -137,42 +109,153 @@ github.com/muety/wakapi/models/durations.go:34.18,36.3 1 0 github.com/muety/wakapi/models/durations.go:40.38,42.18 1 0 github.com/muety/wakapi/models/durations.go:45.2,45.24 1 0 github.com/muety/wakapi/models/durations.go:42.18,44.3 1 0 -github.com/muety/wakapi/models/heartbeat.go:33.34,35.2 1 1 -github.com/muety/wakapi/models/heartbeat.go:37.65,39.46 2 1 -github.com/muety/wakapi/models/heartbeat.go:39.46,40.108 1 1 -github.com/muety/wakapi/models/heartbeat.go:40.108,43.4 2 1 -github.com/muety/wakapi/models/heartbeat.go:47.50,48.11 1 1 -github.com/muety/wakapi/models/heartbeat.go:61.2,61.15 1 1 -github.com/muety/wakapi/models/heartbeat.go:65.2,65.12 1 1 -github.com/muety/wakapi/models/heartbeat.go:49.22,50.18 1 1 -github.com/muety/wakapi/models/heartbeat.go:51.21,52.17 1 1 -github.com/muety/wakapi/models/heartbeat.go:53.23,54.19 1 1 -github.com/muety/wakapi/models/heartbeat.go:55.17,56.26 1 1 -github.com/muety/wakapi/models/heartbeat.go:57.22,58.18 1 1 -github.com/muety/wakapi/models/heartbeat.go:61.15,63.3 1 1 -github.com/muety/wakapi/models/heartbeat.go:68.37,84.2 1 0 -github.com/muety/wakapi/models/heartbeat.go:92.41,94.16 2 0 -github.com/muety/wakapi/models/heartbeat.go:97.2,98.10 2 0 -github.com/muety/wakapi/models/heartbeat.go:94.16,96.3 1 0 -github.com/muety/wakapi/models/project_label.go:14.39,16.2 1 0 -github.com/muety/wakapi/models/mail_address.go:15.13,18.2 2 1 -github.com/muety/wakapi/models/mail_address.go:24.38,26.2 1 0 -github.com/muety/wakapi/models/mail_address.go:28.35,30.21 2 1 -github.com/muety/wakapi/models/mail_address.go:36.2,36.11 1 1 -github.com/muety/wakapi/models/mail_address.go:30.21,31.21 1 1 -github.com/muety/wakapi/models/mail_address.go:34.3,34.18 1 1 -github.com/muety/wakapi/models/mail_address.go:31.21,33.4 1 1 -github.com/muety/wakapi/models/mail_address.go:39.35,41.2 1 1 -github.com/muety/wakapi/models/mail_address.go:43.43,45.22 2 0 -github.com/muety/wakapi/models/mail_address.go:48.2,48.12 1 0 -github.com/muety/wakapi/models/mail_address.go:45.22,47.3 1 0 -github.com/muety/wakapi/models/mail_address.go:51.46,53.22 2 1 -github.com/muety/wakapi/models/mail_address.go:56.2,56.12 1 1 -github.com/muety/wakapi/models/mail_address.go:53.22,55.3 1 1 -github.com/muety/wakapi/models/mail_address.go:59.40,60.22 1 1 -github.com/muety/wakapi/models/mail_address.go:65.2,65.13 1 1 -github.com/muety/wakapi/models/mail_address.go:60.22,61.17 1 1 -github.com/muety/wakapi/models/mail_address.go:61.17,63.4 1 1 +github.com/muety/wakapi/models/summary.go:62.29,64.2 1 1 +github.com/muety/wakapi/models/summary.go:66.35,68.2 1 0 +github.com/muety/wakapi/models/summary.go:70.38,72.2 1 0 +github.com/muety/wakapi/models/summary.go:74.37,83.2 8 1 +github.com/muety/wakapi/models/summary.go:85.35,87.2 1 1 +github.com/muety/wakapi/models/summary.go:89.57,99.2 1 1 +github.com/muety/wakapi/models/summary.go:101.64,103.2 1 0 +github.com/muety/wakapi/models/summary.go:116.33,121.26 4 1 +github.com/muety/wakapi/models/summary.go:128.2,128.37 1 1 +github.com/muety/wakapi/models/summary.go:133.2,134.16 2 1 +github.com/muety/wakapi/models/summary.go:137.2,137.33 1 1 +github.com/muety/wakapi/models/summary.go:121.26,122.30 1 1 +github.com/muety/wakapi/models/summary.go:122.30,124.4 1 1 +github.com/muety/wakapi/models/summary.go:128.37,130.3 1 0 +github.com/muety/wakapi/models/summary.go:134.16,136.3 1 0 +github.com/muety/wakapi/models/summary.go:137.33,139.3 1 1 +github.com/muety/wakapi/models/summary.go:143.56,149.28 5 1 +github.com/muety/wakapi/models/summary.go:153.2,154.42 2 1 +github.com/muety/wakapi/models/summary.go:161.2,162.15 2 1 +github.com/muety/wakapi/models/summary.go:149.28,151.3 1 1 +github.com/muety/wakapi/models/summary.go:154.42,155.22 1 0 +github.com/muety/wakapi/models/summary.go:155.22,157.9 2 0 +github.com/muety/wakapi/models/summary.go:162.15,163.28 1 1 +github.com/muety/wakapi/models/summary.go:163.28,165.4 1 0 +github.com/muety/wakapi/models/summary.go:165.9,171.4 1 1 +github.com/muety/wakapi/models/summary.go:175.45,180.16 4 0 +github.com/muety/wakapi/models/summary.go:183.2,183.39 1 0 +github.com/muety/wakapi/models/summary.go:187.2,187.30 1 0 +github.com/muety/wakapi/models/summary.go:180.16,182.3 1 0 +github.com/muety/wakapi/models/summary.go:183.39,185.3 1 0 +github.com/muety/wakapi/models/summary.go:190.73,192.55 2 1 +github.com/muety/wakapi/models/summary.go:197.2,197.16 1 1 +github.com/muety/wakapi/models/summary.go:192.55,193.31 1 1 +github.com/muety/wakapi/models/summary.go:193.31,195.4 1 1 +github.com/muety/wakapi/models/summary.go:200.88,202.55 2 1 +github.com/muety/wakapi/models/summary.go:210.2,210.16 1 1 +github.com/muety/wakapi/models/summary.go:202.55,203.31 1 1 +github.com/muety/wakapi/models/summary.go:203.31,204.23 1 1 +github.com/muety/wakapi/models/summary.go:207.4,207.46 1 1 +github.com/muety/wakapi/models/summary.go:204.23,205.13 1 1 +github.com/muety/wakapi/models/summary.go:213.73,215.34 2 1 +github.com/muety/wakapi/models/summary.go:218.2,218.14 1 1 +github.com/muety/wakapi/models/summary.go:215.34,217.3 1 1 +github.com/muety/wakapi/models/summary.go:221.56,224.55 3 0 +github.com/muety/wakapi/models/summary.go:231.2,231.12 1 0 +github.com/muety/wakapi/models/summary.go:224.55,225.31 1 0 +github.com/muety/wakapi/models/summary.go:225.31,226.44 1 0 +github.com/muety/wakapi/models/summary.go:226.44,228.5 1 0 +github.com/muety/wakapi/models/summary.go:234.58,236.16 2 0 +github.com/muety/wakapi/models/summary.go:239.2,239.16 1 0 +github.com/muety/wakapi/models/summary.go:236.16,238.3 1 0 +github.com/muety/wakapi/models/summary.go:242.71,243.63 1 1 +github.com/muety/wakapi/models/summary.go:287.2,295.10 8 1 +github.com/muety/wakapi/models/summary.go:243.63,244.20 1 1 +github.com/muety/wakapi/models/summary.go:248.3,250.45 2 1 +github.com/muety/wakapi/models/summary.go:259.3,259.31 1 1 +github.com/muety/wakapi/models/summary.go:266.3,266.31 1 1 +github.com/muety/wakapi/models/summary.go:283.3,283.16 1 1 +github.com/muety/wakapi/models/summary.go:244.20,246.4 1 1 +github.com/muety/wakapi/models/summary.go:250.45,251.32 1 1 +github.com/muety/wakapi/models/summary.go:256.4,256.14 1 1 +github.com/muety/wakapi/models/summary.go:251.32,252.24 1 1 +github.com/muety/wakapi/models/summary.go:252.24,254.6 1 1 +github.com/muety/wakapi/models/summary.go:259.31,261.60 1 1 +github.com/muety/wakapi/models/summary.go:261.60,263.5 1 1 +github.com/muety/wakapi/models/summary.go:266.31,268.60 1 1 +github.com/muety/wakapi/models/summary.go:268.60,269.55 1 1 +github.com/muety/wakapi/models/summary.go:269.55,271.6 1 1 +github.com/muety/wakapi/models/summary.go:271.11,279.6 1 1 +github.com/muety/wakapi/models/summary.go:298.57,299.30 1 1 +github.com/muety/wakapi/models/summary.go:304.2,304.43 1 0 +github.com/muety/wakapi/models/summary.go:299.30,300.28 1 1 +github.com/muety/wakapi/models/summary.go:300.28,302.4 1 1 +github.com/muety/wakapi/models/summary.go:307.50,311.2 1 1 +github.com/muety/wakapi/models/summary.go:313.33,315.2 1 1 +github.com/muety/wakapi/models/summary.go:317.43,319.2 1 1 +github.com/muety/wakapi/models/summary.go:321.38,323.2 1 1 +github.com/muety/wakapi/models/filters.go:21.33,23.2 1 1 +github.com/muety/wakapi/models/filters.go:25.48,26.22 1 1 +github.com/muety/wakapi/models/filters.go:31.2,31.14 1 1 +github.com/muety/wakapi/models/filters.go:26.22,27.18 1 1 +github.com/muety/wakapi/models/filters.go:27.18,29.4 1 1 +github.com/muety/wakapi/models/filters.go:39.56,41.2 1 1 +github.com/muety/wakapi/models/filters.go:43.66,46.2 2 1 +github.com/muety/wakapi/models/filters.go:48.59,50.2 1 1 +github.com/muety/wakapi/models/filters.go:52.70,53.16 1 1 +github.com/muety/wakapi/models/filters.go:69.2,69.10 1 1 +github.com/muety/wakapi/models/filters.go:54.22,55.41 1 1 +github.com/muety/wakapi/models/filters.go:56.17,57.31 1 0 +github.com/muety/wakapi/models/filters.go:58.23,59.43 1 1 +github.com/muety/wakapi/models/filters.go:60.21,61.39 1 0 +github.com/muety/wakapi/models/filters.go:62.22,63.41 1 0 +github.com/muety/wakapi/models/filters.go:64.20,65.37 1 1 +github.com/muety/wakapi/models/filters.go:66.21,67.39 1 0 +github.com/muety/wakapi/models/filters.go:72.49,73.44 1 1 +github.com/muety/wakapi/models/filters.go:88.2,88.29 1 1 +github.com/muety/wakapi/models/filters.go:73.44,75.3 1 1 +github.com/muety/wakapi/models/filters.go:75.8,75.41 1 1 +github.com/muety/wakapi/models/filters.go:75.41,77.3 1 0 +github.com/muety/wakapi/models/filters.go:77.8,77.53 1 1 +github.com/muety/wakapi/models/filters.go:77.53,79.3 1 1 +github.com/muety/wakapi/models/filters.go:79.8,79.49 1 1 +github.com/muety/wakapi/models/filters.go:79.49,81.3 1 0 +github.com/muety/wakapi/models/filters.go:81.8,81.51 1 1 +github.com/muety/wakapi/models/filters.go:81.51,83.3 1 0 +github.com/muety/wakapi/models/filters.go:83.8,83.47 1 1 +github.com/muety/wakapi/models/filters.go:83.47,85.3 1 0 +github.com/muety/wakapi/models/filters.go:85.8,85.49 1 1 +github.com/muety/wakapi/models/filters.go:85.49,87.3 1 0 +github.com/muety/wakapi/models/filters.go:91.46,92.30 1 1 +github.com/muety/wakapi/models/filters.go:95.2,95.24 1 0 +github.com/muety/wakapi/models/filters.go:92.30,94.3 1 1 +github.com/muety/wakapi/models/filters.go:98.34,101.2 2 1 +github.com/muety/wakapi/models/filters.go:103.33,105.16 2 0 +github.com/muety/wakapi/models/filters.go:108.2,108.32 1 0 +github.com/muety/wakapi/models/filters.go:105.16,107.3 1 0 +github.com/muety/wakapi/models/filters.go:111.44,117.2 1 1 +github.com/muety/wakapi/models/filters.go:120.70,121.22 1 1 +github.com/muety/wakapi/models/filters.go:129.2,129.17 1 1 +github.com/muety/wakapi/models/filters.go:137.2,137.23 1 1 +github.com/muety/wakapi/models/filters.go:145.2,145.21 1 1 +github.com/muety/wakapi/models/filters.go:153.2,153.22 1 1 +github.com/muety/wakapi/models/filters.go:161.2,161.21 1 1 +github.com/muety/wakapi/models/filters.go:169.2,169.10 1 1 +github.com/muety/wakapi/models/filters.go:121.22,123.31 2 1 +github.com/muety/wakapi/models/filters.go:127.3,127.22 1 1 +github.com/muety/wakapi/models/filters.go:123.31,126.4 2 1 +github.com/muety/wakapi/models/filters.go:129.17,131.26 2 0 +github.com/muety/wakapi/models/filters.go:135.3,135.17 1 0 +github.com/muety/wakapi/models/filters.go:131.26,134.4 2 0 +github.com/muety/wakapi/models/filters.go:137.23,139.32 2 1 +github.com/muety/wakapi/models/filters.go:143.3,143.23 1 1 +github.com/muety/wakapi/models/filters.go:139.32,142.4 2 1 +github.com/muety/wakapi/models/filters.go:145.21,147.30 2 0 +github.com/muety/wakapi/models/filters.go:151.3,151.21 1 0 +github.com/muety/wakapi/models/filters.go:147.30,150.4 2 0 +github.com/muety/wakapi/models/filters.go:153.22,155.31 2 0 +github.com/muety/wakapi/models/filters.go:159.3,159.22 1 0 +github.com/muety/wakapi/models/filters.go:155.31,158.4 2 0 +github.com/muety/wakapi/models/filters.go:161.21,163.30 2 0 +github.com/muety/wakapi/models/filters.go:167.3,167.21 1 0 +github.com/muety/wakapi/models/filters.go:163.30,166.4 2 0 +github.com/muety/wakapi/models/filters.go:172.83,173.41 1 1 +github.com/muety/wakapi/models/filters.go:176.2,176.28 1 1 +github.com/muety/wakapi/models/filters.go:179.2,179.10 1 1 +github.com/muety/wakapi/models/filters.go:173.41,175.3 1 0 +github.com/muety/wakapi/models/filters.go:176.28,178.3 1 1 github.com/muety/wakapi/models/models.go:3.14,5.2 0 1 github.com/muety/wakapi/models/shared.go:35.52,37.2 1 0 github.com/muety/wakapi/models/shared.go:39.52,42.16 3 0 @@ -189,167 +272,155 @@ github.com/muety/wakapi/models/shared.go:82.45,84.2 1 0 github.com/muety/wakapi/models/shared.go:86.37,88.2 1 0 github.com/muety/wakapi/models/shared.go:90.35,92.2 1 0 github.com/muety/wakapi/models/shared.go:94.34,96.2 1 0 -github.com/muety/wakapi/models/filters.go:20.33,22.2 1 1 -github.com/muety/wakapi/models/filters.go:24.48,25.22 1 1 -github.com/muety/wakapi/models/filters.go:30.2,30.14 1 1 -github.com/muety/wakapi/models/filters.go:25.22,26.18 1 1 -github.com/muety/wakapi/models/filters.go:26.18,28.4 1 1 -github.com/muety/wakapi/models/filters.go:38.56,40.2 1 1 -github.com/muety/wakapi/models/filters.go:42.66,45.2 2 1 -github.com/muety/wakapi/models/filters.go:47.59,49.2 1 1 -github.com/muety/wakapi/models/filters.go:51.70,52.16 1 1 -github.com/muety/wakapi/models/filters.go:66.2,66.10 1 1 -github.com/muety/wakapi/models/filters.go:53.22,54.41 1 1 -github.com/muety/wakapi/models/filters.go:55.17,56.31 1 0 -github.com/muety/wakapi/models/filters.go:57.23,58.43 1 1 -github.com/muety/wakapi/models/filters.go:59.21,60.39 1 0 -github.com/muety/wakapi/models/filters.go:61.22,62.41 1 0 -github.com/muety/wakapi/models/filters.go:63.20,64.37 1 1 -github.com/muety/wakapi/models/filters.go:69.49,70.44 1 1 -github.com/muety/wakapi/models/filters.go:83.2,83.29 1 1 -github.com/muety/wakapi/models/filters.go:70.44,72.3 1 1 -github.com/muety/wakapi/models/filters.go:72.8,72.41 1 1 -github.com/muety/wakapi/models/filters.go:72.41,74.3 1 0 -github.com/muety/wakapi/models/filters.go:74.8,74.53 1 1 -github.com/muety/wakapi/models/filters.go:74.53,76.3 1 1 -github.com/muety/wakapi/models/filters.go:76.8,76.49 1 1 -github.com/muety/wakapi/models/filters.go:76.49,78.3 1 0 -github.com/muety/wakapi/models/filters.go:78.8,78.51 1 1 -github.com/muety/wakapi/models/filters.go:78.51,80.3 1 0 -github.com/muety/wakapi/models/filters.go:80.8,80.47 1 1 -github.com/muety/wakapi/models/filters.go:80.47,82.3 1 0 -github.com/muety/wakapi/models/filters.go:86.46,87.30 1 1 -github.com/muety/wakapi/models/filters.go:90.2,90.24 1 0 -github.com/muety/wakapi/models/filters.go:87.30,89.3 1 1 -github.com/muety/wakapi/models/filters.go:93.34,96.2 2 1 -github.com/muety/wakapi/models/filters.go:98.33,100.16 2 0 -github.com/muety/wakapi/models/filters.go:103.2,103.32 1 0 -github.com/muety/wakapi/models/filters.go:100.16,102.3 1 0 -github.com/muety/wakapi/models/filters.go:106.44,112.2 1 1 -github.com/muety/wakapi/models/filters.go:115.70,116.22 1 1 -github.com/muety/wakapi/models/filters.go:124.2,124.17 1 1 -github.com/muety/wakapi/models/filters.go:132.2,132.23 1 1 -github.com/muety/wakapi/models/filters.go:140.2,140.21 1 1 -github.com/muety/wakapi/models/filters.go:148.2,148.22 1 1 -github.com/muety/wakapi/models/filters.go:156.2,156.10 1 1 -github.com/muety/wakapi/models/filters.go:116.22,118.31 2 1 -github.com/muety/wakapi/models/filters.go:122.3,122.22 1 1 -github.com/muety/wakapi/models/filters.go:118.31,121.4 2 1 -github.com/muety/wakapi/models/filters.go:124.17,126.26 2 0 -github.com/muety/wakapi/models/filters.go:130.3,130.17 1 0 -github.com/muety/wakapi/models/filters.go:126.26,129.4 2 0 -github.com/muety/wakapi/models/filters.go:132.23,134.32 2 1 -github.com/muety/wakapi/models/filters.go:138.3,138.23 1 1 -github.com/muety/wakapi/models/filters.go:134.32,137.4 2 1 -github.com/muety/wakapi/models/filters.go:140.21,142.30 2 0 -github.com/muety/wakapi/models/filters.go:146.3,146.21 1 0 -github.com/muety/wakapi/models/filters.go:142.30,145.4 2 0 -github.com/muety/wakapi/models/filters.go:148.22,150.31 2 0 -github.com/muety/wakapi/models/filters.go:154.3,154.22 1 0 -github.com/muety/wakapi/models/filters.go:150.31,153.4 2 0 -github.com/muety/wakapi/models/filters.go:159.83,160.41 1 1 -github.com/muety/wakapi/models/filters.go:163.2,163.28 1 1 -github.com/muety/wakapi/models/filters.go:166.2,166.10 1 1 -github.com/muety/wakapi/models/filters.go:160.41,162.3 1 0 -github.com/muety/wakapi/models/filters.go:163.28,165.3 1 1 -github.com/muety/wakapi/models/interval.go:39.47,40.23 1 0 -github.com/muety/wakapi/models/interval.go:45.2,45.14 1 0 -github.com/muety/wakapi/models/interval.go:40.23,41.13 1 0 -github.com/muety/wakapi/models/interval.go:41.13,43.4 1 0 -github.com/muety/wakapi/models/mail.go:19.44,23.2 3 0 -github.com/muety/wakapi/models/mail.go:25.44,29.2 3 0 -github.com/muety/wakapi/models/mail.go:31.32,44.2 1 0 -github.com/muety/wakapi/models/mail.go:46.41,48.2 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:30.91,36.2 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:38.90,41.2 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:43.90,46.2 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:48.71,49.71 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:49.71,51.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:54.107,58.16 3 0 -github.com/muety/wakapi/middlewares/authenticate.go:61.2,61.16 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:65.2,65.31 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:81.2,82.12 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:58.16,60.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:61.16,63.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:65.31,66.31 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:71.3,71.29 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:78.3,78.9 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:66.31,69.4 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:71.29,74.4 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:74.9,77.4 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:85.70,86.39 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:91.2,91.14 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:86.39,87.60 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:87.60,89.4 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:94.98,96.16 2 1 -github.com/muety/wakapi/middlewares/authenticate.go:100.2,103.16 4 1 -github.com/muety/wakapi/middlewares/authenticate.go:106.2,106.18 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:96.16,98.3 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:103.16,105.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:109.97,113.19 4 1 -github.com/muety/wakapi/middlewares/authenticate.go:116.2,117.16 2 1 -github.com/muety/wakapi/middlewares/authenticate.go:120.2,120.18 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:113.19,115.3 1 1 -github.com/muety/wakapi/middlewares/authenticate.go:117.16,119.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:123.92,125.16 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:129.2,130.16 2 0 -github.com/muety/wakapi/middlewares/authenticate.go:137.2,137.18 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:125.16,127.3 1 0 -github.com/muety/wakapi/middlewares/authenticate.go:130.16,132.3 1 0 -github.com/muety/wakapi/middlewares/filetype.go:13.83,14.43 1 0 -github.com/muety/wakapi/middlewares/filetype.go:14.43,19.3 1 0 -github.com/muety/wakapi/middlewares/filetype.go:22.84,24.34 2 0 -github.com/muety/wakapi/middlewares/filetype.go:31.2,31.27 1 0 -github.com/muety/wakapi/middlewares/filetype.go:24.34,25.50 1 0 -github.com/muety/wakapi/middlewares/filetype.go:25.50,29.4 3 0 -github.com/muety/wakapi/middlewares/logging.go:20.102,21.43 1 0 -github.com/muety/wakapi/middlewares/logging.go:21.43,27.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:30.80,39.44 7 0 -github.com/muety/wakapi/middlewares/logging.go:45.2,54.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:39.44,40.38 1 0 -github.com/muety/wakapi/middlewares/logging.go:40.38,42.4 1 0 -github.com/muety/wakapi/middlewares/logging.go:57.41,59.14 2 0 -github.com/muety/wakapi/middlewares/logging.go:62.2,62.14 1 0 -github.com/muety/wakapi/middlewares/logging.go:65.2,65.11 1 0 -github.com/muety/wakapi/middlewares/logging.go:59.14,61.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:62.14,64.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:68.41,69.42 1 0 -github.com/muety/wakapi/middlewares/logging.go:72.2,72.12 1 0 -github.com/muety/wakapi/middlewares/logging.go:69.42,71.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:103.52,105.2 1 0 -github.com/muety/wakapi/middlewares/logging.go:117.45,118.20 1 0 -github.com/muety/wakapi/middlewares/logging.go:118.20,122.3 3 0 -github.com/muety/wakapi/middlewares/logging.go:124.54,127.18 3 0 -github.com/muety/wakapi/middlewares/logging.go:134.2,135.15 2 0 -github.com/muety/wakapi/middlewares/logging.go:127.18,130.17 2 0 -github.com/muety/wakapi/middlewares/logging.go:130.17,132.4 1 0 -github.com/muety/wakapi/middlewares/logging.go:137.42,138.20 1 0 -github.com/muety/wakapi/middlewares/logging.go:138.20,140.3 1 0 -github.com/muety/wakapi/middlewares/logging.go:142.36,144.2 1 0 -github.com/muety/wakapi/middlewares/logging.go:145.42,147.2 1 0 -github.com/muety/wakapi/middlewares/logging.go:148.40,150.2 1 0 -github.com/muety/wakapi/middlewares/logging.go:151.52,153.2 1 0 -github.com/muety/wakapi/middlewares/principal.go:15.62,17.2 1 0 -github.com/muety/wakapi/middlewares/principal.go:19.58,21.2 1 0 -github.com/muety/wakapi/middlewares/principal.go:42.71,43.43 1 0 -github.com/muety/wakapi/middlewares/principal.go:43.43,45.3 1 0 -github.com/muety/wakapi/middlewares/principal.go:48.81,51.2 2 0 -github.com/muety/wakapi/middlewares/principal.go:53.55,54.52 1 0 -github.com/muety/wakapi/middlewares/principal.go:54.52,56.3 1 0 -github.com/muety/wakapi/middlewares/principal.go:59.49,60.52 1 0 -github.com/muety/wakapi/middlewares/principal.go:63.2,63.12 1 0 -github.com/muety/wakapi/middlewares/principal.go:60.52,62.3 1 0 -github.com/muety/wakapi/middlewares/security.go:19.62,20.43 1 0 -github.com/muety/wakapi/middlewares/security.go:20.43,22.3 1 0 -github.com/muety/wakapi/middlewares/security.go:25.80,26.36 1 0 -github.com/muety/wakapi/middlewares/security.go:31.2,31.27 1 0 -github.com/muety/wakapi/middlewares/security.go:26.36,27.30 1 0 -github.com/muety/wakapi/middlewares/security.go:27.30,29.4 1 0 -github.com/muety/wakapi/middlewares/sentry.go:15.60,16.43 1 0 -github.com/muety/wakapi/middlewares/sentry.go:16.43,20.3 1 0 -github.com/muety/wakapi/middlewares/sentry.go:23.78,26.54 3 0 -github.com/muety/wakapi/middlewares/sentry.go:26.54,27.43 1 0 -github.com/muety/wakapi/middlewares/sentry.go:27.43,29.4 1 0 +github.com/muety/wakapi/utils/collection.go:3.59,5.22 2 0 +github.com/muety/wakapi/utils/collection.go:8.2,8.15 1 0 +github.com/muety/wakapi/utils/collection.go:5.22,7.3 1 0 +github.com/muety/wakapi/utils/common.go:18.73,19.58 1 0 +github.com/muety/wakapi/utils/common.go:22.2,22.87 1 0 +github.com/muety/wakapi/utils/common.go:25.2,25.64 1 0 +github.com/muety/wakapi/utils/common.go:19.58,21.3 1 0 +github.com/muety/wakapi/utils/common.go:22.87,24.3 1 0 +github.com/muety/wakapi/utils/common.go:28.40,30.2 1 0 +github.com/muety/wakapi/utils/common.go:32.44,34.2 1 0 +github.com/muety/wakapi/utils/common.go:36.49,38.2 1 0 +github.com/muety/wakapi/utils/common.go:40.45,42.2 1 0 +github.com/muety/wakapi/utils/common.go:44.24,46.2 1 0 +github.com/muety/wakapi/utils/common.go:48.56,51.45 3 1 +github.com/muety/wakapi/utils/common.go:54.2,54.40 1 1 +github.com/muety/wakapi/utils/common.go:51.45,53.3 1 1 +github.com/muety/wakapi/utils/date.go:8.43,10.2 1 1 +github.com/muety/wakapi/utils/date.go:12.48,14.2 1 0 +github.com/muety/wakapi/utils/date.go:16.41,18.21 2 1 +github.com/muety/wakapi/utils/date.go:21.2,21.23 1 1 +github.com/muety/wakapi/utils/date.go:18.21,20.3 1 0 +github.com/muety/wakapi/utils/date.go:24.46,26.2 1 0 +github.com/muety/wakapi/utils/date.go:28.51,30.2 1 0 +github.com/muety/wakapi/utils/date.go:32.44,35.2 2 1 +github.com/muety/wakapi/utils/date.go:37.52,39.2 1 0 +github.com/muety/wakapi/utils/date.go:41.45,43.2 1 0 +github.com/muety/wakapi/utils/date.go:45.51,47.2 1 0 +github.com/muety/wakapi/utils/date.go:49.44,51.2 1 0 +github.com/muety/wakapi/utils/date.go:54.42,56.2 1 1 +github.com/muety/wakapi/utils/date.go:59.46,61.2 1 0 +github.com/muety/wakapi/utils/date.go:64.41,66.21 2 1 +github.com/muety/wakapi/utils/date.go:69.2,69.33 1 1 +github.com/muety/wakapi/utils/date.go:66.21,68.3 1 1 +github.com/muety/wakapi/utils/date.go:73.63,75.2 1 0 +github.com/muety/wakapi/utils/date.go:78.62,84.2 5 0 +github.com/muety/wakapi/utils/date.go:87.67,90.33 2 1 +github.com/muety/wakapi/utils/date.go:99.2,99.18 1 1 +github.com/muety/wakapi/utils/date.go:90.33,92.19 2 1 +github.com/muety/wakapi/utils/date.go:95.3,96.10 2 1 +github.com/muety/wakapi/utils/date.go:92.19,94.4 1 1 +github.com/muety/wakapi/utils/date.go:102.50,108.2 5 0 +github.com/muety/wakapi/utils/date.go:111.79,114.36 3 1 +github.com/muety/wakapi/utils/date.go:118.2,118.21 1 1 +github.com/muety/wakapi/utils/date.go:122.2,122.21 1 1 +github.com/muety/wakapi/utils/date.go:126.2,126.13 1 1 +github.com/muety/wakapi/utils/date.go:114.36,117.3 2 0 +github.com/muety/wakapi/utils/date.go:118.21,121.3 2 1 +github.com/muety/wakapi/utils/date.go:122.21,125.3 2 1 +github.com/muety/wakapi/utils/http.go:9.90,12.58 3 0 +github.com/muety/wakapi/utils/http.go:12.58,14.3 1 0 +github.com/muety/wakapi/utils/set.go:3.51,5.26 2 0 +github.com/muety/wakapi/utils/set.go:8.2,8.12 1 0 +github.com/muety/wakapi/utils/set.go:5.26,7.3 1 0 +github.com/muety/wakapi/utils/set.go:11.49,13.21 2 0 +github.com/muety/wakapi/utils/set.go:16.2,16.14 1 0 +github.com/muety/wakapi/utils/set.go:13.21,15.3 1 0 +github.com/muety/wakapi/utils/strings.go:8.34,10.2 1 0 +github.com/muety/wakapi/utils/strings.go:12.77,13.29 1 0 +github.com/muety/wakapi/utils/strings.go:18.2,18.19 1 0 +github.com/muety/wakapi/utils/strings.go:13.29,14.18 1 0 +github.com/muety/wakapi/utils/strings.go:14.18,16.4 1 0 +github.com/muety/wakapi/utils/summary.go:10.66,11.40 1 0 +github.com/muety/wakapi/utils/summary.go:16.2,16.48 1 0 +github.com/muety/wakapi/utils/summary.go:11.40,12.27 1 0 +github.com/muety/wakapi/utils/summary.go:12.27,14.4 1 0 +github.com/muety/wakapi/utils/summary.go:19.88,22.2 2 0 +github.com/muety/wakapi/utils/summary.go:24.95,26.16 2 0 +github.com/muety/wakapi/utils/summary.go:29.2,29.38 1 0 +github.com/muety/wakapi/utils/summary.go:26.16,28.3 1 0 +github.com/muety/wakapi/utils/summary.go:32.105,36.18 3 0 +github.com/muety/wakapi/utils/summary.go:71.2,71.22 1 0 +github.com/muety/wakapi/utils/summary.go:37.28,38.26 1 0 +github.com/muety/wakapi/utils/summary.go:39.32,41.24 2 0 +github.com/muety/wakapi/utils/summary.go:42.31,43.29 1 0 +github.com/muety/wakapi/utils/summary.go:44.31,46.27 2 0 +github.com/muety/wakapi/utils/summary.go:47.32,48.30 1 0 +github.com/muety/wakapi/utils/summary.go:49.32,51.28 2 0 +github.com/muety/wakapi/utils/summary.go:52.31,53.29 1 0 +github.com/muety/wakapi/utils/summary.go:54.32,55.31 1 0 +github.com/muety/wakapi/utils/summary.go:56.41,58.42 2 0 +github.com/muety/wakapi/utils/summary.go:59.33,60.32 1 0 +github.com/muety/wakapi/utils/summary.go:61.33,62.32 1 0 +github.com/muety/wakapi/utils/summary.go:63.35,64.32 1 0 +github.com/muety/wakapi/utils/summary.go:65.26,66.21 1 0 +github.com/muety/wakapi/utils/summary.go:67.10,68.39 1 0 +github.com/muety/wakapi/utils/summary.go:74.73,81.56 5 0 +github.com/muety/wakapi/utils/summary.go:97.2,104.8 2 0 +github.com/muety/wakapi/utils/summary.go:81.56,83.3 1 0 +github.com/muety/wakapi/utils/summary.go:83.8,83.54 1 0 +github.com/muety/wakapi/utils/summary.go:83.54,85.3 1 0 +github.com/muety/wakapi/utils/summary.go:85.8,87.17 2 0 +github.com/muety/wakapi/utils/summary.go:91.3,92.17 2 0 +github.com/muety/wakapi/utils/summary.go:87.17,89.4 1 0 +github.com/muety/wakapi/utils/summary.go:92.17,94.4 1 0 +github.com/muety/wakapi/utils/summary.go:107.48,111.51 2 0 +github.com/muety/wakapi/utils/summary.go:114.2,114.12 1 0 +github.com/muety/wakapi/utils/summary.go:111.51,113.3 1 0 +github.com/muety/wakapi/utils/auth.go:16.79,18.54 2 0 +github.com/muety/wakapi/utils/auth.go:22.2,24.16 3 0 +github.com/muety/wakapi/utils/auth.go:28.2,30.45 3 0 +github.com/muety/wakapi/utils/auth.go:33.2,34.32 2 0 +github.com/muety/wakapi/utils/auth.go:18.54,20.3 1 0 +github.com/muety/wakapi/utils/auth.go:24.16,26.3 1 0 +github.com/muety/wakapi/utils/auth.go:30.45,32.3 1 0 +github.com/muety/wakapi/utils/auth.go:37.65,39.85 2 0 +github.com/muety/wakapi/utils/auth.go:43.2,44.30 2 0 +github.com/muety/wakapi/utils/auth.go:39.85,41.3 1 0 +github.com/muety/wakapi/utils/auth.go:47.94,49.16 2 0 +github.com/muety/wakapi/utils/auth.go:53.2,53.107 1 0 +github.com/muety/wakapi/utils/auth.go:57.2,57.22 1 0 +github.com/muety/wakapi/utils/auth.go:49.16,51.3 1 0 +github.com/muety/wakapi/utils/auth.go:53.107,55.3 1 0 +github.com/muety/wakapi/utils/auth.go:60.56,64.2 3 0 +github.com/muety/wakapi/utils/auth.go:66.55,69.16 3 0 +github.com/muety/wakapi/utils/auth.go:72.2,72.16 1 0 +github.com/muety/wakapi/utils/auth.go:69.16,71.3 1 0 +github.com/muety/wakapi/utils/db.go:8.34,9.37 1 0 +github.com/muety/wakapi/utils/db.go:17.2,18.14 2 0 +github.com/muety/wakapi/utils/db.go:9.37,11.110 2 0 +github.com/muety/wakapi/utils/db.go:15.3,15.20 1 0 +github.com/muety/wakapi/utils/db.go:11.110,14.4 2 0 +github.com/muety/wakapi/utils/db.go:21.39,22.37 1 0 +github.com/muety/wakapi/utils/db.go:30.2,31.14 2 0 +github.com/muety/wakapi/utils/db.go:22.37,24.119 2 0 +github.com/muety/wakapi/utils/db.go:28.3,28.20 1 0 +github.com/muety/wakapi/utils/db.go:24.119,27.4 2 0 +github.com/muety/wakapi/utils/template.go:13.41,15.16 2 0 +github.com/muety/wakapi/utils/template.go:18.2,18.23 1 0 +github.com/muety/wakapi/utils/template.go:15.16,17.3 1 0 +github.com/muety/wakapi/utils/template.go:21.37,22.30 1 0 +github.com/muety/wakapi/utils/template.go:25.2,25.10 1 0 +github.com/muety/wakapi/utils/template.go:22.30,24.3 1 0 +github.com/muety/wakapi/utils/template.go:28.83,33.16 4 0 +github.com/muety/wakapi/utils/template.go:37.2,37.29 1 0 +github.com/muety/wakapi/utils/template.go:62.2,62.23 1 0 +github.com/muety/wakapi/utils/template.go:33.16,35.3 1 0 +github.com/muety/wakapi/utils/template.go:37.29,39.51 2 0 +github.com/muety/wakapi/utils/template.go:43.3,44.17 2 0 +github.com/muety/wakapi/utils/template.go:47.3,48.17 2 0 +github.com/muety/wakapi/utils/template.go:52.3,55.17 3 0 +github.com/muety/wakapi/utils/template.go:59.3,59.27 1 0 +github.com/muety/wakapi/utils/template.go:39.51,40.12 1 0 +github.com/muety/wakapi/utils/template.go:44.17,46.4 1 0 +github.com/muety/wakapi/utils/template.go:48.17,50.4 1 0 +github.com/muety/wakapi/utils/template.go:55.17,57.4 1 0 +github.com/muety/wakapi/utils/color.go:8.90,10.32 2 0 +github.com/muety/wakapi/utils/color.go:15.2,15.15 1 0 +github.com/muety/wakapi/utils/color.go:10.32,11.50 1 0 +github.com/muety/wakapi/utils/color.go:11.50,13.4 1 0 github.com/muety/wakapi/config/config.go:154.70,156.2 1 0 github.com/muety/wakapi/config/config.go:158.65,160.2 1 0 github.com/muety/wakapi/config/config.go:162.82,172.2 1 0 @@ -493,181 +564,186 @@ github.com/muety/wakapi/config/utils.go:13.2,13.11 1 0 github.com/muety/wakapi/config/utils.go:7.22,8.18 1 0 github.com/muety/wakapi/config/utils.go:11.3,11.12 1 0 github.com/muety/wakapi/config/utils.go:8.18,10.4 1 0 -github.com/muety/wakapi/utils/auth.go:16.79,18.54 2 0 -github.com/muety/wakapi/utils/auth.go:22.2,24.16 3 0 -github.com/muety/wakapi/utils/auth.go:28.2,30.45 3 0 -github.com/muety/wakapi/utils/auth.go:33.2,34.32 2 0 -github.com/muety/wakapi/utils/auth.go:18.54,20.3 1 0 -github.com/muety/wakapi/utils/auth.go:24.16,26.3 1 0 -github.com/muety/wakapi/utils/auth.go:30.45,32.3 1 0 -github.com/muety/wakapi/utils/auth.go:37.65,39.85 2 0 -github.com/muety/wakapi/utils/auth.go:43.2,44.30 2 0 -github.com/muety/wakapi/utils/auth.go:39.85,41.3 1 0 -github.com/muety/wakapi/utils/auth.go:47.94,49.16 2 0 -github.com/muety/wakapi/utils/auth.go:53.2,53.107 1 0 -github.com/muety/wakapi/utils/auth.go:57.2,57.22 1 0 -github.com/muety/wakapi/utils/auth.go:49.16,51.3 1 0 -github.com/muety/wakapi/utils/auth.go:53.107,55.3 1 0 -github.com/muety/wakapi/utils/auth.go:60.56,64.2 3 0 -github.com/muety/wakapi/utils/auth.go:66.55,69.16 3 0 -github.com/muety/wakapi/utils/auth.go:72.2,72.16 1 0 -github.com/muety/wakapi/utils/auth.go:69.16,71.3 1 0 -github.com/muety/wakapi/utils/collection.go:3.59,5.22 2 0 -github.com/muety/wakapi/utils/collection.go:8.2,8.15 1 0 -github.com/muety/wakapi/utils/collection.go:5.22,7.3 1 0 -github.com/muety/wakapi/utils/common.go:18.73,19.58 1 0 -github.com/muety/wakapi/utils/common.go:22.2,22.87 1 0 -github.com/muety/wakapi/utils/common.go:25.2,25.64 1 0 -github.com/muety/wakapi/utils/common.go:19.58,21.3 1 0 -github.com/muety/wakapi/utils/common.go:22.87,24.3 1 0 -github.com/muety/wakapi/utils/common.go:28.40,30.2 1 0 -github.com/muety/wakapi/utils/common.go:32.44,34.2 1 0 -github.com/muety/wakapi/utils/common.go:36.49,38.2 1 0 -github.com/muety/wakapi/utils/common.go:40.45,42.2 1 0 -github.com/muety/wakapi/utils/common.go:44.24,46.2 1 0 -github.com/muety/wakapi/utils/common.go:48.56,51.45 3 1 -github.com/muety/wakapi/utils/common.go:54.2,54.40 1 1 -github.com/muety/wakapi/utils/common.go:51.45,53.3 1 1 -github.com/muety/wakapi/utils/db.go:8.34,9.37 1 0 -github.com/muety/wakapi/utils/db.go:17.2,18.14 2 0 -github.com/muety/wakapi/utils/db.go:9.37,11.110 2 0 -github.com/muety/wakapi/utils/db.go:15.3,15.20 1 0 -github.com/muety/wakapi/utils/db.go:11.110,14.4 2 0 -github.com/muety/wakapi/utils/db.go:21.39,22.37 1 0 -github.com/muety/wakapi/utils/db.go:30.2,31.14 2 0 -github.com/muety/wakapi/utils/db.go:22.37,24.119 2 0 -github.com/muety/wakapi/utils/db.go:28.3,28.20 1 0 -github.com/muety/wakapi/utils/db.go:24.119,27.4 2 0 -github.com/muety/wakapi/utils/set.go:3.51,5.26 2 0 -github.com/muety/wakapi/utils/set.go:8.2,8.12 1 0 -github.com/muety/wakapi/utils/set.go:5.26,7.3 1 0 -github.com/muety/wakapi/utils/set.go:11.49,13.21 2 0 -github.com/muety/wakapi/utils/set.go:16.2,16.14 1 0 -github.com/muety/wakapi/utils/set.go:13.21,15.3 1 0 -github.com/muety/wakapi/utils/strings.go:8.34,10.2 1 0 -github.com/muety/wakapi/utils/strings.go:12.77,13.29 1 0 -github.com/muety/wakapi/utils/strings.go:18.2,18.19 1 0 -github.com/muety/wakapi/utils/strings.go:13.29,14.18 1 0 -github.com/muety/wakapi/utils/strings.go:14.18,16.4 1 0 -github.com/muety/wakapi/utils/color.go:8.90,10.32 2 0 -github.com/muety/wakapi/utils/color.go:15.2,15.15 1 0 -github.com/muety/wakapi/utils/color.go:10.32,11.50 1 0 -github.com/muety/wakapi/utils/color.go:11.50,13.4 1 0 -github.com/muety/wakapi/utils/date.go:8.43,10.2 1 1 -github.com/muety/wakapi/utils/date.go:12.48,14.2 1 0 -github.com/muety/wakapi/utils/date.go:16.41,18.21 2 1 -github.com/muety/wakapi/utils/date.go:21.2,21.23 1 1 -github.com/muety/wakapi/utils/date.go:18.21,20.3 1 0 -github.com/muety/wakapi/utils/date.go:24.46,26.2 1 0 -github.com/muety/wakapi/utils/date.go:28.51,30.2 1 0 -github.com/muety/wakapi/utils/date.go:32.44,35.2 2 1 -github.com/muety/wakapi/utils/date.go:37.52,39.2 1 0 -github.com/muety/wakapi/utils/date.go:41.45,43.2 1 0 -github.com/muety/wakapi/utils/date.go:45.51,47.2 1 0 -github.com/muety/wakapi/utils/date.go:49.44,51.2 1 0 -github.com/muety/wakapi/utils/date.go:54.42,56.2 1 1 -github.com/muety/wakapi/utils/date.go:59.46,61.2 1 0 -github.com/muety/wakapi/utils/date.go:64.41,66.21 2 1 -github.com/muety/wakapi/utils/date.go:69.2,69.36 1 1 -github.com/muety/wakapi/utils/date.go:66.21,68.3 1 1 -github.com/muety/wakapi/utils/date.go:73.63,75.2 1 0 -github.com/muety/wakapi/utils/date.go:78.62,84.2 5 0 -github.com/muety/wakapi/utils/date.go:87.67,90.33 2 1 -github.com/muety/wakapi/utils/date.go:99.2,99.18 1 1 -github.com/muety/wakapi/utils/date.go:90.33,92.19 2 1 -github.com/muety/wakapi/utils/date.go:95.3,96.10 2 1 -github.com/muety/wakapi/utils/date.go:92.19,94.4 1 1 -github.com/muety/wakapi/utils/date.go:102.50,108.2 5 0 -github.com/muety/wakapi/utils/date.go:111.79,114.36 3 1 -github.com/muety/wakapi/utils/date.go:118.2,118.21 1 1 -github.com/muety/wakapi/utils/date.go:122.2,122.21 1 1 -github.com/muety/wakapi/utils/date.go:126.2,126.13 1 1 -github.com/muety/wakapi/utils/date.go:114.36,117.3 2 0 -github.com/muety/wakapi/utils/date.go:118.21,121.3 2 1 -github.com/muety/wakapi/utils/date.go:122.21,125.3 2 1 -github.com/muety/wakapi/utils/http.go:9.90,12.58 3 0 -github.com/muety/wakapi/utils/http.go:12.58,14.3 1 0 -github.com/muety/wakapi/utils/summary.go:10.66,11.40 1 0 -github.com/muety/wakapi/utils/summary.go:16.2,16.48 1 0 -github.com/muety/wakapi/utils/summary.go:11.40,12.27 1 0 -github.com/muety/wakapi/utils/summary.go:12.27,14.4 1 0 -github.com/muety/wakapi/utils/summary.go:19.88,22.2 2 0 -github.com/muety/wakapi/utils/summary.go:24.95,26.16 2 0 -github.com/muety/wakapi/utils/summary.go:29.2,29.38 1 0 -github.com/muety/wakapi/utils/summary.go:26.16,28.3 1 0 -github.com/muety/wakapi/utils/summary.go:32.105,36.18 3 0 -github.com/muety/wakapi/utils/summary.go:71.2,71.22 1 0 -github.com/muety/wakapi/utils/summary.go:37.28,38.26 1 0 -github.com/muety/wakapi/utils/summary.go:39.32,41.24 2 0 -github.com/muety/wakapi/utils/summary.go:42.31,43.29 1 0 -github.com/muety/wakapi/utils/summary.go:44.31,46.27 2 0 -github.com/muety/wakapi/utils/summary.go:47.32,48.30 1 0 -github.com/muety/wakapi/utils/summary.go:49.32,51.28 2 0 -github.com/muety/wakapi/utils/summary.go:52.31,53.29 1 0 -github.com/muety/wakapi/utils/summary.go:54.32,55.31 1 0 -github.com/muety/wakapi/utils/summary.go:56.41,58.42 2 0 -github.com/muety/wakapi/utils/summary.go:59.33,60.32 1 0 -github.com/muety/wakapi/utils/summary.go:61.33,62.32 1 0 -github.com/muety/wakapi/utils/summary.go:63.35,64.32 1 0 -github.com/muety/wakapi/utils/summary.go:65.26,66.21 1 0 -github.com/muety/wakapi/utils/summary.go:67.10,68.39 1 0 -github.com/muety/wakapi/utils/summary.go:74.73,81.56 5 0 -github.com/muety/wakapi/utils/summary.go:97.2,104.8 2 0 -github.com/muety/wakapi/utils/summary.go:81.56,83.3 1 0 -github.com/muety/wakapi/utils/summary.go:83.8,83.54 1 0 -github.com/muety/wakapi/utils/summary.go:83.54,85.3 1 0 -github.com/muety/wakapi/utils/summary.go:85.8,87.17 2 0 -github.com/muety/wakapi/utils/summary.go:91.3,92.17 2 0 -github.com/muety/wakapi/utils/summary.go:87.17,89.4 1 0 -github.com/muety/wakapi/utils/summary.go:92.17,94.4 1 0 -github.com/muety/wakapi/utils/summary.go:107.48,111.51 2 0 -github.com/muety/wakapi/utils/summary.go:114.2,114.12 1 0 -github.com/muety/wakapi/utils/summary.go:111.51,113.3 1 0 -github.com/muety/wakapi/utils/template.go:13.41,15.16 2 0 -github.com/muety/wakapi/utils/template.go:18.2,18.23 1 0 -github.com/muety/wakapi/utils/template.go:15.16,17.3 1 0 -github.com/muety/wakapi/utils/template.go:21.37,22.30 1 0 -github.com/muety/wakapi/utils/template.go:25.2,25.10 1 0 -github.com/muety/wakapi/utils/template.go:22.30,24.3 1 0 -github.com/muety/wakapi/utils/template.go:28.83,33.16 4 0 -github.com/muety/wakapi/utils/template.go:37.2,37.29 1 0 -github.com/muety/wakapi/utils/template.go:62.2,62.23 1 0 -github.com/muety/wakapi/utils/template.go:33.16,35.3 1 0 -github.com/muety/wakapi/utils/template.go:37.29,39.51 2 0 -github.com/muety/wakapi/utils/template.go:43.3,44.17 2 0 -github.com/muety/wakapi/utils/template.go:47.3,48.17 2 0 -github.com/muety/wakapi/utils/template.go:52.3,55.17 3 0 -github.com/muety/wakapi/utils/template.go:59.3,59.27 1 0 -github.com/muety/wakapi/utils/template.go:39.51,40.12 1 0 -github.com/muety/wakapi/utils/template.go:44.17,46.4 1 0 -github.com/muety/wakapi/utils/template.go:48.17,50.4 1 0 -github.com/muety/wakapi/utils/template.go:55.17,57.4 1 0 +github.com/muety/wakapi/middlewares/security.go:19.62,20.43 1 0 +github.com/muety/wakapi/middlewares/security.go:20.43,22.3 1 0 +github.com/muety/wakapi/middlewares/security.go:25.80,26.36 1 0 +github.com/muety/wakapi/middlewares/security.go:31.2,31.27 1 0 +github.com/muety/wakapi/middlewares/security.go:26.36,27.30 1 0 +github.com/muety/wakapi/middlewares/security.go:27.30,29.4 1 0 +github.com/muety/wakapi/middlewares/sentry.go:15.60,16.43 1 0 +github.com/muety/wakapi/middlewares/sentry.go:16.43,20.3 1 0 +github.com/muety/wakapi/middlewares/sentry.go:23.78,26.54 3 0 +github.com/muety/wakapi/middlewares/sentry.go:26.54,27.43 1 0 +github.com/muety/wakapi/middlewares/sentry.go:27.43,29.4 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:30.91,36.2 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:38.90,41.2 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:43.90,46.2 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:48.71,49.71 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:49.71,51.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:54.107,58.16 3 0 +github.com/muety/wakapi/middlewares/authenticate.go:61.2,61.16 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:65.2,65.31 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:81.2,82.12 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:58.16,60.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:61.16,63.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:65.31,66.31 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:71.3,71.29 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:78.3,78.9 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:66.31,69.4 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:71.29,74.4 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:74.9,77.4 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:85.70,86.39 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:91.2,91.14 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:86.39,87.60 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:87.60,89.4 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:94.98,96.16 2 1 +github.com/muety/wakapi/middlewares/authenticate.go:100.2,103.16 4 1 +github.com/muety/wakapi/middlewares/authenticate.go:106.2,106.18 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:96.16,98.3 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:103.16,105.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:109.97,113.19 4 1 +github.com/muety/wakapi/middlewares/authenticate.go:116.2,117.16 2 1 +github.com/muety/wakapi/middlewares/authenticate.go:120.2,120.18 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:113.19,115.3 1 1 +github.com/muety/wakapi/middlewares/authenticate.go:117.16,119.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:123.92,125.16 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:129.2,130.16 2 0 +github.com/muety/wakapi/middlewares/authenticate.go:137.2,137.18 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:125.16,127.3 1 0 +github.com/muety/wakapi/middlewares/authenticate.go:130.16,132.3 1 0 +github.com/muety/wakapi/middlewares/filetype.go:13.83,14.43 1 0 +github.com/muety/wakapi/middlewares/filetype.go:14.43,19.3 1 0 +github.com/muety/wakapi/middlewares/filetype.go:22.84,24.34 2 0 +github.com/muety/wakapi/middlewares/filetype.go:31.2,31.27 1 0 +github.com/muety/wakapi/middlewares/filetype.go:24.34,25.50 1 0 +github.com/muety/wakapi/middlewares/filetype.go:25.50,29.4 3 0 +github.com/muety/wakapi/middlewares/logging.go:20.102,21.43 1 0 +github.com/muety/wakapi/middlewares/logging.go:21.43,27.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:30.80,39.44 7 0 +github.com/muety/wakapi/middlewares/logging.go:45.2,54.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:39.44,40.38 1 0 +github.com/muety/wakapi/middlewares/logging.go:40.38,42.4 1 0 +github.com/muety/wakapi/middlewares/logging.go:57.41,59.14 2 0 +github.com/muety/wakapi/middlewares/logging.go:62.2,62.14 1 0 +github.com/muety/wakapi/middlewares/logging.go:65.2,65.11 1 0 +github.com/muety/wakapi/middlewares/logging.go:59.14,61.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:62.14,64.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:68.41,69.42 1 0 +github.com/muety/wakapi/middlewares/logging.go:72.2,72.12 1 0 +github.com/muety/wakapi/middlewares/logging.go:69.42,71.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:103.52,105.2 1 0 +github.com/muety/wakapi/middlewares/logging.go:117.45,118.20 1 0 +github.com/muety/wakapi/middlewares/logging.go:118.20,122.3 3 0 +github.com/muety/wakapi/middlewares/logging.go:124.54,127.18 3 0 +github.com/muety/wakapi/middlewares/logging.go:134.2,135.15 2 0 +github.com/muety/wakapi/middlewares/logging.go:127.18,130.17 2 0 +github.com/muety/wakapi/middlewares/logging.go:130.17,132.4 1 0 +github.com/muety/wakapi/middlewares/logging.go:137.42,138.20 1 0 +github.com/muety/wakapi/middlewares/logging.go:138.20,140.3 1 0 +github.com/muety/wakapi/middlewares/logging.go:142.36,144.2 1 0 +github.com/muety/wakapi/middlewares/logging.go:145.42,147.2 1 0 +github.com/muety/wakapi/middlewares/logging.go:148.40,150.2 1 0 +github.com/muety/wakapi/middlewares/logging.go:151.52,153.2 1 0 +github.com/muety/wakapi/middlewares/principal.go:15.62,17.2 1 0 +github.com/muety/wakapi/middlewares/principal.go:19.58,21.2 1 0 +github.com/muety/wakapi/middlewares/principal.go:42.71,43.43 1 0 +github.com/muety/wakapi/middlewares/principal.go:43.43,45.3 1 0 +github.com/muety/wakapi/middlewares/principal.go:48.81,51.2 2 0 +github.com/muety/wakapi/middlewares/principal.go:53.55,54.52 1 0 +github.com/muety/wakapi/middlewares/principal.go:54.52,56.3 1 0 +github.com/muety/wakapi/middlewares/principal.go:59.49,60.52 1 0 +github.com/muety/wakapi/middlewares/principal.go:63.2,63.12 1 0 +github.com/muety/wakapi/middlewares/principal.go:60.52,62.3 1 0 +github.com/muety/wakapi/services/user.go:24.99,34.33 3 0 +github.com/muety/wakapi/services/user.go:55.2,55.12 1 0 +github.com/muety/wakapi/services/user.go:34.33,35.31 1 0 +github.com/muety/wakapi/services/user.go:35.31,41.61 4 0 +github.com/muety/wakapi/services/user.go:45.4,45.24 1 0 +github.com/muety/wakapi/services/user.go:41.61,43.5 1 0 +github.com/muety/wakapi/services/user.go:45.24,46.80 1 0 +github.com/muety/wakapi/services/user.go:46.80,48.6 1 0 +github.com/muety/wakapi/services/user.go:48.11,50.6 1 0 +github.com/muety/wakapi/services/user.go:58.74,59.40 1 0 +github.com/muety/wakapi/services/user.go:63.2,64.16 2 0 +github.com/muety/wakapi/services/user.go:68.2,69.15 2 0 +github.com/muety/wakapi/services/user.go:59.40,61.3 1 0 +github.com/muety/wakapi/services/user.go:64.16,66.3 1 0 +github.com/muety/wakapi/services/user.go:72.72,73.37 1 0 +github.com/muety/wakapi/services/user.go:77.2,78.16 2 0 +github.com/muety/wakapi/services/user.go:82.2,83.15 2 0 +github.com/muety/wakapi/services/user.go:73.37,75.3 1 0 +github.com/muety/wakapi/services/user.go:78.16,80.3 1 0 +github.com/muety/wakapi/services/user.go:86.76,88.2 1 0 +github.com/muety/wakapi/services/user.go:90.86,92.2 1 0 +github.com/muety/wakapi/services/user.go:94.58,96.2 1 0 +github.com/muety/wakapi/services/user.go:98.86,100.2 1 0 +github.com/muety/wakapi/services/user.go:102.71,104.12 2 0 +github.com/muety/wakapi/services/user.go:108.2,109.42 2 0 +github.com/muety/wakapi/services/user.go:113.2,114.16 2 0 +github.com/muety/wakapi/services/user.go:118.2,119.21 2 0 +github.com/muety/wakapi/services/user.go:104.12,106.3 1 0 +github.com/muety/wakapi/services/user.go:109.42,111.3 1 0 +github.com/muety/wakapi/services/user.go:114.16,116.3 1 0 +github.com/muety/wakapi/services/user.go:122.48,124.2 1 0 +github.com/muety/wakapi/services/user.go:126.102,136.93 2 0 +github.com/muety/wakapi/services/user.go:142.2,142.38 1 0 +github.com/muety/wakapi/services/user.go:136.93,138.3 1 0 +github.com/muety/wakapi/services/user.go:138.8,140.3 1 0 +github.com/muety/wakapi/services/user.go:145.73,149.2 3 0 +github.com/muety/wakapi/services/user.go:151.78,155.2 3 0 +github.com/muety/wakapi/services/user.go:157.99,160.2 2 0 +github.com/muety/wakapi/services/user.go:162.106,165.96 3 0 +github.com/muety/wakapi/services/user.go:170.2,170.68 1 0 +github.com/muety/wakapi/services/user.go:165.96,167.3 1 0 +github.com/muety/wakapi/services/user.go:167.8,169.3 1 0 +github.com/muety/wakapi/services/user.go:173.85,175.2 1 0 +github.com/muety/wakapi/services/user.go:177.57,184.2 4 0 +github.com/muety/wakapi/services/user.go:186.38,188.2 1 0 +github.com/muety/wakapi/services/user.go:190.57,195.2 1 0 +github.com/muety/wakapi/services/alias.go:18.77,23.2 1 1 +github.com/muety/wakapi/services/alias.go:27.60,28.43 1 1 +github.com/muety/wakapi/services/alias.go:31.2,31.14 1 1 +github.com/muety/wakapi/services/alias.go:28.43,30.3 1 1 +github.com/muety/wakapi/services/alias.go:34.62,36.16 2 1 +github.com/muety/wakapi/services/alias.go:39.2,39.12 1 1 +github.com/muety/wakapi/services/alias.go:36.16,38.3 1 1 +github.com/muety/wakapi/services/alias.go:42.59,43.51 1 1 +github.com/muety/wakapi/services/alias.go:43.51,45.3 1 0 +github.com/muety/wakapi/services/alias.go:48.76,49.32 1 0 +github.com/muety/wakapi/services/alias.go:52.2,52.49 1 0 +github.com/muety/wakapi/services/alias.go:49.32,51.3 1 0 +github.com/muety/wakapi/services/alias.go:52.49,54.3 1 0 +github.com/muety/wakapi/services/alias.go:54.8,56.3 1 0 +github.com/muety/wakapi/services/alias.go:59.113,60.32 1 0 +github.com/muety/wakapi/services/alias.go:63.2,63.49 1 0 +github.com/muety/wakapi/services/alias.go:60.32,62.3 1 0 +github.com/muety/wakapi/services/alias.go:63.49,65.47 2 0 +github.com/muety/wakapi/services/alias.go:70.3,70.30 1 0 +github.com/muety/wakapi/services/alias.go:65.47,66.45 1 0 +github.com/muety/wakapi/services/alias.go:66.45,68.5 1 0 +github.com/muety/wakapi/services/alias.go:71.8,73.3 1 0 +github.com/muety/wakapi/services/alias.go:76.108,77.32 1 1 +github.com/muety/wakapi/services/alias.go:81.2,81.49 1 1 +github.com/muety/wakapi/services/alias.go:89.2,89.19 1 1 +github.com/muety/wakapi/services/alias.go:77.32,79.3 1 1 +github.com/muety/wakapi/services/alias.go:81.49,82.47 1 1 +github.com/muety/wakapi/services/alias.go:82.47,83.49 1 1 +github.com/muety/wakapi/services/alias.go:83.49,85.5 1 1 +github.com/muety/wakapi/services/alias.go:92.77,94.16 2 0 +github.com/muety/wakapi/services/alias.go:97.2,98.20 2 0 +github.com/muety/wakapi/services/alias.go:94.16,96.3 1 0 +github.com/muety/wakapi/services/alias.go:101.60,102.24 1 0 +github.com/muety/wakapi/services/alias.go:105.2,107.12 3 0 +github.com/muety/wakapi/services/alias.go:102.24,104.3 1 0 +github.com/muety/wakapi/services/alias.go:110.69,113.28 3 0 +github.com/muety/wakapi/services/alias.go:121.2,123.31 2 0 +github.com/muety/wakapi/services/alias.go:127.2,127.12 1 0 +github.com/muety/wakapi/services/alias.go:113.28,114.21 1 0 +github.com/muety/wakapi/services/alias.go:117.3,118.16 2 0 +github.com/muety/wakapi/services/alias.go:114.21,116.4 1 0 +github.com/muety/wakapi/services/alias.go:123.31,125.3 1 0 github.com/muety/wakapi/services/diagnostics.go:14.101,19.2 1 0 github.com/muety/wakapi/services/diagnostics.go:21.101,23.2 1 0 -github.com/muety/wakapi/services/duration.go:16.78,22.2 2 1 -github.com/muety/wakapi/services/duration.go:24.123,26.16 2 1 -github.com/muety/wakapi/services/duration.go:31.2,36.31 4 1 -github.com/muety/wakapi/services/duration.go:71.2,73.31 2 1 -github.com/muety/wakapi/services/duration.go:82.2,82.32 1 1 -github.com/muety/wakapi/services/duration.go:26.16,28.3 1 0 -github.com/muety/wakapi/services/duration.go:36.31,37.42 1 1 -github.com/muety/wakapi/services/duration.go:41.3,43.62 2 1 -github.com/muety/wakapi/services/duration.go:47.3,47.20 1 1 -github.com/muety/wakapi/services/duration.go:52.3,53.35 2 1 -github.com/muety/wakapi/services/duration.go:56.3,58.72 2 1 -github.com/muety/wakapi/services/duration.go:68.3,68.10 1 1 -github.com/muety/wakapi/services/duration.go:37.42,38.12 1 1 -github.com/muety/wakapi/services/duration.go:43.62,45.4 1 1 -github.com/muety/wakapi/services/duration.go:47.20,49.12 2 1 -github.com/muety/wakapi/services/duration.go:53.35,55.4 1 1 -github.com/muety/wakapi/services/duration.go:58.72,60.41 2 1 -github.com/muety/wakapi/services/duration.go:63.4,63.15 1 1 -github.com/muety/wakapi/services/duration.go:60.41,62.5 1 1 -github.com/muety/wakapi/services/duration.go:64.9,66.4 1 1 -github.com/muety/wakapi/services/duration.go:73.31,74.26 1 1 -github.com/muety/wakapi/services/duration.go:74.26,75.23 1 1 -github.com/muety/wakapi/services/duration.go:78.4,78.36 1 1 -github.com/muety/wakapi/services/duration.go:75.23,77.5 1 1 github.com/muety/wakapi/services/heartbeat.go:26.141,40.33 3 0 github.com/muety/wakapi/services/heartbeat.go:48.2,48.12 1 0 github.com/muety/wakapi/services/heartbeat.go:40.33,41.31 1 0 @@ -723,12 +799,12 @@ github.com/muety/wakapi/services/heartbeat.go:190.96,192.2 1 0 github.com/muety/wakapi/services/heartbeat.go:194.107,196.55 2 0 github.com/muety/wakapi/services/heartbeat.go:196.55,202.41 4 0 github.com/muety/wakapi/services/heartbeat.go:202.41,207.4 2 0 -github.com/muety/wakapi/services/heartbeat.go:211.85,217.2 5 0 -github.com/muety/wakapi/services/heartbeat.go:219.74,220.32 1 0 -github.com/muety/wakapi/services/heartbeat.go:220.32,225.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:228.72,230.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:232.58,234.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:236.60,238.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:211.85,218.2 6 0 +github.com/muety/wakapi/services/heartbeat.go:220.74,221.32 1 0 +github.com/muety/wakapi/services/heartbeat.go:221.32,226.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:229.72,231.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:233.58,235.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:237.60,239.2 1 0 github.com/muety/wakapi/services/key_value.go:14.89,19.2 1 0 github.com/muety/wakapi/services/key_value.go:21.83,23.2 1 0 github.com/muety/wakapi/services/key_value.go:25.78,27.16 2 0 @@ -755,27 +831,163 @@ github.com/muety/wakapi/services/language_mapping.go:66.82,67.26 1 0 github.com/muety/wakapi/services/language_mapping.go:70.2,72.12 3 0 github.com/muety/wakapi/services/language_mapping.go:67.26,69.3 1 0 github.com/muety/wakapi/services/language_mapping.go:75.74,78.2 1 0 -github.com/muety/wakapi/services/misc.go:21.126,28.2 1 0 -github.com/muety/wakapi/services/misc.go:40.50,42.48 1 0 -github.com/muety/wakapi/services/misc.go:46.2,48.19 3 0 -github.com/muety/wakapi/services/misc.go:42.48,44.3 1 0 -github.com/muety/wakapi/services/misc.go:51.51,53.16 2 0 -github.com/muety/wakapi/services/misc.go:57.2,60.26 3 0 -github.com/muety/wakapi/services/misc.go:66.2,68.40 2 0 -github.com/muety/wakapi/services/misc.go:73.2,75.33 3 0 -github.com/muety/wakapi/services/misc.go:79.2,84.17 2 0 -github.com/muety/wakapi/services/misc.go:88.2,91.17 1 0 -github.com/muety/wakapi/services/misc.go:95.2,95.12 1 0 -github.com/muety/wakapi/services/misc.go:53.16,55.3 1 0 -github.com/muety/wakapi/services/misc.go:60.26,65.3 1 0 -github.com/muety/wakapi/services/misc.go:68.40,70.3 1 0 -github.com/muety/wakapi/services/misc.go:75.33,78.3 2 0 -github.com/muety/wakapi/services/misc.go:84.17,86.3 1 0 -github.com/muety/wakapi/services/misc.go:91.17,93.3 1 0 -github.com/muety/wakapi/services/misc.go:98.116,99.24 1 0 -github.com/muety/wakapi/services/misc.go:99.24,100.156 1 0 -github.com/muety/wakapi/services/misc.go:100.156,102.4 1 0 -github.com/muety/wakapi/services/misc.go:102.9,107.4 1 0 +github.com/muety/wakapi/services/project_label.go:20.111,27.2 1 0 +github.com/muety/wakapi/services/project_label.go:29.80,31.2 1 0 +github.com/muety/wakapi/services/project_label.go:33.90,34.51 1 0 +github.com/muety/wakapi/services/project_label.go:38.2,39.16 2 0 +github.com/muety/wakapi/services/project_label.go:42.2,43.20 2 0 +github.com/muety/wakapi/services/project_label.go:34.51,36.3 1 0 +github.com/muety/wakapi/services/project_label.go:39.16,41.3 1 0 +github.com/muety/wakapi/services/project_label.go:47.108,50.16 3 0 +github.com/muety/wakapi/services/project_label.go:54.2,54.31 1 0 +github.com/muety/wakapi/services/project_label.go:61.2,61.29 1 0 +github.com/muety/wakapi/services/project_label.go:50.16,52.3 1 0 +github.com/muety/wakapi/services/project_label.go:54.31,55.50 1 0 +github.com/muety/wakapi/services/project_label.go:55.50,57.4 1 0 +github.com/muety/wakapi/services/project_label.go:57.9,59.4 1 0 +github.com/muety/wakapi/services/project_label.go:65.116,68.16 3 0 +github.com/muety/wakapi/services/project_label.go:72.2,72.31 1 0 +github.com/muety/wakapi/services/project_label.go:79.2,79.29 1 0 +github.com/muety/wakapi/services/project_label.go:68.16,70.3 1 0 +github.com/muety/wakapi/services/project_label.go:72.31,73.45 1 0 +github.com/muety/wakapi/services/project_label.go:73.45,75.4 1 0 +github.com/muety/wakapi/services/project_label.go:75.9,77.4 1 0 +github.com/muety/wakapi/services/project_label.go:82.98,84.16 2 0 +github.com/muety/wakapi/services/project_label.go:88.2,90.20 3 0 +github.com/muety/wakapi/services/project_label.go:84.16,86.3 1 0 +github.com/muety/wakapi/services/project_label.go:93.74,94.24 1 0 +github.com/muety/wakapi/services/project_label.go:97.2,100.12 4 0 +github.com/muety/wakapi/services/project_label.go:94.24,96.3 1 0 +github.com/muety/wakapi/services/project_label.go:103.89,105.14 2 0 +github.com/muety/wakapi/services/project_label.go:108.2,111.4 1 0 +github.com/muety/wakapi/services/project_label.go:105.14,107.3 1 0 +github.com/muety/wakapi/services/summary.go:29.189,41.33 3 1 +github.com/muety/wakapi/services/summary.go:52.2,52.12 1 1 +github.com/muety/wakapi/services/summary.go:41.33,42.31 1 1 +github.com/muety/wakapi/services/summary.go:42.31,44.39 2 0 +github.com/muety/wakapi/services/summary.go:44.39,45.71 1 0 +github.com/muety/wakapi/services/summary.go:45.71,47.6 1 0 +github.com/muety/wakapi/services/summary.go:58.161,61.66 2 1 +github.com/muety/wakapi/services/summary.go:66.2,71.20 4 1 +github.com/muety/wakapi/services/summary.go:77.2,77.65 1 1 +github.com/muety/wakapi/services/summary.go:82.2,83.16 2 1 +github.com/muety/wakapi/services/summary.go:88.2,93.105 5 1 +github.com/muety/wakapi/services/summary.go:97.2,98.30 2 1 +github.com/muety/wakapi/services/summary.go:61.66,63.3 1 0 +github.com/muety/wakapi/services/summary.go:71.20,74.3 2 1 +github.com/muety/wakapi/services/summary.go:77.65,79.3 1 0 +github.com/muety/wakapi/services/summary.go:83.16,85.3 1 0 +github.com/muety/wakapi/services/summary.go:93.105,95.3 1 1 +github.com/muety/wakapi/services/summary.go:101.126,105.41 2 1 +github.com/muety/wakapi/services/summary.go:116.2,117.44 2 1 +github.com/muety/wakapi/services/summary.go:126.2,127.16 2 1 +github.com/muety/wakapi/services/summary.go:131.2,131.30 1 1 +github.com/muety/wakapi/services/summary.go:105.41,108.17 2 1 +github.com/muety/wakapi/services/summary.go:108.17,110.4 1 1 +github.com/muety/wakapi/services/summary.go:110.9,112.4 1 0 +github.com/muety/wakapi/services/summary.go:117.44,118.87 1 1 +github.com/muety/wakapi/services/summary.go:118.87,120.4 1 1 +github.com/muety/wakapi/services/summary.go:120.9,122.4 1 0 +github.com/muety/wakapi/services/summary.go:127.16,129.3 1 0 +github.com/muety/wakapi/services/summary.go:134.127,137.16 2 1 +github.com/muety/wakapi/services/summary.go:141.2,142.74 2 1 +github.com/muety/wakapi/services/summary.go:146.2,148.26 3 1 +github.com/muety/wakapi/services/summary.go:153.2,160.34 7 1 +github.com/muety/wakapi/services/summary.go:178.2,178.25 1 1 +github.com/muety/wakapi/services/summary.go:183.2,196.30 2 1 +github.com/muety/wakapi/services/summary.go:137.16,139.3 1 0 +github.com/muety/wakapi/services/summary.go:142.74,144.3 1 1 +github.com/muety/wakapi/services/summary.go:148.26,150.3 1 1 +github.com/muety/wakapi/services/summary.go:160.34,162.20 2 1 +github.com/muety/wakapi/services/summary.go:163.30,164.29 1 1 +github.com/muety/wakapi/services/summary.go:165.31,166.30 1 1 +github.com/muety/wakapi/services/summary.go:167.29,168.28 1 1 +github.com/muety/wakapi/services/summary.go:169.25,170.24 1 1 +github.com/muety/wakapi/services/summary.go:171.30,172.29 1 1 +github.com/muety/wakapi/services/summary.go:173.29,174.28 1 1 +github.com/muety/wakapi/services/summary.go:178.25,181.3 2 1 +github.com/muety/wakapi/services/summary.go:201.76,203.2 1 0 +github.com/muety/wakapi/services/summary.go:205.62,208.2 2 0 +github.com/muety/wakapi/services/summary.go:210.66,213.2 2 0 +github.com/muety/wakapi/services/summary.go:217.125,220.30 2 1 +github.com/muety/wakapi/services/summary.go:224.2,225.28 2 1 +github.com/muety/wakapi/services/summary.go:233.2,233.40 1 1 +github.com/muety/wakapi/services/summary.go:237.2,237.67 1 1 +github.com/muety/wakapi/services/summary.go:220.30,222.3 1 1 +github.com/muety/wakapi/services/summary.go:225.28,231.3 1 1 +github.com/muety/wakapi/services/summary.go:233.40,235.3 1 1 +github.com/muety/wakapi/services/summary.go:240.87,241.72 1 1 +github.com/muety/wakapi/services/summary.go:249.2,250.16 2 1 +github.com/muety/wakapi/services/summary.go:255.2,256.37 2 1 +github.com/muety/wakapi/services/summary.go:260.2,262.30 3 1 +github.com/muety/wakapi/services/summary.go:273.2,274.29 2 1 +github.com/muety/wakapi/services/summary.go:279.2,280.16 2 1 +github.com/muety/wakapi/services/summary.go:241.72,247.3 1 1 +github.com/muety/wakapi/services/summary.go:250.16,253.3 2 0 +github.com/muety/wakapi/services/summary.go:256.37,258.3 1 1 +github.com/muety/wakapi/services/summary.go:262.30,263.48 1 1 +github.com/muety/wakapi/services/summary.go:263.48,264.41 1 1 +github.com/muety/wakapi/services/summary.go:267.4,268.29 2 1 +github.com/muety/wakapi/services/summary.go:264.41,266.5 1 1 +github.com/muety/wakapi/services/summary.go:274.29,275.18 1 1 +github.com/muety/wakapi/services/summary.go:275.18,277.4 1 1 +github.com/muety/wakapi/services/summary.go:283.97,284.24 1 1 +github.com/muety/wakapi/services/summary.go:288.2,304.30 5 1 +github.com/muety/wakapi/services/summary.go:335.2,338.26 3 1 +github.com/muety/wakapi/services/summary.go:284.24,286.3 1 0 +github.com/muety/wakapi/services/summary.go:304.30,306.41 2 1 +github.com/muety/wakapi/services/summary.go:311.3,311.38 1 1 +github.com/muety/wakapi/services/summary.go:315.3,315.37 1 1 +github.com/muety/wakapi/services/summary.go:319.3,319.34 1 1 +github.com/muety/wakapi/services/summary.go:323.3,332.25 9 1 +github.com/muety/wakapi/services/summary.go:306.41,308.12 2 1 +github.com/muety/wakapi/services/summary.go:311.38,313.4 1 0 +github.com/muety/wakapi/services/summary.go:315.37,317.4 1 1 +github.com/muety/wakapi/services/summary.go:319.34,321.4 1 1 +github.com/muety/wakapi/services/summary.go:341.127,345.32 2 1 +github.com/muety/wakapi/services/summary.go:349.2,349.27 1 1 +github.com/muety/wakapi/services/summary.go:357.2,359.26 3 1 +github.com/muety/wakapi/services/summary.go:364.2,364.43 1 1 +github.com/muety/wakapi/services/summary.go:368.2,368.17 1 1 +github.com/muety/wakapi/services/summary.go:345.32,347.3 1 1 +github.com/muety/wakapi/services/summary.go:349.27,350.37 1 1 +github.com/muety/wakapi/services/summary.go:350.37,352.4 1 1 +github.com/muety/wakapi/services/summary.go:352.9,354.4 1 1 +github.com/muety/wakapi/services/summary.go:359.26,362.3 2 1 +github.com/muety/wakapi/services/summary.go:364.43,366.3 1 1 +github.com/muety/wakapi/services/summary.go:371.116,372.25 1 1 +github.com/muety/wakapi/services/summary.go:376.2,379.44 2 1 +github.com/muety/wakapi/services/summary.go:384.2,384.40 1 1 +github.com/muety/wakapi/services/summary.go:409.2,409.54 1 1 +github.com/muety/wakapi/services/summary.go:413.2,413.18 1 1 +github.com/muety/wakapi/services/summary.go:372.25,374.3 1 0 +github.com/muety/wakapi/services/summary.go:379.44,381.3 1 1 +github.com/muety/wakapi/services/summary.go:384.40,386.19 2 1 +github.com/muety/wakapi/services/summary.go:393.3,398.34 3 1 +github.com/muety/wakapi/services/summary.go:403.3,403.22 1 1 +github.com/muety/wakapi/services/summary.go:386.19,387.12 1 1 +github.com/muety/wakapi/services/summary.go:398.34,400.4 1 1 +github.com/muety/wakapi/services/summary.go:403.22,405.4 1 1 +github.com/muety/wakapi/services/summary.go:409.54,411.3 1 1 +github.com/muety/wakapi/services/summary.go:416.59,418.2 1 1 +github.com/muety/wakapi/services/summary.go:420.63,421.37 1 0 +github.com/muety/wakapi/services/summary.go:421.37,422.36 1 0 +github.com/muety/wakapi/services/summary.go:422.36,424.4 1 0 +github.com/muety/wakapi/services/summary.go:428.85,429.40 1 1 +github.com/muety/wakapi/services/summary.go:429.40,432.3 2 1 +github.com/muety/wakapi/services/summary.go:435.99,436.42 1 1 +github.com/muety/wakapi/services/summary.go:436.42,438.17 2 1 +github.com/muety/wakapi/services/summary.go:441.3,442.29 2 1 +github.com/muety/wakapi/services/summary.go:445.3,445.22 1 1 +github.com/muety/wakapi/services/summary.go:438.17,440.4 1 0 +github.com/muety/wakapi/services/summary.go:442.29,444.4 1 1 +github.com/muety/wakapi/services/summary.go:449.114,450.33 1 1 +github.com/muety/wakapi/services/summary.go:450.33,453.17 3 1 +github.com/muety/wakapi/services/summary.go:458.3,459.28 2 1 +github.com/muety/wakapi/services/summary.go:462.3,462.24 1 1 +github.com/muety/wakapi/services/summary.go:453.17,454.33 1 1 +github.com/muety/wakapi/services/summary.go:454.33,456.5 1 1 +github.com/muety/wakapi/services/summary.go:459.28,461.4 1 1 github.com/muety/wakapi/services/aggregation.go:29.142,37.2 1 0 github.com/muety/wakapi/services/aggregation.go:46.43,48.37 1 0 github.com/muety/wakapi/services/aggregation.go:52.2,54.19 3 0 @@ -826,200 +1038,51 @@ github.com/muety/wakapi/services/aggregation.go:176.27,178.3 1 0 github.com/muety/wakapi/services/aggregation.go:181.83,196.41 5 0 github.com/muety/wakapi/services/aggregation.go:196.41,206.3 3 0 github.com/muety/wakapi/services/aggregation.go:209.34,212.2 2 0 -github.com/muety/wakapi/services/alias.go:18.77,23.2 1 1 -github.com/muety/wakapi/services/alias.go:27.60,28.43 1 1 -github.com/muety/wakapi/services/alias.go:31.2,31.14 1 1 -github.com/muety/wakapi/services/alias.go:28.43,30.3 1 1 -github.com/muety/wakapi/services/alias.go:34.62,36.16 2 1 -github.com/muety/wakapi/services/alias.go:39.2,39.12 1 1 -github.com/muety/wakapi/services/alias.go:36.16,38.3 1 1 -github.com/muety/wakapi/services/alias.go:42.59,43.51 1 1 -github.com/muety/wakapi/services/alias.go:43.51,45.3 1 0 -github.com/muety/wakapi/services/alias.go:48.76,49.32 1 0 -github.com/muety/wakapi/services/alias.go:52.2,52.49 1 0 -github.com/muety/wakapi/services/alias.go:49.32,51.3 1 0 -github.com/muety/wakapi/services/alias.go:52.49,54.3 1 0 -github.com/muety/wakapi/services/alias.go:54.8,56.3 1 0 -github.com/muety/wakapi/services/alias.go:59.113,60.32 1 0 -github.com/muety/wakapi/services/alias.go:63.2,63.49 1 0 -github.com/muety/wakapi/services/alias.go:60.32,62.3 1 0 -github.com/muety/wakapi/services/alias.go:63.49,65.47 2 0 -github.com/muety/wakapi/services/alias.go:70.3,70.30 1 0 -github.com/muety/wakapi/services/alias.go:65.47,66.45 1 0 -github.com/muety/wakapi/services/alias.go:66.45,68.5 1 0 -github.com/muety/wakapi/services/alias.go:71.8,73.3 1 0 -github.com/muety/wakapi/services/alias.go:76.108,77.32 1 1 -github.com/muety/wakapi/services/alias.go:81.2,81.49 1 1 -github.com/muety/wakapi/services/alias.go:89.2,89.19 1 1 -github.com/muety/wakapi/services/alias.go:77.32,79.3 1 1 -github.com/muety/wakapi/services/alias.go:81.49,82.47 1 1 -github.com/muety/wakapi/services/alias.go:82.47,83.49 1 1 -github.com/muety/wakapi/services/alias.go:83.49,85.5 1 1 -github.com/muety/wakapi/services/alias.go:92.77,94.16 2 0 -github.com/muety/wakapi/services/alias.go:97.2,98.20 2 0 -github.com/muety/wakapi/services/alias.go:94.16,96.3 1 0 -github.com/muety/wakapi/services/alias.go:101.60,102.24 1 0 -github.com/muety/wakapi/services/alias.go:105.2,107.12 3 0 -github.com/muety/wakapi/services/alias.go:102.24,104.3 1 0 -github.com/muety/wakapi/services/alias.go:110.69,113.28 3 0 -github.com/muety/wakapi/services/alias.go:121.2,123.31 2 0 -github.com/muety/wakapi/services/alias.go:127.2,127.12 1 0 -github.com/muety/wakapi/services/alias.go:113.28,114.21 1 0 -github.com/muety/wakapi/services/alias.go:117.3,118.16 2 0 -github.com/muety/wakapi/services/alias.go:114.21,116.4 1 0 -github.com/muety/wakapi/services/alias.go:123.31,125.3 1 0 -github.com/muety/wakapi/services/summary.go:29.189,41.33 3 1 -github.com/muety/wakapi/services/summary.go:52.2,52.12 1 1 -github.com/muety/wakapi/services/summary.go:41.33,42.31 1 1 -github.com/muety/wakapi/services/summary.go:42.31,44.39 2 0 -github.com/muety/wakapi/services/summary.go:44.39,45.71 1 0 -github.com/muety/wakapi/services/summary.go:45.71,47.6 1 0 -github.com/muety/wakapi/services/summary.go:58.161,61.66 2 1 -github.com/muety/wakapi/services/summary.go:66.2,71.20 4 1 -github.com/muety/wakapi/services/summary.go:77.2,77.65 1 1 -github.com/muety/wakapi/services/summary.go:82.2,83.16 2 1 -github.com/muety/wakapi/services/summary.go:88.2,94.30 6 1 -github.com/muety/wakapi/services/summary.go:61.66,63.3 1 0 -github.com/muety/wakapi/services/summary.go:71.20,74.3 2 1 -github.com/muety/wakapi/services/summary.go:77.65,79.3 1 0 -github.com/muety/wakapi/services/summary.go:83.16,85.3 1 0 -github.com/muety/wakapi/services/summary.go:97.126,101.41 2 1 -github.com/muety/wakapi/services/summary.go:112.2,113.44 2 1 -github.com/muety/wakapi/services/summary.go:122.2,123.16 2 1 -github.com/muety/wakapi/services/summary.go:127.2,127.30 1 1 -github.com/muety/wakapi/services/summary.go:101.41,104.17 2 1 -github.com/muety/wakapi/services/summary.go:104.17,106.4 1 1 -github.com/muety/wakapi/services/summary.go:106.9,108.4 1 0 -github.com/muety/wakapi/services/summary.go:113.44,114.87 1 1 -github.com/muety/wakapi/services/summary.go:114.87,116.4 1 1 -github.com/muety/wakapi/services/summary.go:116.9,118.4 1 0 -github.com/muety/wakapi/services/summary.go:123.16,125.3 1 0 -github.com/muety/wakapi/services/summary.go:130.127,133.16 2 1 -github.com/muety/wakapi/services/summary.go:137.2,141.26 4 1 -github.com/muety/wakapi/services/summary.go:146.2,152.34 6 1 -github.com/muety/wakapi/services/summary.go:168.2,168.25 1 1 -github.com/muety/wakapi/services/summary.go:173.2,185.30 2 1 -github.com/muety/wakapi/services/summary.go:133.16,135.3 1 0 -github.com/muety/wakapi/services/summary.go:141.26,143.3 1 1 -github.com/muety/wakapi/services/summary.go:152.34,154.20 2 1 -github.com/muety/wakapi/services/summary.go:155.30,156.29 1 1 -github.com/muety/wakapi/services/summary.go:157.31,158.30 1 1 -github.com/muety/wakapi/services/summary.go:159.29,160.28 1 1 -github.com/muety/wakapi/services/summary.go:161.25,162.24 1 1 -github.com/muety/wakapi/services/summary.go:163.30,164.29 1 1 -github.com/muety/wakapi/services/summary.go:168.25,171.3 2 1 -github.com/muety/wakapi/services/summary.go:190.76,192.2 1 0 -github.com/muety/wakapi/services/summary.go:194.62,197.2 2 0 -github.com/muety/wakapi/services/summary.go:199.66,202.2 2 0 -github.com/muety/wakapi/services/summary.go:206.125,209.30 2 1 -github.com/muety/wakapi/services/summary.go:213.2,214.28 2 1 -github.com/muety/wakapi/services/summary.go:222.2,222.40 1 1 -github.com/muety/wakapi/services/summary.go:226.2,226.67 1 1 -github.com/muety/wakapi/services/summary.go:209.30,211.3 1 1 -github.com/muety/wakapi/services/summary.go:214.28,220.3 1 1 -github.com/muety/wakapi/services/summary.go:222.40,224.3 1 1 -github.com/muety/wakapi/services/summary.go:229.87,230.72 1 1 -github.com/muety/wakapi/services/summary.go:238.2,239.16 2 1 -github.com/muety/wakapi/services/summary.go:244.2,245.37 2 1 -github.com/muety/wakapi/services/summary.go:249.2,251.30 3 1 -github.com/muety/wakapi/services/summary.go:262.2,263.29 2 1 -github.com/muety/wakapi/services/summary.go:268.2,269.16 2 1 -github.com/muety/wakapi/services/summary.go:230.72,236.3 1 1 -github.com/muety/wakapi/services/summary.go:239.16,242.3 2 0 -github.com/muety/wakapi/services/summary.go:245.37,247.3 1 1 -github.com/muety/wakapi/services/summary.go:251.30,252.48 1 1 -github.com/muety/wakapi/services/summary.go:252.48,253.41 1 1 -github.com/muety/wakapi/services/summary.go:256.4,257.29 2 1 -github.com/muety/wakapi/services/summary.go:253.41,255.5 1 1 -github.com/muety/wakapi/services/summary.go:263.29,264.18 1 1 -github.com/muety/wakapi/services/summary.go:264.18,266.4 1 1 -github.com/muety/wakapi/services/summary.go:272.97,273.24 1 1 -github.com/muety/wakapi/services/summary.go:277.2,292.30 5 1 -github.com/muety/wakapi/services/summary.go:322.2,325.26 3 1 -github.com/muety/wakapi/services/summary.go:273.24,275.3 1 0 -github.com/muety/wakapi/services/summary.go:292.30,294.41 2 1 -github.com/muety/wakapi/services/summary.go:299.3,299.38 1 1 -github.com/muety/wakapi/services/summary.go:303.3,303.37 1 1 -github.com/muety/wakapi/services/summary.go:307.3,307.34 1 1 -github.com/muety/wakapi/services/summary.go:311.3,319.25 8 1 -github.com/muety/wakapi/services/summary.go:294.41,296.12 2 1 -github.com/muety/wakapi/services/summary.go:299.38,301.4 1 0 -github.com/muety/wakapi/services/summary.go:303.37,305.4 1 1 -github.com/muety/wakapi/services/summary.go:307.34,309.4 1 1 -github.com/muety/wakapi/services/summary.go:328.127,332.32 2 1 -github.com/muety/wakapi/services/summary.go:336.2,336.27 1 1 -github.com/muety/wakapi/services/summary.go:344.2,346.26 3 1 -github.com/muety/wakapi/services/summary.go:351.2,351.43 1 1 -github.com/muety/wakapi/services/summary.go:355.2,355.17 1 1 -github.com/muety/wakapi/services/summary.go:332.32,334.3 1 1 -github.com/muety/wakapi/services/summary.go:336.27,337.37 1 1 -github.com/muety/wakapi/services/summary.go:337.37,339.4 1 1 -github.com/muety/wakapi/services/summary.go:339.9,341.4 1 1 -github.com/muety/wakapi/services/summary.go:346.26,349.3 2 1 -github.com/muety/wakapi/services/summary.go:351.43,353.3 1 1 -github.com/muety/wakapi/services/summary.go:358.116,359.25 1 1 -github.com/muety/wakapi/services/summary.go:363.2,366.44 2 1 -github.com/muety/wakapi/services/summary.go:371.2,371.40 1 1 -github.com/muety/wakapi/services/summary.go:396.2,396.54 1 1 -github.com/muety/wakapi/services/summary.go:400.2,400.18 1 1 -github.com/muety/wakapi/services/summary.go:359.25,361.3 1 0 -github.com/muety/wakapi/services/summary.go:366.44,368.3 1 1 -github.com/muety/wakapi/services/summary.go:371.40,373.19 2 1 -github.com/muety/wakapi/services/summary.go:380.3,385.34 3 1 -github.com/muety/wakapi/services/summary.go:390.3,390.22 1 1 -github.com/muety/wakapi/services/summary.go:373.19,374.12 1 1 -github.com/muety/wakapi/services/summary.go:385.34,387.4 1 1 -github.com/muety/wakapi/services/summary.go:390.22,392.4 1 1 -github.com/muety/wakapi/services/summary.go:396.54,398.3 1 1 -github.com/muety/wakapi/services/summary.go:403.59,405.2 1 1 -github.com/muety/wakapi/services/summary.go:407.63,408.37 1 0 -github.com/muety/wakapi/services/summary.go:408.37,409.36 1 0 -github.com/muety/wakapi/services/summary.go:409.36,411.4 1 0 -github.com/muety/wakapi/services/summary.go:415.85,416.40 1 1 -github.com/muety/wakapi/services/summary.go:416.40,419.3 2 1 -github.com/muety/wakapi/services/summary.go:422.99,423.42 1 1 -github.com/muety/wakapi/services/summary.go:423.42,425.17 2 1 -github.com/muety/wakapi/services/summary.go:428.3,429.29 2 1 -github.com/muety/wakapi/services/summary.go:432.3,432.22 1 1 -github.com/muety/wakapi/services/summary.go:425.17,427.4 1 0 -github.com/muety/wakapi/services/summary.go:429.29,431.4 1 1 -github.com/muety/wakapi/services/summary.go:436.114,437.33 1 1 -github.com/muety/wakapi/services/summary.go:437.33,440.17 3 1 -github.com/muety/wakapi/services/summary.go:445.3,446.28 2 1 -github.com/muety/wakapi/services/summary.go:449.3,449.24 1 1 -github.com/muety/wakapi/services/summary.go:440.17,441.33 1 1 -github.com/muety/wakapi/services/summary.go:441.33,443.5 1 1 -github.com/muety/wakapi/services/summary.go:446.28,448.4 1 1 -github.com/muety/wakapi/services/project_label.go:20.111,27.2 1 0 -github.com/muety/wakapi/services/project_label.go:29.80,31.2 1 0 -github.com/muety/wakapi/services/project_label.go:33.90,34.51 1 0 -github.com/muety/wakapi/services/project_label.go:38.2,39.16 2 0 -github.com/muety/wakapi/services/project_label.go:42.2,43.20 2 0 -github.com/muety/wakapi/services/project_label.go:34.51,36.3 1 0 -github.com/muety/wakapi/services/project_label.go:39.16,41.3 1 0 -github.com/muety/wakapi/services/project_label.go:47.108,50.16 3 0 -github.com/muety/wakapi/services/project_label.go:54.2,54.31 1 0 -github.com/muety/wakapi/services/project_label.go:61.2,61.29 1 0 -github.com/muety/wakapi/services/project_label.go:50.16,52.3 1 0 -github.com/muety/wakapi/services/project_label.go:54.31,55.50 1 0 -github.com/muety/wakapi/services/project_label.go:55.50,57.4 1 0 -github.com/muety/wakapi/services/project_label.go:57.9,59.4 1 0 -github.com/muety/wakapi/services/project_label.go:65.116,68.16 3 0 -github.com/muety/wakapi/services/project_label.go:72.2,72.31 1 0 -github.com/muety/wakapi/services/project_label.go:79.2,79.29 1 0 -github.com/muety/wakapi/services/project_label.go:68.16,70.3 1 0 -github.com/muety/wakapi/services/project_label.go:72.31,73.45 1 0 -github.com/muety/wakapi/services/project_label.go:73.45,75.4 1 0 -github.com/muety/wakapi/services/project_label.go:75.9,77.4 1 0 -github.com/muety/wakapi/services/project_label.go:82.98,84.16 2 0 -github.com/muety/wakapi/services/project_label.go:88.2,90.20 3 0 -github.com/muety/wakapi/services/project_label.go:84.16,86.3 1 0 -github.com/muety/wakapi/services/project_label.go:93.74,94.24 1 0 -github.com/muety/wakapi/services/project_label.go:97.2,100.12 4 0 -github.com/muety/wakapi/services/project_label.go:94.24,96.3 1 0 -github.com/muety/wakapi/services/project_label.go:103.89,105.14 2 0 -github.com/muety/wakapi/services/project_label.go:108.2,111.4 1 0 -github.com/muety/wakapi/services/project_label.go:105.14,107.3 1 0 +github.com/muety/wakapi/services/duration.go:16.78,22.2 2 1 +github.com/muety/wakapi/services/duration.go:24.123,26.16 2 1 +github.com/muety/wakapi/services/duration.go:31.2,36.31 4 1 +github.com/muety/wakapi/services/duration.go:71.2,73.31 2 1 +github.com/muety/wakapi/services/duration.go:82.2,82.32 1 1 +github.com/muety/wakapi/services/duration.go:26.16,28.3 1 0 +github.com/muety/wakapi/services/duration.go:36.31,37.42 1 1 +github.com/muety/wakapi/services/duration.go:41.3,43.62 2 1 +github.com/muety/wakapi/services/duration.go:47.3,47.20 1 1 +github.com/muety/wakapi/services/duration.go:52.3,53.35 2 1 +github.com/muety/wakapi/services/duration.go:56.3,58.72 2 1 +github.com/muety/wakapi/services/duration.go:68.3,68.10 1 1 +github.com/muety/wakapi/services/duration.go:37.42,38.12 1 1 +github.com/muety/wakapi/services/duration.go:43.62,45.4 1 1 +github.com/muety/wakapi/services/duration.go:47.20,49.12 2 1 +github.com/muety/wakapi/services/duration.go:53.35,55.4 1 1 +github.com/muety/wakapi/services/duration.go:58.72,60.41 2 1 +github.com/muety/wakapi/services/duration.go:63.4,63.15 1 1 +github.com/muety/wakapi/services/duration.go:60.41,62.5 1 1 +github.com/muety/wakapi/services/duration.go:64.9,66.4 1 1 +github.com/muety/wakapi/services/duration.go:73.31,74.26 1 1 +github.com/muety/wakapi/services/duration.go:74.26,75.23 1 1 +github.com/muety/wakapi/services/duration.go:78.4,78.36 1 1 +github.com/muety/wakapi/services/duration.go:75.23,77.5 1 1 +github.com/muety/wakapi/services/misc.go:21.126,28.2 1 0 +github.com/muety/wakapi/services/misc.go:40.50,42.48 1 0 +github.com/muety/wakapi/services/misc.go:46.2,48.19 3 0 +github.com/muety/wakapi/services/misc.go:42.48,44.3 1 0 +github.com/muety/wakapi/services/misc.go:51.51,53.16 2 0 +github.com/muety/wakapi/services/misc.go:57.2,60.26 3 0 +github.com/muety/wakapi/services/misc.go:66.2,68.40 2 0 +github.com/muety/wakapi/services/misc.go:73.2,75.33 3 0 +github.com/muety/wakapi/services/misc.go:79.2,84.17 2 0 +github.com/muety/wakapi/services/misc.go:88.2,91.17 1 0 +github.com/muety/wakapi/services/misc.go:95.2,95.12 1 0 +github.com/muety/wakapi/services/misc.go:53.16,55.3 1 0 +github.com/muety/wakapi/services/misc.go:60.26,65.3 1 0 +github.com/muety/wakapi/services/misc.go:68.40,70.3 1 0 +github.com/muety/wakapi/services/misc.go:75.33,78.3 2 0 +github.com/muety/wakapi/services/misc.go:84.17,86.3 1 0 +github.com/muety/wakapi/services/misc.go:91.17,93.3 1 0 +github.com/muety/wakapi/services/misc.go:98.116,99.24 1 0 +github.com/muety/wakapi/services/misc.go:99.24,100.156 1 0 +github.com/muety/wakapi/services/misc.go:100.156,102.4 1 0 +github.com/muety/wakapi/services/misc.go:102.9,107.4 1 0 github.com/muety/wakapi/services/report.go:30.122,44.33 4 0 github.com/muety/wakapi/services/report.go:50.2,50.12 1 0 github.com/muety/wakapi/services/report.go:44.33,45.31 1 0 @@ -1049,49 +1112,3 @@ github.com/muety/wakapi/services/report.go:145.2,145.12 1 0 github.com/muety/wakapi/services/report.go:138.41,139.30 1 0 github.com/muety/wakapi/services/report.go:139.30,140.16 1 0 github.com/muety/wakapi/services/report.go:140.16,142.5 1 0 -github.com/muety/wakapi/services/user.go:24.99,34.33 3 0 -github.com/muety/wakapi/services/user.go:55.2,55.12 1 0 -github.com/muety/wakapi/services/user.go:34.33,35.31 1 0 -github.com/muety/wakapi/services/user.go:35.31,41.61 4 0 -github.com/muety/wakapi/services/user.go:45.4,45.24 1 0 -github.com/muety/wakapi/services/user.go:41.61,43.5 1 0 -github.com/muety/wakapi/services/user.go:45.24,46.80 1 0 -github.com/muety/wakapi/services/user.go:46.80,48.6 1 0 -github.com/muety/wakapi/services/user.go:48.11,50.6 1 0 -github.com/muety/wakapi/services/user.go:58.74,59.40 1 0 -github.com/muety/wakapi/services/user.go:63.2,64.16 2 0 -github.com/muety/wakapi/services/user.go:68.2,69.15 2 0 -github.com/muety/wakapi/services/user.go:59.40,61.3 1 0 -github.com/muety/wakapi/services/user.go:64.16,66.3 1 0 -github.com/muety/wakapi/services/user.go:72.72,73.37 1 0 -github.com/muety/wakapi/services/user.go:77.2,78.16 2 0 -github.com/muety/wakapi/services/user.go:82.2,83.15 2 0 -github.com/muety/wakapi/services/user.go:73.37,75.3 1 0 -github.com/muety/wakapi/services/user.go:78.16,80.3 1 0 -github.com/muety/wakapi/services/user.go:86.76,88.2 1 0 -github.com/muety/wakapi/services/user.go:90.86,92.2 1 0 -github.com/muety/wakapi/services/user.go:94.58,96.2 1 0 -github.com/muety/wakapi/services/user.go:98.86,100.2 1 0 -github.com/muety/wakapi/services/user.go:102.71,104.12 2 0 -github.com/muety/wakapi/services/user.go:108.2,109.42 2 0 -github.com/muety/wakapi/services/user.go:113.2,114.16 2 0 -github.com/muety/wakapi/services/user.go:118.2,119.21 2 0 -github.com/muety/wakapi/services/user.go:104.12,106.3 1 0 -github.com/muety/wakapi/services/user.go:109.42,111.3 1 0 -github.com/muety/wakapi/services/user.go:114.16,116.3 1 0 -github.com/muety/wakapi/services/user.go:122.48,124.2 1 0 -github.com/muety/wakapi/services/user.go:126.102,136.93 2 0 -github.com/muety/wakapi/services/user.go:142.2,142.38 1 0 -github.com/muety/wakapi/services/user.go:136.93,138.3 1 0 -github.com/muety/wakapi/services/user.go:138.8,140.3 1 0 -github.com/muety/wakapi/services/user.go:145.73,149.2 3 0 -github.com/muety/wakapi/services/user.go:151.78,155.2 3 0 -github.com/muety/wakapi/services/user.go:157.99,160.2 2 0 -github.com/muety/wakapi/services/user.go:162.106,165.96 3 0 -github.com/muety/wakapi/services/user.go:170.2,170.68 1 0 -github.com/muety/wakapi/services/user.go:165.96,167.3 1 0 -github.com/muety/wakapi/services/user.go:167.8,169.3 1 0 -github.com/muety/wakapi/services/user.go:173.85,175.2 1 0 -github.com/muety/wakapi/services/user.go:177.57,184.2 4 0 -github.com/muety/wakapi/services/user.go:186.38,188.2 1 0 -github.com/muety/wakapi/services/user.go:190.57,195.2 1 0 diff --git a/models/compat/wakatime/v1/stats.go b/models/compat/wakatime/v1/stats.go index ecfc683..428b1db 100644 --- a/models/compat/wakatime/v1/stats.go +++ b/models/compat/wakatime/v1/stats.go @@ -26,6 +26,7 @@ type StatsData struct { Machines []*SummariesEntry `json:"machines"` Projects []*SummariesEntry `json:"projects"` OperatingSystems []*SummariesEntry `json:"operating_systems"` + Branches []*SummariesEntry `json:"branches"` } func NewStatsFrom(summary *models.Summary, filters *models.Filters) *StatsViewModel { @@ -71,11 +72,21 @@ func NewStatsFrom(summary *models.Summary, filters *models.Filters) *StatsViewMo oss[i] = convertEntry(e, summary.TotalTimeBy(models.SummaryOS)) } + branches := make([]*SummariesEntry, len(summary.Branches)) + for i, e := range summary.Branches { + branches[i] = convertEntry(e, summary.TotalTimeBy(models.SummaryBranch)) + } + data.Editors = editors data.Languages = languages data.Machines = machines data.Projects = projects data.OperatingSystems = oss + data.Branches = branches + + if summary.Branches == nil { + data.Branches = nil + } return &StatsViewModel{ Data: data, diff --git a/models/compat/wakatime/v1/summaries.go b/models/compat/wakatime/v1/summaries.go index 5614e8d..e8220a6 100644 --- a/models/compat/wakatime/v1/summaries.go +++ b/models/compat/wakatime/v1/summaries.go @@ -26,6 +26,7 @@ type SummariesData struct { Machines []*SummariesEntry `json:"machines"` OperatingSystems []*SummariesEntry `json:"operating_systems"` Projects []*SummariesEntry `json:"projects"` + Branches []*SummariesEntry `json:"branches"` GrandTotal *SummariesGrandTotal `json:"grand_total"` Range *SummariesRange `json:"range"` } @@ -92,6 +93,7 @@ func newDataFrom(s *models.Summary) *SummariesData { Machines: make([]*SummariesEntry, len(s.Machines)), OperatingSystems: make([]*SummariesEntry, len(s.OperatingSystems)), Projects: make([]*SummariesEntry, len(s.Projects)), + Branches: make([]*SummariesEntry, len(s.Branches)), GrandTotal: &SummariesGrandTotal{ Digital: fmt.Sprintf("%d:%d", totalHrs, totalMins), Hours: totalHrs, @@ -109,7 +111,7 @@ func newDataFrom(s *models.Summary) *SummariesData { } var wg sync.WaitGroup - wg.Add(5) + wg.Add(6) go func(data *SummariesData) { defer wg.Done() @@ -146,6 +148,17 @@ func newDataFrom(s *models.Summary) *SummariesData { } }(data) + go func(data *SummariesData) { + defer wg.Done() + for i, e := range s.Branches { + data.Branches[i] = convertEntry(e, s.TotalTimeBy(models.SummaryBranch)) + } + }(data) + + if s.Branches == nil { + data.Branches = nil + } + wg.Wait() return data } diff --git a/models/duration.go b/models/duration.go index 082dccf..d74b715 100644 --- a/models/duration.go +++ b/models/duration.go @@ -16,6 +16,7 @@ type Duration struct { Editor string `json:"editor"` OperatingSystem string `json:"operating_system"` Machine string `json:"machine"` + Branch string `json:"branch"` NumHeartbeats int `json:"-" hash:"ignore"` GroupHash string `json:"-" hash:"ignore"` } @@ -30,6 +31,7 @@ func NewDurationFromHeartbeat(h *Heartbeat) *Duration { Editor: h.Editor, OperatingSystem: h.OperatingSystem, Machine: h.Machine, + Branch: h.Branch, NumHeartbeats: 1, } return d.Hashed() @@ -56,6 +58,8 @@ func (d *Duration) GetKey(t uint8) (key string) { key = d.OperatingSystem case SummaryMachine: key = d.Machine + case SummaryBranch: + key = d.Branch } if key == "" { diff --git a/models/filters.go b/models/filters.go index d8478ef..6e5d33f 100644 --- a/models/filters.go +++ b/models/filters.go @@ -13,6 +13,7 @@ type Filters struct { Editor OrFilter Machine OrFilter Label OrFilter + Branch OrFilter } type OrFilter []string @@ -62,6 +63,8 @@ func (f *Filters) WithMultiple(entity uint8, keys []string) *Filters { f.Machine = append(f.Machine, keys...) case SummaryLabel: f.Label = append(f.Label, keys...) + case SummaryBranch: + f.Branch = append(f.Branch, keys...) } return f } @@ -79,6 +82,8 @@ func (f *Filters) One() (bool, uint8, OrFilter) { return true, SummaryMachine, f.Machine } else if f.Label != nil && f.Label.Exists() { return true, SummaryLabel, f.Label + } else if f.Branch != nil && f.Branch.Exists() { + return true, SummaryBranch, f.Branch } return false, 0, OrFilter{} } @@ -153,6 +158,14 @@ func (f *Filters) WithAliases(resolve AliasReverseResolver) *Filters { } f.Machine = updated } + if f.Branch != nil { + updated := OrFilter(make([]string, 0, len(f.Branch))) + for _, e := range f.Branch { + updated = append(updated, e) + updated = append(updated, resolve(SummaryBranch, e)...) + } + f.Branch = updated + } return f } diff --git a/models/heartbeat.go b/models/heartbeat.go index e683874..291659c 100644 --- a/models/heartbeat.go +++ b/models/heartbeat.go @@ -56,6 +56,8 @@ func (h *Heartbeat) GetKey(t uint8) (key string) { key = h.OperatingSystem case SummaryMachine: key = h.Machine + case SummaryBranch: + key = h.Branch } if key == "" { diff --git a/models/summary.go b/models/summary.go index 9a575c3..a82badb 100644 --- a/models/summary.go +++ b/models/summary.go @@ -14,6 +14,7 @@ const ( SummaryOS uint8 = 3 SummaryMachine uint8 = 4 SummaryLabel uint8 = 5 + SummaryBranch uint8 = 6 ) const UnknownSummaryKey = "unknown" @@ -30,7 +31,8 @@ type Summary struct { Editors SummaryItems `json:"editors" gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` OperatingSystems SummaryItems `json:"operating_systems" gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` Machines SummaryItems `json:"machines" gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` - Labels SummaryItems `json:"labels" gorm:"-"` // labels are not persisted, but calculated at runtime, i.e. when summary is retrieved + Labels SummaryItems `json:"labels" gorm:"-"` // labels are not persisted, but calculated at runtime, i.e. when summary is retrieved + Branches SummaryItems `json:"branches" gorm:"-"` // branches are not persisted, but calculated at runtime in case a project filter is applied NumHeartbeats int `json:"-" gorm:"default:0"` } @@ -58,10 +60,14 @@ type SummaryParams struct { } func SummaryTypes() []uint8 { - return []uint8{SummaryProject, SummaryLanguage, SummaryEditor, SummaryOS, SummaryMachine, SummaryLabel} + return []uint8{SummaryProject, SummaryLanguage, SummaryEditor, SummaryOS, SummaryMachine, SummaryLabel, SummaryBranch} } func NativeSummaryTypes() []uint8 { + return []uint8{SummaryProject, SummaryLanguage, SummaryEditor, SummaryOS, SummaryMachine, SummaryBranch} +} + +func PersistedSummaryTypes() []uint8 { return []uint8{SummaryProject, SummaryLanguage, SummaryEditor, SummaryOS, SummaryMachine} } @@ -72,6 +78,7 @@ func (s *Summary) Sorted() *Summary { sort.Sort(sort.Reverse(s.Languages)) sort.Sort(sort.Reverse(s.Editors)) sort.Sort(sort.Reverse(s.Labels)) + sort.Sort(sort.Reverse(s.Branches)) return s } @@ -87,6 +94,7 @@ func (s *Summary) MappedItems() map[uint8]*SummaryItems { SummaryOS: &s.OperatingSystems, SummaryMachine: &s.Machines, SummaryLabel: &s.Labels, + SummaryBranch: &s.Branches, } } @@ -233,6 +241,10 @@ func (s *Summary) MaxByToString(entityType uint8) string { func (s *Summary) WithResolvedAliases(resolve AliasResolver) *Summary { processAliases := func(origin []*SummaryItem) []*SummaryItem { + if origin == nil { + return nil + } + target := make([]*SummaryItem, 0) findItem := func(key string) *SummaryItem { @@ -278,6 +290,7 @@ func (s *Summary) WithResolvedAliases(resolve AliasResolver) *Summary { s.OperatingSystems = processAliases(s.OperatingSystems) s.Machines = processAliases(s.Machines) s.Labels = processAliases(s.Labels) + s.Branches = processAliases(s.Branches) return s } diff --git a/repositories/summary.go b/repositories/summary.go index 01dc61a..877f32c 100644 --- a/repositories/summary.go +++ b/repositories/summary.go @@ -23,6 +23,7 @@ func (r *SummaryRepository) GetAll() ([]*models.Summary, error) { Preload("Editors", "type = ?", models.SummaryEditor). Preload("OperatingSystems", "type = ?", models.SummaryOS). Preload("Machines", "type = ?", models.SummaryMachine). + // branch summaries are currently not persisted, as only relevant in combination with project filter Find(&summaries).Error; err != nil { return nil, err } @@ -48,6 +49,7 @@ func (r *SummaryRepository) GetByUserWithin(user *models.User, from, to time.Tim Preload("Editors", "type = ?", models.SummaryEditor). Preload("OperatingSystems", "type = ?", models.SummaryOS). Preload("Machines", "type = ?", models.SummaryMachine). + // branch summaries are currently not persisted, as only relevant in combination with project filter Find(&summaries).Error; err != nil { return nil, err } diff --git a/routes/compat/shields/v1/badge.go b/routes/compat/shields/v1/badge.go index d71f90d..d29a51c 100644 --- a/routes/compat/shields/v1/badge.go +++ b/routes/compat/shields/v1/badge.go @@ -105,6 +105,7 @@ func (h *BadgeHandler) Get(w http.ResponseWriter, r *http.Request) { case "label": permitEntity = user.ShareLabels filters = models.NewFiltersWith(models.SummaryLabel, filterKey) + // branches are intentionally omitted here, as only relevant in combination with a project filter default: permitEntity = true filters = &models.Filters{} diff --git a/routes/routes.go b/routes/routes.go index f170a58..f1b569d 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -77,6 +77,9 @@ func typeName(t uint8) string { if t == models.SummaryLabel { return "label" } + if t == models.SummaryBranch { + return "branch" + } return "unknown" } diff --git a/routes/utils/summary_utils.go b/routes/utils/summary_utils.go index 7922840..9706e9d 100644 --- a/routes/utils/summary_utils.go +++ b/routes/utils/summary_utils.go @@ -51,5 +51,8 @@ func ParseFilters(r *http.Request) *models.Filters { if q := r.URL.Query().Get("label"); q != "" { filters.With(models.SummaryLabel, q) } + if q := r.URL.Query().Get("branch"); q != "" { + filters.With(models.SummaryBranch, q) + } return filters } diff --git a/services/duration_test.go b/services/duration_test.go index 9de5dbb..1bd4c97 100644 --- a/services/duration_test.go +++ b/services/duration_test.go @@ -25,6 +25,8 @@ const ( TestOsWin = "Windows" TestMachine1 = "muety-desktop" TestMachine2 = "muety-work" + TestBranchMaster = "master" + TestBranchDev = "dev" MinUnixTime1 = 1601510400000 * 1e6 ) diff --git a/services/heartbeat.go b/services/heartbeat.go index b2bc39d..5c2e260 100644 --- a/services/heartbeat.go +++ b/services/heartbeat.go @@ -214,6 +214,7 @@ func (srv *HeartbeatService) updateEntityUserCacheByHeartbeat(hb *models.Heartbe go srv.updateEntityUserCache(models.SummaryEditor, hb.Editor, hb.User) go srv.updateEntityUserCache(models.SummaryOS, hb.OperatingSystem, hb.User) go srv.updateEntityUserCache(models.SummaryMachine, hb.Machine, hb.User) + go srv.updateEntityUserCache(models.SummaryBranch, hb.Branch, hb.User) } func (srv *HeartbeatService) notifyBatch(heartbeats []*models.Heartbeat) { diff --git a/services/summary.go b/services/summary.go index abd7d3f..21dc2c9 100644 --- a/services/summary.go +++ b/services/summary.go @@ -90,6 +90,10 @@ func (srv *SummaryService) Aliased(from, to time.Time, user *models.User, f Summ summary.FillBy(models.SummaryProject, models.SummaryLabel) // first fill up labels from projects summary.FillMissing() // then, full up types which are entirely missing + if withBranches := filters != nil && filters.Project != nil && filters.Project.Exists(); !withBranches { + summary.Branches = nil + } + srv.cache.SetDefault(cacheKey, summary) return summary.Sorted(), nil } @@ -134,7 +138,10 @@ func (srv *SummaryService) Summarize(from, to time.Time, user *models.User, filt return nil, err } - types := models.NativeSummaryTypes() + types := models.PersistedSummaryTypes() + if filters != nil && filters.Project != nil && filters.Project.Exists() { + types = append(types, models.SummaryBranch) + } typedAggregations := make(chan models.SummaryItemContainer) defer close(typedAggregations) @@ -148,6 +155,7 @@ func (srv *SummaryService) Summarize(from, to time.Time, user *models.User, filt var editorItems []*models.SummaryItem var osItems []*models.SummaryItem var machineItems []*models.SummaryItem + var branchItems []*models.SummaryItem for i := 0; i < len(types); i++ { item := <-typedAggregations @@ -162,6 +170,8 @@ func (srv *SummaryService) Summarize(from, to time.Time, user *models.User, filt osItems = item.Items case models.SummaryMachine: machineItems = item.Items + case models.SummaryBranch: + branchItems = item.Items } } @@ -179,6 +189,7 @@ func (srv *SummaryService) Summarize(from, to time.Time, user *models.User, filt Editors: editorItems, OperatingSystems: osItems, Machines: machineItems, + Branches: branchItems, NumHeartbeats: durations.TotalNumHeartbeats(), } @@ -285,6 +296,7 @@ func (srv *SummaryService) mergeSummaries(summaries []*models.Summary) (*models. OperatingSystems: make([]*models.SummaryItem, 0), Machines: make([]*models.SummaryItem, 0), Labels: make([]*models.SummaryItem, 0), + Branches: make([]*models.SummaryItem, 0), } var processed = map[time.Time]bool{} @@ -314,6 +326,7 @@ func (srv *SummaryService) mergeSummaries(summaries []*models.Summary) (*models. finalSummary.OperatingSystems = srv.mergeSummaryItems(finalSummary.OperatingSystems, s.OperatingSystems) finalSummary.Machines = srv.mergeSummaryItems(finalSummary.Machines, s.Machines) finalSummary.Labels = srv.mergeSummaryItems(finalSummary.Labels, s.Labels) + finalSummary.Branches = srv.mergeSummaryItems(finalSummary.Branches, s.Branches) finalSummary.NumHeartbeats += s.NumHeartbeats processed[hash] = true diff --git a/services/summary_test.go b/services/summary_test.go index 0160b20..74131d4 100644 --- a/services/summary_test.go +++ b/services/summary_test.go @@ -42,6 +42,7 @@ func (suite *SummaryServiceTestSuite) SetupSuite() { Editor: TestEditorGoland, OperatingSystem: TestOsLinux, Machine: TestMachine1, + Branch: TestBranchMaster, Time: models.CustomTime(suite.TestStartTime), Duration: 150 * time.Second, NumHeartbeats: 2, @@ -53,6 +54,7 @@ func (suite *SummaryServiceTestSuite) SetupSuite() { Editor: TestEditorGoland, OperatingSystem: TestOsLinux, Machine: TestMachine1, + Branch: TestBranchMaster, Time: models.CustomTime(suite.TestStartTime.Add((30 + 130) * time.Second)), Duration: 20 * time.Second, NumHeartbeats: 1, @@ -64,6 +66,7 @@ func (suite *SummaryServiceTestSuite) SetupSuite() { Editor: TestEditorVscode, OperatingSystem: TestOsLinux, Machine: TestMachine1, + Branch: TestBranchDev, Time: models.CustomTime(suite.TestStartTime.Add(3 * time.Minute)), Duration: 15 * time.Second, NumHeartbeats: 3, @@ -145,6 +148,13 @@ func (suite *SummaryServiceTestSuite) TestSummaryService_Summarize() { assert.Equal(suite.T(), suite.TestDurations[0].Time.T(), result.FromTime.T()) assert.Equal(suite.T(), suite.TestDurations[len(suite.TestDurations)-1].Time.T(), result.ToTime.T()) assert.Equal(suite.T(), 185*time.Second, result.TotalTime()) + assert.Equal(suite.T(), 185*time.Second, result.TotalTimeBy(models.SummaryProject)) + assert.Equal(suite.T(), 185*time.Second, result.TotalTimeBy(models.SummaryOS)) + assert.Equal(suite.T(), 185*time.Second, result.TotalTimeBy(models.SummaryMachine)) + assert.Equal(suite.T(), 185*time.Second, result.TotalTimeBy(models.SummaryLanguage)) + assert.Equal(suite.T(), 185*time.Second, result.TotalTimeBy(models.SummaryEditor)) + assert.Zero(suite.T(), result.TotalTimeBy(models.SummaryBranch)) // no filters -> no branches contained + assert.Zero(suite.T(), result.TotalTimeBy(models.SummaryLabel)) assert.Equal(suite.T(), 170*time.Second, result.TotalTimeByKey(models.SummaryEditor, TestEditorGoland)) assert.Equal(suite.T(), 15*time.Second, result.TotalTimeByKey(models.SummaryEditor, TestEditorVscode)) assert.Equal(suite.T(), 6, result.NumHeartbeats) @@ -400,6 +410,7 @@ func (suite *SummaryServiceTestSuite) TestSummaryService_Aliased() { assert.Zero(suite.T(), result.TotalTimeByKey(models.SummaryProject, TestProject1)) assert.NotZero(suite.T(), result.TotalTimeByKey(models.SummaryProject, TestProject2)) assert.Equal(suite.T(), 6, result.NumHeartbeats) + assert.Nil(suite.T(), result.Branches) } func (suite *SummaryServiceTestSuite) TestSummaryService_Aliased_ProjectLabels() { @@ -464,7 +475,8 @@ func (suite *SummaryServiceTestSuite) TestSummaryService_Filters() { suite.TestLabels[1].Label: suite.TestLabels[1:2], }, nil).Once() - sut.Aliased(from, to, suite.TestUser, sut.Summarize, filters, false) + result, _ := sut.Aliased(from, to, suite.TestUser, sut.Summarize, filters, false) + assert.NotNil(suite.T(), result.Branches) // project filters were applied -> include branches effectiveFilters := suite.DurationService.Calls[0].Arguments[3].(*models.Filters) assert.Contains(suite.T(), effectiveFilters.Project, TestProject1) // because actually requested diff --git a/testing/Wakapi API Tests.postman_collection.json b/testing/Wakapi API Tests.postman_collection.json index c95e6c1..8bd1adb 100644 --- a/testing/Wakapi API Tests.postman_collection.json +++ b/testing/Wakapi API Tests.postman_collection.json @@ -1,6 +1,6 @@ { "info": { - "_postman_id": "a7f72e0a-a32e-4ec4-bf60-9915ba0acbd3", + "_postman_id": "43639725-0458-40d7-a4d4-9f55a539a7f7", "name": "Wakapi API Tests", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, @@ -996,6 +996,7 @@ " pm.expect(jsonData.editors.length).to.eql(1);", " pm.expect(jsonData.operating_systems.length).to.eql(1);", " pm.expect(jsonData.machines.length).to.eql(1);", + " pm.expect(jsonData.branches).to.be.null;", "});", "", "/*", @@ -1463,6 +1464,7 @@ " pm.expect(jsonData.editors.length).to.eql(1);", " pm.expect(jsonData.operating_systems.length).to.eql(1);", " pm.expect(jsonData.machines.length).to.eql(1);", + " pm.expect(jsonData.branches.length).to.eql(1);", "});" ], "type": "text/javascript" @@ -2078,6 +2080,7 @@ " const jsonData = pm.response.json();", " pm.expect(jsonData.data.languages).to.eql(null); // because share_languages is false", " pm.expect(jsonData.data.projects.length).to.eql(1);", + " pm.expect(jsonData.data.branches).to.be.null;", "});" ], "type": "text/javascript" @@ -2133,6 +2136,7 @@ " const jsonData = pm.response.json();", " pm.expect(jsonData.data.projects.length).to.eql(1);", " pm.expect(jsonData.data.total_seconds).to.gt(0);", + " pm.expect(jsonData.data.branches.length).to.eql(1);", "});" ], "type": "text/javascript"