Refactor DocumentSignaturesTab to DocumentSignaturesPage + fix count bug

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-01-27 15:46:59 +04:00
parent fb09bed247
commit 7c721e5ff7
42 changed files with 2661 additions and 1361 deletions

View File

@@ -51,6 +51,7 @@ type (
DocumentVersionSignaturesWithPeople []*DocumentVersionSignatureWithPeople
)
func (pvs DocumentVersionSignature) CursorKey(orderBy DocumentVersionSignatureOrderField) page.CursorKey {
switch orderBy {
case DocumentVersionSignatureOrderFieldCreatedAt:
@@ -447,3 +448,36 @@ SELECT EXISTS (
return signed, nil
}
func (dvs *DocumentVersionSignatures) CountByDocumentVersionID(
ctx context.Context,
conn pg.Conn,
scope Scoper,
documentVersionID gid.GID,
filter *DocumentVersionSignatureFilter,
) (int, error) {
q := `
SELECT
COUNT(id)
FROM
document_version_signatures
WHERE
%s
AND document_version_id = @document_version_id
AND %s
`
q = fmt.Sprintf(q, scope.SQLFragment(), filter.SQLFragment())
args := pgx.NamedArgs{"document_version_id": documentVersionID}
maps.Copy(args, scope.SQLArguments())
maps.Copy(args, filter.SQLArguments())
row := conn.QueryRow(ctx, q, args)
var count int
if err := row.Scan(&count); err != nil {
return 0, fmt.Errorf("cannot scan count: %w", err)
}
return count, nil
}

View File

@@ -20,29 +20,55 @@ import (
type (
DocumentVersionSignatureFilter struct {
states DocumentVersionSignatureStates
states DocumentVersionSignatureStates
activeContract *bool
}
)
func NewDocumentVersionSignatureFilter(states []DocumentVersionSignatureState) *DocumentVersionSignatureFilter {
func NewDocumentVersionSignatureFilter(states []DocumentVersionSignatureState, activeContract *bool) *DocumentVersionSignatureFilter {
return &DocumentVersionSignatureFilter{
states: DocumentVersionSignatureStates(states),
states: DocumentVersionSignatureStates(states),
activeContract: activeContract,
}
}
func (f *DocumentVersionSignatureFilter) SQLArguments() pgx.StrictNamedArgs {
return pgx.StrictNamedArgs{
"states": f.states,
"states": f.states,
"active_contract": f.activeContract,
}
}
func (f *DocumentVersionSignatureFilter) SQLFragment() string {
return `
(
CASE
WHEN @states::policy_version_signature_state[] IS NOT NULL THEN
state = ANY(@states::policy_version_signature_state[])
ELSE TRUE
END
CASE
WHEN @states::policy_version_signature_state[] IS NOT NULL THEN
state = ANY(@states::policy_version_signature_state[])
ELSE TRUE
END
AND
CASE
WHEN @active_contract::boolean IS NULL
THEN TRUE
ELSE EXISTS (
SELECT 1
FROM peoples p
WHERE p.id = signed_by
AND (
(
@active_contract::boolean = TRUE
AND (
p.contract_end_date IS NULL OR p.contract_end_date > NOW()
)
) OR (
@active_contract::boolean = FALSE
AND (
p.contract_end_date IS NOT NULL AND p.contract_end_date <= NOW()
)
)
)
)
END
)`
}