Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/view_track' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
Incivius committed Jun 3, 2024
2 parents 00fe518 + 571b20b commit d7cfc67
Show file tree
Hide file tree
Showing 5 changed files with 176 additions and 135 deletions.
36 changes: 0 additions & 36 deletions db/postgres-func.sql

This file was deleted.

79 changes: 79 additions & 0 deletions db/postgres_functions.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
-- retorna quantidade de qualificadores na track
CREATE OR REPLACE FUNCTION qualifier_count(tk INTEGER)
RETURNS INTEGER AS $$
DECLARE
COUNT INTEGER;
BEGIN
SELECT COUNT(QL.QL_ID)
INTO COUNT
FROM Qualifier AS ql
JOIN Expertise_Qualifier AS ex_ql ON ql.ql_id = ex_ql.ql_id
WHERE ex_ql.ex_id IN
(SELECT ex_id
FROM Expertise AS ex
WHERE ex.tk_id = tk);
RETURN COUNT;
END;
$$ LANGUAGE plpgsql;

-- contador de qualificadores completos na track
CREATE OR REPLACE FUNCTION qualifier_completed_count(tk INTEGER)
RETURNS INTEGER AS $$
DECLARE
COUNT INTEGER;
BEGIN
SELECT COUNT (pt_ql.pt_ql_complete_date)
INTO COUNT
FROM Partner_Qualifier AS pt_ql
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
where ex_ql.ex_id IN
(SELECT ex_id
FROM Expertise AS ex
WHERE ex.tk_id = tk);
RETURN COUNT as ql_completed;
END;
$$ LANGUAGE plpgsql;

-- contador de expertises na track
CREATE OR REPLACE FUNCTION expertise_count(tk INTEGER)
RETURNS INTEGER AS $$
DECLARE
COUNT INTEGER;
BEGIN
SELECT COUNT(ex.tk_id)
INTO COUNT
FROM Expertise AS ex
WHERE ex.tk_id = tk;
RETURN COUNT;
END;
$$ LANGUAGE plpgsql;

-- contador de expertises completas na track
CREATE OR REPLACE FUNCTION expertise_completed_count(tk INTEGER)
RETURNS INTEGER AS $$
DECLARE
COUNT INTEGER;
BEGIN
SELECT COUNT (pt_ex.pt_ex_complete_date)
INTO COUNT
FROM Partner_Expertise AS pt_ex
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
WHERE ex.tk_id = tk;
RETURN COUNT as ex_completed;
END;
$$ LANGUAGE plpgsql;

-- média de tempo de conclusão dos qualificadores
CREATE OR REPLACE FUNCTION avg_expertise_completion_time(tk INTEGER)
RETURNS INTEGER AS $$
DECLARE
AVG_TIME INTEGER;
BEGIN
SELECT AVG((pt_ex.pt_ex_complete_date - pt_ex.pt_ex_insert_date))
INTO AVG_TIME
FROM Partner_Expertise AS pt_ex
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
WHERE ex.tk_id = tk;
RETURN AVG_TIME;
END;
$$ LANGUAGE plpgsql;
181 changes: 89 additions & 92 deletions db/postgres_views.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,62 +2,55 @@ CREATE OR REPLACE VIEW track_metrics
AS select
tk.tk_id,
tk.tk_name,
(SELECT COUNT(ex.tk_id)
FROM Expertise AS ex
WHERE ex.tk_id = tk.tk_id) AS expertise_count,

(SELECT COUNT(ql.ql_id)
FROM Qualifier AS ql
JOIN Expertise_Qualifier AS ex_ql ON ql.ql_id = ex_ql.ql_id
WHERE ex_ql.ex_id IN
(SELECT ex_id
FROM Expertise
WHERE tk_id = tk.tk_id)) AS qualifier_count,
(expertise_count(tk.tk_id)) AS expertise_count,

(SELECT qualifier_count(tk.tk_id)) AS qualifier_count,

(SELECT COUNT(pt.pt_id)
FROM Partner_Track AS pt
WHERE pt.tk_id = tk.tk_id) AS partner_count,

-- os calulos retornam um número inteiro que são os dias de diferença entre as datas
(SELECT AVG((pt_ex.pt_ex_complete_date - pt_ex.pt_ex_insert_date))
FROM Partner_Expertise AS pt_ex
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
WHERE ex.tk_id = tk.tk_id) AS avg_expertise_completion_time,

(SELECT AVG((pt_ql.pt_ql_complete_date - pt_ql.pt_ql_insert_date))
FROM Partner_Qualifier AS pt_ql
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
WHERE ex_ql.ex_id IN (
SELECT ex_id
FROM Expertise ex
WHERE ex.tk_id = tk.tk_id)) AS avg_qualifier_completion_time,
WHERE pt.tk_id = tk.tk_id
) AS partner_count,

