feat: limit audit trail (#6744)

* feat: enable limiting audit trail

* support AddExclusiveQuery

* fix invalid condition

* register event mappers

* fix NullDuration validity

* test query side for limits

* lint

* acceptance test audit trail limit

* fix acceptance test

* translate limits not found

* update tests

* fix linting

* add audit log retention to default instance

* fix tests

* update docs

* remove todo

* improve test name
This commit is contained in:
Elio Bischof
2023-10-25 13:42:00 +02:00
committed by GitHub
parent 1c839e308b
commit 385a55bd21
52 changed files with 1778 additions and 172 deletions

View File

@@ -103,3 +103,25 @@ func (d *Duration) Scan(src any) error {
*d = Duration(time.Duration(interval.Microseconds*1000) + time.Duration(interval.Days)*24*time.Hour + time.Duration(interval.Months)*30*24*time.Hour)
return nil
}
// NullDuration can be used for NULL intervals.
// If Valid is false, the scanned value was NULL
// This behavior is similar to [database/sql.NullString]
type NullDuration struct {
Valid bool
Duration time.Duration
}
// Scan implements the [database/sql.Scanner] interface.
func (d *NullDuration) Scan(src any) error {
if src == nil {
d.Duration, d.Valid = 0, false
return nil
}
duration := new(Duration)
if err := duration.Scan(src); err != nil {
return err
}
d.Duration, d.Valid = time.Duration(*duration), true
return nil
}

View File

@@ -3,6 +3,7 @@ package database
import (
"database/sql/driver"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -118,6 +119,62 @@ func TestMap_Value(t *testing.T) {
}
}
func TestNullDuration_Scan(t *testing.T) {
type args struct {
src any
}
type res struct {
want NullDuration
err bool
}
type testCase struct {
name string
args args
res res
}
tests := []testCase{
{
"invalid",
args{src: "invalid"},
res{
want: NullDuration{
Valid: false,
},
err: true,
},
},
{
"null",
args{src: nil},
res{
want: NullDuration{
Valid: false,
},
err: false,
},
},
{
"valid",
args{src: "1:0:0"},
res{
want: NullDuration{
Valid: true,
Duration: time.Hour,
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
d := new(NullDuration)
if err := d.Scan(tt.args.src); (err != nil) != tt.res.err {
t.Errorf("Scan() error = %v, wantErr %v", err, tt.res.err)
}
assert.Equal(t, tt.res.want, *d)
})
}
}
func TestArray_ScanInt32(t *testing.T) {
type args struct {
src any