VoteAggregation return total votes and the score
This commit is contained in:
@@ -5,5 +5,5 @@ interface Votable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class VotableImp : Votable {
|
class VotableImp : Votable {
|
||||||
override var votes: VoteAggregation = VoteAggregation(0, 0, 0)
|
override var votes: VoteAggregation = VoteAggregation()
|
||||||
}
|
}
|
||||||
@@ -7,6 +7,10 @@ import fr.postgresjson.entity.EntityUpdatedAtImp
|
|||||||
open class VoteAggregation(
|
open class VoteAggregation(
|
||||||
val up: Int,
|
val up: Int,
|
||||||
val neutral: Int,
|
val neutral: Int,
|
||||||
val down: Int
|
val down: Int,
|
||||||
|
val total: Int,
|
||||||
|
val score: Int
|
||||||
) : EntityI,
|
) : EntityI,
|
||||||
EntityUpdatedAt by EntityUpdatedAtImp()
|
EntityUpdatedAt by EntityUpdatedAtImp() {
|
||||||
|
constructor() : this(0, 0, 0, 0, 0)
|
||||||
|
}
|
||||||
|
|||||||
@@ -1153,6 +1153,11 @@ components:
|
|||||||
down:
|
down:
|
||||||
type: number
|
type: number
|
||||||
minimum: 0
|
minimum: 0
|
||||||
|
total:
|
||||||
|
type: number
|
||||||
|
minimum: 0
|
||||||
|
score:
|
||||||
|
type: number
|
||||||
- $ref: '#/components/schemas/UpdatedAt'
|
- $ref: '#/components/schemas/UpdatedAt'
|
||||||
Votable:
|
Votable:
|
||||||
type: object
|
type: object
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ create or replace function count_vote(_target_id uuid, out resource json)
|
|||||||
$$
|
$$
|
||||||
declare
|
declare
|
||||||
agg jsonb;
|
agg jsonb;
|
||||||
empty jsonb = '{"down":0,"neutral":0,"up":0}'::jsonb;
|
empty jsonb = '{"down":0,"neutral":0,"up":0,"total":0,"score":0}'::jsonb;
|
||||||
|
score int;
|
||||||
|
total int;
|
||||||
begin
|
begin
|
||||||
select jsonb_object_agg(t.label, t.total)
|
select jsonb_object_agg(t.label, t.total)
|
||||||
into agg
|
into agg
|
||||||
@@ -21,8 +23,17 @@ begin
|
|||||||
order by v.note
|
order by v.note
|
||||||
) t;
|
) t;
|
||||||
|
|
||||||
resource = coalesce(agg, empty) || jsonb_build_object('updated_at', now());
|
agg = empty || coalesce(agg, empty);
|
||||||
|
score = ((agg->>'up')::int - (agg->>'down')::int);
|
||||||
|
total = ((agg->>'up')::int + (agg->>'down')::int + (agg->>'neutral')::int);
|
||||||
|
|
||||||
|
resource = agg ||
|
||||||
|
jsonb_build_object('updated_at', now()) ||
|
||||||
|
jsonb_build_object('total', total) ||
|
||||||
|
jsonb_build_object('score', score);
|
||||||
end;
|
end;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
-- drop function if exists count_vote(uuid);
|
-- drop function if exists count_vote(uuid);
|
||||||
|
|
||||||
|
select * from count_vote('ced1563f-ecf5-4f11-8518-8aeceff3c13a');
|
||||||
Reference in New Issue
Block a user