-- porcentagem de qualificadores completados na track
(SELECT (count(pt_ql.pt_ql_complete_date) * 100) / (SELECT (COUNT(ql.ql_id) + 1)
FROM Qualifier AS ql
JOIN Expertise_Qualifier AS ex_ql ON ql.ql_id = ex_ql.ql_id
WHERE ex_ql.ex_id IN
(SELECT ex_id
FROM Expertise
WHERE tk_id = tk.tk_id))
FROM Partner_Qualifier AS pt_ql
JOIN Expertise_Qualifier ex_ql ON pt_ql.ql_id = ex_ql.ql_id
-- tempo médio para completar uma expertise
(
SELECT ROUND(AVG((pt_ex.pt_ex_complete_date - pt_ex.pt_ex_insert_date)::numeric), 2)
FROM Partner_Expertise AS pt_ex
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
WHERE ex.tk_id = tk.tk_id
) AS avg_expertise_completion_time,

(
SELECT ROUND(AVG((pt_ql.pt_ql_complete_date - pt_ql.pt_ql_insert_date)::numeric), 2)
FROM Partner_Qualifier AS pt_ql
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
WHERE ex_ql.ex_id IN (
SELECT ex_id
FROM Expertise ex
WHERE ex.tk_id = tk.tk_id)
)AS avg_qualifier_completion_percentage,
WHERE ex.tk_id = tk.tk_id
)
) AS avg_qualifier_completion_time,

-- porcentagem de qualificadores completados na track
(
ROUND(
((qualifier_completed_count(tk.tk_id) * 100) /
-- se o divisor for 0, retorna NULL
NULLIF (qualifier_count(tk.tk_id), 0))::numeric
, 2)
)AS avg_qualifier_completion_percentage,

-- porcentagem de expertise completadas na track
(SELECT ((count(pt_ex.pt_ex_complete_date) * 100) / (count(ex.ex_id) + 1))
FROM Partner_Expertise AS pt_ex, Expertise ex
WHERE ex.ex_id = pt_ex.ex_id
AND ex.tk_id = tk.tk_id
AND pt_ex.pt_ex_complete_date IS NOT NULL) AS avg_expertise_completion_percentage,
(
ROUND(
((expertise_completed_count(tk.tk_id) * 100) /
NULLIF (expertise_count(tk.tk_id), 0))::numeric
, 2)
) AS avg_expertise_completion_percentage,

