From babfbc18f26d04ab315170a817fdecf7f1684bac Mon Sep 17 00:00:00 2001
From: Leonard Lyubich <leonard@nspcc.ru>
Date: Tue, 22 Dec 2020 03:25:49 +0300
Subject: [PATCH] [#255] services/audit: Implement Task structure

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
---
 pkg/services/audit/task.go | 108 +++++++++++++++++++++++++++++++++++++
 1 file changed, 108 insertions(+)
 create mode 100644 pkg/services/audit/task.go

diff --git a/pkg/services/audit/task.go b/pkg/services/audit/task.go
new file mode 100644
index 000000000..118518796
--- /dev/null
+++ b/pkg/services/audit/task.go
@@ -0,0 +1,108 @@
+package audit
+
+import (
+	"context"
+
+	"github.com/nspcc-dev/neofs-api-go/pkg/container"
+	"github.com/nspcc-dev/neofs-api-go/pkg/netmap"
+	"github.com/nspcc-dev/neofs-api-go/pkg/object"
+)
+
+// Task groups groups the container audit parameters.
+type Task struct {
+	reporter Reporter
+
+	auditContext context.Context
+
+	cid *container.ID
+
+	cnr *container.Container
+
+	cnrNodes netmap.ContainerNodes
+
+	sgList []*object.ID
+}
+
+// WithReporter sets audit report writer.
+func (t *Task) WithReporter(r Reporter) *Task {
+	if t != nil {
+		t.reporter = r
+	}
+
+	return t
+}
+
+// Reporter returns audit report writer.
+func (t *Task) Reporter() Reporter {
+	return t.reporter
+}
+
+// WithAuditContext sets context of the audit of the current epoch.
+func (t *Task) WithAuditContext(ctx context.Context) *Task {
+	if t != nil {
+		t.auditContext = ctx
+	}
+
+	return t
+}
+
+// AuditContext returns context of the audit of the current epoch.
+func (t *Task) AuditContext() context.Context {
+	return t.auditContext
+}
+
+// WithContainerID sets identifier of the container under audit.
+func (t *Task) WithContainerID(cid *container.ID) *Task {
+	if t != nil {
+		t.cid = cid
+	}
+
+	return t
+}
+
+// ContainerID returns identifier of the container under audit.
+func (t *Task) ContainerID() *container.ID {
+	return t.cid
+}
+
+// WithContainerStructure sets structure of the container under audit.
+func (t *Task) WithContainerStructure(cnr *container.Container) *Task {
+	if t != nil {
+		t.cnr = cnr
+	}
+
+	return t
+}
+
+// ContainerStructure returns structure of the container under audit.
+func (t *Task) ContainerStructure() *container.Container {
+	return t.cnr
+}
+
+// WithContainerNodes sets nodes in the container under audit.
+func (t *Task) WithContainerNodes(cnrNodes netmap.ContainerNodes) *Task {
+	if t != nil {
+		t.cnrNodes = cnrNodes
+	}
+
+	return t
+}
+
+// ContainerNodes returns nodes in the container under audit.
+func (t *Task) ContainerNodes() netmap.ContainerNodes {
+	return t.cnrNodes
+}
+
+// WithStorageGroupList sets list of storage groups from container under audit.
+func (t *Task) WithStorageGroupList(sgList []*object.ID) *Task {
+	if t != nil {
+		t.sgList = sgList
+	}
+
+	return t
+}
+
+// StorageGroupList returns list of storage groups from container under audit.
+func (t *Task) StorageGroupList() []*object.ID {
+	return t.sgList
+}