ft/adds tx & endpoint for create & delete document

This commit is contained in:
itsscb 2023-10-15 22:23:53 +02:00
parent 37df328e0c
commit 0875bc4801
28 changed files with 1317 additions and 381 deletions

View File

@ -66,7 +66,7 @@ CREATE TABLE "documents" (
"name" varchar NOT NULL, "name" varchar NOT NULL,
"type" varchar NOT NULL, "type" varchar NOT NULL,
"path" varchar NOT NULL, "path" varchar NOT NULL,
"url" varchar NOT NULL, "hash" varchar NOT NULL,
"valid" boolean NOT NULL DEFAULT false, "valid" boolean NOT NULL DEFAULT false,
"valid_date" timestamptz, "valid_date" timestamptz,
"validated_by" varchar, "validated_by" varchar,

View File

@ -16,6 +16,7 @@ import (
uuid "github.com/google/uuid" uuid "github.com/google/uuid"
db "github.com/itsscb/df/bff/db/sqlc" db "github.com/itsscb/df/bff/db/sqlc"
gomock "go.uber.org/mock/gomock" gomock "go.uber.org/mock/gomock"
codes "google.golang.org/grpc/codes"
) )
// MockStore is a mock of Store interface. // MockStore is a mock of Store interface.
@ -99,6 +100,21 @@ func (mr *MockStoreMockRecorder) CreateAccountTx(arg0, arg1 any) *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAccountTx", reflect.TypeOf((*MockStore)(nil).CreateAccountTx), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAccountTx", reflect.TypeOf((*MockStore)(nil).CreateAccountTx), arg0, arg1)
} }
// CreateDocument mocks base method.
func (m *MockStore) CreateDocument(arg0 context.Context, arg1 db.CreateDocumentParams) (db.Document, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "CreateDocument", arg0, arg1)
ret0, _ := ret[0].(db.Document)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// CreateDocument indicates an expected call of CreateDocument.
func (mr *MockStoreMockRecorder) CreateDocument(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDocument", reflect.TypeOf((*MockStore)(nil).CreateDocument), arg0, arg1)
}
// CreateDocumentMail mocks base method. // CreateDocumentMail mocks base method.
func (m *MockStore) CreateDocumentMail(arg0 context.Context, arg1 db.CreateDocumentMailParams) (db.Document, error) { func (m *MockStore) CreateDocumentMail(arg0 context.Context, arg1 db.CreateDocumentMailParams) (db.Document, error) {
m.ctrl.T.Helper() m.ctrl.T.Helper()
@ -114,6 +130,22 @@ func (mr *MockStoreMockRecorder) CreateDocumentMail(arg0, arg1 any) *gomock.Call
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDocumentMail", reflect.TypeOf((*MockStore)(nil).CreateDocumentMail), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDocumentMail", reflect.TypeOf((*MockStore)(nil).CreateDocumentMail), arg0, arg1)
} }
// CreateDocumentTx mocks base method.
func (m *MockStore) CreateDocumentTx(arg0 context.Context, arg1 db.CreateDocumentTxParams) (db.Document, int, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "CreateDocumentTx", arg0, arg1)
ret0, _ := ret[0].(db.Document)
ret1, _ := ret[1].(int)
ret2, _ := ret[2].(error)
return ret0, ret1, ret2
}
// CreateDocumentTx indicates an expected call of CreateDocumentTx.
func (mr *MockStoreMockRecorder) CreateDocumentTx(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateDocumentTx", reflect.TypeOf((*MockStore)(nil).CreateDocumentTx), arg0, arg1)
}
// CreateDocumentUpload mocks base method. // CreateDocumentUpload mocks base method.
func (m *MockStore) CreateDocumentUpload(arg0 context.Context, arg1 db.CreateDocumentUploadParams) (db.Document, error) { func (m *MockStore) CreateDocumentUpload(arg0 context.Context, arg1 db.CreateDocumentUploadParams) (db.Document, error) {
m.ctrl.T.Helper() m.ctrl.T.Helper()
@ -277,6 +309,21 @@ func (mr *MockStoreMockRecorder) DeleteDocument(arg0, arg1 any) *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteDocument", reflect.TypeOf((*MockStore)(nil).DeleteDocument), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteDocument", reflect.TypeOf((*MockStore)(nil).DeleteDocument), arg0, arg1)
} }
// DeleteDocumentTx mocks base method.
func (m *MockStore) DeleteDocumentTx(arg0 context.Context, arg1 uint64) (codes.Code, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "DeleteDocumentTx", arg0, arg1)
ret0, _ := ret[0].(codes.Code)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// DeleteDocumentTx indicates an expected call of DeleteDocumentTx.
func (mr *MockStoreMockRecorder) DeleteDocumentTx(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteDocumentTx", reflect.TypeOf((*MockStore)(nil).DeleteDocumentTx), arg0, arg1)
}
// DeleteDocumentsByPersonID mocks base method. // DeleteDocumentsByPersonID mocks base method.
func (m *MockStore) DeleteDocumentsByPersonID(arg0 context.Context, arg1 sql.NullInt64) error { func (m *MockStore) DeleteDocumentsByPersonID(arg0 context.Context, arg1 sql.NullInt64) error {
m.ctrl.T.Helper() m.ctrl.T.Helper()
@ -477,6 +524,36 @@ func (mr *MockStoreMockRecorder) GetDocument(arg0, arg1 any) *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDocument", reflect.TypeOf((*MockStore)(nil).GetDocument), arg0, arg1) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDocument", reflect.TypeOf((*MockStore)(nil).GetDocument), arg0, arg1)
} }
// GetDocumentByHash mocks base method.
func (m *MockStore) GetDocumentByHash(arg0 context.Context, arg1 db.GetDocumentByHashParams) ([]uint64, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetDocumentByHash", arg0, arg1)
ret0, _ := ret[0].([]uint64)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetDocumentByHash indicates an expected call of GetDocumentByHash.
func (mr *MockStoreMockRecorder) GetDocumentByHash(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDocumentByHash", reflect.TypeOf((*MockStore)(nil).GetDocumentByHash), arg0, arg1)
}
// GetDocumentByIDWithAccountID mocks base method.
func (m *MockStore) GetDocumentByIDWithAccountID(arg0 context.Context, arg1 db.GetDocumentByIDWithAccountIDParams) (db.Document, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetDocumentByIDWithAccountID", arg0, arg1)
ret0, _ := ret[0].(db.Document)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// GetDocumentByIDWithAccountID indicates an expected call of GetDocumentByIDWithAccountID.
func (mr *MockStoreMockRecorder) GetDocumentByIDWithAccountID(arg0, arg1 any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDocumentByIDWithAccountID", reflect.TypeOf((*MockStore)(nil).GetDocumentByIDWithAccountID), arg0, arg1)
}
// GetMail mocks base method. // GetMail mocks base method.
func (m *MockStore) GetMail(arg0 context.Context, arg1 uint64) (db.Mail, error) { func (m *MockStore) GetMail(arg0 context.Context, arg1 uint64) (db.Mail, error) {
m.ctrl.T.Helper() m.ctrl.T.Helper()

View File

@ -2,13 +2,47 @@
SELECT * FROM documents SELECT * FROM documents
WHERE "id" = $1 LIMIT 1; WHERE "id" = $1 LIMIT 1;
-- name: GetDocumentByHash :many
SELECT d."id" FROM documents d
INNER JOIN persons p
ON d."person_id" = p."id"
WHERE p."account_id" = sqlc.arg(account_id) AND
d."hash" = sqlc.arg(hash);
-- name: GetDocumentByIDWithAccountID :one
SELECT d.* FROM documents d
INNER JOIN persons p
ON d."person_id" = p."id"
WHERE d."id" = sqlc.arg(id) AND p."account_id" = sqlc.arg(account_id);
-- name: CreateDocument :one
INSERT INTO documents (
"person_id",
"name",
"type",
"path",
"hash",
"creator",
"changer",
"mail_id"
) VALUES (
sqlc.narg(person_id),
sqlc.arg(name),
sqlc.arg(type),
sqlc.arg(path),
sqlc.arg(hash),
sqlc.arg(creator),
sqlc.arg(creator),
sqlc.narg(mail_id)
) RETURNING *;
-- name: CreateDocumentUpload :one -- name: CreateDocumentUpload :one
INSERT INTO documents ( INSERT INTO documents (
"person_id", "person_id",
"name", "name",
"type", "type",
"path", "path",
"url", "hash",
"creator", "creator",
"changer", "changer",
"mail_id" "mail_id"
@ -22,7 +56,7 @@ INSERT INTO documents (
"name", "name",
"type", "type",
"path", "path",
"url", "hash",
"creator", "creator",
"changer", "changer",
"person_id" "person_id"
@ -42,7 +76,7 @@ SET
"name" = COALESCE(sqlc.narg(name), "name"), "name" = COALESCE(sqlc.narg(name), "name"),
"type" = COALESCE(sqlc.narg(type), "type"), "type" = COALESCE(sqlc.narg(type), "type"),
"path" = COALESCE(sqlc.narg(path), "path"), "path" = COALESCE(sqlc.narg(path), "path"),
"url" = COALESCE(sqlc.narg(url), "url"), "hash" = COALESCE(sqlc.narg(hash), "hash"),
changer = $2, changer = $2,
changed = now() changed = now()
WHERE "id" = $1 WHERE "id" = $1

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
// source: account.sql // source: account.sql
package db package db

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
package db package db

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
// source: document.sql // source: document.sql
package db package db
@ -10,19 +10,81 @@ import (
"database/sql" "database/sql"
) )
const createDocument = `-- name: CreateDocument :one
INSERT INTO documents (
"person_id",
"name",
"type",
"path",
"hash",
"creator",
"changer",
"mail_id"
) VALUES (
$1,
$2,
$3,
$4,
$5,
$6,
$6,
$7
) RETURNING id, person_id, name, type, path, hash, valid, valid_date, validated_by, mail_id, creator, created, changer, changed
`
type CreateDocumentParams struct {
PersonID sql.NullInt64 `json:"person_id"`
Name string `json:"name"`
Type string `json:"type"`
Path string `json:"path"`
Hash string `json:"hash"`
Creator string `json:"creator"`
MailID sql.NullInt64 `json:"mail_id"`
}
func (q *Queries) CreateDocument(ctx context.Context, arg CreateDocumentParams) (Document, error) {
row := q.db.QueryRowContext(ctx, createDocument,
arg.PersonID,
arg.Name,
arg.Type,
arg.Path,
arg.Hash,
arg.Creator,
arg.MailID,
)
var i Document
err := row.Scan(
&i.ID,
&i.PersonID,
&i.Name,
&i.Type,
&i.Path,
&i.Hash,
&i.Valid,
&i.ValidDate,
&i.ValidatedBy,
&i.MailID,
&i.Creator,
&i.Created,
&i.Changer,
&i.Changed,
)
return i, err
}
const createDocumentMail = `-- name: CreateDocumentMail :one const createDocumentMail = `-- name: CreateDocumentMail :one
INSERT INTO documents ( INSERT INTO documents (
"mail_id", "mail_id",
"name", "name",
"type", "type",
"path", "path",
"url", "hash",
"creator", "creator",
"changer", "changer",
"person_id" "person_id"
) VALUES ( ) VALUES (
$1, $2, $3, $4, $5, $6, $7, NULL $1, $2, $3, $4, $5, $6, $7, NULL
) RETURNING id, person_id, name, type, path, url, valid, valid_date, validated_by, mail_id, creator, created, changer, changed ) RETURNING id, person_id, name, type, path, hash, valid, valid_date, validated_by, mail_id, creator, created, changer, changed
` `
type CreateDocumentMailParams struct { type CreateDocumentMailParams struct {
@ -30,7 +92,7 @@ type CreateDocumentMailParams struct {
Name string `json:"name"` Name string `json:"name"`
Type string `json:"type"` Type string `json:"type"`
Path string `json:"path"` Path string `json:"path"`
Url string `json:"url"` Hash string `json:"hash"`
Creator string `json:"creator"` Creator string `json:"creator"`
Changer string `json:"changer"` Changer string `json:"changer"`
} }
@ -41,7 +103,7 @@ func (q *Queries) CreateDocumentMail(ctx context.Context, arg CreateDocumentMail
arg.Name, arg.Name,
arg.Type, arg.Type,
arg.Path, arg.Path,
arg.Url, arg.Hash,
arg.Creator, arg.Creator,
arg.Changer, arg.Changer,
) )
@ -52,7 +114,7 @@ func (q *Queries) CreateDocumentMail(ctx context.Context, arg CreateDocumentMail
&i.Name, &i.Name,
&i.Type, &i.Type,
&i.Path, &i.Path,
&i.Url, &i.Hash,
&i.Valid, &i.Valid,
&i.ValidDate, &i.ValidDate,
&i.ValidatedBy, &i.ValidatedBy,
@ -71,13 +133,13 @@ INSERT INTO documents (
"name", "name",
"type", "type",
"path", "path",
"url", "hash",
"creator", "creator",
"changer", "changer",
"mail_id" "mail_id"
) VALUES ( ) VALUES (
$1, $2, $3, $4, $5, $6, $7, NULL $1, $2, $3, $4, $5, $6, $7, NULL
) RETURNING id, person_id, name, type, path, url, valid, valid_date, validated_by, mail_id, creator, created, changer, changed ) RETURNING id, person_id, name, type, path, hash, valid, valid_date, validated_by, mail_id, creator, created, changer, changed
` `
type CreateDocumentUploadParams struct { type CreateDocumentUploadParams struct {
@ -85,7 +147,7 @@ type CreateDocumentUploadParams struct {
Name string `json:"name"` Name string `json:"name"`
Type string `json:"type"` Type string `json:"type"`
Path string `json:"path"` Path string `json:"path"`
Url string `json:"url"` Hash string `json:"hash"`
Creator string `json:"creator"` Creator string `json:"creator"`
Changer string `json:"changer"` Changer string `json:"changer"`
} }
@ -96,7 +158,7 @@ func (q *Queries) CreateDocumentUpload(ctx context.Context, arg CreateDocumentUp
arg.Name, arg.Name,
arg.Type, arg.Type,
arg.Path, arg.Path,
arg.Url, arg.Hash,
arg.Creator, arg.Creator,
arg.Changer, arg.Changer,
) )
@ -107,7 +169,7 @@ func (q *Queries) CreateDocumentUpload(ctx context.Context, arg CreateDocumentUp
&i.Name, &i.Name,
&i.Type, &i.Type,
&i.Path, &i.Path,
&i.Url, &i.Hash,
&i.Valid, &i.Valid,
&i.ValidDate, &i.ValidDate,
&i.ValidatedBy, &i.ValidatedBy,
@ -141,7 +203,7 @@ func (q *Queries) DeleteDocumentsByPersonID(ctx context.Context, personID sql.Nu
} }
const getDocument = `-- name: GetDocument :one const getDocument = `-- name: GetDocument :one
SELECT id, person_id, name, type, path, url, valid, valid_date, validated_by, mail_id, creator, created, changer, changed FROM documents SELECT id, person_id, name, type, path, hash, valid, valid_date, validated_by, mail_id, creator, created, changer, changed FROM documents
WHERE "id" = $1 LIMIT 1 WHERE "id" = $1 LIMIT 1
` `
@ -154,7 +216,77 @@ func (q *Queries) GetDocument(ctx context.Context, id uint64) (Document, error)
&i.Name, &i.Name,
&i.Type, &i.Type,
&i.Path, &i.Path,
&i.Url, &i.Hash,
&i.Valid,
&i.ValidDate,
&i.ValidatedBy,
&i.MailID,
&i.Creator,
&i.Created,
&i.Changer,
&i.Changed,
)
return i, err
}
const getDocumentByHash = `-- name: GetDocumentByHash :many
SELECT d."id" FROM documents d
INNER JOIN persons p
ON d."person_id" = p."id"
WHERE p."account_id" = $1 AND
d."hash" = $2
`
type GetDocumentByHashParams struct {
AccountID uint64 `json:"account_id"`
Hash string `json:"hash"`
}
func (q *Queries) GetDocumentByHash(ctx context.Context, arg GetDocumentByHashParams) ([]uint64, error) {
rows, err := q.db.QueryContext(ctx, getDocumentByHash, arg.AccountID, arg.Hash)
if err != nil {
return nil, err
}
defer rows.Close()
items := []uint64{}
for rows.Next() {
var id uint64
if err := rows.Scan(&id); err != nil {
return nil, err
}
items = append(items, id)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const getDocumentByIDWithAccountID = `-- name: GetDocumentByIDWithAccountID :one
SELECT d.id, d.person_id, d.name, d.type, d.path, d.hash, d.valid, d.valid_date, d.validated_by, d.mail_id, d.creator, d.created, d.changer, d.changed FROM documents d
INNER JOIN persons p
ON d."person_id" = p."id"
WHERE d."id" = $1 AND p."account_id" = $2
`
type GetDocumentByIDWithAccountIDParams struct {
ID uint64 `json:"id"`
AccountID uint64 `json:"account_id"`
}
func (q *Queries) GetDocumentByIDWithAccountID(ctx context.Context, arg GetDocumentByIDWithAccountIDParams) (Document, error) {
row := q.db.QueryRowContext(ctx, getDocumentByIDWithAccountID, arg.ID, arg.AccountID)
var i Document
err := row.Scan(
&i.ID,
&i.PersonID,
&i.Name,
&i.Type,
&i.Path,
&i.Hash,
&i.Valid, &i.Valid,
&i.ValidDate, &i.ValidDate,
&i.ValidatedBy, &i.ValidatedBy,
@ -176,7 +308,7 @@ SET
"changer" = $2, "changer" = $2,
"changed" = now() "changed" = now()
WHERE "id" = $1 WHERE "id" = $1
RETURNING id, person_id, name, type, path, url, valid, valid_date, validated_by, mail_id, creator, created, changer, changed RETURNING id, person_id, name, type, path, hash, valid, valid_date, validated_by, mail_id, creator, created, changer, changed
` `
type InvalidateDocumentParams struct { type InvalidateDocumentParams struct {
@ -193,7 +325,7 @@ func (q *Queries) InvalidateDocument(ctx context.Context, arg InvalidateDocument
&i.Name, &i.Name,
&i.Type, &i.Type,
&i.Path, &i.Path,
&i.Url, &i.Hash,
&i.Valid, &i.Valid,
&i.ValidDate, &i.ValidDate,
&i.ValidatedBy, &i.ValidatedBy,
@ -207,7 +339,7 @@ func (q *Queries) InvalidateDocument(ctx context.Context, arg InvalidateDocument
} }
const listDocuments = `-- name: ListDocuments :many const listDocuments = `-- name: ListDocuments :many
SELECT id, person_id, name, type, path, url, valid, valid_date, validated_by, mail_id, creator, created, changer, changed FROM documents SELECT id, person_id, name, type, path, hash, valid, valid_date, validated_by, mail_id, creator, created, changer, changed FROM documents
ORDER BY "valid", "type", "name" ORDER BY "valid", "type", "name"
LIMIT $1 LIMIT $1
OFFSET $2 OFFSET $2
@ -233,7 +365,7 @@ func (q *Queries) ListDocuments(ctx context.Context, arg ListDocumentsParams) ([
&i.Name, &i.Name,
&i.Type, &i.Type,
&i.Path, &i.Path,
&i.Url, &i.Hash,
&i.Valid, &i.Valid,
&i.ValidDate, &i.ValidDate,
&i.ValidatedBy, &i.ValidatedBy,
@ -262,11 +394,11 @@ SET
"name" = COALESCE($3, "name"), "name" = COALESCE($3, "name"),
"type" = COALESCE($4, "type"), "type" = COALESCE($4, "type"),
"path" = COALESCE($5, "path"), "path" = COALESCE($5, "path"),
"url" = COALESCE($6, "url"), "hash" = COALESCE($6, "hash"),
changer = $2, changer = $2,
changed = now() changed = now()
WHERE "id" = $1 WHERE "id" = $1
RETURNING id, person_id, name, type, path, url, valid, valid_date, validated_by, mail_id, creator, created, changer, changed RETURNING id, person_id, name, type, path, hash, valid, valid_date, validated_by, mail_id, creator, created, changer, changed
` `
type UpdateDocumentParams struct { type UpdateDocumentParams struct {
@ -275,7 +407,7 @@ type UpdateDocumentParams struct {
Name sql.NullString `json:"name"` Name sql.NullString `json:"name"`
Type sql.NullString `json:"type"` Type sql.NullString `json:"type"`
Path sql.NullString `json:"path"` Path sql.NullString `json:"path"`
Url sql.NullString `json:"url"` Hash sql.NullString `json:"hash"`
} }
func (q *Queries) UpdateDocument(ctx context.Context, arg UpdateDocumentParams) (Document, error) { func (q *Queries) UpdateDocument(ctx context.Context, arg UpdateDocumentParams) (Document, error) {
@ -285,7 +417,7 @@ func (q *Queries) UpdateDocument(ctx context.Context, arg UpdateDocumentParams)
arg.Name, arg.Name,
arg.Type, arg.Type,
arg.Path, arg.Path,
arg.Url, arg.Hash,
) )
var i Document var i Document
err := row.Scan( err := row.Scan(
@ -294,7 +426,7 @@ func (q *Queries) UpdateDocument(ctx context.Context, arg UpdateDocumentParams)
&i.Name, &i.Name,
&i.Type, &i.Type,
&i.Path, &i.Path,
&i.Url, &i.Hash,
&i.Valid, &i.Valid,
&i.ValidDate, &i.ValidDate,
&i.ValidatedBy, &i.ValidatedBy,
@ -316,7 +448,7 @@ SET
"changer" = $2, "changer" = $2,
"changed" = now() "changed" = now()
WHERE "id" = $1 WHERE "id" = $1
RETURNING id, person_id, name, type, path, url, valid, valid_date, validated_by, mail_id, creator, created, changer, changed RETURNING id, person_id, name, type, path, hash, valid, valid_date, validated_by, mail_id, creator, created, changer, changed
` `
type ValidateDocumentParams struct { type ValidateDocumentParams struct {
@ -333,7 +465,7 @@ func (q *Queries) ValidateDocument(ctx context.Context, arg ValidateDocumentPara
&i.Name, &i.Name,
&i.Type, &i.Type,
&i.Path, &i.Path,
&i.Url, &i.Hash,
&i.Valid, &i.Valid,
&i.ValidDate, &i.ValidDate,
&i.ValidatedBy, &i.ValidatedBy,

View File

@ -24,7 +24,7 @@ func createRandomDocumentUpload(t *testing.T) Document {
Name: util.RandomString(20), Name: util.RandomString(20),
Type: util.RandomString(5), Type: util.RandomString(5),
Path: util.RandomString(50), Path: util.RandomString(50),
Url: util.RandomString(60), Hash: util.RandomString(60),
Creator: creator, Creator: creator,
Changer: creator, Changer: creator,
} }
@ -37,7 +37,7 @@ func createRandomDocumentUpload(t *testing.T) Document {
require.Equal(t, arg.Name, document.Name) require.Equal(t, arg.Name, document.Name)
require.Equal(t, arg.Type, document.Type) require.Equal(t, arg.Type, document.Type)
require.Equal(t, arg.Path, document.Path) require.Equal(t, arg.Path, document.Path)
require.Equal(t, arg.Url, document.Url) require.Equal(t, arg.Hash, document.Hash)
require.Equal(t, arg.Creator, document.Creator) require.Equal(t, arg.Creator, document.Creator)
require.Equal(t, arg.Changer, document.Changer) require.Equal(t, arg.Changer, document.Changer)
require.Equal(t, document.Valid, false) require.Equal(t, document.Valid, false)
@ -62,7 +62,7 @@ func TestCreateDocumentMail(t *testing.T) {
Name: util.RandomString(20), Name: util.RandomString(20),
Type: util.RandomString(5), Type: util.RandomString(5),
Path: util.RandomString(50), Path: util.RandomString(50),
Url: util.RandomString(60), Hash: util.RandomString(60),
Creator: util.RandomName(), Creator: util.RandomName(),
Changer: util.RandomName(), Changer: util.RandomName(),
} }
@ -75,7 +75,7 @@ func TestCreateDocumentMail(t *testing.T) {
require.Equal(t, arg.Name, document.Name) require.Equal(t, arg.Name, document.Name)
require.Equal(t, arg.Type, document.Type) require.Equal(t, arg.Type, document.Type)
require.Equal(t, arg.Path, document.Path) require.Equal(t, arg.Path, document.Path)
require.Equal(t, arg.Url, document.Url) require.Equal(t, arg.Hash, document.Hash)
require.Equal(t, arg.Creator, document.Creator) require.Equal(t, arg.Creator, document.Creator)
require.Equal(t, arg.Changer, document.Changer) require.Equal(t, arg.Changer, document.Changer)
require.Equal(t, document.Valid, false) require.Equal(t, document.Valid, false)
@ -102,7 +102,7 @@ func TestGetDocument(t *testing.T) {
require.Equal(t, newdocument.ID, document.ID) require.Equal(t, newdocument.ID, document.ID)
require.Equal(t, newdocument.PersonID, document.PersonID) require.Equal(t, newdocument.PersonID, document.PersonID)
require.Equal(t, newdocument.Type, document.Type) require.Equal(t, newdocument.Type, document.Type)
require.Equal(t, newdocument.Url, document.Url) require.Equal(t, newdocument.Hash, document.Hash)
require.Equal(t, newdocument.Path, document.Path) require.Equal(t, newdocument.Path, document.Path)
require.Equal(t, newdocument.Valid, document.Valid) require.Equal(t, newdocument.Valid, document.Valid)
require.Equal(t, newdocument.ValidDate, document.ValidDate) require.Equal(t, newdocument.ValidDate, document.ValidDate)

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
// source: mail.sql // source: mail.sql
package db package db

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
package db package db
@ -38,7 +38,7 @@ type Document struct {
Name string `json:"name"` Name string `json:"name"`
Type string `json:"type"` Type string `json:"type"`
Path string `json:"path"` Path string `json:"path"`
Url string `json:"url"` Hash string `json:"hash"`
Valid bool `json:"valid"` Valid bool `json:"valid"`
ValidDate sql.NullTime `json:"valid_date"` ValidDate sql.NullTime `json:"valid_date"`
ValidatedBy sql.NullString `json:"validated_by"` ValidatedBy sql.NullString `json:"validated_by"`

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
// source: payment.sql // source: payment.sql
package db package db

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
// source: person.sql // source: person.sql
package db package db

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
// source: provider.sql // source: provider.sql
package db package db

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
package db package db
@ -15,6 +15,7 @@ type Querier interface {
BlockSession(ctx context.Context, id uuid.UUID) error BlockSession(ctx context.Context, id uuid.UUID) error
CloneProviders(ctx context.Context, arg CloneProvidersParams) error CloneProviders(ctx context.Context, arg CloneProvidersParams) error
CreateAccount(ctx context.Context, arg CreateAccountParams) (Account, error) CreateAccount(ctx context.Context, arg CreateAccountParams) (Account, error)
CreateDocument(ctx context.Context, arg CreateDocumentParams) (Document, error)
CreateDocumentMail(ctx context.Context, arg CreateDocumentMailParams) (Document, error) CreateDocumentMail(ctx context.Context, arg CreateDocumentMailParams) (Document, error)
CreateDocumentUpload(ctx context.Context, arg CreateDocumentUploadParams) (Document, error) CreateDocumentUpload(ctx context.Context, arg CreateDocumentUploadParams) (Document, error)
CreateMail(ctx context.Context, arg CreateMailParams) (Mail, error) CreateMail(ctx context.Context, arg CreateMailParams) (Mail, error)
@ -52,6 +53,8 @@ type Querier interface {
GetAccountByEmail(ctx context.Context, email string) (Account, error) GetAccountByEmail(ctx context.Context, email string) (Account, error)
GetAccountForUpdate(ctx context.Context, id uint64) (Account, error) GetAccountForUpdate(ctx context.Context, id uint64) (Account, error)
GetDocument(ctx context.Context, id uint64) (Document, error) GetDocument(ctx context.Context, id uint64) (Document, error)
GetDocumentByHash(ctx context.Context, arg GetDocumentByHashParams) ([]uint64, error)
GetDocumentByIDWithAccountID(ctx context.Context, arg GetDocumentByIDWithAccountIDParams) (Document, error)
GetMail(ctx context.Context, id uint64) (Mail, error) GetMail(ctx context.Context, id uint64) (Mail, error)
GetPayment(ctx context.Context, id uint64) (Payment, error) GetPayment(ctx context.Context, id uint64) (Payment, error)
GetPerson(ctx context.Context, id uint64) (Person, error) GetPerson(ctx context.Context, id uint64) (Person, error)

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
// source: return.sql // source: return.sql
package db package db

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
// source: returnsLog.sql // source: returnsLog.sql
package db package db

View File

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.21.0 // sqlc v1.22.0
// source: session.sql // source: session.sql
package db package db

View File

@ -4,6 +4,8 @@ import (
"context" "context"
"database/sql" "database/sql"
"fmt" "fmt"
"google.golang.org/grpc/codes"
) )
type Store interface { type Store interface {
@ -13,6 +15,8 @@ type Store interface {
UpdateAccountPrivacyTx(ctx context.Context, arg UpdateAccountPrivacyTxParams) (Account, error) UpdateAccountPrivacyTx(ctx context.Context, arg UpdateAccountPrivacyTxParams) (Account, error)
CreatePersonTx(ctx context.Context, arg CreatePersonTxParams) (Person, error) CreatePersonTx(ctx context.Context, arg CreatePersonTxParams) (Person, error)
DeletePersonTx(ctx context.Context, id uint64) error DeletePersonTx(ctx context.Context, id uint64) error
CreateDocumentTx(ctx context.Context, arg CreateDocumentTxParams) (doc Document, code int, err error)
DeleteDocumentTx(ctx context.Context, id uint64) (code codes.Code, err error)
} }
// Store provides all functions to execute db queries and transactions // Store provides all functions to execute db queries and transactions

View File

@ -0,0 +1,139 @@
package db
import (
"context"
"crypto/sha256"
"database/sql"
"encoding/hex"
"errors"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
"path"
"path/filepath"
)
type CreateDocumentTxParams struct {
AccountID uint64 `json:"account_id"`
PersonID uint64 `json:"person_id"`
MailID uint64 `json:"mail_id"`
File *multipart.FileHeader `json:"file"`
Creator string `json:"creator"`
}
type CreateDocumentTxResult struct {
Document Document `json:"document"`
}
func (store *SQLStore) CreateDocumentTx(ctx context.Context, arg CreateDocumentTxParams) (doc Document, code int, err error) {
var result CreateDocumentTxResult
if arg.MailID > 0 && arg.PersonID > 0 {
return Document{}, http.StatusBadRequest, errors.New("document can't be assigned to both person_id AND mail_id")
}
if arg.MailID < 1 && arg.PersonID < 1 {
return Document{}, http.StatusBadRequest, errors.New("document has to be assigned to either a person_id or a mail_id")
}
req := CreateDocumentParams{
Creator: arg.Creator,
}
targetDir := filepath.Join("./files", fmt.Sprintf("%d", arg.AccountID))
fileData, err := arg.File.Open()
if err != nil {
return Document{}, http.StatusBadRequest, errors.New("failed to read file")
}
h := sha256.New()
_, err = io.Copy(h, fileData)
if err != nil {
return Document{}, http.StatusInternalServerError, errors.New("could not create file hash")
}
fileData.Seek(0, io.SeekStart)
req.Hash = hex.EncodeToString(h.Sum(nil))
if arg.MailID > 0 {
_, err := store.GetMail(ctx, arg.MailID)
if err != nil {
return Document{}, http.StatusNotFound, errors.New("mail not found")
}
targetDir = filepath.Join(targetDir, "mail", fmt.Sprintf("%d", arg.MailID))
req.MailID = sql.NullInt64{
Valid: true,
Int64: int64(arg.MailID),
}
}
if arg.PersonID > 0 {
_, err := store.GetPerson(ctx, arg.PersonID)
if err != nil {
return Document{}, http.StatusNotFound, errors.New("person not found")
}
docs, err := store.GetDocumentByHash(ctx, GetDocumentByHashParams{
AccountID: arg.AccountID,
Hash: req.Hash,
})
if err != nil {
return Document{}, http.StatusInternalServerError, fmt.Errorf("could not check file hash in db: %v", err.Error())
}
if len(docs) > 0 {
return Document{
ID: docs[0],
}, http.StatusConflict, errors.New("file already exists in database")
}
targetDir = filepath.Join(targetDir, "person", fmt.Sprintf("%d", arg.PersonID))
req.PersonID = sql.NullInt64{
Valid: true,
Int64: int64(arg.PersonID),
}
}
req.Type = path.Ext(arg.File.Filename)
req.Name = arg.File.Filename
p := filepath.Join(targetDir, req.Hash+path.Ext(arg.File.Filename))
req.Path = p
if _, err := os.Stat(p); err == nil {
return Document{}, http.StatusConflict, errors.New("file already exists")
}
err = store.execTx(ctx, func(q *Queries) error {
var err error
if _, err := os.Stat(targetDir); err != nil {
err = os.MkdirAll(targetDir, 0755)
if err != nil {
return errors.New("could not create directory structure")
}
}
f, err := os.Create(p)
if err != nil {
return fmt.Errorf("could not create file: %v", err)
}
_, err = io.Copy(f, fileData)
if err != nil {
return errors.New("could not write file")
}
result.Document, err = q.CreateDocument(ctx, req)
if err != nil {
return err
}
return err
})
return result.Document, http.StatusInternalServerError, err
}

View File

@ -0,0 +1,46 @@
package db
import (
"context"
"fmt"
"os"
"path/filepath"
"google.golang.org/grpc/codes"
)
func (store *SQLStore) DeleteDocumentTx(ctx context.Context, id uint64) (code codes.Code, err error) {
doc, err := store.GetDocument(ctx, id)
if err != nil {
return codes.NotFound, fmt.Errorf("document not found")
}
p := filepath.Join("./", doc.Path)
_, err = os.Stat(p)
if err != nil {
return codes.Internal, fmt.Errorf("document not found on disk")
}
err = store.execTx(ctx, func(q *Queries) error {
var err error
err = q.DeleteDocument(ctx, id)
if err != nil {
return err
}
err = os.Remove(p)
if err != nil {
return fmt.Errorf("could not delete file from disk")
}
return err
})
if err != nil {
return codes.Internal, err
}
return codes.OK, err
}

View File

@ -259,6 +259,43 @@
] ]
} }
}, },
"/v1/documents/delete_document/{id}": {
"delete": {
"summary": "Delete Document by ID",
"operationId": "df_DeleteDocument",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/pbDeleteDocumentResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"type": "string",
"format": "uint64"
}
],
"tags": [
"df"
],
"security": [
{
"BearerAuth": []
}
]
}
},
"/v1/login": { "/v1/login": {
"post": { "post": {
"operationId": "df_Login", "operationId": "df_Login",
@ -1138,6 +1175,23 @@
"description": "Returns the created Person", "description": "Returns the created Person",
"title": "Created Person" "title": "Created Person"
}, },
"pbDeleteDocumentResponse": {
"type": "object",
"example": {
"id": "1",
"deleted": true
},
"properties": {
"id": {
"type": "string",
"format": "uint64"
},
"deleted": {
"type": "boolean"
}
},
"title": "Delete Document Response"
},
"pbDeletePaymentResponse": { "pbDeletePaymentResponse": {
"type": "object", "type": "object",
"example": { "example": {

View File

@ -0,0 +1,79 @@
package gapi
import (
"context"
"database/sql"
"errors"
"log/slog"
db "github.com/itsscb/df/bff/db/sqlc"
"github.com/itsscb/df/bff/pb"
"google.golang.org/genproto/googleapis/rpc/errdetails"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
func (server *Server) DeleteDocument(ctx context.Context, req *pb.DeleteDocumentRequest) (*pb.DeleteDocumentResponse, error) {
authPayload, err := server.authorizeUser(ctx)
if err != nil {
return nil, unauthenticatedError(err)
}
violations := validateDeleteDocumentRequest(req)
if violations != nil {
return nil, invalidArgumentError(violations)
}
account, err := server.store.GetAccount(ctx, authPayload.AccountID)
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return nil, status.Errorf(codes.NotFound, "account not found")
}
slog.Error("delete_document (get_account)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("document_id", int64(req.GetId())), slog.String("error", err.Error()))
return nil, status.Error(codes.Internal, "failed to get account")
}
if authPayload.AccountID != account.ID {
if !server.isAdmin(ctx, authPayload) {
return nil, status.Error(codes.NotFound, "account not found")
}
}
var document db.Document
if !server.isAdmin(ctx, authPayload) {
document, err = server.store.GetDocumentByIDWithAccountID(ctx, db.GetDocumentByIDWithAccountIDParams{
ID: req.GetId(),
AccountID: account.ID,
})
} else {
document, err = server.store.GetDocument(ctx, req.GetId())
}
if err != nil {
if errors.Is(err, sql.ErrNoRows) {
return nil, status.Errorf(codes.NotFound, "document not found")
}
slog.Error("delete_document (get_document)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("document_id", int64(req.GetId())), slog.String("error", err.Error()))
return nil, status.Errorf(codes.Internal, "failed to get document")
}
code, err := server.store.DeleteDocumentTx(ctx, document.ID)
if err != nil {
slog.Error("delete_document (db)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("document_id", int64(req.GetId())), slog.String("error", err.Error()))
return nil, status.Errorf(code, "failed to delete document")
}
rsp := &pb.DeleteDocumentResponse{
Id: document.ID,
Deleted: true,
}
return rsp, nil
}
func validateDeleteDocumentRequest(req *pb.DeleteDocumentRequest) (violations []*errdetails.BadRequest_FieldViolation) {
if req.GetId() < 1 {
violations = append(violations, fieldViolation("id", errors.New("must be greater than 0")))
}
return violations
}

View File

@ -2,17 +2,14 @@ package gw
import ( import (
"errors" "errors"
"fmt"
"io"
"mime/multipart" "mime/multipart"
"net/http" "net/http"
"os"
"path"
"path/filepath"
"strings" "strings"
"log/slog"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/google/uuid" db "github.com/itsscb/df/bff/db/sqlc"
) )
type uploadDocumentRequest struct { type uploadDocumentRequest struct {
@ -45,14 +42,6 @@ func (server *Server) UploadDocument(ctx *gin.Context) {
return return
} }
file, err := ctx.FormFile("file")
if err != nil {
ctx.JSON(http.StatusInternalServerError, errorResponse(errors.New("could not parse file")))
return
}
targetDir := filepath.Join("./files", fmt.Sprintf("%d", account.ID))
var req *uploadDocumentRequest var req *uploadDocumentRequest
err = ctx.ShouldBind(&req) err = ctx.ShouldBind(&req)
if err != nil { if err != nil {
@ -60,74 +49,22 @@ func (server *Server) UploadDocument(ctx *gin.Context) {
return return
} }
fileData, err := file.Open() r := db.CreateDocumentTxParams{
AccountID: account.ID,
PersonID: req.PersonID,
MailID: req.MailID,
File: req.File,
Creator: account.Email,
}
doc, code, err := server.store.CreateDocumentTx(ctx, r)
if err != nil { if err != nil {
ctx.JSON(http.StatusBadRequest, errorResponse(errors.New("failed to read file"))) if code == http.StatusInternalServerError {
slog.Error("create_document", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.String("document_name", req.File.Filename), slog.String("error", err.Error()))
}
ctx.JSON(code, errorResponse(err))
return return
} }
if req != nil { ctx.JSON(http.StatusOK, doc)
if req.MailID <= 0 && req.PersonID <= 0 {
ctx.JSON(http.StatusBadRequest, errorResponse(errors.New("document can't be assigned to both person_id AND mail_id")))
return
}
if req.MailID > 0 {
_, err := server.store.GetMail(ctx, req.MailID)
if err != nil {
ctx.JSON(http.StatusNotFound, errorResponse(errors.New("mail not found")))
return
}
targetDir = filepath.Join(targetDir, "mail", fmt.Sprintf("%d", req.MailID))
}
if req.PersonID > 0 {
_, err := server.store.GetPerson(ctx, req.PersonID)
if err != nil {
ctx.JSON(http.StatusNotFound, errorResponse(errors.New("person not found")))
return
}
targetDir = filepath.Join(targetDir, "person", fmt.Sprintf("%d", req.PersonID))
}
}
uid, err := uuid.NewUUID()
if err != nil {
ctx.JSON(http.StatusInternalServerError, errorResponse(errors.New("could not generate file name")))
return
}
if _, err := os.Stat(targetDir); err != nil {
err = os.MkdirAll(targetDir, 0755)
if err != nil {
ctx.JSON(http.StatusInternalServerError, errorResponse(errors.New("could not create directory structure")))
return
}
}
p := filepath.Join(targetDir, uid.String()+path.Ext(file.Filename))
if _, err := os.Stat(p); err != nil {
f, err := os.Create(p)
if err != nil {
ctx.JSON(http.StatusInternalServerError, errorResponse(fmt.Errorf("could not create file: %v", err)))
return
}
_, err = io.Copy(f, fileData)
if err != nil {
ctx.JSON(http.StatusInternalServerError, errorResponse(errors.New("could not write file")))
return
}
// err = ctx.SaveUploadedFile(file, p)
// if err != nil {
// ctx.JSON(http.StatusInternalServerError, errorResponse(errors.New("could not save file")))
// return
// }
} else {
ctx.JSON(http.StatusConflict, errorResponse(errors.New("filename already exists")))
return
}
} }

View File

@ -0,0 +1,227 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.31.0
// protoc v4.24.4
// source: rpc_delete_document.proto
package pb
import (
_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type DeleteDocumentRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
}
func (x *DeleteDocumentRequest) Reset() {
*x = DeleteDocumentRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_rpc_delete_document_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DeleteDocumentRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DeleteDocumentRequest) ProtoMessage() {}
func (x *DeleteDocumentRequest) ProtoReflect() protoreflect.Message {
mi := &file_rpc_delete_document_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DeleteDocumentRequest.ProtoReflect.Descriptor instead.
func (*DeleteDocumentRequest) Descriptor() ([]byte, []int) {
return file_rpc_delete_document_proto_rawDescGZIP(), []int{0}
}
func (x *DeleteDocumentRequest) GetId() uint64 {
if x != nil {
return x.Id
}
return 0
}
type DeleteDocumentResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
Deleted bool `protobuf:"varint,2,opt,name=deleted,proto3" json:"deleted,omitempty"`
}
func (x *DeleteDocumentResponse) Reset() {
*x = DeleteDocumentResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_rpc_delete_document_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DeleteDocumentResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DeleteDocumentResponse) ProtoMessage() {}
func (x *DeleteDocumentResponse) ProtoReflect() protoreflect.Message {
mi := &file_rpc_delete_document_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DeleteDocumentResponse.ProtoReflect.Descriptor instead.
func (*DeleteDocumentResponse) Descriptor() ([]byte, []int) {
return file_rpc_delete_document_proto_rawDescGZIP(), []int{1}
}
func (x *DeleteDocumentResponse) GetId() uint64 {
if x != nil {
return x.Id
}
return 0
}
func (x *DeleteDocumentResponse) GetDeleted() bool {
if x != nil {
return x.Deleted
}
return false
}
var File_rpc_delete_document_proto protoreflect.FileDescriptor
var file_rpc_delete_document_proto_rawDesc = []byte{
0x0a, 0x19, 0x72, 0x70, 0x63, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x64, 0x6f, 0x63,
0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e,
0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e,
0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
0x64, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x3b, 0x92, 0x41, 0x38, 0x0a, 0x29, 0x2a,
0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
0x32, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d,
0x65, 0x6e, 0x74, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x32, 0x0b, 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a,
0x20, 0x22, 0x31, 0x22, 0x7d, 0x22, 0x81, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64,
0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x3a, 0x3d, 0x92, 0x41, 0x3a, 0x0a,
0x1a, 0x2a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65,
0x6e, 0x74, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x1c, 0x7b, 0x22, 0x69,
0x64, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
0x64, 0x22, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0x7d, 0x42, 0x19, 0x5a, 0x17, 0x67, 0x69, 0x74,
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64,
0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_rpc_delete_document_proto_rawDescOnce sync.Once
file_rpc_delete_document_proto_rawDescData = file_rpc_delete_document_proto_rawDesc
)
func file_rpc_delete_document_proto_rawDescGZIP() []byte {
file_rpc_delete_document_proto_rawDescOnce.Do(func() {
file_rpc_delete_document_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_delete_document_proto_rawDescData)
})
return file_rpc_delete_document_proto_rawDescData
}
var file_rpc_delete_document_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_rpc_delete_document_proto_goTypes = []interface{}{
(*DeleteDocumentRequest)(nil), // 0: pb.DeleteDocumentRequest
(*DeleteDocumentResponse)(nil), // 1: pb.DeleteDocumentResponse
}
var file_rpc_delete_document_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_rpc_delete_document_proto_init() }
func file_rpc_delete_document_proto_init() {
if File_rpc_delete_document_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_rpc_delete_document_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteDocumentRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_rpc_delete_document_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteDocumentResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_rpc_delete_document_proto_rawDesc,
NumEnums: 0,
NumMessages: 2,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_rpc_delete_document_proto_goTypes,
DependencyIndexes: file_rpc_delete_document_proto_depIdxs,
MessageInfos: file_rpc_delete_document_proto_msgTypes,
}.Build()
File_rpc_delete_document_proto = out.File
file_rpc_delete_document_proto_rawDesc = nil
file_rpc_delete_document_proto_goTypes = nil
file_rpc_delete_document_proto_depIdxs = nil
}

View File

@ -64,223 +64,235 @@ var file_service_df_proto_rawDesc = []byte{
0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x6c, 0x6f, 0x67, 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x6c, 0x6f,
0x61, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x61, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x32, 0xce, 0x19, 0x0a, 0x02, 0x64, 0x66, 0x12, 0x42, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6f, 0x1a, 0x19, 0x72, 0x70, 0x63, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x64, 0x6f,
0x6e, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xf0, 0x1a, 0x0a,
0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x02, 0x64, 0x66, 0x12, 0x42, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x10, 0x2e, 0x70,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x3a, 0x01, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11,
0x2a, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x68, 0x0a, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x3a, 0x01, 0x2a, 0x22, 0x09, 0x2f, 0x76,
0x62, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x68, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x66,
0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b,
0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93,
0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69,
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65,
0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6e, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73,
0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x92, 0x41, 0x2f, 0x12, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62,
0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x92, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74,
0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0x20, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63,
0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61,
0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12,
0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69,
0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63,
0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x6f,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x42,
0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
0x65, 0x22, 0x4f, 0x92, 0x41, 0x27, 0x12, 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x53, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x92, 0x41,
0x27, 0x12, 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72,
0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01,
0x2a, 0x32, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x92, 0x01,
0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x15, 0x2e, 0x70,
0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, 0x41, 0x2d,
0x12, 0x19, 0x47, 0x65, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x62, 0x79,
0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a,
0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x32, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x69,
0x6f, 0x6e, 0x12, 0x92, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75,
0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63,
0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70,
0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65,
0x22, 0x55, 0x92, 0x41, 0x2d, 0x12, 0x19, 0x47, 0x65, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x2e, 0x12, 0x1a, 0x4c, 0x69, 0x73,
0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x5b, 0x61, 0x64, 0x6d, 0x69,
0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x5d, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61,
0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69,
0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x7f, 0x0a, 0x0d, 0x43,
0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70,
0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52,
0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61,
0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x2e, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x12, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x65, 0x22, 0x39, 0x92, 0x41, 0x10, 0x12, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41,
0x5b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x5d, 0x62, 0x10, 0x0a, 0x0e, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22,
0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x72,
0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x91, 0x01, 0x0a,
0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18,
0x12, 0x7f, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62,
0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x92, 0x41, 0x10, 0x12, 0x0e, 0x43, 0x72, 0x65,
0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41,
0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e,
0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x62, 0x10, 0x0a,
0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xbf, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x12, 0x1f,
0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70,
0x20, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x65, 0x22, 0x64, 0x92, 0x41, 0x33, 0x12, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65,
0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x20, 0x53,
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61,
0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a,
0x01, 0x2a, 0x32, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73,
0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f,
0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x12, 0x8b, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61,
0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72,
0x65, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72,
0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x21,
0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x62,
0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12,
0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f,
0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70,
0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x8b, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f,
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x21, 0x12, 0x0d,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x62, 0x10, 0x0a,
0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x32, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65,
0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72,
0x73, 0x6f, 0x6e, 0x12, 0x84, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f,
0x6e, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74,
0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a,
0x92, 0x41, 0x24, 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20,
0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65,
0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f,
0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x70,
0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x44,
0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62,
0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50,
0x92, 0x41, 0x27, 0x12, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73,
0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65,
0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20,
0x2a, 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x64, 0x65, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x6c, 0x65, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x12, 0x9e, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0xbf, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75,
0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x55,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69, 0x76,
0x73, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x61, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x2e,
0x65, 0x22, 0x5e, 0x92, 0x41, 0x2e, 0x12, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x50, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x50, 0x72, 0x69,
0x73, 0x6f, 0x6e, 0x73, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x92, 0x41,
0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x33, 0x12, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x20, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x20, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x67, 0x73, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75,
0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x3a, 0x01, 0x2a, 0x32, 0x23, 0x2f,
0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61,
0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61,
0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x63, 0x79, 0x12, 0x8b, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72,
0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x43, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70,
0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x10, 0x0a, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x21, 0x12, 0x0d, 0x43, 0x72, 0x65,
0x61, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a,
0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f,
0x6e, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
0x12, 0x8b, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f,
0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72,
0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e,
0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x21, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65,
0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e,
0x3a, 0x01, 0x2a, 0x32, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73,
0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x84,
0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x14, 0x2e, 0x70,
0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f,
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x92, 0x41, 0x24, 0x12, 0x10,
0x47, 0x65, 0x74, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44,
0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68,
0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65,
0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65,
0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f,
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x92, 0x41, 0x27, 0x12, 0x13,
0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x20, 0x62, 0x79,
0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41,
0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x2a, 0x1e, 0x2f, 0x76, 0x31,
0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f,
0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x0b,
0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62,
0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x65, 0x72,
0x73, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x92, 0x41,
0x2e, 0x12, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x20,
0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a,
0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f,
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f,
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a,
0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18,
0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72,
0x6e, 0x73, 0x65, 0x22, 0x4d, 0x92, 0x41, 0x25, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x50, 0x61, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65,
0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20,
0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
0x64, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12,
0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52,
0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50,
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x28, 0x12, 0x14, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d,
0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x92, 0x41, 0x25, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72,
0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x2a, 0x20, 0x2f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d,
0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x65, 0x74,
0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x99, 0x01,
0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12,
0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x44,
0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70,
0x73, 0x65, 0x22, 0x61, 0x92, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x50, 0x61, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x28, 0x12, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74,
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62,
0x74, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12,
0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x2a, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79,
0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79,
0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x4c, 0x69,
0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e,
0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79,
0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x92,
0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
0x22, 0x12, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x73, 0x20, 0x62, 0x79, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x62,
0x74, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12,
0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x76, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79,
0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65,
0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xb0, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d,
0x73, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x12, 0x19, 0x2e, 0x70, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65,
0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70,
0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52,
0x6e, 0x73, 0x65, 0x22, 0x67, 0x92, 0x41, 0x30, 0x12, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x55, 0x70,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x20, 0x62, 0x79, 0x20, 0x70, 0x65, 0x72, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x10, 0x0a, 0x0e,
0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3,
0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79,
0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x2f, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79,
0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xb0, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x74,
0x2f, 0x7b, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x02, 0x0a, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73,
0x0e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
0x19, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x74, 0x75,
0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67,
0x92, 0x41, 0x30, 0x12, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,
0x73, 0x4c, 0x6f, 0x67, 0x20, 0x62, 0x79, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69,
0x64, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74,
0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x72,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x2f, 0x7b, 0x70, 0x65, 0x72,
0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xca, 0x02, 0x0a, 0x0e, 0x55, 0x70, 0x6c, 0x6f,
0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e,
0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x02, 0x92, 0x41, 0xe0, 0x01, 0x12, 0x1b, 0x55, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61,
0x70, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x5b, 0x64, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x48, 0x54, 0x54, 0x50, 0x5d, 0x1a, 0xae, 0x01, 0x54, 0x65, 0x73, 0x65, 0x22, 0x80, 0x02, 0x92, 0x41, 0xe0, 0x01, 0x12, 0x1b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
0x74, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x69, 0x61, 0x20, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x5b, 0x6f, 0x6e, 0x6c, 0x79, 0x20,
0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x54, 0x54, 0x50, 0x5d, 0x1a, 0xae, 0x01, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20,
0x2e, 0x20, 0x54, 0x72, 0x79, 0x20, 0x60, 0x60, 0x60, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x58, 0x76, 0x69, 0x61, 0x20, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x6e,
0x20, 0x50, 0x4f, 0x53, 0x54, 0x20, 0x2d, 0x48, 0x20, 0x22, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x6f, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x2e, 0x20, 0x54, 0x72, 0x79,
0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x20, 0x20, 0x60, 0x60, 0x60, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x58, 0x20, 0x50, 0x4f, 0x53, 0x54,
0x7b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x7d, 0x22, 0x20, 0x2d, 0x46, 0x20, 0x22, 0x66, 0x69, 0x6c, 0x20, 0x2d, 0x48, 0x20, 0x22, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69,
0x65, 0x3d, 0x40, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x6f, 0x6e, 0x3a, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x20, 0x7b, 0x74, 0x6f, 0x6b, 0x65,
0x22, 0x20, 0x2d, 0x46, 0x20, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x3d, 0x6e, 0x7d, 0x22, 0x20, 0x2d, 0x46, 0x20, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x3d, 0x40, 0x2f, 0x70,
0x31, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x7b, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x20, 0x2d, 0x46, 0x20,
0x65, 0x72, 0x55, 0x52, 0x49, 0x7d, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x3d, 0x31, 0x22, 0x20, 0x22, 0x68,
0x2f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x60, 0x60, 0x60, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x7b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x52, 0x49,
0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x7d, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x6c, 0x6f,
0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x61, 0x64, 0x22, 0x60, 0x60, 0x60, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72,
0x74, 0x73, 0x2f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x07, 0x92, 0x41, 0x04, 0x12, 0x02, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01,
0x64, 0x66, 0x42, 0xb0, 0x01, 0x92, 0x41, 0x93, 0x01, 0x12, 0x44, 0x0a, 0x06, 0x64, 0x66, 0x20, 0x2a, 0x22, 0x11, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70,
0x41, 0x50, 0x49, 0x22, 0x35, 0x0a, 0x06, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x12, 0x1c, 0x68, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44,
0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c,
0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x1a, 0x0d, 0x64, 0x65, 0x76, 0x65, 0x74, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
0x40, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2e, 0x64, 0x65, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x2a, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x6f,
0x02, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56,
0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x92, 0x41, 0x29, 0x12, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x44, 0x6f, 0x63, 0x75,
0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x5a, 0x23, 0x0a, 0x21, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a,
0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x13, 0x08, 0x02, 0x1a, 0x0d, 0x41, 0x75, 0x74, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93,
0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x5a, 0x17, 0x67, 0x69, 0x02, 0x24, 0x2a, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
0x64, 0x66, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x1a, 0x07, 0x92, 0x41, 0x04, 0x12, 0x02, 0x64, 0x66, 0x42,
0xb0, 0x01, 0x92, 0x41, 0x93, 0x01, 0x12, 0x44, 0x0a, 0x06, 0x64, 0x66, 0x20, 0x41, 0x50, 0x49,
0x22, 0x35, 0x0a, 0x06, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x12, 0x1c, 0x68, 0x74, 0x74, 0x70,
0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69,
0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x1a, 0x0d, 0x64, 0x65, 0x76, 0x40, 0x69, 0x74,
0x73, 0x73, 0x63, 0x62, 0x2e, 0x64, 0x65, 0x32, 0x03, 0x31, 0x2e, 0x30, 0x2a, 0x02, 0x01, 0x02,
0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73,
0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f,
0x6a, 0x73, 0x6f, 0x6e, 0x5a, 0x23, 0x0a, 0x21, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72,
0x41, 0x75, 0x74, 0x68, 0x12, 0x13, 0x08, 0x02, 0x1a, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72,
0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x5a, 0x17, 0x67, 0x69, 0x74, 0x68, 0x75,
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x74, 0x73, 0x73, 0x63, 0x62, 0x2f, 0x64, 0x66, 0x2f,
0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var file_service_df_proto_goTypes = []interface{}{ var file_service_df_proto_goTypes = []interface{}{
@ -305,27 +317,29 @@ var file_service_df_proto_goTypes = []interface{}{
(*UpdatePaymentRequest)(nil), // 18: pb.UpdatePaymentRequest (*UpdatePaymentRequest)(nil), // 18: pb.UpdatePaymentRequest
(*ListReturnsLogRequest)(nil), // 19: pb.ListReturnsLogRequest (*ListReturnsLogRequest)(nil), // 19: pb.ListReturnsLogRequest
(*UploadDocumentRequest)(nil), // 20: pb.UploadDocumentRequest (*UploadDocumentRequest)(nil), // 20: pb.UploadDocumentRequest
(*LoginResponse)(nil), // 21: pb.LoginResponse (*DeleteDocumentRequest)(nil), // 21: pb.DeleteDocumentRequest
(*RefreshTokenResponse)(nil), // 22: pb.RefreshTokenResponse (*LoginResponse)(nil), // 22: pb.LoginResponse
(*ListSessionsResponse)(nil), // 23: pb.ListSessionsResponse (*RefreshTokenResponse)(nil), // 23: pb.RefreshTokenResponse
(*BlockSessionResponse)(nil), // 24: pb.BlockSessionResponse (*ListSessionsResponse)(nil), // 24: pb.ListSessionsResponse
(*GetAccountResponse)(nil), // 25: pb.GetAccountResponse (*BlockSessionResponse)(nil), // 25: pb.BlockSessionResponse
(*ListAccountsResponse)(nil), // 26: pb.ListAccountsResponse (*GetAccountResponse)(nil), // 26: pb.GetAccountResponse
(*CreateAccountResponse)(nil), // 27: pb.CreateAccountResponse (*ListAccountsResponse)(nil), // 27: pb.ListAccountsResponse
(*UpdateAccountResponse)(nil), // 28: pb.UpdateAccountResponse (*CreateAccountResponse)(nil), // 28: pb.CreateAccountResponse
(*UpdateAccountPrivacyResponse)(nil), // 29: pb.UpdateAccountPrivacyResponse (*UpdateAccountResponse)(nil), // 29: pb.UpdateAccountResponse
(*CreatePersonResponse)(nil), // 30: pb.CreatePersonResponse (*UpdateAccountPrivacyResponse)(nil), // 30: pb.UpdateAccountPrivacyResponse
(*UpdatePersonResponse)(nil), // 31: pb.UpdatePersonResponse (*CreatePersonResponse)(nil), // 31: pb.CreatePersonResponse
(*GetPersonResponse)(nil), // 32: pb.GetPersonResponse (*UpdatePersonResponse)(nil), // 32: pb.UpdatePersonResponse
(*DeletePersonResponse)(nil), // 33: pb.DeletePersonResponse (*GetPersonResponse)(nil), // 33: pb.GetPersonResponse
(*ListPersonsResponse)(nil), // 34: pb.ListPersonsResponse (*DeletePersonResponse)(nil), // 34: pb.DeletePersonResponse
(*CreatePaymentResponse)(nil), // 35: pb.CreatePaymentResponse (*ListPersonsResponse)(nil), // 35: pb.ListPersonsResponse
(*GetPaymentResponse)(nil), // 36: pb.GetPaymentResponse (*CreatePaymentResponse)(nil), // 36: pb.CreatePaymentResponse
(*DeletePaymentResponse)(nil), // 37: pb.DeletePaymentResponse (*GetPaymentResponse)(nil), // 37: pb.GetPaymentResponse
(*ListPaymentsResponse)(nil), // 38: pb.ListPaymentsResponse (*DeletePaymentResponse)(nil), // 38: pb.DeletePaymentResponse
(*UpdatePaymentResponse)(nil), // 39: pb.UpdatePaymentResponse (*ListPaymentsResponse)(nil), // 39: pb.ListPaymentsResponse
(*ListReturnsLogResponse)(nil), // 40: pb.ListReturnsLogResponse (*UpdatePaymentResponse)(nil), // 40: pb.UpdatePaymentResponse
(*UploadDocumentResponse)(nil), // 41: pb.UploadDocumentResponse (*ListReturnsLogResponse)(nil), // 41: pb.ListReturnsLogResponse
(*UploadDocumentResponse)(nil), // 42: pb.UploadDocumentResponse
(*DeleteDocumentResponse)(nil), // 43: pb.DeleteDocumentResponse
} }
var file_service_df_proto_depIdxs = []int32{ var file_service_df_proto_depIdxs = []int32{
0, // 0: pb.df.Login:input_type -> pb.LoginRequest 0, // 0: pb.df.Login:input_type -> pb.LoginRequest
@ -349,29 +363,31 @@ var file_service_df_proto_depIdxs = []int32{
18, // 18: pb.df.UpdatePayment:input_type -> pb.UpdatePaymentRequest 18, // 18: pb.df.UpdatePayment:input_type -> pb.UpdatePaymentRequest
19, // 19: pb.df.ListReturnsLog:input_type -> pb.ListReturnsLogRequest 19, // 19: pb.df.ListReturnsLog:input_type -> pb.ListReturnsLogRequest
20, // 20: pb.df.UploadDocument:input_type -> pb.UploadDocumentRequest 20, // 20: pb.df.UploadDocument:input_type -> pb.UploadDocumentRequest
21, // 21: pb.df.Login:output_type -> pb.LoginResponse 21, // 21: pb.df.DeleteDocument:input_type -> pb.DeleteDocumentRequest
22, // 22: pb.df.RefreshToken:output_type -> pb.RefreshTokenResponse 22, // 22: pb.df.Login:output_type -> pb.LoginResponse
23, // 23: pb.df.ListSessions:output_type -> pb.ListSessionsResponse 23, // 23: pb.df.RefreshToken:output_type -> pb.RefreshTokenResponse
24, // 24: pb.df.BlockSession:output_type -> pb.BlockSessionResponse 24, // 24: pb.df.ListSessions:output_type -> pb.ListSessionsResponse
25, // 25: pb.df.GetAccount:output_type -> pb.GetAccountResponse 25, // 25: pb.df.BlockSession:output_type -> pb.BlockSessionResponse
26, // 26: pb.df.ListAccounts:output_type -> pb.ListAccountsResponse 26, // 26: pb.df.GetAccount:output_type -> pb.GetAccountResponse
27, // 27: pb.df.CreateAccount:output_type -> pb.CreateAccountResponse 27, // 27: pb.df.ListAccounts:output_type -> pb.ListAccountsResponse
28, // 28: pb.df.UpdateAccount:output_type -> pb.UpdateAccountResponse 28, // 28: pb.df.CreateAccount:output_type -> pb.CreateAccountResponse
29, // 29: pb.df.UpdateAccountPrivacy:output_type -> pb.UpdateAccountPrivacyResponse 29, // 29: pb.df.UpdateAccount:output_type -> pb.UpdateAccountResponse
30, // 30: pb.df.CreatePerson:output_type -> pb.CreatePersonResponse 30, // 30: pb.df.UpdateAccountPrivacy:output_type -> pb.UpdateAccountPrivacyResponse
31, // 31: pb.df.UpdatePerson:output_type -> pb.UpdatePersonResponse 31, // 31: pb.df.CreatePerson:output_type -> pb.CreatePersonResponse
32, // 32: pb.df.GetPerson:output_type -> pb.GetPersonResponse 32, // 32: pb.df.UpdatePerson:output_type -> pb.UpdatePersonResponse
33, // 33: pb.df.DeletePerson:output_type -> pb.DeletePersonResponse 33, // 33: pb.df.GetPerson:output_type -> pb.GetPersonResponse
34, // 34: pb.df.ListPersons:output_type -> pb.ListPersonsResponse 34, // 34: pb.df.DeletePerson:output_type -> pb.DeletePersonResponse
35, // 35: pb.df.CreatePayment:output_type -> pb.CreatePaymentResponse 35, // 35: pb.df.ListPersons:output_type -> pb.ListPersonsResponse
36, // 36: pb.df.GetPayment:output_type -> pb.GetPaymentResponse 36, // 36: pb.df.CreatePayment:output_type -> pb.CreatePaymentResponse
37, // 37: pb.df.DeletePayment:output_type -> pb.DeletePaymentResponse 37, // 37: pb.df.GetPayment:output_type -> pb.GetPaymentResponse
38, // 38: pb.df.ListPayments:output_type -> pb.ListPaymentsResponse 38, // 38: pb.df.DeletePayment:output_type -> pb.DeletePaymentResponse
39, // 39: pb.df.UpdatePayment:output_type -> pb.UpdatePaymentResponse 39, // 39: pb.df.ListPayments:output_type -> pb.ListPaymentsResponse
40, // 40: pb.df.ListReturnsLog:output_type -> pb.ListReturnsLogResponse 40, // 40: pb.df.UpdatePayment:output_type -> pb.UpdatePaymentResponse
41, // 41: pb.df.UploadDocument:output_type -> pb.UploadDocumentResponse 41, // 41: pb.df.ListReturnsLog:output_type -> pb.ListReturnsLogResponse
21, // [21:42] is the sub-list for method output_type 42, // 42: pb.df.UploadDocument:output_type -> pb.UploadDocumentResponse
0, // [0:21] is the sub-list for method input_type 43, // 43: pb.df.DeleteDocument:output_type -> pb.DeleteDocumentResponse
22, // [22:44] is the sub-list for method output_type
0, // [0:22] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name 0, // [0:0] is the sub-list for field type_name
@ -403,6 +419,7 @@ func file_service_df_proto_init() {
file_rpc_block_session_proto_init() file_rpc_block_session_proto_init()
file_rpc_list_returns_log_by_person_id_proto_init() file_rpc_list_returns_log_by_person_id_proto_init()
file_rpc_upload_document_proto_init() file_rpc_upload_document_proto_init()
file_rpc_delete_document_proto_init()
type x struct{} type x struct{}
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{ File: protoimpl.DescBuilder{

View File

@ -909,6 +909,58 @@ func local_request_Df_UploadDocument_0(ctx context.Context, marshaler runtime.Ma
} }
func request_Df_DeleteDocument_0(ctx context.Context, marshaler runtime.Marshaler, client DfClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DeleteDocumentRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["id"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
}
protoReq.Id, err = runtime.Uint64(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
}
msg, err := client.DeleteDocument(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Df_DeleteDocument_0(ctx context.Context, marshaler runtime.Marshaler, server DfServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DeleteDocumentRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["id"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id")
}
protoReq.Id, err = runtime.Uint64(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err)
}
msg, err := server.DeleteDocument(ctx, &protoReq)
return msg, metadata, err
}
// RegisterDfHandlerServer registers the http handlers for service Df to "mux". // RegisterDfHandlerServer registers the http handlers for service Df to "mux".
// UnaryRPC :call DfServer directly. // UnaryRPC :call DfServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@ -1440,6 +1492,31 @@ func RegisterDfHandlerServer(ctx context.Context, mux *runtime.ServeMux, server
}) })
mux.Handle("DELETE", pattern_Df_DeleteDocument_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pb.Df/DeleteDocument", runtime.WithHTTPPathPattern("/v1/documents/delete_document/{id}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Df_DeleteDocument_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Df_DeleteDocument_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil return nil
} }
@ -1943,6 +2020,28 @@ func RegisterDfHandlerClient(ctx context.Context, mux *runtime.ServeMux, client
}) })
mux.Handle("DELETE", pattern_Df_DeleteDocument_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/pb.Df/DeleteDocument", runtime.WithHTTPPathPattern("/v1/documents/delete_document/{id}"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Df_DeleteDocument_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_Df_DeleteDocument_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil return nil
} }
@ -1988,6 +2087,8 @@ var (
pattern_Df_ListReturnsLog_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "returns_log", "list_returns_log", "person_id"}, "")) pattern_Df_ListReturnsLog_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "returns_log", "list_returns_log", "person_id"}, ""))
pattern_Df_UploadDocument_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"documents", "upload"}, "")) pattern_Df_UploadDocument_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"documents", "upload"}, ""))
pattern_Df_DeleteDocument_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "documents", "delete_document", "id"}, ""))
) )
var ( var (
@ -2032,4 +2133,6 @@ var (
forward_Df_ListReturnsLog_0 = runtime.ForwardResponseMessage forward_Df_ListReturnsLog_0 = runtime.ForwardResponseMessage
forward_Df_UploadDocument_0 = runtime.ForwardResponseMessage forward_Df_UploadDocument_0 = runtime.ForwardResponseMessage
forward_Df_DeleteDocument_0 = runtime.ForwardResponseMessage
) )

View File

@ -40,6 +40,7 @@ const (
Df_UpdatePayment_FullMethodName = "/pb.df/UpdatePayment" Df_UpdatePayment_FullMethodName = "/pb.df/UpdatePayment"
Df_ListReturnsLog_FullMethodName = "/pb.df/ListReturnsLog" Df_ListReturnsLog_FullMethodName = "/pb.df/ListReturnsLog"
Df_UploadDocument_FullMethodName = "/pb.df/UploadDocument" Df_UploadDocument_FullMethodName = "/pb.df/UploadDocument"
Df_DeleteDocument_FullMethodName = "/pb.df/DeleteDocument"
) )
// DfClient is the client API for Df service. // DfClient is the client API for Df service.
@ -67,6 +68,7 @@ type DfClient interface {
UpdatePayment(ctx context.Context, in *UpdatePaymentRequest, opts ...grpc.CallOption) (*UpdatePaymentResponse, error) UpdatePayment(ctx context.Context, in *UpdatePaymentRequest, opts ...grpc.CallOption) (*UpdatePaymentResponse, error)
ListReturnsLog(ctx context.Context, in *ListReturnsLogRequest, opts ...grpc.CallOption) (*ListReturnsLogResponse, error) ListReturnsLog(ctx context.Context, in *ListReturnsLogRequest, opts ...grpc.CallOption) (*ListReturnsLogResponse, error)
UploadDocument(ctx context.Context, in *UploadDocumentRequest, opts ...grpc.CallOption) (*UploadDocumentResponse, error) UploadDocument(ctx context.Context, in *UploadDocumentRequest, opts ...grpc.CallOption) (*UploadDocumentResponse, error)
DeleteDocument(ctx context.Context, in *DeleteDocumentRequest, opts ...grpc.CallOption) (*DeleteDocumentResponse, error)
} }
type dfClient struct { type dfClient struct {
@ -266,6 +268,15 @@ func (c *dfClient) UploadDocument(ctx context.Context, in *UploadDocumentRequest
return out, nil return out, nil
} }
func (c *dfClient) DeleteDocument(ctx context.Context, in *DeleteDocumentRequest, opts ...grpc.CallOption) (*DeleteDocumentResponse, error) {
out := new(DeleteDocumentResponse)
err := c.cc.Invoke(ctx, Df_DeleteDocument_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// DfServer is the server API for Df service. // DfServer is the server API for Df service.
// All implementations must embed UnimplementedDfServer // All implementations must embed UnimplementedDfServer
// for forward compatibility // for forward compatibility
@ -291,6 +302,7 @@ type DfServer interface {
UpdatePayment(context.Context, *UpdatePaymentRequest) (*UpdatePaymentResponse, error) UpdatePayment(context.Context, *UpdatePaymentRequest) (*UpdatePaymentResponse, error)
ListReturnsLog(context.Context, *ListReturnsLogRequest) (*ListReturnsLogResponse, error) ListReturnsLog(context.Context, *ListReturnsLogRequest) (*ListReturnsLogResponse, error)
UploadDocument(context.Context, *UploadDocumentRequest) (*UploadDocumentResponse, error) UploadDocument(context.Context, *UploadDocumentRequest) (*UploadDocumentResponse, error)
DeleteDocument(context.Context, *DeleteDocumentRequest) (*DeleteDocumentResponse, error)
mustEmbedUnimplementedDfServer() mustEmbedUnimplementedDfServer()
} }
@ -361,6 +373,9 @@ func (UnimplementedDfServer) ListReturnsLog(context.Context, *ListReturnsLogRequ
func (UnimplementedDfServer) UploadDocument(context.Context, *UploadDocumentRequest) (*UploadDocumentResponse, error) { func (UnimplementedDfServer) UploadDocument(context.Context, *UploadDocumentRequest) (*UploadDocumentResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method UploadDocument not implemented") return nil, status.Errorf(codes.Unimplemented, "method UploadDocument not implemented")
} }
func (UnimplementedDfServer) DeleteDocument(context.Context, *DeleteDocumentRequest) (*DeleteDocumentResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteDocument not implemented")
}
func (UnimplementedDfServer) mustEmbedUnimplementedDfServer() {} func (UnimplementedDfServer) mustEmbedUnimplementedDfServer() {}
// UnsafeDfServer may be embedded to opt out of forward compatibility for this service. // UnsafeDfServer may be embedded to opt out of forward compatibility for this service.
@ -752,6 +767,24 @@ func _Df_UploadDocument_Handler(srv interface{}, ctx context.Context, dec func(i
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _Df_DeleteDocument_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DeleteDocumentRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DfServer).DeleteDocument(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Df_DeleteDocument_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DfServer).DeleteDocument(ctx, req.(*DeleteDocumentRequest))
}
return interceptor(ctx, in, info, handler)
}
// Df_ServiceDesc is the grpc.ServiceDesc for Df service. // Df_ServiceDesc is the grpc.ServiceDesc for Df service.
// It's only intended for direct use with grpc.RegisterService, // It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy) // and not to be introspected or modified (even as a copy)
@ -843,6 +876,10 @@ var Df_ServiceDesc = grpc.ServiceDesc{
MethodName: "UploadDocument", MethodName: "UploadDocument",
Handler: _Df_UploadDocument_Handler, Handler: _Df_UploadDocument_Handler,
}, },
{
MethodName: "DeleteDocument",
Handler: _Df_DeleteDocument_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "service_df.proto", Metadata: "service_df.proto",

View File

@ -0,0 +1,32 @@
syntax = "proto3";
package pb;
import "protoc-gen-openapiv2/options/annotations.proto";
option go_package = "github.com/itsscb/df/pb";
message DeleteDocumentRequest {
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
json_schema: {
title: "Delete Document";
description: "Delete a Document";
required: [
"id"
];
};
example: "{\"id\": \"1\"}"
};
uint64 id = 1;
}
message DeleteDocumentResponse {
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
json_schema: {
title: "Delete Document Response";
};
example: "{\"id\": \"1\", \"deleted\": true}"
};
uint64 id = 1;
bool deleted = 2;
}

View File

@ -31,6 +31,7 @@ import "rpc_block_session.proto";
import "rpc_list_returns_log_by_person_id.proto"; import "rpc_list_returns_log_by_person_id.proto";
import "rpc_upload_document.proto"; import "rpc_upload_document.proto";
import "rpc_delete_document.proto";
option go_package = "github.com/itsscb/df/pb"; option go_package = "github.com/itsscb/df/pb";
@ -349,4 +350,18 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
} }
}; };
}; };
rpc DeleteDocument (DeleteDocumentRequest) returns (DeleteDocumentResponse) {
option (google.api.http) = {
delete: "/v1/documents/delete_document/{id}"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
summary: "Delete Document by ID"
security: {
security_requirement: {
key: "BearerAuth";
value: {}
}
}
};
};
}; };