-- porcentagem de abandono (validade de um ano)
(SELECT
((select count(pt_ql.*)
(
ROUND(
(((select count(pt_ql.*)
from Partner_Qualifier pt_ql
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
WHERE pt_ql.pt_ql_complete_date is not NULL
Expand All @@ -70,58 +63,62 @@ CREATE OR REPLACE VIEW track_metrics

/

(SELECT (COUNT(ql.ql_id) + 1)
FROM Qualifier AS ql
JOIN Expertise_Qualifier AS ex_ql ON ql.ql_id = ex_ql.ql_id
WHERE ex_ql.ex_id IN (
SELECT ex_id
FROM Expertise ex
WHERE ex.tk_id = tk.tk_id))
)AS expired_qualifiers,
NULLIF (qualifier_count(tk.tk_id), 0))::numeric
, 2)
)AS avg_expired_qualifiers,

-- porcentagem da conlusão da track
-- porcentagem de conclusão das expertises + porcentagem de conclusão dos qualificadores / numero de qualificadores + numero de expertises (finalizados)
(SELECT count(pt_ex.pt_ex_complete_date) + count(pt_ql.pt_ql_complete_date) * 100 / (count(ex.ex_id) + count(ql.ql_id) + 1)
FROM Partner_Qualifier AS pt_ql
JOIN Qualifier ql ON pt_ql.ql_id = ql.ql_id
JOIN Expertise_Qualifier ex_ql ON pt_ql.ql_id = ex_ql.ql_id
JOIN Partner_Expertise AS pt_ex ON pt_ql.ql_id = ex_ql.ql_id
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
-- JOIN Partner_Qualifier AS pt_ql ON pt_ex.ex_id = ex.ex_id
-- JOIN Qualifier AS ql ON pt_ql.ql_id = ql.ql_id
WHERE ex.ex_id = pt_ex.ex_id
AND ex.tk_id = tk.tk_id
AND pt_ex.pt_ex_complete_date IS NOT NULL
AND ql.ql_id = pt_ql.ql_id
AND ql.ql_id IN (
SELECT ql_id
FROM Expertise_Qualifier ex_ql
WHERE ex_ql.ex_id IN (
SELECT ex_id
FROM Expertise ex
WHERE ex.tk_id = tk.tk_id)
)) AS track_completion_percentage,
(
-- porcentagem de conclusão dos qualificadores
(
(qualifier_completed_count(tk.tk_id) * 100) /
NULLIF (qualifier_count(tk.tk_id), 0)

+
-- porcentagem de conclusão dos qualificadores
(expertise_completed_count(tk.tk_id) * 100) /
NULLIF (expertise_count(tk.tk_id), 0)
)
/ 2
) AS track_completion_percentage,

-- tempo médio de conclusão da track
-- média de tempo de conclusão das expertises + média de tempo de conclusão dos qualificadores / numero de qualificadores e expertises finalizados
(SELECT AVG((pt_ex.pt_ex_complete_date - pt_ex.pt_ex_insert_date)) + AVG((pt_ql.pt_ql_complete_date - pt_ql.pt_ql_insert_date)) / (count(ex.ex_id) + count(ql.ql_id) + 1)
FROM Partner_Qualifier AS pt_ql
JOIN Qualifier ql ON pt_ql.ql_id = ql.ql_id
JOIN Expertise_Qualifier ex_ql ON pt_ql.ql_id = ex_ql.ql_id
JOIN Partner_Expertise AS pt_ex ON pt_ql.ql_id = ex_ql.ql_id
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
WHERE ex.ex_id = pt_ex.ex_id
AND ex.tk_id = tk.tk_id
AND pt_ex.pt_ex_complete_date IS NOT NULL
AND ql.ql_id = pt_ql.ql_id
AND ql.ql_id IN (
SELECT ql_id
FROM Expertise_Qualifier ex_ql
WHERE ex_ql.ex_id IN (
SELECT ex_id
FROM Expertise ex
WHERE ex.tk_id = tk.tk_id)
)) AS avg_track_completion_time
(
SELECT COALESCE(
ROUND(
(
(
SELECT AVG(pt_ex.pt_ex_complete_date - pt_ex.pt_ex_insert_date)
FROM Partner_Expertise AS pt_ex
JOIN Expertise AS ex ON pt_ex.ex_id = ex.ex_id
WHERE ex.tk_id = tk.tk_id
) +
(
SELECT AVG(pt_ql.pt_ql_complete_date - pt_ql.pt_ql_insert_date)
FROM Partner_Qualifier AS pt_ql
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
WHERE ex_ql.ex_id IN (
SELECT ex_id
FROM Expertise ex
WHERE ex.tk_id = tk.tk_id
)
)
) / NULLIF ((expertise_completed_count(tk.tk_id) + qualifier_completed_count(tk.tk_id)), 0)
::numeric, 2),
(
ROUND(
(SELECT AVG(pt_ql.pt_ql_complete_date - pt_ql.pt_ql_insert_date)
FROM Partner_Qualifier AS pt_ql
JOIN Expertise_Qualifier AS ex_ql ON pt_ql.ql_id = ex_ql.ql_id
WHERE ex_ql.ex_id IN (
SELECT ex_id
FROM Expertise ex
WHERE ex.tk_id = tk.tk_id))
::numeric, 2)
)
) AS avg_track_completion_time
)

FROM
Track AS tk;
Expand Down
3 changes: 2 additions & 1 deletion makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ stop-db:

create-db:
docker exec -it api4back-khali-1 psql -U postgres -d postgres -f db/postgres_version.sql
docker exec -it api4back-khali-1 psql -U postgres -d postgres -f db/postgres_functions.sql
docker exec -it api4back-khali-1 psql -U postgres -d postgres -f db/postgres_seeds.sql
docker exec -it api4back-khali-1 psql -U postgres -d postgres -f db/postgres_views.sql

start: start-db
sleep 3 # wait for db to start
sleep 5 # wait for db to start
make create-db

restart:
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/com/fatec/springapi4/entity/TrackMetrics.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,17 @@ public class TrackMetrics {
private Double avgQualifierCompletionTime;

@Column (name = "avg_qualifier_completion_percentage")
private Integer avgQualifierCompletionPercentage;
private Double avgQualifierCompletionPercentage;

@Column (name = "avg_expertise_completion_percentage")
private Integer avgExpertiseCompletionPercentage;
private Double avgExpertiseCompletionPercentage;

@Column (name = "expired_qualifiers")
private Integer avgExpiredQualifiers;
@Column (name = "avg_expired_qualifiers")
private Double avgExpiredQualifiers;

@Column (name = "track_completion_percentage")
private Integer avgTrackCompletionPercentage;
private Double avgTrackCompletionPercentage;

@Column (name = "avg_track_completion_time")
private Integer avgTrackCompletionTime;
private Double avgTrackCompletionTime;
}

0 comments on commit d7cfc67

Please sign in to comment.