diff --git a/Makefile b/Makefile index 8f8e927..cd5d659 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,7 @@ migrateup: docker run --name migrateup --privileged=true --rm -v $(PWD)/bff/db/migration:/migrations --network host migrate/migrate -path=/migrations/ -database $(DB_URL) up migratedown: - docker run --name migratedown --privileged=true --rm -v $(PWD)/bff/db/migration:/migrations --network host migrate/migrate -path=/migrations/ -database $(DB_URL) down + docker run --name migrateup --privileged=true --rm -v $(PWD)/bff/db/migration:/migrations --network host migrate/migrate -path=/migrations/ -database $(DB_URL) down -all createdb: docker exec -it df-bff_postgres_1 createdb --username=root --owner=root df diff --git a/bff/db/migration/000001_init_schema.down.sql b/bff/db/migration/000001_init_schema.down.sql index 83eaede..871e1e8 100644 --- a/bff/db/migration/000001_init_schema.down.sql +++ b/bff/db/migration/000001_init_schema.down.sql @@ -3,6 +3,8 @@ DROP TABLE IF EXISTS "returns"; DROP TABLE IF EXISTS "payments"; DROP TABLE IF EXISTS "documents"; DROP TABLE IF EXISTS "mails"; +DROP TABLE IF EXISTS "email_addresses"; +DROP TABLE IF EXISTS "phone_numbers"; DROP TABLE IF EXISTS "persons"; DROP TABLE IF EXISTS "providers"; DROP TABLE IF EXISTS "sessions"; diff --git a/bff/db/migration/000001_init_schema.up.sql b/bff/db/migration/000001_init_schema.up.sql index f53f893..37a17a1 100644 --- a/bff/db/migration/000001_init_schema.up.sql +++ b/bff/db/migration/000001_init_schema.up.sql @@ -62,12 +62,25 @@ CREATE TABLE "persons" ( "zip" varchar NOT NULL, "street" varchar NOT NULL, "country" varchar NOT NULL, + "relationship" varchar, "creator" varchar NOT NULL, "created" timestamptz NOT NULL DEFAULT (now()), "changer" varchar NOT NULL, "changed" timestamptz NOT NULL DEFAULT (now()) ); +CREATE TABLE "email_addresses" ( + "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL, + "email" varchar NOT NULL, + "person_id" bigint NOT NULL +); + +CREATE TABLE "phone_numbers" ( + "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL, + "phone" varchar NOT NULL, + "person_id" bigint NOT NULL +); + CREATE TABLE "documents" ( "id" BIGSERIAL UNIQUE PRIMARY KEY NOT NULL, "person_id" bigint, @@ -147,6 +160,10 @@ ALTER TABLE "sessions" ADD FOREIGN KEY ("account_id") REFERENCES "accounts" ("id ALTER TABLE "persons" ADD FOREIGN KEY ("account_id") REFERENCES "accounts" ("id"); +ALTER TABLE "email_addresses" ADD FOREIGN KEY ("person_id") REFERENCES "persons" ("id"); + +ALTER TABLE "phone_numbers" ADD FOREIGN KEY ("person_id") REFERENCES "persons" ("id"); + ALTER TABLE "payments" ADD FOREIGN KEY ("account_id") REFERENCES "accounts" ("id"); ALTER TABLE "returns" ADD FOREIGN KEY ("person_id") REFERENCES "persons" ("id"); diff --git a/bff/db/mock/store.go b/bff/db/mock/store.go index 082f9ff..78c3605 100644 --- a/bff/db/mock/store.go +++ b/bff/db/mock/store.go @@ -42,6 +42,36 @@ func (m *MockStore) EXPECT() *MockStoreMockRecorder { return m.recorder } +// AddEmailAddress mocks base method. +func (m *MockStore) AddEmailAddress(arg0 context.Context, arg1 db.AddEmailAddressParams) (db.EmailAddress, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddEmailAddress", arg0, arg1) + ret0, _ := ret[0].(db.EmailAddress) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddEmailAddress indicates an expected call of AddEmailAddress. +func (mr *MockStoreMockRecorder) AddEmailAddress(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddEmailAddress", reflect.TypeOf((*MockStore)(nil).AddEmailAddress), arg0, arg1) +} + +// AddPhoneNumber mocks base method. +func (m *MockStore) AddPhoneNumber(arg0 context.Context, arg1 db.AddPhoneNumberParams) (db.PhoneNumber, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AddPhoneNumber", arg0, arg1) + ret0, _ := ret[0].(db.PhoneNumber) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AddPhoneNumber indicates an expected call of AddPhoneNumber. +func (mr *MockStoreMockRecorder) AddPhoneNumber(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddPhoneNumber", reflect.TypeOf((*MockStore)(nil).AddPhoneNumber), arg0, arg1) +} + // BlockSession mocks base method. func (m *MockStore) BlockSession(arg0 context.Context, arg1 uuid.UUID) error { m.ctrl.T.Helper() @@ -324,6 +354,34 @@ func (mr *MockStoreMockRecorder) DeleteAccountInfo(arg0, arg1 any) *gomock.Call return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAccountInfo", reflect.TypeOf((*MockStore)(nil).DeleteAccountInfo), arg0, arg1) } +// DeleteAllEmailAddresses mocks base method. +func (m *MockStore) DeleteAllEmailAddresses(arg0 context.Context, arg1 uint64) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteAllEmailAddresses", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteAllEmailAddresses indicates an expected call of DeleteAllEmailAddresses. +func (mr *MockStoreMockRecorder) DeleteAllEmailAddresses(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAllEmailAddresses", reflect.TypeOf((*MockStore)(nil).DeleteAllEmailAddresses), arg0, arg1) +} + +// DeleteAllPhoneNumbers mocks base method. +func (m *MockStore) DeleteAllPhoneNumbers(arg0 context.Context, arg1 uint64) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteAllPhoneNumbers", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteAllPhoneNumbers indicates an expected call of DeleteAllPhoneNumbers. +func (mr *MockStoreMockRecorder) DeleteAllPhoneNumbers(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAllPhoneNumbers", reflect.TypeOf((*MockStore)(nil).DeleteAllPhoneNumbers), arg0, arg1) +} + // DeleteDocument mocks base method. func (m *MockStore) DeleteDocument(arg0 context.Context, arg1 uint64) error { m.ctrl.T.Helper() @@ -367,6 +425,20 @@ func (mr *MockStoreMockRecorder) DeleteDocumentsByPersonID(arg0, arg1 any) *gomo return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteDocumentsByPersonID", reflect.TypeOf((*MockStore)(nil).DeleteDocumentsByPersonID), arg0, arg1) } +// DeleteEmailAddress mocks base method. +func (m *MockStore) DeleteEmailAddress(arg0 context.Context, arg1 uint64) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteEmailAddress", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteEmailAddress indicates an expected call of DeleteEmailAddress. +func (mr *MockStoreMockRecorder) DeleteEmailAddress(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteEmailAddress", reflect.TypeOf((*MockStore)(nil).DeleteEmailAddress), arg0, arg1) +} + // DeleteMail mocks base method. func (m *MockStore) DeleteMail(arg0 context.Context, arg1 uint64) error { m.ctrl.T.Helper() @@ -423,6 +495,20 @@ func (mr *MockStoreMockRecorder) DeletePersonTx(arg0, arg1 any) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePersonTx", reflect.TypeOf((*MockStore)(nil).DeletePersonTx), arg0, arg1) } +// DeletePhoneNumber mocks base method. +func (m *MockStore) DeletePhoneNumber(arg0 context.Context, arg1 uint64) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeletePhoneNumber", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeletePhoneNumber indicates an expected call of DeletePhoneNumber. +func (mr *MockStoreMockRecorder) DeletePhoneNumber(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePhoneNumber", reflect.TypeOf((*MockStore)(nil).DeletePhoneNumber), arg0, arg1) +} + // DeleteProvider mocks base method. func (m *MockStore) DeleteProvider(arg0 context.Context, arg1 uint64) error { m.ctrl.T.Helper() @@ -538,6 +624,21 @@ func (mr *MockStoreMockRecorder) GetAccountInfo(arg0, arg1 any) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccountInfo", reflect.TypeOf((*MockStore)(nil).GetAccountInfo), arg0, arg1) } +// GetAccountLevel mocks base method. +func (m *MockStore) GetAccountLevel(arg0 context.Context, arg1 uint64) (db.GetAccountLevelRow, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetAccountLevel", arg0, arg1) + ret0, _ := ret[0].(db.GetAccountLevelRow) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetAccountLevel indicates an expected call of GetAccountLevel. +func (mr *MockStoreMockRecorder) GetAccountLevel(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccountLevel", reflect.TypeOf((*MockStore)(nil).GetAccountLevel), arg0, arg1) +} + // GetDocument mocks base method. func (m *MockStore) GetDocument(arg0 context.Context, arg1 uint64) (db.Document, error) { m.ctrl.T.Helper() @@ -583,6 +684,21 @@ func (mr *MockStoreMockRecorder) GetDocumentByIDWithAccountID(arg0, arg1 any) *g return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDocumentByIDWithAccountID", reflect.TypeOf((*MockStore)(nil).GetDocumentByIDWithAccountID), arg0, arg1) } +// GetEmailAddresses mocks base method. +func (m *MockStore) GetEmailAddresses(arg0 context.Context, arg1 uint64) ([]db.EmailAddress, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetEmailAddresses", arg0, arg1) + ret0, _ := ret[0].([]db.EmailAddress) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetEmailAddresses indicates an expected call of GetEmailAddresses. +func (mr *MockStoreMockRecorder) GetEmailAddresses(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetEmailAddresses", reflect.TypeOf((*MockStore)(nil).GetEmailAddresses), arg0, arg1) +} + // GetMail mocks base method. func (m *MockStore) GetMail(arg0 context.Context, arg1 uint64) (db.Mail, error) { m.ctrl.T.Helper() @@ -628,6 +744,21 @@ func (mr *MockStoreMockRecorder) GetPerson(arg0, arg1 any) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPerson", reflect.TypeOf((*MockStore)(nil).GetPerson), arg0, arg1) } +// GetPhoneNumbers mocks base method. +func (m *MockStore) GetPhoneNumbers(arg0 context.Context, arg1 uint64) ([]db.PhoneNumber, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetPhoneNumbers", arg0, arg1) + ret0, _ := ret[0].([]db.PhoneNumber) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetPhoneNumbers indicates an expected call of GetPhoneNumbers. +func (mr *MockStoreMockRecorder) GetPhoneNumbers(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPhoneNumbers", reflect.TypeOf((*MockStore)(nil).GetPhoneNumbers), arg0, arg1) +} + // GetProvider mocks base method. func (m *MockStore) GetProvider(arg0 context.Context, arg1 uint64) (db.Provider, error) { m.ctrl.T.Helper() @@ -898,6 +1029,51 @@ func (mr *MockStoreMockRecorder) ListSessions(arg0, arg1 any) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSessions", reflect.TypeOf((*MockStore)(nil).ListSessions), arg0, arg1) } +// ResendVerification mocks base method. +func (m *MockStore) ResendVerification(arg0 context.Context, arg1 db.ResendVerificationParams) (db.Account, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ResendVerification", arg0, arg1) + ret0, _ := ret[0].(db.Account) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ResendVerification indicates an expected call of ResendVerification. +func (mr *MockStoreMockRecorder) ResendVerification(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResendVerification", reflect.TypeOf((*MockStore)(nil).ResendVerification), arg0, arg1) +} + +// ResendVerificationTx mocks base method. +func (m *MockStore) ResendVerificationTx(arg0 context.Context, arg1 db.ResendVerificationTxParams) (db.Account, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ResendVerificationTx", arg0, arg1) + ret0, _ := ret[0].(db.Account) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ResendVerificationTx indicates an expected call of ResendVerificationTx. +func (mr *MockStoreMockRecorder) ResendVerificationTx(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResendVerificationTx", reflect.TypeOf((*MockStore)(nil).ResendVerificationTx), arg0, arg1) +} + +// UpdateAccount mocks base method. +func (m *MockStore) UpdateAccount(arg0 context.Context, arg1 db.UpdateAccountParams) (db.Account, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateAccount", arg0, arg1) + ret0, _ := ret[0].(db.Account) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateAccount indicates an expected call of UpdateAccount. +func (mr *MockStoreMockRecorder) UpdateAccount(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAccount", reflect.TypeOf((*MockStore)(nil).UpdateAccount), arg0, arg1) +} + // UpdateAccountInfo mocks base method. func (m *MockStore) UpdateAccountInfo(arg0 context.Context, arg1 db.UpdateAccountInfoParams) (db.AccountInfo, error) { m.ctrl.T.Helper() @@ -958,6 +1134,21 @@ func (mr *MockStoreMockRecorder) UpdateAccountPrivacyTx(arg0, arg1 any) *gomock. return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAccountPrivacyTx", reflect.TypeOf((*MockStore)(nil).UpdateAccountPrivacyTx), arg0, arg1) } +// UpdateAccountTx mocks base method. +func (m *MockStore) UpdateAccountTx(arg0 context.Context, arg1 db.UpdateAccountTxParams) (db.Account, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateAccountTx", arg0, arg1) + ret0, _ := ret[0].(db.Account) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateAccountTx indicates an expected call of UpdateAccountTx. +func (mr *MockStoreMockRecorder) UpdateAccountTx(arg0, arg1 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAccountTx", reflect.TypeOf((*MockStore)(nil).UpdateAccountTx), arg0, arg1) +} + // UpdateDocument mocks base method. func (m *MockStore) UpdateDocument(arg0 context.Context, arg1 db.UpdateDocumentParams) (db.Document, error) { m.ctrl.T.Helper() diff --git a/bff/db/query/account.sql b/bff/db/query/account.sql index d496fa2..0f404fe 100644 --- a/bff/db/query/account.sql +++ b/bff/db/query/account.sql @@ -54,4 +54,47 @@ WHERE "id" = sqlc.arg(id); -- name: DeleteAccount :exec DELETE FROM accounts -WHERE "id" = sqlc.arg(id); \ No newline at end of file +WHERE "id" = sqlc.arg(id); + + +-- name: GetAccountLevel :one +SELECT + accounts.id, + CASE + WHEN payments.account_id IS NOT NULL THEN 7 + WHEN persons.relationship IS NOT NULL AND persons.relationship <> '' AND persons.relationship = 'sole_heir' THEN + CASE + WHEN ( + SELECT COUNT(*) + FROM documents + WHERE person_id = persons.id AND name IN ('death_certificate','id_card','notary_inheritance_certificate') + ) = 3 THEN 6 + END + WHEN persons.relationship IS NOT NULL AND persons.relationship <> '' AND persons.relationship <> 'sole_heir' THEN + CASE + WHEN ( + SELECT COUNT(*) + FROM documents + WHERE person_id = persons.id AND name IN ('death_certificate','id_card') + ) = 2 THEN 6 + END + WHEN ( + SELECT COUNT(*) + FROM email_addresses + WHERE person_id = persons.id + ) > 0 THEN 5 + WHEN persons.relationship IS NOT NULL AND persons.relationship <> '' THEN 4 + WHEN persons.account_id IS NOT NULL THEN 3 + WHEN account_info.account_id IS NOT NULL THEN 2 + WHEN accounts.verified = true THEN 1 + ELSE 0 + END AS account_level +FROM + accounts +LEFT JOIN account_info ON accounts.id = account_info.account_id +LEFT JOIN persons ON accounts.id = persons.account_id +LEFT JOIN email_addresses ON persons.id = email_addresses.person_id +LEFT JOIN phone_numbers ON persons.id = phone_numbers.person_id +LEFT JOIN documents ON persons.id = documents.person_id +LEFT JOIN payments ON accounts.id = payments.account_id +WHERE accounts.id = sqlc.arg(account_id); diff --git a/bff/db/query/person.sql b/bff/db/query/person.sql index d64a659..5ba22b9 100644 --- a/bff/db/query/person.sql +++ b/bff/db/query/person.sql @@ -11,11 +11,12 @@ INSERT INTO persons ( "city", "zip", "street", + "relationship", "country", "creator", "changer" ) VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11 ) RETURNING *; -- name: ListPersons :many @@ -33,6 +34,7 @@ SET "zip" = COALESCE(sqlc.narg(zip), "zip"), "street" = COALESCE(sqlc.narg(street), "street"), "country" = COALESCE(sqlc.narg(country), "country"), + "relationship" = COALESCE(sqlc.narg(relationship), "relationship"), "changer" = $2, "changed" = now() WHERE "id" = $1 @@ -44,4 +46,45 @@ WHERE "id" = sqlc.arg(id); -- name: GetReturns :many SELECT * FROM returns -WHERE "person_id" = sqlc.arg(id); \ No newline at end of file +WHERE "person_id" = sqlc.arg(id); + + +-- name: GetPhoneNumbers :many +SELECT * FROM phone_numbers +WHERE "person_id" = sqlc.arg(person_id); + +-- name: AddPhoneNumber :one +INSERT INTO phone_numbers ( + "person_id", + "phone" +) VALUES ( + sqlc.arg(person_id), sqlc.arg(email) +) RETURNING *; + +-- name: DeletePhoneNumber :exec +DELETE FROM phone_numbers +WHERE "id" = sqlc.arg(id); + +-- name: DeleteAllPhoneNumbers :exec +DELETE FROM phone_numbers +WHERE "person_id" = sqlc.arg(person_id); + +-- name: GetEmailAddresses :many +SELECT * FROM email_addresses +WHERE "person_id" = sqlc.arg(person_id); + +-- name: AddEmailAddress :one +INSERT INTO email_addresses ( + "person_id", + "email" +) VALUES ( + sqlc.arg(person_id), sqlc.arg(email) +) RETURNING *; + +-- name: DeleteEmailAddress :exec +DELETE FROM email_addresses +WHERE "id" = sqlc.arg(id); + +-- name: DeleteAllEmailAddresses :exec +DELETE FROM email_addresses +WHERE "person_id" = sqlc.arg(person_id); \ No newline at end of file diff --git a/bff/db/sqlc/account.sql.go b/bff/db/sqlc/account.sql.go index 4ecc2f8..5e4b4bd 100644 --- a/bff/db/sqlc/account.sql.go +++ b/bff/db/sqlc/account.sql.go @@ -100,6 +100,61 @@ func (q *Queries) GetAccountByEmail(ctx context.Context, email string) (Account, return i, err } +const getAccountLevel = `-- name: GetAccountLevel :one +SELECT + accounts.id, + CASE + WHEN payments.account_id IS NOT NULL THEN 7 + WHEN persons.relationship IS NOT NULL AND persons.relationship <> '' AND persons.relationship = 'sole_heir' THEN + CASE + WHEN ( + SELECT COUNT(*) + FROM documents + WHERE person_id = persons.id AND name IN ('death_certificate','id_card','notary_inheritance_certificate') + ) = 3 THEN 6 + END + WHEN persons.relationship IS NOT NULL AND persons.relationship <> '' AND persons.relationship <> 'sole_heir' THEN + CASE + WHEN ( + SELECT COUNT(*) + FROM documents + WHERE person_id = persons.id AND name IN ('death_certificate','id_card') + ) = 2 THEN 6 + END + WHEN ( + SELECT COUNT(*) + FROM email_addresses + WHERE person_id = persons.id + ) > 0 THEN 5 + WHEN persons.relationship IS NOT NULL AND persons.relationship <> '' THEN 4 + WHEN persons.account_id IS NOT NULL THEN 3 + WHEN account_info.account_id IS NOT NULL THEN 2 + WHEN accounts.verified = true THEN 1 + ELSE 0 + END AS account_level +FROM + accounts +LEFT JOIN account_info ON accounts.id = account_info.account_id +LEFT JOIN persons ON accounts.id = persons.account_id +LEFT JOIN email_addresses ON persons.id = email_addresses.person_id +LEFT JOIN phone_numbers ON persons.id = phone_numbers.person_id +LEFT JOIN documents ON persons.id = documents.person_id +LEFT JOIN payments ON accounts.id = payments.account_id +WHERE accounts.id = $1 +` + +type GetAccountLevelRow struct { + ID uint64 `json:"id"` + AccountLevel int32 `json:"account_level"` +} + +func (q *Queries) GetAccountLevel(ctx context.Context, accountID uint64) (GetAccountLevelRow, error) { + row := q.db.QueryRowContext(ctx, getAccountLevel, accountID) + var i GetAccountLevelRow + err := row.Scan(&i.ID, &i.AccountLevel) + return i, err +} + const listAccounts = `-- name: ListAccounts :many SELECT id, permission_level, passwordhash, email, secret_key, verification_sent, email_verified, email_verified_time FROM accounts ORDER BY "email" diff --git a/bff/db/sqlc/models.go b/bff/db/sqlc/models.go index 6a571d2..84815b5 100644 --- a/bff/db/sqlc/models.go +++ b/bff/db/sqlc/models.go @@ -57,6 +57,12 @@ type Document struct { Changed time.Time `json:"changed"` } +type EmailAddress struct { + ID uint64 `json:"id"` + Email string `json:"email"` + PersonID uint64 `json:"person_id"` +} + type Mail struct { ID uint64 `json:"id"` From string `json:"from"` @@ -89,19 +95,26 @@ type Payment struct { } type Person struct { - ID uint64 `json:"id"` - AccountID uint64 `json:"account_id"` - Firstname string `json:"firstname"` - Lastname string `json:"lastname"` - Birthday time.Time `json:"birthday"` - City string `json:"city"` - Zip string `json:"zip"` - Street string `json:"street"` - Country string `json:"country"` - Creator string `json:"creator"` - Created time.Time `json:"created"` - Changer string `json:"changer"` - Changed time.Time `json:"changed"` + ID uint64 `json:"id"` + AccountID uint64 `json:"account_id"` + Firstname string `json:"firstname"` + Lastname string `json:"lastname"` + Birthday time.Time `json:"birthday"` + City string `json:"city"` + Zip string `json:"zip"` + Street string `json:"street"` + Country string `json:"country"` + Relationship sql.NullString `json:"relationship"` + Creator string `json:"creator"` + Created time.Time `json:"created"` + Changer string `json:"changer"` + Changed time.Time `json:"changed"` +} + +type PhoneNumber struct { + ID uint64 `json:"id"` + Phone string `json:"phone"` + PersonID uint64 `json:"person_id"` } type Provider struct { diff --git a/bff/db/sqlc/person.sql.go b/bff/db/sqlc/person.sql.go index 8eb9693..96a6e5d 100644 --- a/bff/db/sqlc/person.sql.go +++ b/bff/db/sqlc/person.sql.go @@ -11,6 +11,48 @@ import ( "time" ) +const addEmailAddress = `-- name: AddEmailAddress :one +INSERT INTO email_addresses ( + "person_id", + "email" +) VALUES ( + $1, $2 +) RETURNING id, email, person_id +` + +type AddEmailAddressParams struct { + PersonID uint64 `json:"person_id"` + Email string `json:"email"` +} + +func (q *Queries) AddEmailAddress(ctx context.Context, arg AddEmailAddressParams) (EmailAddress, error) { + row := q.db.QueryRowContext(ctx, addEmailAddress, arg.PersonID, arg.Email) + var i EmailAddress + err := row.Scan(&i.ID, &i.Email, &i.PersonID) + return i, err +} + +const addPhoneNumber = `-- name: AddPhoneNumber :one +INSERT INTO phone_numbers ( + "person_id", + "phone" +) VALUES ( + $1, $2 +) RETURNING id, phone, person_id +` + +type AddPhoneNumberParams struct { + PersonID uint64 `json:"person_id"` + Email string `json:"email"` +} + +func (q *Queries) AddPhoneNumber(ctx context.Context, arg AddPhoneNumberParams) (PhoneNumber, error) { + row := q.db.QueryRowContext(ctx, addPhoneNumber, arg.PersonID, arg.Email) + var i PhoneNumber + err := row.Scan(&i.ID, &i.Phone, &i.PersonID) + return i, err +} + const createPerson = `-- name: CreatePerson :one INSERT INTO persons ( "account_id", @@ -20,25 +62,27 @@ INSERT INTO persons ( "city", "zip", "street", + "relationship", "country", "creator", "changer" ) VALUES ( - $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 -) RETURNING id, account_id, firstname, lastname, birthday, city, zip, street, country, creator, created, changer, changed + $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11 +) RETURNING id, account_id, firstname, lastname, birthday, city, zip, street, country, relationship, creator, created, changer, changed ` type CreatePersonParams struct { - AccountID uint64 `json:"account_id"` - Firstname string `json:"firstname"` - Lastname string `json:"lastname"` - Birthday time.Time `json:"birthday"` - City string `json:"city"` - Zip string `json:"zip"` - Street string `json:"street"` - Country string `json:"country"` - Creator string `json:"creator"` - Changer string `json:"changer"` + AccountID uint64 `json:"account_id"` + Firstname string `json:"firstname"` + Lastname string `json:"lastname"` + Birthday time.Time `json:"birthday"` + City string `json:"city"` + Zip string `json:"zip"` + Street string `json:"street"` + Relationship sql.NullString `json:"relationship"` + Country string `json:"country"` + Creator string `json:"creator"` + Changer string `json:"changer"` } func (q *Queries) CreatePerson(ctx context.Context, arg CreatePersonParams) (Person, error) { @@ -50,6 +94,7 @@ func (q *Queries) CreatePerson(ctx context.Context, arg CreatePersonParams) (Per arg.City, arg.Zip, arg.Street, + arg.Relationship, arg.Country, arg.Creator, arg.Changer, @@ -65,6 +110,7 @@ func (q *Queries) CreatePerson(ctx context.Context, arg CreatePersonParams) (Per &i.Zip, &i.Street, &i.Country, + &i.Relationship, &i.Creator, &i.Created, &i.Changer, @@ -73,6 +119,36 @@ func (q *Queries) CreatePerson(ctx context.Context, arg CreatePersonParams) (Per return i, err } +const deleteAllEmailAddresses = `-- name: DeleteAllEmailAddresses :exec +DELETE FROM email_addresses +WHERE "person_id" = $1 +` + +func (q *Queries) DeleteAllEmailAddresses(ctx context.Context, personID uint64) error { + _, err := q.db.ExecContext(ctx, deleteAllEmailAddresses, personID) + return err +} + +const deleteAllPhoneNumbers = `-- name: DeleteAllPhoneNumbers :exec +DELETE FROM phone_numbers +WHERE "person_id" = $1 +` + +func (q *Queries) DeleteAllPhoneNumbers(ctx context.Context, personID uint64) error { + _, err := q.db.ExecContext(ctx, deleteAllPhoneNumbers, personID) + return err +} + +const deleteEmailAddress = `-- name: DeleteEmailAddress :exec +DELETE FROM email_addresses +WHERE "id" = $1 +` + +func (q *Queries) DeleteEmailAddress(ctx context.Context, id uint64) error { + _, err := q.db.ExecContext(ctx, deleteEmailAddress, id) + return err +} + const deletePerson = `-- name: DeletePerson :exec DELETE FROM persons WHERE "id" = $1 @@ -83,8 +159,46 @@ func (q *Queries) DeletePerson(ctx context.Context, id uint64) error { return err } +const deletePhoneNumber = `-- name: DeletePhoneNumber :exec +DELETE FROM phone_numbers +WHERE "id" = $1 +` + +func (q *Queries) DeletePhoneNumber(ctx context.Context, id uint64) error { + _, err := q.db.ExecContext(ctx, deletePhoneNumber, id) + return err +} + +const getEmailAddresses = `-- name: GetEmailAddresses :many +SELECT id, email, person_id FROM email_addresses +WHERE "person_id" = $1 +` + +func (q *Queries) GetEmailAddresses(ctx context.Context, personID uint64) ([]EmailAddress, error) { + rows, err := q.db.QueryContext(ctx, getEmailAddresses, personID) + if err != nil { + return nil, err + } + defer rows.Close() + items := []EmailAddress{} + for rows.Next() { + var i EmailAddress + if err := rows.Scan(&i.ID, &i.Email, &i.PersonID); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const getPerson = `-- name: GetPerson :one -SELECT id, account_id, firstname, lastname, birthday, city, zip, street, country, creator, created, changer, changed FROM persons +SELECT id, account_id, firstname, lastname, birthday, city, zip, street, country, relationship, creator, created, changer, changed FROM persons WHERE "id" = $1 LIMIT 1 ` @@ -101,6 +215,7 @@ func (q *Queries) GetPerson(ctx context.Context, id uint64) (Person, error) { &i.Zip, &i.Street, &i.Country, + &i.Relationship, &i.Creator, &i.Created, &i.Changer, @@ -109,6 +224,34 @@ func (q *Queries) GetPerson(ctx context.Context, id uint64) (Person, error) { return i, err } +const getPhoneNumbers = `-- name: GetPhoneNumbers :many +SELECT id, phone, person_id FROM phone_numbers +WHERE "person_id" = $1 +` + +func (q *Queries) GetPhoneNumbers(ctx context.Context, personID uint64) ([]PhoneNumber, error) { + rows, err := q.db.QueryContext(ctx, getPhoneNumbers, personID) + if err != nil { + return nil, err + } + defer rows.Close() + items := []PhoneNumber{} + for rows.Next() { + var i PhoneNumber + if err := rows.Scan(&i.ID, &i.Phone, &i.PersonID); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const getReturns = `-- name: GetReturns :many SELECT id, person_id, provider_id, name, description, category, email, status, creator, created, changer, changed FROM returns WHERE "person_id" = $1 @@ -151,7 +294,7 @@ func (q *Queries) GetReturns(ctx context.Context, id uint64) ([]Return, error) { } const listPersons = `-- name: ListPersons :many -SELECT id, account_id, firstname, lastname, birthday, city, zip, street, country, creator, created, changer, changed FROM persons +SELECT id, account_id, firstname, lastname, birthday, city, zip, street, country, relationship, creator, created, changer, changed FROM persons WHERE "account_id" = $1 ORDER BY "lastname", "firstname" ` @@ -175,6 +318,7 @@ func (q *Queries) ListPersons(ctx context.Context, accountID uint64) ([]Person, &i.Zip, &i.Street, &i.Country, + &i.Relationship, &i.Creator, &i.Created, &i.Changer, @@ -203,22 +347,24 @@ SET "zip" = COALESCE($7, "zip"), "street" = COALESCE($8, "street"), "country" = COALESCE($9, "country"), + "relationship" = COALESCE($10, "relationship"), "changer" = $2, "changed" = now() WHERE "id" = $1 -RETURNING id, account_id, firstname, lastname, birthday, city, zip, street, country, creator, created, changer, changed +RETURNING id, account_id, firstname, lastname, birthday, city, zip, street, country, relationship, creator, created, changer, changed ` type UpdatePersonParams struct { - ID uint64 `json:"id"` - Changer string `json:"changer"` - Firstname sql.NullString `json:"firstname"` - Lastname sql.NullString `json:"lastname"` - Birthday sql.NullTime `json:"birthday"` - City sql.NullString `json:"city"` - Zip sql.NullString `json:"zip"` - Street sql.NullString `json:"street"` - Country sql.NullString `json:"country"` + ID uint64 `json:"id"` + Changer string `json:"changer"` + Firstname sql.NullString `json:"firstname"` + Lastname sql.NullString `json:"lastname"` + Birthday sql.NullTime `json:"birthday"` + City sql.NullString `json:"city"` + Zip sql.NullString `json:"zip"` + Street sql.NullString `json:"street"` + Country sql.NullString `json:"country"` + Relationship sql.NullString `json:"relationship"` } func (q *Queries) UpdatePerson(ctx context.Context, arg UpdatePersonParams) (Person, error) { @@ -232,6 +378,7 @@ func (q *Queries) UpdatePerson(ctx context.Context, arg UpdatePersonParams) (Per arg.Zip, arg.Street, arg.Country, + arg.Relationship, ) var i Person err := row.Scan( @@ -244,6 +391,7 @@ func (q *Queries) UpdatePerson(ctx context.Context, arg UpdatePersonParams) (Per &i.Zip, &i.Street, &i.Country, + &i.Relationship, &i.Creator, &i.Created, &i.Changer, diff --git a/bff/db/sqlc/querier.go b/bff/db/sqlc/querier.go index ff2cefa..6cb5def 100644 --- a/bff/db/sqlc/querier.go +++ b/bff/db/sqlc/querier.go @@ -12,6 +12,8 @@ import ( ) type Querier interface { + AddEmailAddress(ctx context.Context, arg AddEmailAddressParams) (EmailAddress, error) + AddPhoneNumber(ctx context.Context, arg AddPhoneNumberParams) (PhoneNumber, error) BlockSession(ctx context.Context, id uuid.UUID) error CloneProviders(ctx context.Context, arg CloneProvidersParams) error CreateAccount(ctx context.Context, arg CreateAccountParams) (Account, error) @@ -28,8 +30,11 @@ type Querier interface { CreateSession(ctx context.Context, arg CreateSessionParams) (Session, error) DeleteAccount(ctx context.Context, id uint64) error DeleteAccountInfo(ctx context.Context, accountID uint64) error + DeleteAllEmailAddresses(ctx context.Context, personID uint64) error + DeleteAllPhoneNumbers(ctx context.Context, personID uint64) error DeleteDocument(ctx context.Context, id uint64) error DeleteDocumentsByPersonID(ctx context.Context, personID sql.NullInt64) error + DeleteEmailAddress(ctx context.Context, id uint64) error // -- name: UpdateMail :one // UPDATE mails // SET @@ -46,6 +51,7 @@ type Querier interface { DeleteMail(ctx context.Context, id uint64) error DeletePayment(ctx context.Context, id uint64) error DeletePerson(ctx context.Context, id uint64) error + DeletePhoneNumber(ctx context.Context, id uint64) error DeleteProvider(ctx context.Context, id uint64) error DeleteReturn(ctx context.Context, id uint64) error DeleteReturnsByPersonID(ctx context.Context, personID uint64) error @@ -54,12 +60,15 @@ type Querier interface { GetAccount(ctx context.Context, id uint64) (Account, error) GetAccountByEmail(ctx context.Context, email string) (Account, error) GetAccountInfo(ctx context.Context, accountID uint64) (AccountInfo, error) + GetAccountLevel(ctx context.Context, accountID uint64) (GetAccountLevelRow, 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) + GetEmailAddresses(ctx context.Context, personID uint64) ([]EmailAddress, error) GetMail(ctx context.Context, id uint64) (Mail, error) GetPayment(ctx context.Context, id uint64) (Payment, error) GetPerson(ctx context.Context, id uint64) (Person, error) + GetPhoneNumbers(ctx context.Context, personID uint64) ([]PhoneNumber, error) GetProvider(ctx context.Context, id uint64) (Provider, error) GetReturn(ctx context.Context, id uint64) (Return, error) GetReturnIDsByPersonID(ctx context.Context, personID uint64) ([]uint64, error) diff --git a/bff/db/sqlc/tx_create_person.go b/bff/db/sqlc/tx_create_person.go index 953edcf..9c4e02c 100644 --- a/bff/db/sqlc/tx_create_person.go +++ b/bff/db/sqlc/tx_create_person.go @@ -2,20 +2,22 @@ package db import ( "context" + "database/sql" "time" ) type CreatePersonTxParams struct { - AccountID uint64 `json:"account_id"` - Firstname string `json:"firstname"` - Lastname string `json:"lastname"` - Birthday time.Time `json:"birthday"` - City string `json:"city"` - Zip string `json:"zip"` - Street string `json:"street"` - Country string `json:"country"` - Creator string `json:"creator"` - Changer string `json:"changer"` + AccountID uint64 `json:"account_id"` + Firstname string `json:"firstname"` + Lastname string `json:"lastname"` + Birthday time.Time `json:"birthday"` + City string `json:"city"` + Zip string `json:"zip"` + Street string `json:"street"` + Relationship sql.NullString `json:"relationship"` + Country string `json:"country"` + Creator string `json:"creator"` + Changer string `json:"changer"` } type CreatePersonTxResult struct { diff --git a/bff/db/sqlc/tx_delete_person.go b/bff/db/sqlc/tx_delete_person.go index 317af22..346efc7 100644 --- a/bff/db/sqlc/tx_delete_person.go +++ b/bff/db/sqlc/tx_delete_person.go @@ -7,15 +7,24 @@ import ( func (store *SQLStore) DeletePersonTx(ctx context.Context, id uint64) error { err := store.execTx(ctx, func(q *Queries) error { - err := q.DeleteDocumentsByPersonID(ctx, sql.NullInt64{ - Valid: true, + Valid: id > 0, Int64: int64(id), }) if err != nil { return err } + err = q.DeleteAllEmailAddresses(ctx, id) + if err != nil { + return err + } + + err = q.DeleteAllPhoneNumbers(ctx, id) + if err != nil { + return err + } + err = q.DeleteReturnsLogsByPersonID(ctx, id) if err != nil { return err diff --git a/bff/doc/swagger/df.swagger.json b/bff/doc/swagger/df.swagger.json index 0e39f4c..3e7c035 100644 --- a/bff/doc/swagger/df.swagger.json +++ b/bff/doc/swagger/df.swagger.json @@ -677,6 +677,84 @@ ] } }, + "/v1/persons/add_email": { + "post": { + "summary": "Add Email Address", + "operationId": "df_AddEmailAddress", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/pbAddEmailAddressResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "description": "Add an EmailAddress", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/pbAddEmailAddressRequest" + } + } + ], + "tags": [ + "df" + ], + "security": [ + { + "BearerAuth": [] + } + ] + } + }, + "/v1/persons/add_emails": { + "post": { + "summary": "Add Email Addresses", + "operationId": "df_AddEmailAddresses", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/pbAddEmailAddressesResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "description": "Add an EmailAddress", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/pbAddEmailAddressesRequest" + } + } + ], + "tags": [ + "df" + ], + "security": [ + { + "BearerAuth": [] + } + ] + } + }, "/v1/persons/create_person": { "post": { "summary": "Create Person", @@ -1120,6 +1198,10 @@ "secretKey": { "type": "string" }, + "accountLevel": { + "type": "integer", + "format": "int64" + }, "emailVerifiedTime": { "type": "string", "format": "date-time", @@ -1223,6 +1305,69 @@ }, "title": "AccountInfo" }, + "pbAddEmailAddressRequest": { + "type": "object", + "properties": { + "personId": { + "type": "string", + "format": "uint64" + }, + "email": { + "type": "string" + } + }, + "description": "Add an EmailAddress", + "title": "Add EmailAddress", + "required": [ + "personId", + "email" + ] + }, + "pbAddEmailAddressResponse": { + "type": "object", + "properties": { + "email": { + "$ref": "#/definitions/pbEmailAddress" + } + }, + "description": "Returns the added EmailAddress", + "title": "Added EmailAddress" + }, + "pbAddEmailAddressesRequest": { + "type": "object", + "properties": { + "personId": { + "type": "string", + "format": "uint64" + }, + "email": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "Add an EmailAddress", + "title": "Add EmailAddress", + "required": [ + "personId", + "email" + ] + }, + "pbAddEmailAddressesResponse": { + "type": "object", + "properties": { + "emails": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/pbEmailAddress" + } + } + }, + "description": "Returns the added EmailAddresses", + "title": "Added EmailAddresses" + }, "pbBlockSessionRequest": { "type": "object", "example": { @@ -1455,6 +1600,9 @@ "country": { "type": "string" }, + "relationship": { + "type": "string" + }, "birthday": { "type": "string", "format": "date-time", @@ -1471,6 +1619,7 @@ "city", "zip", "country", + "relationship", "birthday" ] }, @@ -1592,6 +1741,23 @@ }, "title": "Document" }, + "pbEmailAddress": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uint64" + }, + "personId": { + "type": "string", + "format": "uint64" + }, + "email": { + "type": "string" + } + }, + "title": "EmailAddress" + }, "pbGetAccountInfoResponse": { "type": "object", "properties": { @@ -1906,6 +2072,9 @@ "type": "string", "format": "date-time", "example": "2023-10-05T00:00:00Z" + }, + "relationship": { + "type": "string" } }, "title": "Person" @@ -2270,6 +2439,9 @@ "country": { "type": "string" }, + "relationship": { + "type": "string" + }, "birthday": { "type": "string", "format": "date-time", diff --git a/bff/gapi/converter.go b/bff/gapi/converter.go index af2da8d..af50312 100644 --- a/bff/gapi/converter.go +++ b/bff/gapi/converter.go @@ -37,6 +37,14 @@ func convertAccountInfo(account_info db.AccountInfo) *pb.AccountInfo { } } +func convertEmail(email db.EmailAddress) *pb.EmailAddress { + return &pb.EmailAddress{ + Id: email.ID, + PersonId: email.PersonID, + Email: email.Email, + } +} + func convertPerson(person db.Person) *pb.Person { return &pb.Person{ Id: person.ID, diff --git a/bff/gapi/rpc_add_email.go b/bff/gapi/rpc_add_email.go new file mode 100644 index 0000000..8d3995d --- /dev/null +++ b/bff/gapi/rpc_add_email.go @@ -0,0 +1,52 @@ +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/grpc/codes" + "google.golang.org/grpc/status" +) + +func (server *Server) AddEmailAddress(ctx context.Context, req *pb.AddEmailAddressRequest) (*pb.AddEmailAddressResponse, error) { + authPayload, err := server.authorizeUser(ctx) + if err != nil { + return nil, unauthenticatedError(err) + } + + person, err := server.store.GetPerson(ctx, req.GetPersonId()) + if err != nil { + if errors.Is(err, sql.ErrNoRows) { + return nil, status.Errorf(codes.NotFound, "person not found") + } + slog.Error("add_email (get_person)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("person_id", int64(req.GetPersonId())), slog.String("error", err.Error())) + return nil, status.Error(codes.Internal, "failed to get person") + } + + if person.AccountID != authPayload.AccountID { + if !server.isAdmin(ctx, authPayload) { + return nil, status.Error(codes.NotFound, "person not found") + } + } + + arg := db.AddEmailAddressParams{ + PersonID: req.GetPersonId(), + Email: req.GetEmail(), + } + + email, err := server.store.AddEmailAddress(ctx, arg) + if err != nil { + slog.Error("add_email (write)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("person_id", int64(req.GetPersonId())), slog.String("error", err.Error())) + return nil, status.Error(codes.Internal, "failed to insert email") + } + + response := &pb.AddEmailAddressResponse{ + Email: convertEmail(email), + } + + return response, err +} diff --git a/bff/gapi/rpc_create_person.go b/bff/gapi/rpc_create_person.go index dd11ebe..532c30c 100644 --- a/bff/gapi/rpc_create_person.go +++ b/bff/gapi/rpc_create_person.go @@ -49,9 +49,13 @@ func (server *Server) CreatePerson(ctx context.Context, req *pb.CreatePersonRequ City: req.GetCity(), Street: req.GetStreet(), Country: req.GetCountry(), - Zip: req.GetZip(), - Creator: account.Email, - Changer: account.Email, + Relationship: sql.NullString{ + Valid: req.GetRelationship() != "", + String: req.GetRelationship(), + }, + Zip: req.GetZip(), + Creator: account.Email, + Changer: account.Email, } person, err := server.store.CreatePersonTx(ctx, arg) @@ -96,5 +100,9 @@ func validateCreatePersonRequest(req *pb.CreatePersonRequest) (violations []*err violations = append(violations, fieldViolation("zip", errors.New("must be at least 4 characters long"))) } + if req.GetRelationship() != "sole_heir" || req.GetRelationship() != "widow" || req.GetRelationship() != "child" { + violations = append(violations, fieldViolation("relationship", errors.New("allowed values are: 'sole_heir', 'widow', 'child'"))) + } + return violations } diff --git a/bff/gapi/rpc_delete_email.go b/bff/gapi/rpc_delete_email.go new file mode 100644 index 0000000..4cb272c --- /dev/null +++ b/bff/gapi/rpc_delete_email.go @@ -0,0 +1,31 @@ +package gapi + +import ( + "context" + "log/slog" + + "github.com/itsscb/df/bff/pb" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (server *Server) DeleteEmailAddress(ctx context.Context, req *pb.DeleteEmailAddressRequest) (*pb.DeleteEmailAddressResponse, error) { + authPayload, err := server.authorizeUser(ctx) + if err != nil { + return nil, unauthenticatedError(err) + } + + // TODO: Check if Person belongs to Account + + err = server.store.DeleteEmailAddress(ctx, req.GetId()) + if err != nil { + slog.Error("remove_email (write)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("email_id", int64(req.GetId())), slog.String("error", err.Error())) + return nil, status.Error(codes.Internal, "failed to insert email") + } + + response := &pb.DeleteEmailAddressResponse{ + Id: req.GetId(), + } + + return response, err +} diff --git a/bff/gapi/rpc_get_account.go b/bff/gapi/rpc_get_account.go index 6aa8f82..47da8d9 100644 --- a/bff/gapi/rpc_get_account.go +++ b/bff/gapi/rpc_get_account.go @@ -38,10 +38,18 @@ func (server *Server) GetAccount(ctx context.Context, req *pb.GetAccountRequest) } } + accountLevel, err := server.store.GetAccountLevel(ctx, account.ID) + if err != nil { + slog.Error("get_account_level (db)", slog.Int64("invoked_by", int64(authPayload.AccountID)), slog.Int64("account_id", int64(req.GetId())), slog.String("error", err.Error())) + } + rsp := &pb.GetAccountResponse{ Account: convertAccount(account), } + lvl := uint32(accountLevel.AccountLevel) + rsp.Account.AccountLevel = &lvl + return rsp, nil } diff --git a/bff/gapi/rpc_update_person.go b/bff/gapi/rpc_update_person.go index 94626a0..87ab814 100644 --- a/bff/gapi/rpc_update_person.go +++ b/bff/gapi/rpc_update_person.go @@ -105,5 +105,11 @@ func validateUpdatePersonRequest(req *pb.UpdatePersonRequest) (violations []*err violations = append(violations, fieldViolation("id", errors.New("must be greater than 0"))) } + if req.GetRelationship() != "" { + if req.GetRelationship() != "sole_heir" || req.GetRelationship() != "widow" || req.GetRelationship() != "child" { + violations = append(violations, fieldViolation("relationship", errors.New("allowed values are: 'sole_heir', 'widow', 'child'"))) + } + } + return violations } diff --git a/bff/main.go b/bff/main.go index 3f7d17a..cf8dc83 100644 --- a/bff/main.go +++ b/bff/main.go @@ -78,6 +78,11 @@ func runDBMigration(migrationURL string, dbSource string, retries int) { } } + // TODO: Remove in Production! + if err = migration.Down(); err != nil && err != migrate.ErrNoChange { + log.Fatal("failed to run migrate down") + } + if err = migration.Up(); err != nil && err != migrate.ErrNoChange { log.Fatal("failed to run migrate up") } diff --git a/bff/pb/account.pb.go b/bff/pb/account.pb.go index 5526472..85c85e2 100644 --- a/bff/pb/account.pb.go +++ b/bff/pb/account.pb.go @@ -30,6 +30,7 @@ type Account struct { Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` SecretKey *string `protobuf:"bytes,3,opt,name=secret_key,json=secretKey,proto3,oneof" json:"secret_key,omitempty"` + AccountLevel *uint32 `protobuf:"varint,4,opt,name=account_level,json=accountLevel,proto3,oneof" json:"account_level,omitempty"` EmailVerifiedTime *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=email_verified_time,json=emailVerifiedTime,proto3" json:"email_verified_time,omitempty"` EmailVerified bool `protobuf:"varint,10,opt,name=email_verified,json=emailVerified,proto3" json:"email_verified,omitempty"` PrivacyAcceptedDate *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=privacy_accepted_date,json=privacyAcceptedDate,proto3" json:"privacy_accepted_date,omitempty"` @@ -89,6 +90,13 @@ func (x *Account) GetSecretKey() string { return "" } +func (x *Account) GetAccountLevel() uint32 { + if x != nil && x.AccountLevel != nil { + return *x.AccountLevel + } + return 0 +} + func (x *Account) GetEmailVerifiedTime() *timestamppb.Timestamp { if x != nil { return x.EmailVerifiedTime @@ -126,64 +134,68 @@ var file_account_proto_rawDesc = []byte{ 0x72, 0x6f, 0x74, 0x6f, 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, 0xef, 0x06, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xab, 0x07, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x22, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x73, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x67, 0x0a, 0x13, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, - 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, - 0x52, 0x11, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x6b, 0x0a, 0x15, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, - 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, - 0x5a, 0x22, 0x52, 0x13, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x05, 0x42, 0x23, 0x92, 0x41, 0x20, 0x32, 0x1e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, - 0x69, 0x73, 0x20, 0x30, 0x20, 0x28, 0x6e, 0x6f, 0x6e, 0x2d, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, - 0x65, 0x64, 0x67, 0x65, 0x64, 0x29, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0xbd, 0x03, 0x92, 0x41, 0xb9, 0x03, 0x0a, 0x09, - 0x2a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xab, 0x03, 0x7b, 0x22, 0x69, 0x64, - 0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, 0x2c, 0x22, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x3a, 0x20, - 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20, - 0x22, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, - 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x65, 0x61, 0x74, 0x68, 0x20, 0x53, 0x74, - 0x61, 0x72, 0x20, 0x32, 0x22, 0x2c, 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, - 0x38, 0x31, 0x35, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e, - 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x55, 0x53, 0x41, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, - 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, - 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, - 0x22, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, - 0x64, 0x22, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, - 0x65, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x54, - 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x48, 0x01, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x88, 0x01, 0x01, 0x12, 0x67, 0x0a, 0x13, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, + 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, + 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x11, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x12, 0x6b, 0x0a, 0x15, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, + 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, + 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, + 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x13, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x63, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x4e, 0x0a, 0x10, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x42, 0x23, 0x92, 0x41, 0x20, + 0x32, 0x1e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x69, 0x73, 0x20, 0x30, 0x20, 0x28, + 0x6e, 0x6f, 0x6e, 0x2d, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x64, 0x67, 0x65, 0x64, 0x29, + 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x3a, 0xbd, 0x03, 0x92, 0x41, 0xb9, 0x03, 0x0a, 0x09, 0x2a, 0x07, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x32, 0xab, 0x03, 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, + 0x2c, 0x22, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, + 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, + 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, + 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x68, 0x6f, 0x6e, 0x65, + 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, + 0x20, 0x22, 0x44, 0x65, 0x61, 0x74, 0x68, 0x20, 0x53, 0x74, 0x61, 0x72, 0x20, 0x32, 0x22, 0x2c, + 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x38, 0x31, 0x35, 0x22, 0x2c, 0x20, + 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, + 0x6b, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, + 0x55, 0x53, 0x41, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, + 0x3a, 0x20, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, + 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x66, 0x61, + 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, + 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x30, + 0x30, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, + 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x3a, + 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, + 0x30, 0x32, 0x3a, 0x33, 0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, 0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22, - 0x2c, 0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, - 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, - 0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22, 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 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, + 0x7d, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, + 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 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 ( diff --git a/bff/pb/email_address.pb.go b/bff/pb/email_address.pb.go new file mode 100644 index 0000000..f15ccd6 --- /dev/null +++ b/bff/pb/email_address.pb.go @@ -0,0 +1,167 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.24.4 +// source: email_address.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 EmailAddress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + PersonId uint64 `protobuf:"varint,2,opt,name=person_id,json=personId,proto3" json:"person_id,omitempty"` + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *EmailAddress) Reset() { + *x = EmailAddress{} + if protoimpl.UnsafeEnabled { + mi := &file_email_address_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EmailAddress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmailAddress) ProtoMessage() {} + +func (x *EmailAddress) ProtoReflect() protoreflect.Message { + mi := &file_email_address_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 EmailAddress.ProtoReflect.Descriptor instead. +func (*EmailAddress) Descriptor() ([]byte, []int) { + return file_email_address_proto_rawDescGZIP(), []int{0} +} + +func (x *EmailAddress) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *EmailAddress) GetPersonId() uint64 { + if x != nil { + return x.PersonId + } + return 0 +} + +func (x *EmailAddress) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +var File_email_address_proto protoreflect.FileDescriptor + +var file_email_address_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 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, 0x66, 0x0a, 0x0c, 0x45, 0x6d, 0x61, + 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x65, 0x72, + 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x65, + 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x3a, 0x13, 0x92, 0x41, + 0x10, 0x0a, 0x0e, 0x2a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 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_email_address_proto_rawDescOnce sync.Once + file_email_address_proto_rawDescData = file_email_address_proto_rawDesc +) + +func file_email_address_proto_rawDescGZIP() []byte { + file_email_address_proto_rawDescOnce.Do(func() { + file_email_address_proto_rawDescData = protoimpl.X.CompressGZIP(file_email_address_proto_rawDescData) + }) + return file_email_address_proto_rawDescData +} + +var file_email_address_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_email_address_proto_goTypes = []interface{}{ + (*EmailAddress)(nil), // 0: pb.EmailAddress +} +var file_email_address_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_email_address_proto_init() } +func file_email_address_proto_init() { + if File_email_address_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_email_address_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EmailAddress); 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_email_address_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_email_address_proto_goTypes, + DependencyIndexes: file_email_address_proto_depIdxs, + MessageInfos: file_email_address_proto_msgTypes, + }.Build() + File_email_address_proto = out.File + file_email_address_proto_rawDesc = nil + file_email_address_proto_goTypes = nil + file_email_address_proto_depIdxs = nil +} diff --git a/bff/pb/person.pb.go b/bff/pb/person.pb.go index 9204ed5..3a3d291 100644 --- a/bff/pb/person.pb.go +++ b/bff/pb/person.pb.go @@ -27,19 +27,20 @@ type Person struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - AccountId uint64 `protobuf:"varint,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` - Firstname string `protobuf:"bytes,3,opt,name=firstname,proto3" json:"firstname,omitempty"` - Lastname string `protobuf:"bytes,4,opt,name=lastname,proto3" json:"lastname,omitempty"` - Street string `protobuf:"bytes,5,opt,name=street,proto3" json:"street,omitempty"` - City string `protobuf:"bytes,6,opt,name=city,proto3" json:"city,omitempty"` - Zip string `protobuf:"bytes,7,opt,name=zip,proto3" json:"zip,omitempty"` - Country string `protobuf:"bytes,8,opt,name=country,proto3" json:"country,omitempty"` - Birthday *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=birthday,proto3" json:"birthday,omitempty"` - Creator string `protobuf:"bytes,10,opt,name=creator,proto3" json:"creator,omitempty"` - Created *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=created,proto3" json:"created,omitempty"` - Changer string `protobuf:"bytes,12,opt,name=changer,proto3" json:"changer,omitempty"` - Changed *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=changed,proto3" json:"changed,omitempty"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + AccountId uint64 `protobuf:"varint,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` + Firstname string `protobuf:"bytes,3,opt,name=firstname,proto3" json:"firstname,omitempty"` + Lastname string `protobuf:"bytes,4,opt,name=lastname,proto3" json:"lastname,omitempty"` + Street string `protobuf:"bytes,5,opt,name=street,proto3" json:"street,omitempty"` + City string `protobuf:"bytes,6,opt,name=city,proto3" json:"city,omitempty"` + Zip string `protobuf:"bytes,7,opt,name=zip,proto3" json:"zip,omitempty"` + Country string `protobuf:"bytes,8,opt,name=country,proto3" json:"country,omitempty"` + Birthday *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=birthday,proto3" json:"birthday,omitempty"` + Creator string `protobuf:"bytes,10,opt,name=creator,proto3" json:"creator,omitempty"` + Created *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=created,proto3" json:"created,omitempty"` + Changer string `protobuf:"bytes,12,opt,name=changer,proto3" json:"changer,omitempty"` + Changed *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=changed,proto3" json:"changed,omitempty"` + Relationship *string `protobuf:"bytes,14,opt,name=relationship,proto3,oneof" json:"relationship,omitempty"` } func (x *Person) Reset() { @@ -165,6 +166,13 @@ func (x *Person) GetChanged() *timestamppb.Timestamp { return nil } +func (x *Person) GetRelationship() string { + if x != nil && x.Relationship != nil { + return *x.Relationship + } + return "" +} + var File_person_proto protoreflect.FileDescriptor var file_person_proto_rawDesc = []byte{ @@ -174,7 +182,7 @@ var file_person_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 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, 0xb7, 0x07, 0x0a, 0x06, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x0e, + 0x6f, 0x74, 0x6f, 0x22, 0xf1, 0x07, 0x0a, 0x06, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1c, 0x0a, @@ -205,37 +213,41 @@ var file_person_proto_rawDesc = []byte{ 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, - 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x3a, 0xbc, - 0x03, 0x92, 0x41, 0xb8, 0x03, 0x0a, 0x08, 0x2a, 0x06, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x32, - 0xab, 0x03, 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, 0x2c, 0x22, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x66, - 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, - 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x3a, 0x20, 0x22, - 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x65, - 0x61, 0x74, 0x68, 0x20, 0x53, 0x74, 0x61, 0x72, 0x20, 0x32, 0x22, 0x2c, 0x20, 0x22, 0x7a, 0x69, - 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x38, 0x31, 0x35, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x69, 0x74, - 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x22, 0x2c, 0x20, - 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x55, 0x53, 0x41, 0x22, - 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x31, - 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, - 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, - 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, - 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, - 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x30, 0x30, 0x31, 0x2d, - 0x30, 0x31, 0x2d, 0x30, 0x31, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, - 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, - 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, - 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, - 0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x72, - 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, - 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, 0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22, 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, + 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x27, + 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x68, 0x69, 0x70, 0x88, 0x01, 0x01, 0x3a, 0xbc, 0x03, 0x92, 0x41, 0xb8, 0x03, 0x0a, 0x08, + 0x2a, 0x06, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x32, 0xab, 0x03, 0x7b, 0x22, 0x69, 0x64, 0x22, + 0x3a, 0x20, 0x22, 0x31, 0x22, 0x2c, 0x22, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x3a, 0x20, 0x22, + 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20, 0x22, + 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, + 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x65, 0x61, 0x74, 0x68, 0x20, 0x53, 0x74, 0x61, + 0x72, 0x20, 0x32, 0x22, 0x2c, 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x38, + 0x31, 0x35, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, + 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, + 0x79, 0x22, 0x3a, 0x20, 0x22, 0x55, 0x53, 0x41, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, + 0x68, 0x64, 0x61, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, + 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, + 0x22, 0x3a, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x2c, 0x20, 0x22, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x63, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x22, 0x3a, 0x20, 0x22, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x2d, 0x30, 0x31, 0x54, 0x30, + 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, + 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, + 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, 0x30, 0x3a, 0x35, 0x33, 0x5a, 0x22, 0x2c, + 0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x6a, 0x6f, 0x68, + 0x6e, 0x2e, 0x64, 0x6f, 0x65, 0x40, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, + 0x32, 0x30, 0x32, 0x33, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x32, 0x3a, 0x33, 0x30, + 0x3a, 0x35, 0x33, 0x5a, 0x22, 0x7d, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 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 ( @@ -285,6 +297,7 @@ func file_person_proto_init() { } } } + file_person_proto_msgTypes[0].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/bff/pb/rpc_add_email.pb.go b/bff/pb/rpc_add_email.pb.go new file mode 100644 index 0000000..f2aa63d --- /dev/null +++ b/bff/pb/rpc_add_email.pb.go @@ -0,0 +1,234 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.24.4 +// source: rpc_add_email.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 AddEmailAddressRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PersonId uint64 `protobuf:"varint,1,opt,name=person_id,json=personId,proto3" json:"person_id,omitempty"` + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *AddEmailAddressRequest) Reset() { + *x = AddEmailAddressRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_add_email_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddEmailAddressRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddEmailAddressRequest) ProtoMessage() {} + +func (x *AddEmailAddressRequest) ProtoReflect() protoreflect.Message { + mi := &file_rpc_add_email_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 AddEmailAddressRequest.ProtoReflect.Descriptor instead. +func (*AddEmailAddressRequest) Descriptor() ([]byte, []int) { + return file_rpc_add_email_proto_rawDescGZIP(), []int{0} +} + +func (x *AddEmailAddressRequest) GetPersonId() uint64 { + if x != nil { + return x.PersonId + } + return 0 +} + +func (x *AddEmailAddressRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +type AddEmailAddressResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Email *EmailAddress `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *AddEmailAddressResponse) Reset() { + *x = AddEmailAddressResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_add_email_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddEmailAddressResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddEmailAddressResponse) ProtoMessage() {} + +func (x *AddEmailAddressResponse) ProtoReflect() protoreflect.Message { + mi := &file_rpc_add_email_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 AddEmailAddressResponse.ProtoReflect.Descriptor instead. +func (*AddEmailAddressResponse) Descriptor() ([]byte, []int) { + return file_rpc_add_email_proto_rawDescGZIP(), []int{1} +} + +func (x *AddEmailAddressResponse) GetEmail() *EmailAddress { + if x != nil { + return x.Email + } + return nil +} + +var File_rpc_add_email_proto protoreflect.FileDescriptor + +var file_rpc_add_email_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x72, 0x70, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 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, 0x1a, 0x13, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8d, + 0x01, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x65, 0x72, + 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x65, + 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x3a, 0x40, 0x92, 0x41, + 0x3d, 0x0a, 0x3b, 0x2a, 0x10, 0x41, 0x64, 0x64, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x32, 0x13, 0x41, 0x64, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x6d, + 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0xd2, 0x01, 0x09, 0x70, 0x65, 0x72, + 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x81, + 0x01, 0x0a, 0x17, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x05, 0x65, 0x6d, + 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x03, 0x92, 0x41, 0x00, + 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x3a, 0x39, 0x92, 0x41, 0x36, 0x0a, 0x34, 0x2a, 0x12, + 0x41, 0x64, 0x64, 0x65, 0x64, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x32, 0x1e, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, + 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 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_add_email_proto_rawDescOnce sync.Once + file_rpc_add_email_proto_rawDescData = file_rpc_add_email_proto_rawDesc +) + +func file_rpc_add_email_proto_rawDescGZIP() []byte { + file_rpc_add_email_proto_rawDescOnce.Do(func() { + file_rpc_add_email_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_add_email_proto_rawDescData) + }) + return file_rpc_add_email_proto_rawDescData +} + +var file_rpc_add_email_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_rpc_add_email_proto_goTypes = []interface{}{ + (*AddEmailAddressRequest)(nil), // 0: pb.AddEmailAddressRequest + (*AddEmailAddressResponse)(nil), // 1: pb.AddEmailAddressResponse + (*EmailAddress)(nil), // 2: pb.EmailAddress +} +var file_rpc_add_email_proto_depIdxs = []int32{ + 2, // 0: pb.AddEmailAddressResponse.email:type_name -> pb.EmailAddress + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_rpc_add_email_proto_init() } +func file_rpc_add_email_proto_init() { + if File_rpc_add_email_proto != nil { + return + } + file_email_address_proto_init() + if !protoimpl.UnsafeEnabled { + file_rpc_add_email_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddEmailAddressRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_add_email_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddEmailAddressResponse); 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_add_email_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_rpc_add_email_proto_goTypes, + DependencyIndexes: file_rpc_add_email_proto_depIdxs, + MessageInfos: file_rpc_add_email_proto_msgTypes, + }.Build() + File_rpc_add_email_proto = out.File + file_rpc_add_email_proto_rawDesc = nil + file_rpc_add_email_proto_goTypes = nil + file_rpc_add_email_proto_depIdxs = nil +} diff --git a/bff/pb/rpc_add_emails.pb.go b/bff/pb/rpc_add_emails.pb.go new file mode 100644 index 0000000..0bd92cd --- /dev/null +++ b/bff/pb/rpc_add_emails.pb.go @@ -0,0 +1,234 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.24.4 +// source: rpc_add_emails.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 AddEmailAddressesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PersonId uint64 `protobuf:"varint,1,opt,name=person_id,json=personId,proto3" json:"person_id,omitempty"` + Email []string `protobuf:"bytes,2,rep,name=email,proto3" json:"email,omitempty"` +} + +func (x *AddEmailAddressesRequest) Reset() { + *x = AddEmailAddressesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_add_emails_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddEmailAddressesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddEmailAddressesRequest) ProtoMessage() {} + +func (x *AddEmailAddressesRequest) ProtoReflect() protoreflect.Message { + mi := &file_rpc_add_emails_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 AddEmailAddressesRequest.ProtoReflect.Descriptor instead. +func (*AddEmailAddressesRequest) Descriptor() ([]byte, []int) { + return file_rpc_add_emails_proto_rawDescGZIP(), []int{0} +} + +func (x *AddEmailAddressesRequest) GetPersonId() uint64 { + if x != nil { + return x.PersonId + } + return 0 +} + +func (x *AddEmailAddressesRequest) GetEmail() []string { + if x != nil { + return x.Email + } + return nil +} + +type AddEmailAddressesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Emails []*EmailAddress `protobuf:"bytes,1,rep,name=emails,proto3" json:"emails,omitempty"` +} + +func (x *AddEmailAddressesResponse) Reset() { + *x = AddEmailAddressesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_add_emails_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddEmailAddressesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddEmailAddressesResponse) ProtoMessage() {} + +func (x *AddEmailAddressesResponse) ProtoReflect() protoreflect.Message { + mi := &file_rpc_add_emails_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 AddEmailAddressesResponse.ProtoReflect.Descriptor instead. +func (*AddEmailAddressesResponse) Descriptor() ([]byte, []int) { + return file_rpc_add_emails_proto_rawDescGZIP(), []int{1} +} + +func (x *AddEmailAddressesResponse) GetEmails() []*EmailAddress { + if x != nil { + return x.Emails + } + return nil +} + +var File_rpc_add_emails_proto protoreflect.FileDescriptor + +var file_rpc_add_emails_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x72, 0x70, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, + 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, 0x1a, 0x13, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x8f, 0x01, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x3a, + 0x40, 0x92, 0x41, 0x3d, 0x0a, 0x3b, 0x2a, 0x10, 0x41, 0x64, 0x64, 0x20, 0x45, 0x6d, 0x61, 0x69, + 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x32, 0x13, 0x41, 0x64, 0x64, 0x20, 0x61, 0x6e, + 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0xd2, 0x01, 0x09, + 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x22, 0x89, 0x01, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2d, 0x0a, 0x06, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, 0x06, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x3a, 0x3d, + 0x92, 0x41, 0x3a, 0x0a, 0x38, 0x2a, 0x14, 0x41, 0x64, 0x64, 0x65, 0x64, 0x20, 0x45, 0x6d, 0x61, + 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x32, 0x20, 0x52, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x65, 0x64, 0x20, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 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_add_emails_proto_rawDescOnce sync.Once + file_rpc_add_emails_proto_rawDescData = file_rpc_add_emails_proto_rawDesc +) + +func file_rpc_add_emails_proto_rawDescGZIP() []byte { + file_rpc_add_emails_proto_rawDescOnce.Do(func() { + file_rpc_add_emails_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_add_emails_proto_rawDescData) + }) + return file_rpc_add_emails_proto_rawDescData +} + +var file_rpc_add_emails_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_rpc_add_emails_proto_goTypes = []interface{}{ + (*AddEmailAddressesRequest)(nil), // 0: pb.AddEmailAddressesRequest + (*AddEmailAddressesResponse)(nil), // 1: pb.AddEmailAddressesResponse + (*EmailAddress)(nil), // 2: pb.EmailAddress +} +var file_rpc_add_emails_proto_depIdxs = []int32{ + 2, // 0: pb.AddEmailAddressesResponse.emails:type_name -> pb.EmailAddress + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_rpc_add_emails_proto_init() } +func file_rpc_add_emails_proto_init() { + if File_rpc_add_emails_proto != nil { + return + } + file_email_address_proto_init() + if !protoimpl.UnsafeEnabled { + file_rpc_add_emails_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddEmailAddressesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_add_emails_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddEmailAddressesResponse); 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_add_emails_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_rpc_add_emails_proto_goTypes, + DependencyIndexes: file_rpc_add_emails_proto_depIdxs, + MessageInfos: file_rpc_add_emails_proto_msgTypes, + }.Build() + File_rpc_add_emails_proto = out.File + file_rpc_add_emails_proto_rawDesc = nil + file_rpc_add_emails_proto_goTypes = nil + file_rpc_add_emails_proto_depIdxs = nil +} diff --git a/bff/pb/rpc_create_person.pb.go b/bff/pb/rpc_create_person.pb.go index 793f1c1..7c9783e 100644 --- a/bff/pb/rpc_create_person.pb.go +++ b/bff/pb/rpc_create_person.pb.go @@ -27,14 +27,15 @@ type CreatePersonRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - AccountId uint64 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` - Firstname string `protobuf:"bytes,2,opt,name=firstname,proto3" json:"firstname,omitempty"` - Lastname string `protobuf:"bytes,3,opt,name=lastname,proto3" json:"lastname,omitempty"` - Street string `protobuf:"bytes,4,opt,name=street,proto3" json:"street,omitempty"` - City string `protobuf:"bytes,5,opt,name=city,proto3" json:"city,omitempty"` - Zip string `protobuf:"bytes,6,opt,name=zip,proto3" json:"zip,omitempty"` - Country string `protobuf:"bytes,7,opt,name=country,proto3" json:"country,omitempty"` - Birthday *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=birthday,proto3" json:"birthday,omitempty"` + AccountId uint64 `protobuf:"varint,1,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` + Firstname string `protobuf:"bytes,2,opt,name=firstname,proto3" json:"firstname,omitempty"` + Lastname string `protobuf:"bytes,3,opt,name=lastname,proto3" json:"lastname,omitempty"` + Street string `protobuf:"bytes,4,opt,name=street,proto3" json:"street,omitempty"` + City string `protobuf:"bytes,5,opt,name=city,proto3" json:"city,omitempty"` + Zip string `protobuf:"bytes,6,opt,name=zip,proto3" json:"zip,omitempty"` + Country string `protobuf:"bytes,7,opt,name=country,proto3" json:"country,omitempty"` + Relationship string `protobuf:"bytes,8,opt,name=relationship,proto3" json:"relationship,omitempty"` + Birthday *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=birthday,proto3" json:"birthday,omitempty"` } func (x *CreatePersonRequest) Reset() { @@ -118,6 +119,13 @@ func (x *CreatePersonRequest) GetCountry() string { return "" } +func (x *CreatePersonRequest) GetRelationship() string { + if x != nil { + return x.Relationship + } + return "" +} + func (x *CreatePersonRequest) GetBirthday() *timestamppb.Timestamp { if x != nil { return x.Birthday @@ -182,7 +190,7 @@ var file_rpc_create_person_proto_rawDesc = []byte{ 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, 0x1a, 0x0c, - 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc7, 0x04, 0x0a, + 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfa, 0x04, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, @@ -195,40 +203,43 @@ var file_rpc_create_person_proto_rawDesc = []byte{ 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x7a, 0x69, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x7a, 0x69, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x53, 0x0a, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, - 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, - 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, - 0x52, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x3a, 0xa9, 0x02, 0x92, 0x41, 0xa5, - 0x02, 0x0a, 0x70, 0x2a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x32, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x50, 0x65, - 0x72, 0x73, 0x6f, 0x6e, 0xd2, 0x01, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0xd2, 0x01, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x08, - 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x06, 0x73, 0x74, 0x72, 0x65, 0x65, - 0x74, 0xd2, 0x01, 0x04, 0x63, 0x69, 0x74, 0x79, 0xd2, 0x01, 0x03, 0x7a, 0x69, 0x70, 0xd2, 0x01, - 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0xd2, 0x01, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, - 0x64, 0x61, 0x79, 0x32, 0xb0, 0x01, 0x7b, 0x20, 0x22, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, 0x73, - 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, 0x20, - 0x22, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, 0x65, - 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x4d, 0x61, - 0x69, 0x6e, 0x20, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, 0x20, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x7a, - 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x38, 0x31, 0x35, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x69, - 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, 0x6b, 0x22, 0x2c, - 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x55, 0x53, 0x41, - 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x3a, 0x20, 0x22, - 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, - 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x7d, 0x22, 0x72, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, - 0x0a, 0x06, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, - 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, - 0x06, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x3a, 0x31, 0x92, 0x41, 0x2e, 0x0a, 0x2c, 0x2a, 0x0e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x32, 0x1a, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 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, + 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x68, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, 0x53, 0x0a, 0x08, 0x62, 0x69, 0x72, + 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x31, + 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, + 0x30, 0x30, 0x5a, 0x22, 0x52, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x3a, 0xb8, + 0x02, 0x92, 0x41, 0xb4, 0x02, 0x0a, 0x7f, 0x2a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, + 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x32, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x61, + 0x6e, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0xd2, 0x01, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0xd2, 0x01, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, + 0x65, 0xd2, 0x01, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0xd2, 0x01, 0x06, 0x73, + 0x74, 0x72, 0x65, 0x65, 0x74, 0xd2, 0x01, 0x04, 0x63, 0x69, 0x74, 0x79, 0xd2, 0x01, 0x03, 0x7a, + 0x69, 0x70, 0xd2, 0x01, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0xd2, 0x01, 0x0c, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0xd2, 0x01, 0x08, 0x62, 0x69, + 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x32, 0xb0, 0x01, 0x7b, 0x20, 0x22, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x66, + 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, + 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, + 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, + 0x22, 0x4d, 0x61, 0x69, 0x6e, 0x20, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, 0x20, 0x31, 0x22, 0x2c, + 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x38, 0x31, 0x35, 0x22, 0x2c, 0x20, + 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x77, 0x20, 0x59, 0x6f, 0x72, + 0x6b, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, + 0x55, 0x53, 0x41, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, + 0x3a, 0x20, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, + 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x7d, 0x22, 0x72, 0x0a, 0x14, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x27, 0x0a, 0x06, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x42, 0x03, 0x92, + 0x41, 0x00, 0x52, 0x06, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x3a, 0x31, 0x92, 0x41, 0x2e, 0x0a, + 0x2c, 0x2a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, + 0x6e, 0x32, 0x1a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 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 ( diff --git a/bff/pb/rpc_delete_email.pb.go b/bff/pb/rpc_delete_email.pb.go new file mode 100644 index 0000000..5736455 --- /dev/null +++ b/bff/pb/rpc_delete_email.pb.go @@ -0,0 +1,216 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.24.4 +// source: rpc_delete_email.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 DeleteEmailAddressRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteEmailAddressRequest) Reset() { + *x = DeleteEmailAddressRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_delete_email_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteEmailAddressRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteEmailAddressRequest) ProtoMessage() {} + +func (x *DeleteEmailAddressRequest) ProtoReflect() protoreflect.Message { + mi := &file_rpc_delete_email_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 DeleteEmailAddressRequest.ProtoReflect.Descriptor instead. +func (*DeleteEmailAddressRequest) Descriptor() ([]byte, []int) { + return file_rpc_delete_email_proto_rawDescGZIP(), []int{0} +} + +func (x *DeleteEmailAddressRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +type DeleteEmailAddressResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteEmailAddressResponse) Reset() { + *x = DeleteEmailAddressResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_rpc_delete_email_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteEmailAddressResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteEmailAddressResponse) ProtoMessage() {} + +func (x *DeleteEmailAddressResponse) ProtoReflect() protoreflect.Message { + mi := &file_rpc_delete_email_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 DeleteEmailAddressResponse.ProtoReflect.Descriptor instead. +func (*DeleteEmailAddressResponse) Descriptor() ([]byte, []int) { + return file_rpc_delete_email_proto_rawDescGZIP(), []int{1} +} + +func (x *DeleteEmailAddressResponse) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +var File_rpc_delete_email_proto protoreflect.FileDescriptor + +var file_rpc_delete_email_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x72, 0x70, 0x63, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 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, 0x19, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x37, 0x92, 0x41, 0x34, 0x0a, 0x32, + 0x2a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x32, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x6e, + 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0xd2, 0x01, 0x02, + 0x69, 0x64, 0x22, 0x4e, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, + 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x13, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x03, 0x92, 0x41, + 0x00, 0x52, 0x02, 0x69, 0x64, 0x3a, 0x1b, 0x92, 0x41, 0x18, 0x0a, 0x16, 0x2a, 0x14, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 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_email_proto_rawDescOnce sync.Once + file_rpc_delete_email_proto_rawDescData = file_rpc_delete_email_proto_rawDesc +) + +func file_rpc_delete_email_proto_rawDescGZIP() []byte { + file_rpc_delete_email_proto_rawDescOnce.Do(func() { + file_rpc_delete_email_proto_rawDescData = protoimpl.X.CompressGZIP(file_rpc_delete_email_proto_rawDescData) + }) + return file_rpc_delete_email_proto_rawDescData +} + +var file_rpc_delete_email_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_rpc_delete_email_proto_goTypes = []interface{}{ + (*DeleteEmailAddressRequest)(nil), // 0: pb.DeleteEmailAddressRequest + (*DeleteEmailAddressResponse)(nil), // 1: pb.DeleteEmailAddressResponse +} +var file_rpc_delete_email_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_email_proto_init() } +func file_rpc_delete_email_proto_init() { + if File_rpc_delete_email_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_rpc_delete_email_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteEmailAddressRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_rpc_delete_email_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteEmailAddressResponse); 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_email_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_rpc_delete_email_proto_goTypes, + DependencyIndexes: file_rpc_delete_email_proto_depIdxs, + MessageInfos: file_rpc_delete_email_proto_msgTypes, + }.Build() + File_rpc_delete_email_proto = out.File + file_rpc_delete_email_proto_rawDesc = nil + file_rpc_delete_email_proto_goTypes = nil + file_rpc_delete_email_proto_depIdxs = nil +} diff --git a/bff/pb/rpc_update_person.pb.go b/bff/pb/rpc_update_person.pb.go index c28d02a..44c46b5 100644 --- a/bff/pb/rpc_update_person.pb.go +++ b/bff/pb/rpc_update_person.pb.go @@ -27,14 +27,15 @@ type UpdatePersonRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` - Firstname *string `protobuf:"bytes,2,opt,name=firstname,proto3,oneof" json:"firstname,omitempty"` - Lastname *string `protobuf:"bytes,3,opt,name=lastname,proto3,oneof" json:"lastname,omitempty"` - Street *string `protobuf:"bytes,4,opt,name=street,proto3,oneof" json:"street,omitempty"` - City *string `protobuf:"bytes,5,opt,name=city,proto3,oneof" json:"city,omitempty"` - Zip *string `protobuf:"bytes,6,opt,name=zip,proto3,oneof" json:"zip,omitempty"` - Country *string `protobuf:"bytes,7,opt,name=country,proto3,oneof" json:"country,omitempty"` - Birthday *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=birthday,proto3,oneof" json:"birthday,omitempty"` + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Firstname *string `protobuf:"bytes,2,opt,name=firstname,proto3,oneof" json:"firstname,omitempty"` + Lastname *string `protobuf:"bytes,3,opt,name=lastname,proto3,oneof" json:"lastname,omitempty"` + Street *string `protobuf:"bytes,4,opt,name=street,proto3,oneof" json:"street,omitempty"` + City *string `protobuf:"bytes,5,opt,name=city,proto3,oneof" json:"city,omitempty"` + Zip *string `protobuf:"bytes,6,opt,name=zip,proto3,oneof" json:"zip,omitempty"` + Country *string `protobuf:"bytes,7,opt,name=country,proto3,oneof" json:"country,omitempty"` + Relationship *string `protobuf:"bytes,8,opt,name=relationship,proto3,oneof" json:"relationship,omitempty"` + Birthday *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=birthday,proto3,oneof" json:"birthday,omitempty"` } func (x *UpdatePersonRequest) Reset() { @@ -118,6 +119,13 @@ func (x *UpdatePersonRequest) GetCountry() string { return "" } +func (x *UpdatePersonRequest) GetRelationship() string { + if x != nil && x.Relationship != nil { + return *x.Relationship + } + return "" +} + func (x *UpdatePersonRequest) GetBirthday() *timestamppb.Timestamp { if x != nil { return x.Birthday @@ -182,7 +190,7 @@ var file_rpc_update_person_proto_rawDesc = []byte{ 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, 0x1a, 0x0c, - 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe7, 0x04, 0x0a, + 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa1, 0x05, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, @@ -196,41 +204,45 @@ var file_rpc_update_person_proto_rawDesc = []byte{ 0x0a, 0x03, 0x7a, 0x69, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x04, 0x52, 0x03, 0x7a, 0x69, 0x70, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, - 0x79, 0x88, 0x01, 0x01, 0x12, 0x58, 0x0a, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x4a, 0x16, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, - 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x48, - 0x06, 0x52, 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x88, 0x01, 0x01, 0x3a, 0xe5, - 0x01, 0x92, 0x41, 0xe1, 0x01, 0x0a, 0x26, 0x2a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, - 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x32, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, - 0x6e, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x32, 0xb6, 0x01, - 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, - 0x20, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, - 0x65, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, - 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x65, 0x61, 0x74, - 0x68, 0x20, 0x53, 0x74, 0x61, 0x72, 0x20, 0x33, 0x22, 0x2c, 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, - 0x3a, 0x20, 0x22, 0x30, 0x38, 0x31, 0x36, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, - 0x3a, 0x20, 0x22, 0x4d, 0x6f, 0x6e, 0x74, 0x61, 0x6e, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x61, 0x22, - 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x31, - 0x39, 0x39, 0x32, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, - 0x30, 0x30, 0x5a, 0x22, 0x20, 0x7d, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, - 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x42, 0x07, 0x0a, 0x05, - 0x5f, 0x63, 0x69, 0x74, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x7a, 0x69, 0x70, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x62, 0x69, - 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x22, 0x72, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, - 0x0a, 0x06, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, - 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, - 0x06, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x3a, 0x31, 0x92, 0x41, 0x2e, 0x0a, 0x2c, 0x2a, 0x0e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x32, 0x1a, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 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, + 0x79, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x68, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x06, 0x52, 0x0c, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x88, 0x01, 0x01, 0x12, 0x58, 0x0a, + 0x08, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x1b, 0x92, 0x41, 0x18, + 0x4a, 0x16, 0x22, 0x31, 0x39, 0x39, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x54, 0x30, 0x30, + 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x48, 0x07, 0x52, 0x08, 0x62, 0x69, 0x72, 0x74, + 0x68, 0x64, 0x61, 0x79, 0x88, 0x01, 0x01, 0x3a, 0xe5, 0x01, 0x92, 0x41, 0xe1, 0x01, 0x0a, 0x26, + 0x2a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x32, + 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, + 0x6e, 0xd2, 0x01, 0x02, 0x69, 0x64, 0x32, 0xb6, 0x01, 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x20, + 0x22, 0x31, 0x22, 0x2c, 0x20, 0x22, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x3a, 0x20, 0x22, 0x4a, 0x6f, 0x68, 0x6e, 0x22, 0x2c, 0x20, 0x22, 0x6c, 0x61, 0x73, 0x74, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x6f, 0x65, 0x22, 0x2c, 0x20, 0x22, 0x70, 0x68, + 0x6f, 0x6e, 0x65, 0x22, 0x3a, 0x20, 0x22, 0x22, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x72, 0x65, 0x65, + 0x74, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x65, 0x61, 0x74, 0x68, 0x20, 0x53, 0x74, 0x61, 0x72, 0x20, + 0x33, 0x22, 0x2c, 0x20, 0x22, 0x7a, 0x69, 0x70, 0x22, 0x3a, 0x20, 0x22, 0x30, 0x38, 0x31, 0x36, + 0x22, 0x2c, 0x20, 0x22, 0x63, 0x69, 0x74, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x4d, 0x6f, 0x6e, 0x74, + 0x61, 0x6e, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x3a, + 0x20, 0x22, 0x43, 0x61, 0x6e, 0x61, 0x64, 0x61, 0x22, 0x2c, 0x20, 0x22, 0x62, 0x69, 0x72, 0x74, + 0x68, 0x64, 0x61, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x31, 0x39, 0x39, 0x32, 0x2d, 0x31, 0x30, 0x2d, + 0x30, 0x35, 0x54, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x5a, 0x22, 0x20, 0x7d, 0x42, + 0x0c, 0x0a, 0x0a, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0b, 0x0a, + 0x09, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, + 0x74, 0x72, 0x65, 0x65, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x63, 0x69, 0x74, 0x79, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x7a, 0x69, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x68, 0x69, 0x70, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x62, 0x69, 0x72, 0x74, 0x68, 0x64, 0x61, 0x79, + 0x22, 0x72, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x70, 0x65, 0x72, 0x73, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, + 0x72, 0x73, 0x6f, 0x6e, 0x42, 0x03, 0x92, 0x41, 0x00, 0x52, 0x06, 0x70, 0x65, 0x72, 0x73, 0x6f, + 0x6e, 0x3a, 0x31, 0x92, 0x41, 0x2e, 0x0a, 0x2c, 0x2a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x20, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x32, 0x1a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x20, 0x50, 0x65, + 0x72, 0x73, 0x6f, 0x6e, 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 ( diff --git a/bff/pb/service_df.pb.go b/bff/pb/service_df.pb.go index 38c4773..a1f9d2d 100644 --- a/bff/pb/service_df.pb.go +++ b/bff/pb/service_df.pb.go @@ -45,329 +45,351 @@ var file_service_df_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x70, - 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x72, 0x70, 0x63, - 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x72, 0x70, 0x63, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, - 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x20, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1d, 0x72, 0x70, 0x63, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1a, 0x72, 0x70, 0x63, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x72, 0x70, - 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x72, 0x70, 0x63, 0x5f, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x6f, - 0x67, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, - 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x5f, 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, 0x61, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 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, 0x1a, 0x16, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x72, 0x70, 0x63, - 0x5f, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xf5, 0x22, 0x0a, 0x02, 0x64, - 0x66, 0x12, 0x42, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x70, - 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x3a, 0x01, 0x2a, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, - 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x68, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, - 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0xa4, 0x01, 0x0a, 0x0c, 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, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x61, 0x92, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x53, - 0x65, 0x73, 0x73, 0x69, 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, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 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, 0x93, 0x02, - 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, - 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0x96, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x2e, 0x12, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x20, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x20, 0x5b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, - 0x6f, 0x6e, 0x6c, 0x79, 0x5d, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, - 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, - 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x83, 0x01, 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, 0x3d, 0x92, 0x41, 0x14, 0x12, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 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, 0xaf, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x66, 0x92, - 0x41, 0x31, 0x12, 0x1d, 0x47, 0x65, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 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, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa7, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, 0x32, 0x12, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x20, 0x5b, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x5d, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, - 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, - 0x1e, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, - 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, - 0xa6, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x54, 0x92, 0x41, 0x26, 0x12, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x10, 0x0a, 0x0e, 0x0a, - 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 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, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0xa6, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, - 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, - 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x92, 0x41, 0x26, - 0x12, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, - 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x32, - 0x20, 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, 0x69, 0x6e, 0x66, - 0x6f, 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, 0x74, 0x50, 0x72, 0x69, - 0x76, 0x61, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 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, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x92, - 0x41, 0x33, 0x12, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 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, 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, + 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x72, 0x70, 0x63, + 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x72, 0x70, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x72, 0x70, 0x63, 0x5f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x15, 0x72, 0x70, 0x63, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x18, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x72, 0x70, 0x63, 0x5f, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x72, 0x70, + 0x63, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x72, 0x70, 0x63, + 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x72, 0x70, 0x63, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, + 0x70, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x72, 0x70, 0x63, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x27, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x73, 0x5f, 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, 0x61, 0x64, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 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, 0x1a, 0x16, + 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xac, 0x25, 0x0a, 0x02, 0x64, 0x66, 0x12, 0x42, 0x0a, 0x05, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x0e, 0x3a, 0x01, 0x2a, 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, + 0x12, 0x68, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x52, + 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x72, 0x65, 0x66, + 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 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, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, + 0x92, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x53, 0x65, 0x73, 0x73, 0x69, 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, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x0c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 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, 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, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, + 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x0c, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x70, + 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x53, 0x92, 0x41, 0x2e, 0x12, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x20, 0x5b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x5d, + 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, + 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x12, 0x83, 0x01, 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, 0x3d, 0x92, 0x41, 0x14, + 0x12, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 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, 0xaf, + 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, + 0x62, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x66, 0x92, 0x41, 0x31, 0x12, 0x1d, 0x47, + 0x65, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 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, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, + 0x6e, 0x66, 0x6f, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0xa7, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x92, + 0x41, 0x32, 0x12, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x20, 0x5b, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x20, 0x6f, 0x6e, 0x6c, + 0x79, 0x5d, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x76, 0x31, 0x2f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0xa6, 0x01, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, + 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x92, + 0x41, 0x26, 0x12, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, + 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, + 0x2a, 0x22, 0x20, 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, 0x5f, 0x69, + 0x6e, 0x66, 0x6f, 0x12, 0xa6, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x92, 0x41, 0x26, 0x12, 0x12, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x20, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x62, + 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x32, 0x20, 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, 0x69, 0x6e, 0x66, 0x6f, 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, 0x74, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 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, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x64, 0x92, 0x41, 0x33, 0x12, 0x1f, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x41, 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, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, - 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, - 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, - 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 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, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, - 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x4d, 0x92, 0x41, 0x25, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 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, 0x12, - 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x65, - 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x99, - 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x28, 0x12, 0x14, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 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, 0x22, 0x2a, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x0c, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, - 0x92, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 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, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x62, 0x10, 0x0a, + 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, 0x94, + 0x01, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x92, 0x41, 0x25, + 0x12, 0x11, 0x41, 0x64, 0x64, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x20, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, + 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x64, 0x64, 0x5f, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x9d, 0x01, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, + 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, + 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x41, + 0x64, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x27, 0x12, 0x13, 0x41, + 0x64, 0x64, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, + 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x73, 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, 0x20, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xb0, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x74, - 0x75, 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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 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, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x5b, 0x6f, 0x6e, 0x6c, 0x79, - 0x20, 0x48, 0x54, 0x54, 0x50, 0x5d, 0x1a, 0xae, 0x01, 0x54, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x76, 0x69, 0x61, 0x20, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, - 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x2e, 0x20, 0x54, 0x72, - 0x79, 0x20, 0x60, 0x60, 0x60, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x58, 0x20, 0x50, 0x4f, 0x53, - 0x54, 0x20, 0x2d, 0x48, 0x20, 0x22, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x20, 0x7b, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x7d, 0x22, 0x20, 0x2d, 0x46, 0x20, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x3d, 0x40, 0x2f, - 0x70, 0x61, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x20, 0x2d, 0x46, - 0x20, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x3d, 0x31, 0x22, 0x20, 0x22, - 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x7b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x52, - 0x49, 0x7d, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x22, 0x60, 0x60, 0x60, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, - 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, - 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, - 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x56, 0x92, 0x41, 0x29, 0x12, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x44, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x62, 0x79, 0x20, 0x49, 0x44, 0x62, 0x10, 0x0a, 0x0e, 0x0a, + 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, 0x24, 0x2a, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x65, - 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, - 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, - 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x92, - 0x41, 0x2d, 0x12, 0x19, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x62, 0x10, 0x0a, + 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, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x65, + 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x6f, + 0x6e, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x91, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x62, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, 0x0e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 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, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x8a, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x4d, 0x92, 0x41, 0x25, 0x12, 0x11, 0x47, 0x65, 0x74, 0x20, 0x50, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 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, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, + 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0x99, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, + 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x92, 0x41, 0x28, 0x12, 0x14, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 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, 0x22, 0x2a, 0x20, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, + 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x17, 0x2e, + 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x61, 0x92, 0x41, 0x2f, 0x12, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x50, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 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, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x19, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x92, 0x41, 0x22, 0x12, + 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x50, 0x61, 0x79, 0x6d, 0x65, 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, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xb0, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x4c, 0x6f, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x74, 0x75, 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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 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, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x5b, 0x6f, 0x6e, + 0x6c, 0x79, 0x20, 0x48, 0x54, 0x54, 0x50, 0x5d, 0x1a, 0xae, 0x01, 0x54, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x20, 0x76, 0x69, 0x61, 0x20, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x20, 0x69, + 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x2e, 0x20, + 0x54, 0x72, 0x79, 0x20, 0x60, 0x60, 0x60, 0x63, 0x75, 0x72, 0x6c, 0x20, 0x2d, 0x58, 0x20, 0x50, + 0x4f, 0x53, 0x54, 0x20, 0x2d, 0x48, 0x20, 0x22, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x20, 0x7b, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x7d, 0x22, 0x20, 0x2d, 0x46, 0x20, 0x22, 0x66, 0x69, 0x6c, 0x65, 0x3d, + 0x40, 0x2f, 0x70, 0x61, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x2f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x20, + 0x2d, 0x46, 0x20, 0x22, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x3d, 0x31, 0x22, + 0x20, 0x22, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x7b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x55, 0x52, 0x49, 0x7d, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x75, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x60, 0x60, 0x60, 0x62, 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, + 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x56, 0x92, 0x41, 0x29, 0x12, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 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, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa2, 0x01, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x70, - 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x62, 0x92, 0x41, 0x2d, 0x12, 0x2b, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, - 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x2f, - 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x73, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 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, + 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x2a, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xaa, 0x01, 0x0a, 0x12, 0x52, 0x65, + 0x73, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x55, 0x92, 0x41, 0x2d, 0x12, 0x19, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x20, 0x56, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x62, + 0x10, 0x0a, 0x0e, 0x0a, 0x0a, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa2, 0x01, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, + 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x62, 0x92, 0x41, 0x2d, 0x12, 0x2b, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x20, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, + 0x2a, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 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{}{ @@ -384,49 +406,53 @@ var file_service_df_proto_goTypes = []interface{}{ (*CreateAccountInfoRequest)(nil), // 10: pb.CreateAccountInfoRequest (*UpdateAccountInfoRequest)(nil), // 11: pb.UpdateAccountInfoRequest (*UpdateAccountPrivacyRequest)(nil), // 12: pb.UpdateAccountPrivacyRequest - (*CreatePersonRequest)(nil), // 13: pb.CreatePersonRequest - (*UpdatePersonRequest)(nil), // 14: pb.UpdatePersonRequest - (*GetPersonRequest)(nil), // 15: pb.GetPersonRequest - (*DeletePersonRequest)(nil), // 16: pb.DeletePersonRequest - (*ListPersonsRequest)(nil), // 17: pb.ListPersonsRequest - (*CreatePaymentRequest)(nil), // 18: pb.CreatePaymentRequest - (*GetPaymentRequest)(nil), // 19: pb.GetPaymentRequest - (*DeletePaymentRequest)(nil), // 20: pb.DeletePaymentRequest - (*ListPaymentsRequest)(nil), // 21: pb.ListPaymentsRequest - (*UpdatePaymentRequest)(nil), // 22: pb.UpdatePaymentRequest - (*ListReturnsLogRequest)(nil), // 23: pb.ListReturnsLogRequest - (*UploadDocumentRequest)(nil), // 24: pb.UploadDocumentRequest - (*DeleteDocumentRequest)(nil), // 25: pb.DeleteDocumentRequest - (*ResendVerificationRequest)(nil), // 26: pb.ResendVerificationRequest - (*VerifyEmailRequest)(nil), // 27: pb.VerifyEmailRequest - (*LoginResponse)(nil), // 28: pb.LoginResponse - (*RefreshTokenResponse)(nil), // 29: pb.RefreshTokenResponse - (*ListSessionsResponse)(nil), // 30: pb.ListSessionsResponse - (*BlockSessionResponse)(nil), // 31: pb.BlockSessionResponse - (*GetAccountResponse)(nil), // 32: pb.GetAccountResponse - (*ListAccountsResponse)(nil), // 33: pb.ListAccountsResponse - (*CreateAccountResponse)(nil), // 34: pb.CreateAccountResponse - (*UpdateAccountResponse)(nil), // 35: pb.UpdateAccountResponse - (*GetAccountInfoResponse)(nil), // 36: pb.GetAccountInfoResponse - (*ListAccountInfoResponse)(nil), // 37: pb.ListAccountInfoResponse - (*CreateAccountInfoResponse)(nil), // 38: pb.CreateAccountInfoResponse - (*UpdateAccountInfoResponse)(nil), // 39: pb.UpdateAccountInfoResponse - (*UpdateAccountPrivacyResponse)(nil), // 40: pb.UpdateAccountPrivacyResponse - (*CreatePersonResponse)(nil), // 41: pb.CreatePersonResponse - (*UpdatePersonResponse)(nil), // 42: pb.UpdatePersonResponse - (*GetPersonResponse)(nil), // 43: pb.GetPersonResponse - (*DeletePersonResponse)(nil), // 44: pb.DeletePersonResponse - (*ListPersonsResponse)(nil), // 45: pb.ListPersonsResponse - (*CreatePaymentResponse)(nil), // 46: pb.CreatePaymentResponse - (*GetPaymentResponse)(nil), // 47: pb.GetPaymentResponse - (*DeletePaymentResponse)(nil), // 48: pb.DeletePaymentResponse - (*ListPaymentsResponse)(nil), // 49: pb.ListPaymentsResponse - (*UpdatePaymentResponse)(nil), // 50: pb.UpdatePaymentResponse - (*ListReturnsLogResponse)(nil), // 51: pb.ListReturnsLogResponse - (*UploadDocumentResponse)(nil), // 52: pb.UploadDocumentResponse - (*DeleteDocumentResponse)(nil), // 53: pb.DeleteDocumentResponse - (*ResendVerificationResponse)(nil), // 54: pb.ResendVerificationResponse - (*VerifyEmailResponse)(nil), // 55: pb.VerifyEmailResponse + (*AddEmailAddressRequest)(nil), // 13: pb.AddEmailAddressRequest + (*AddEmailAddressesRequest)(nil), // 14: pb.AddEmailAddressesRequest + (*CreatePersonRequest)(nil), // 15: pb.CreatePersonRequest + (*UpdatePersonRequest)(nil), // 16: pb.UpdatePersonRequest + (*GetPersonRequest)(nil), // 17: pb.GetPersonRequest + (*DeletePersonRequest)(nil), // 18: pb.DeletePersonRequest + (*ListPersonsRequest)(nil), // 19: pb.ListPersonsRequest + (*CreatePaymentRequest)(nil), // 20: pb.CreatePaymentRequest + (*GetPaymentRequest)(nil), // 21: pb.GetPaymentRequest + (*DeletePaymentRequest)(nil), // 22: pb.DeletePaymentRequest + (*ListPaymentsRequest)(nil), // 23: pb.ListPaymentsRequest + (*UpdatePaymentRequest)(nil), // 24: pb.UpdatePaymentRequest + (*ListReturnsLogRequest)(nil), // 25: pb.ListReturnsLogRequest + (*UploadDocumentRequest)(nil), // 26: pb.UploadDocumentRequest + (*DeleteDocumentRequest)(nil), // 27: pb.DeleteDocumentRequest + (*ResendVerificationRequest)(nil), // 28: pb.ResendVerificationRequest + (*VerifyEmailRequest)(nil), // 29: pb.VerifyEmailRequest + (*LoginResponse)(nil), // 30: pb.LoginResponse + (*RefreshTokenResponse)(nil), // 31: pb.RefreshTokenResponse + (*ListSessionsResponse)(nil), // 32: pb.ListSessionsResponse + (*BlockSessionResponse)(nil), // 33: pb.BlockSessionResponse + (*GetAccountResponse)(nil), // 34: pb.GetAccountResponse + (*ListAccountsResponse)(nil), // 35: pb.ListAccountsResponse + (*CreateAccountResponse)(nil), // 36: pb.CreateAccountResponse + (*UpdateAccountResponse)(nil), // 37: pb.UpdateAccountResponse + (*GetAccountInfoResponse)(nil), // 38: pb.GetAccountInfoResponse + (*ListAccountInfoResponse)(nil), // 39: pb.ListAccountInfoResponse + (*CreateAccountInfoResponse)(nil), // 40: pb.CreateAccountInfoResponse + (*UpdateAccountInfoResponse)(nil), // 41: pb.UpdateAccountInfoResponse + (*UpdateAccountPrivacyResponse)(nil), // 42: pb.UpdateAccountPrivacyResponse + (*AddEmailAddressResponse)(nil), // 43: pb.AddEmailAddressResponse + (*AddEmailAddressesResponse)(nil), // 44: pb.AddEmailAddressesResponse + (*CreatePersonResponse)(nil), // 45: pb.CreatePersonResponse + (*UpdatePersonResponse)(nil), // 46: pb.UpdatePersonResponse + (*GetPersonResponse)(nil), // 47: pb.GetPersonResponse + (*DeletePersonResponse)(nil), // 48: pb.DeletePersonResponse + (*ListPersonsResponse)(nil), // 49: pb.ListPersonsResponse + (*CreatePaymentResponse)(nil), // 50: pb.CreatePaymentResponse + (*GetPaymentResponse)(nil), // 51: pb.GetPaymentResponse + (*DeletePaymentResponse)(nil), // 52: pb.DeletePaymentResponse + (*ListPaymentsResponse)(nil), // 53: pb.ListPaymentsResponse + (*UpdatePaymentResponse)(nil), // 54: pb.UpdatePaymentResponse + (*ListReturnsLogResponse)(nil), // 55: pb.ListReturnsLogResponse + (*UploadDocumentResponse)(nil), // 56: pb.UploadDocumentResponse + (*DeleteDocumentResponse)(nil), // 57: pb.DeleteDocumentResponse + (*ResendVerificationResponse)(nil), // 58: pb.ResendVerificationResponse + (*VerifyEmailResponse)(nil), // 59: pb.VerifyEmailResponse } var file_service_df_proto_depIdxs = []int32{ 0, // 0: pb.df.Login:input_type -> pb.LoginRequest @@ -442,51 +468,55 @@ var file_service_df_proto_depIdxs = []int32{ 10, // 10: pb.df.CreateAccountInfo:input_type -> pb.CreateAccountInfoRequest 11, // 11: pb.df.UpdateAccountInfo:input_type -> pb.UpdateAccountInfoRequest 12, // 12: pb.df.UpdateAccountPrivacy:input_type -> pb.UpdateAccountPrivacyRequest - 13, // 13: pb.df.CreatePerson:input_type -> pb.CreatePersonRequest - 14, // 14: pb.df.UpdatePerson:input_type -> pb.UpdatePersonRequest - 15, // 15: pb.df.GetPerson:input_type -> pb.GetPersonRequest - 16, // 16: pb.df.DeletePerson:input_type -> pb.DeletePersonRequest - 17, // 17: pb.df.ListPersons:input_type -> pb.ListPersonsRequest - 18, // 18: pb.df.CreatePayment:input_type -> pb.CreatePaymentRequest - 19, // 19: pb.df.GetPayment:input_type -> pb.GetPaymentRequest - 20, // 20: pb.df.DeletePayment:input_type -> pb.DeletePaymentRequest - 21, // 21: pb.df.ListPayments:input_type -> pb.ListPaymentsRequest - 22, // 22: pb.df.UpdatePayment:input_type -> pb.UpdatePaymentRequest - 23, // 23: pb.df.ListReturnsLog:input_type -> pb.ListReturnsLogRequest - 24, // 24: pb.df.UploadDocument:input_type -> pb.UploadDocumentRequest - 25, // 25: pb.df.DeleteDocument:input_type -> pb.DeleteDocumentRequest - 26, // 26: pb.df.ResendVerification:input_type -> pb.ResendVerificationRequest - 27, // 27: pb.df.VerifyEmail:input_type -> pb.VerifyEmailRequest - 28, // 28: pb.df.Login:output_type -> pb.LoginResponse - 29, // 29: pb.df.RefreshToken:output_type -> pb.RefreshTokenResponse - 30, // 30: pb.df.ListSessions:output_type -> pb.ListSessionsResponse - 31, // 31: pb.df.BlockSession:output_type -> pb.BlockSessionResponse - 32, // 32: pb.df.GetAccount:output_type -> pb.GetAccountResponse - 33, // 33: pb.df.ListAccounts:output_type -> pb.ListAccountsResponse - 34, // 34: pb.df.CreateAccount:output_type -> pb.CreateAccountResponse - 35, // 35: pb.df.UpdateAccount:output_type -> pb.UpdateAccountResponse - 36, // 36: pb.df.GetAccountInfo:output_type -> pb.GetAccountInfoResponse - 37, // 37: pb.df.ListAccountInfo:output_type -> pb.ListAccountInfoResponse - 38, // 38: pb.df.CreateAccountInfo:output_type -> pb.CreateAccountInfoResponse - 39, // 39: pb.df.UpdateAccountInfo:output_type -> pb.UpdateAccountInfoResponse - 40, // 40: pb.df.UpdateAccountPrivacy:output_type -> pb.UpdateAccountPrivacyResponse - 41, // 41: pb.df.CreatePerson:output_type -> pb.CreatePersonResponse - 42, // 42: pb.df.UpdatePerson:output_type -> pb.UpdatePersonResponse - 43, // 43: pb.df.GetPerson:output_type -> pb.GetPersonResponse - 44, // 44: pb.df.DeletePerson:output_type -> pb.DeletePersonResponse - 45, // 45: pb.df.ListPersons:output_type -> pb.ListPersonsResponse - 46, // 46: pb.df.CreatePayment:output_type -> pb.CreatePaymentResponse - 47, // 47: pb.df.GetPayment:output_type -> pb.GetPaymentResponse - 48, // 48: pb.df.DeletePayment:output_type -> pb.DeletePaymentResponse - 49, // 49: pb.df.ListPayments:output_type -> pb.ListPaymentsResponse - 50, // 50: pb.df.UpdatePayment:output_type -> pb.UpdatePaymentResponse - 51, // 51: pb.df.ListReturnsLog:output_type -> pb.ListReturnsLogResponse - 52, // 52: pb.df.UploadDocument:output_type -> pb.UploadDocumentResponse - 53, // 53: pb.df.DeleteDocument:output_type -> pb.DeleteDocumentResponse - 54, // 54: pb.df.ResendVerification:output_type -> pb.ResendVerificationResponse - 55, // 55: pb.df.VerifyEmail:output_type -> pb.VerifyEmailResponse - 28, // [28:56] is the sub-list for method output_type - 0, // [0:28] is the sub-list for method input_type + 13, // 13: pb.df.AddEmailAddress:input_type -> pb.AddEmailAddressRequest + 14, // 14: pb.df.AddEmailAddresses:input_type -> pb.AddEmailAddressesRequest + 15, // 15: pb.df.CreatePerson:input_type -> pb.CreatePersonRequest + 16, // 16: pb.df.UpdatePerson:input_type -> pb.UpdatePersonRequest + 17, // 17: pb.df.GetPerson:input_type -> pb.GetPersonRequest + 18, // 18: pb.df.DeletePerson:input_type -> pb.DeletePersonRequest + 19, // 19: pb.df.ListPersons:input_type -> pb.ListPersonsRequest + 20, // 20: pb.df.CreatePayment:input_type -> pb.CreatePaymentRequest + 21, // 21: pb.df.GetPayment:input_type -> pb.GetPaymentRequest + 22, // 22: pb.df.DeletePayment:input_type -> pb.DeletePaymentRequest + 23, // 23: pb.df.ListPayments:input_type -> pb.ListPaymentsRequest + 24, // 24: pb.df.UpdatePayment:input_type -> pb.UpdatePaymentRequest + 25, // 25: pb.df.ListReturnsLog:input_type -> pb.ListReturnsLogRequest + 26, // 26: pb.df.UploadDocument:input_type -> pb.UploadDocumentRequest + 27, // 27: pb.df.DeleteDocument:input_type -> pb.DeleteDocumentRequest + 28, // 28: pb.df.ResendVerification:input_type -> pb.ResendVerificationRequest + 29, // 29: pb.df.VerifyEmail:input_type -> pb.VerifyEmailRequest + 30, // 30: pb.df.Login:output_type -> pb.LoginResponse + 31, // 31: pb.df.RefreshToken:output_type -> pb.RefreshTokenResponse + 32, // 32: pb.df.ListSessions:output_type -> pb.ListSessionsResponse + 33, // 33: pb.df.BlockSession:output_type -> pb.BlockSessionResponse + 34, // 34: pb.df.GetAccount:output_type -> pb.GetAccountResponse + 35, // 35: pb.df.ListAccounts:output_type -> pb.ListAccountsResponse + 36, // 36: pb.df.CreateAccount:output_type -> pb.CreateAccountResponse + 37, // 37: pb.df.UpdateAccount:output_type -> pb.UpdateAccountResponse + 38, // 38: pb.df.GetAccountInfo:output_type -> pb.GetAccountInfoResponse + 39, // 39: pb.df.ListAccountInfo:output_type -> pb.ListAccountInfoResponse + 40, // 40: pb.df.CreateAccountInfo:output_type -> pb.CreateAccountInfoResponse + 41, // 41: pb.df.UpdateAccountInfo:output_type -> pb.UpdateAccountInfoResponse + 42, // 42: pb.df.UpdateAccountPrivacy:output_type -> pb.UpdateAccountPrivacyResponse + 43, // 43: pb.df.AddEmailAddress:output_type -> pb.AddEmailAddressResponse + 44, // 44: pb.df.AddEmailAddresses:output_type -> pb.AddEmailAddressesResponse + 45, // 45: pb.df.CreatePerson:output_type -> pb.CreatePersonResponse + 46, // 46: pb.df.UpdatePerson:output_type -> pb.UpdatePersonResponse + 47, // 47: pb.df.GetPerson:output_type -> pb.GetPersonResponse + 48, // 48: pb.df.DeletePerson:output_type -> pb.DeletePersonResponse + 49, // 49: pb.df.ListPersons:output_type -> pb.ListPersonsResponse + 50, // 50: pb.df.CreatePayment:output_type -> pb.CreatePaymentResponse + 51, // 51: pb.df.GetPayment:output_type -> pb.GetPaymentResponse + 52, // 52: pb.df.DeletePayment:output_type -> pb.DeletePaymentResponse + 53, // 53: pb.df.ListPayments:output_type -> pb.ListPaymentsResponse + 54, // 54: pb.df.UpdatePayment:output_type -> pb.UpdatePaymentResponse + 55, // 55: pb.df.ListReturnsLog:output_type -> pb.ListReturnsLogResponse + 56, // 56: pb.df.UploadDocument:output_type -> pb.UploadDocumentResponse + 57, // 57: pb.df.DeleteDocument:output_type -> pb.DeleteDocumentResponse + 58, // 58: pb.df.ResendVerification:output_type -> pb.ResendVerificationResponse + 59, // 59: pb.df.VerifyEmail:output_type -> pb.VerifyEmailResponse + 30, // [30:60] is the sub-list for method output_type + 0, // [0:30] 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 @@ -507,6 +537,8 @@ func file_service_df_proto_init() { file_rpc_list_persons_proto_init() file_rpc_update_person_proto_init() file_rpc_delete_person_proto_init() + file_rpc_add_email_proto_init() + file_rpc_add_emails_proto_init() file_rpc_create_account_proto_init() file_rpc_get_account_proto_init() file_rpc_list_accounts_proto_init() diff --git a/bff/pb/service_df.pb.gw.go b/bff/pb/service_df.pb.gw.go index 5e731cd..308fc60 100644 --- a/bff/pb/service_df.pb.gw.go +++ b/bff/pb/service_df.pb.gw.go @@ -531,6 +531,74 @@ func local_request_Df_UpdateAccountPrivacy_0(ctx context.Context, marshaler runt } +func request_Df_AddEmailAddress_0(ctx context.Context, marshaler runtime.Marshaler, client DfClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AddEmailAddressRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AddEmailAddress(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Df_AddEmailAddress_0(ctx context.Context, marshaler runtime.Marshaler, server DfServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AddEmailAddressRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AddEmailAddress(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Df_AddEmailAddresses_0(ctx context.Context, marshaler runtime.Marshaler, client DfClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AddEmailAddressesRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AddEmailAddresses(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Df_AddEmailAddresses_0(ctx context.Context, marshaler runtime.Marshaler, server DfServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AddEmailAddressesRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AddEmailAddresses(ctx, &protoReq) + return msg, metadata, err + +} + func request_Df_CreatePerson_0(ctx context.Context, marshaler runtime.Marshaler, client DfClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq CreatePersonRequest var metadata runtime.ServerMetadata @@ -1572,6 +1640,56 @@ func RegisterDfHandlerServer(ctx context.Context, mux *runtime.ServeMux, server }) + mux.Handle("POST", pattern_Df_AddEmailAddress_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/AddEmailAddress", runtime.WithHTTPPathPattern("/v1/persons/add_email")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Df_AddEmailAddress_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_AddEmailAddress_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Df_AddEmailAddresses_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/AddEmailAddresses", runtime.WithHTTPPathPattern("/v1/persons/add_emails")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Df_AddEmailAddresses_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_AddEmailAddresses_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Df_CreatePerson_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2274,6 +2392,50 @@ func RegisterDfHandlerClient(ctx context.Context, mux *runtime.ServeMux, client }) + mux.Handle("POST", pattern_Df_AddEmailAddress_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/AddEmailAddress", runtime.WithHTTPPathPattern("/v1/persons/add_email")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Df_AddEmailAddress_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_AddEmailAddress_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Df_AddEmailAddresses_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/AddEmailAddresses", runtime.WithHTTPPathPattern("/v1/persons/add_emails")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Df_AddEmailAddresses_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_AddEmailAddresses_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("POST", pattern_Df_CreatePerson_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2634,6 +2796,10 @@ var ( pattern_Df_UpdateAccountPrivacy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "accounts", "update_account_privacy"}, "")) + pattern_Df_AddEmailAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "persons", "add_email"}, "")) + + pattern_Df_AddEmailAddresses_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "persons", "add_emails"}, "")) + pattern_Df_CreatePerson_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "persons", "create_person"}, "")) pattern_Df_UpdatePerson_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "persons", "update_person"}, "")) @@ -2692,6 +2858,10 @@ var ( forward_Df_UpdateAccountPrivacy_0 = runtime.ForwardResponseMessage + forward_Df_AddEmailAddress_0 = runtime.ForwardResponseMessage + + forward_Df_AddEmailAddresses_0 = runtime.ForwardResponseMessage + forward_Df_CreatePerson_0 = runtime.ForwardResponseMessage forward_Df_UpdatePerson_0 = runtime.ForwardResponseMessage diff --git a/bff/pb/service_df_grpc.pb.go b/bff/pb/service_df_grpc.pb.go index f35aa23..a330ea9 100644 --- a/bff/pb/service_df_grpc.pb.go +++ b/bff/pb/service_df_grpc.pb.go @@ -32,6 +32,8 @@ const ( Df_CreateAccountInfo_FullMethodName = "/pb.df/CreateAccountInfo" Df_UpdateAccountInfo_FullMethodName = "/pb.df/UpdateAccountInfo" Df_UpdateAccountPrivacy_FullMethodName = "/pb.df/UpdateAccountPrivacy" + Df_AddEmailAddress_FullMethodName = "/pb.df/AddEmailAddress" + Df_AddEmailAddresses_FullMethodName = "/pb.df/AddEmailAddresses" Df_CreatePerson_FullMethodName = "/pb.df/CreatePerson" Df_UpdatePerson_FullMethodName = "/pb.df/UpdatePerson" Df_GetPerson_FullMethodName = "/pb.df/GetPerson" @@ -66,6 +68,8 @@ type DfClient interface { CreateAccountInfo(ctx context.Context, in *CreateAccountInfoRequest, opts ...grpc.CallOption) (*CreateAccountInfoResponse, error) UpdateAccountInfo(ctx context.Context, in *UpdateAccountInfoRequest, opts ...grpc.CallOption) (*UpdateAccountInfoResponse, error) UpdateAccountPrivacy(ctx context.Context, in *UpdateAccountPrivacyRequest, opts ...grpc.CallOption) (*UpdateAccountPrivacyResponse, error) + AddEmailAddress(ctx context.Context, in *AddEmailAddressRequest, opts ...grpc.CallOption) (*AddEmailAddressResponse, error) + AddEmailAddresses(ctx context.Context, in *AddEmailAddressesRequest, opts ...grpc.CallOption) (*AddEmailAddressesResponse, error) CreatePerson(ctx context.Context, in *CreatePersonRequest, opts ...grpc.CallOption) (*CreatePersonResponse, error) UpdatePerson(ctx context.Context, in *UpdatePersonRequest, opts ...grpc.CallOption) (*UpdatePersonResponse, error) GetPerson(ctx context.Context, in *GetPersonRequest, opts ...grpc.CallOption) (*GetPersonResponse, error) @@ -208,6 +212,24 @@ func (c *dfClient) UpdateAccountPrivacy(ctx context.Context, in *UpdateAccountPr return out, nil } +func (c *dfClient) AddEmailAddress(ctx context.Context, in *AddEmailAddressRequest, opts ...grpc.CallOption) (*AddEmailAddressResponse, error) { + out := new(AddEmailAddressResponse) + err := c.cc.Invoke(ctx, Df_AddEmailAddress_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *dfClient) AddEmailAddresses(ctx context.Context, in *AddEmailAddressesRequest, opts ...grpc.CallOption) (*AddEmailAddressesResponse, error) { + out := new(AddEmailAddressesResponse) + err := c.cc.Invoke(ctx, Df_AddEmailAddresses_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *dfClient) CreatePerson(ctx context.Context, in *CreatePersonRequest, opts ...grpc.CallOption) (*CreatePersonResponse, error) { out := new(CreatePersonResponse) err := c.cc.Invoke(ctx, Df_CreatePerson_FullMethodName, in, out, opts...) @@ -360,6 +382,8 @@ type DfServer interface { CreateAccountInfo(context.Context, *CreateAccountInfoRequest) (*CreateAccountInfoResponse, error) UpdateAccountInfo(context.Context, *UpdateAccountInfoRequest) (*UpdateAccountInfoResponse, error) UpdateAccountPrivacy(context.Context, *UpdateAccountPrivacyRequest) (*UpdateAccountPrivacyResponse, error) + AddEmailAddress(context.Context, *AddEmailAddressRequest) (*AddEmailAddressResponse, error) + AddEmailAddresses(context.Context, *AddEmailAddressesRequest) (*AddEmailAddressesResponse, error) CreatePerson(context.Context, *CreatePersonRequest) (*CreatePersonResponse, error) UpdatePerson(context.Context, *UpdatePersonRequest) (*UpdatePersonResponse, error) GetPerson(context.Context, *GetPersonRequest) (*GetPersonResponse, error) @@ -421,6 +445,12 @@ func (UnimplementedDfServer) UpdateAccountInfo(context.Context, *UpdateAccountIn func (UnimplementedDfServer) UpdateAccountPrivacy(context.Context, *UpdateAccountPrivacyRequest) (*UpdateAccountPrivacyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateAccountPrivacy not implemented") } +func (UnimplementedDfServer) AddEmailAddress(context.Context, *AddEmailAddressRequest) (*AddEmailAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddEmailAddress not implemented") +} +func (UnimplementedDfServer) AddEmailAddresses(context.Context, *AddEmailAddressesRequest) (*AddEmailAddressesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddEmailAddresses not implemented") +} func (UnimplementedDfServer) CreatePerson(context.Context, *CreatePersonRequest) (*CreatePersonResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreatePerson not implemented") } @@ -713,6 +743,42 @@ func _Df_UpdateAccountPrivacy_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _Df_AddEmailAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddEmailAddressRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfServer).AddEmailAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Df_AddEmailAddress_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfServer).AddEmailAddress(ctx, req.(*AddEmailAddressRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Df_AddEmailAddresses_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddEmailAddressesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DfServer).AddEmailAddresses(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Df_AddEmailAddresses_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DfServer).AddEmailAddresses(ctx, req.(*AddEmailAddressesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Df_CreatePerson_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreatePersonRequest) if err := dec(in); err != nil { @@ -1042,6 +1108,14 @@ var Df_ServiceDesc = grpc.ServiceDesc{ MethodName: "UpdateAccountPrivacy", Handler: _Df_UpdateAccountPrivacy_Handler, }, + { + MethodName: "AddEmailAddress", + Handler: _Df_AddEmailAddress_Handler, + }, + { + MethodName: "AddEmailAddresses", + Handler: _Df_AddEmailAddresses_Handler, + }, { MethodName: "CreatePerson", Handler: _Df_CreatePerson_Handler, diff --git a/bff/proto/account.proto b/bff/proto/account.proto index b4f8d32..aa318e7 100644 --- a/bff/proto/account.proto +++ b/bff/proto/account.proto @@ -17,6 +17,7 @@ message Account { uint64 id = 1; string email = 2; optional string secret_key = 3; + optional uint32 account_level = 4; google.protobuf.Timestamp email_verified_time = 9 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "\"2023-10-05T00:00:00Z\"" }]; diff --git a/bff/proto/email_address.proto b/bff/proto/email_address.proto new file mode 100644 index 0000000..1a8e07f --- /dev/null +++ b/bff/proto/email_address.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package pb; + +import "protoc-gen-openapiv2/options/annotations.proto"; + +option go_package = "github.com/itsscb/df/pb"; + +message EmailAddress { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "EmailAddress"; + }; + }; + uint64 id = 1; + uint64 person_id = 2; + string email = 3; +} \ No newline at end of file diff --git a/bff/proto/person.proto b/bff/proto/person.proto index abe8acd..92e9276 100644 --- a/bff/proto/person.proto +++ b/bff/proto/person.proto @@ -33,4 +33,5 @@ message Person { google.protobuf.Timestamp changed = 13 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "\"2023-10-05T00:00:00Z\"" }]; + optional string relationship = 14; } \ No newline at end of file diff --git a/bff/proto/rpc_add_email.proto b/bff/proto/rpc_add_email.proto new file mode 100644 index 0000000..71a5e0a --- /dev/null +++ b/bff/proto/rpc_add_email.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +package pb; + +import "protoc-gen-openapiv2/options/annotations.proto"; + +import "email_address.proto"; + +option go_package = "github.com/itsscb/df/pb"; + +message AddEmailAddressRequest { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "Add EmailAddress"; + description: "Add an EmailAddress"; + required: [ + "person_id", + "email" + ]; + }; + }; + uint64 person_id = 1; + string email = 2; +} + +message AddEmailAddressResponse { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "Added EmailAddress"; + description: "Returns the added EmailAddress"; + }; + }; + EmailAddress email = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + }]; +} \ No newline at end of file diff --git a/bff/proto/rpc_add_emails.proto b/bff/proto/rpc_add_emails.proto new file mode 100644 index 0000000..8869ba3 --- /dev/null +++ b/bff/proto/rpc_add_emails.proto @@ -0,0 +1,35 @@ +syntax = "proto3"; + +package pb; + +import "protoc-gen-openapiv2/options/annotations.proto"; + +import "email_address.proto"; + +option go_package = "github.com/itsscb/df/pb"; + +message AddEmailAddressesRequest { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "Add EmailAddress"; + description: "Add an EmailAddress"; + required: [ + "person_id", + "email" + ]; + }; + }; + uint64 person_id = 1; + repeated string email = 2; +} + +message AddEmailAddressesResponse { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "Added EmailAddresses"; + description: "Returns the added EmailAddresses"; + }; + }; + repeated EmailAddress emails = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + }]; +} \ No newline at end of file diff --git a/bff/proto/rpc_create_person.proto b/bff/proto/rpc_create_person.proto index a45e0ae..cd5ce8e 100644 --- a/bff/proto/rpc_create_person.proto +++ b/bff/proto/rpc_create_person.proto @@ -22,6 +22,7 @@ message CreatePersonRequest { "city", "zip", "country", + "relationship", "birthday" ]; }; @@ -34,7 +35,8 @@ message CreatePersonRequest { string city = 5; string zip = 6; string country = 7; - google.protobuf.Timestamp birthday = 8 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + string relationship = 8; + google.protobuf.Timestamp birthday = 9 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "\"1990-10-05T00:00:00Z\"" }]; } diff --git a/bff/proto/rpc_delete_email.proto b/bff/proto/rpc_delete_email.proto new file mode 100644 index 0000000..e700f53 --- /dev/null +++ b/bff/proto/rpc_delete_email.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; + +package pb; + +import "protoc-gen-openapiv2/options/annotations.proto"; + +option go_package = "github.com/itsscb/df/pb"; + +message DeleteEmailAddressRequest { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "Delete EmailAddress"; + description: "Delete an EmailAddress"; + required: [ + "id" + ]; + }; + }; + uint64 id = 1; +} + +message DeleteEmailAddressResponse { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + title: "Deleted EmailAddress"; + }; + }; + uint64 id = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + }]; +} \ No newline at end of file diff --git a/bff/proto/rpc_update_person.proto b/bff/proto/rpc_update_person.proto index f6fdabe..13ea018 100644 --- a/bff/proto/rpc_update_person.proto +++ b/bff/proto/rpc_update_person.proto @@ -28,7 +28,8 @@ message UpdatePersonRequest { optional string city = 5; optional string zip = 6; optional string country = 7; - optional google.protobuf.Timestamp birthday = 8 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + optional string relationship = 8; + optional google.protobuf.Timestamp birthday = 9 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { example: "\"1990-10-05T00:00:00Z\"" }]; } diff --git a/bff/proto/service_df.proto b/bff/proto/service_df.proto index 2aeca56..ffa26be 100644 --- a/bff/proto/service_df.proto +++ b/bff/proto/service_df.proto @@ -16,6 +16,8 @@ import "rpc_get_person.proto"; import "rpc_list_persons.proto"; import "rpc_update_person.proto"; import "rpc_delete_person.proto"; +import "rpc_add_email.proto"; +import "rpc_add_emails.proto"; import "rpc_create_account.proto"; import "rpc_get_account.proto"; @@ -243,6 +245,36 @@ option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { } }; }; + rpc AddEmailAddress (AddEmailAddressRequest) returns (AddEmailAddressResponse) { + option (google.api.http) = { + post: "/v1/persons/add_email" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "Add Email Address" + security: { + security_requirement: { + key: "BearerAuth"; + value: {} + } + } + }; + }; + rpc AddEmailAddresses (AddEmailAddressesRequest) returns (AddEmailAddressesResponse) { + option (google.api.http) = { + post: "/v1/persons/add_emails" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + summary: "Add Email Addresses" + security: { + security_requirement: { + key: "BearerAuth"; + value: {} + } + } + }; + }; rpc CreatePerson (CreatePersonRequest) returns (CreatePersonResponse) { option (google.api.http) = { post: "/v1/persons/create_person" diff --git a/bff/sqlc.yaml b/bff/sqlc.yaml index 7ea56f8..8cd92a1 100644 --- a/bff/sqlc.yaml +++ b/bff/sqlc.yaml @@ -17,6 +17,10 @@ sql: go_type: "uint64" - column: "payments.account_id" go_type: "uint64" + - column: "email_addresses.person_id" + go_type: "uint64" + - column: "phone_numbers.person_id" + go_type: "uint64" - column: "account_info.account_id" go_type: "uint64" - column: "persons.account_id" diff --git a/frontend/app/android/app/src/main/AndroidManifest.xml b/frontend/app/android/app/src/main/AndroidManifest.xml index 996a45e..18e29e5 100644 --- a/frontend/app/android/app/src/main/AndroidManifest.xml +++ b/frontend/app/android/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + diff --git a/frontend/app/android/app/src/main/res/ic_launcher-web.png b/frontend/app/android/app/src/main/res/ic_launcher-web.png new file mode 100644 index 0000000..3e91b38 Binary files /dev/null and b/frontend/app/android/app/src/main/res/ic_launcher-web.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/frontend/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/frontend/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/frontend/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/frontend/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..036d09b --- /dev/null +++ b/frontend/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4..1734165 100644 Binary files a/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..b2c1ca9 Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..2702233 Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/frontend/app/android/app/src/main/res/mipmap-ldpi/ic_launcher.png new file mode 100644 index 0000000..3c3f546 Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-ldpi/ic_launcher.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 17987b7..5ce7fcc 100644 Binary files a/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..e0fc69e Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..06970a0 Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 09d4391..3c9dff8 100644 Binary files a/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..aa8fe78 Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..3ad31cb Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index d5f1c8d..8b87f3d 100644 Binary files a/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..f799808 Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..1ff1577 Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372e..dea517d 100644 Binary files a/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..ac54bb3 Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..c74e3f0 Binary files /dev/null and b/frontend/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/frontend/app/android/app/src/main/res/playstore-icon.png b/frontend/app/android/app/src/main/res/playstore-icon.png new file mode 100644 index 0000000..e9da18f Binary files /dev/null and b/frontend/app/android/app/src/main/res/playstore-icon.png differ diff --git a/frontend/app/android/app/src/main/res/values/ic_launcher_background.xml b/frontend/app/android/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..04f8a66 --- /dev/null +++ b/frontend/app/android/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #040404 + \ No newline at end of file diff --git a/frontend/app/assets/JPEG.jpg b/frontend/app/assets/JPEG.jpg index 51faa38..d5397b6 100644 Binary files a/frontend/app/assets/JPEG.jpg and b/frontend/app/assets/JPEG.jpg differ diff --git a/frontend/app/assets/icon.png b/frontend/app/assets/icon.png new file mode 100644 index 0000000..90a9712 Binary files /dev/null and b/frontend/app/assets/icon.png differ diff --git a/frontend/app/assets/icon.svg b/frontend/app/assets/icon.svg new file mode 100644 index 0000000..a37845f --- /dev/null +++ b/frontend/app/assets/icon.svg @@ -0,0 +1,107 @@ + + + + diff --git a/frontend/app/assets/icon_round.png b/frontend/app/assets/icon_round.png new file mode 100644 index 0000000..977c00b Binary files /dev/null and b/frontend/app/assets/icon_round.png differ diff --git a/frontend/app/assets/icons/icon.jpg b/frontend/app/assets/icons/icon.jpg new file mode 100644 index 0000000..2e09e75 Binary files /dev/null and b/frontend/app/assets/icons/icon.jpg differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png new file mode 100644 index 0000000..5053027 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png new file mode 100644 index 0000000..0e1279c Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/102.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000..4f6eb0a Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png new file mode 100644 index 0000000..dc2a250 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png new file mode 100644 index 0000000..d404311 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png new file mode 100644 index 0000000..9bc09f0 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/128.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png new file mode 100644 index 0000000..fc344a6 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png new file mode 100644 index 0000000..acaaa54 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png new file mode 100644 index 0000000..0eaa2af Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/16.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png new file mode 100644 index 0000000..debb71a Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png new file mode 100644 index 0000000..5737940 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/172.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 0000000..975aabd Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png new file mode 100644 index 0000000..f92c934 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/196.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png new file mode 100644 index 0000000..85431d6 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png new file mode 100644 index 0000000..aa5069c Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/216.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png new file mode 100644 index 0000000..59e3d1a Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/256.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 0000000..3951b9f Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png new file mode 100644 index 0000000..c27ede1 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/32.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 0000000..7bbcefa Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png new file mode 100644 index 0000000..84421de Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/48.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png new file mode 100644 index 0000000..3e0ca10 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png new file mode 100644 index 0000000..640c836 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/512.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png new file mode 100644 index 0000000..976259b Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/55.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png new file mode 100644 index 0000000..cb0359a Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png new file mode 100644 index 0000000..a511426 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png new file mode 100644 index 0000000..03b6e23 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png new file mode 100644 index 0000000..74ffcb1 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/64.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png new file mode 100644 index 0000000..1bf68c3 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/66.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png new file mode 100644 index 0000000..923c9d8 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png new file mode 100644 index 0000000..e50231c Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 0000000..d73c453 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png new file mode 100644 index 0000000..5c03d33 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png new file mode 100644 index 0000000..6367e53 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/88.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png new file mode 100644 index 0000000..5b1abeb Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/92.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fa..e83c3bf 100644 --- a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1,128 @@ { - "images" : [ - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" - }, - { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" - }, - { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" - }, - { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" - }, - { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" - }, - { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" - }, - { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" - }, - { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" + "images":[ + { + "idiom":"iphone", + "size":"20x20", + "scale":"2x", + "filename":"Icon-App-20x20@2x.png" + }, + { + "idiom":"iphone", + "size":"20x20", + "scale":"3x", + "filename":"Icon-App-20x20@3x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"1x", + "filename":"Icon-App-29x29@1x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"2x", + "filename":"Icon-App-29x29@2x.png" + }, + { + "idiom":"iphone", + "size":"29x29", + "scale":"3x", + "filename":"Icon-App-29x29@3x.png" + }, + { + "idiom":"iphone", + "size":"40x40", + "scale":"2x", + "filename":"Icon-App-40x40@2x.png" + }, + { + "idiom":"iphone", + "size":"40x40", + "scale":"3x", + "filename":"Icon-App-40x40@3x.png" + }, + { + "idiom":"iphone", + "size":"60x60", + "scale":"2x", + "filename":"Icon-App-60x60@2x.png" + }, + { + "idiom":"iphone", + "size":"60x60", + "scale":"3x", + "filename":"Icon-App-60x60@3x.png" + }, + { + "idiom":"iphone", + "size":"76x76", + "scale":"2x", + "filename":"Icon-App-76x76@2x.png" + }, + { + "idiom":"ipad", + "size":"20x20", + "scale":"1x", + "filename":"Icon-App-20x20@1x.png" + }, + { + "idiom":"ipad", + "size":"20x20", + "scale":"2x", + "filename":"Icon-App-20x20@2x.png" + }, + { + "idiom":"ipad", + "size":"29x29", + "scale":"1x", + "filename":"Icon-App-29x29@1x.png" + }, + { + "idiom":"ipad", + "size":"29x29", + "scale":"2x", + "filename":"Icon-App-29x29@2x.png" + }, + { + "idiom":"ipad", + "size":"40x40", + "scale":"1x", + "filename":"Icon-App-40x40@1x.png" + }, + { + "idiom":"ipad", + "size":"40x40", + "scale":"2x", + "filename":"Icon-App-40x40@2x.png" + }, + { + "idiom":"ipad", + "size":"76x76", + "scale":"1x", + "filename":"Icon-App-76x76@1x.png" + }, + { + "idiom":"ipad", + "size":"76x76", + "scale":"2x", + "filename":"Icon-App-76x76@2x.png" + }, + { + "idiom":"ipad", + "size":"83.5x83.5", + "scale":"2x", + "filename":"Icon-App-83.5x83.5@2x.png" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "scale" : "1x", + "filename" : "ItunesArtwork@2x.png" + } + ], + "info":{ + "version":1, + "author":"easyappicon" } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } } diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 7353c41..6353928 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 797d452..7a28563 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index 6ed2d93..1d64359 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cd7b00..3473c72 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index fe73094..0127b69 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index 321773c..587d475 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 797d452..7a28563 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index 502f463..172ddd1 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 0ec3034..2aa0b55 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 0ec3034..2aa0b55 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index e9f5fea..22795a0 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 84ac32a..04707a5 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 8953cba..a8fd2ab 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 0467bf1..5eb11b3 100644 Binary files a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png new file mode 100644 index 0000000..181feda Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/iTunesArtwork@1x.png b/frontend/app/ios/Runner/Assets.xcassets/iTunesArtwork@1x.png new file mode 100644 index 0000000..e9da18f Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/iTunesArtwork@1x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/iTunesArtwork@2x.png b/frontend/app/ios/Runner/Assets.xcassets/iTunesArtwork@2x.png new file mode 100644 index 0000000..181feda Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/iTunesArtwork@2x.png differ diff --git a/frontend/app/ios/Runner/Assets.xcassets/iTunesArtwork@3x.png b/frontend/app/ios/Runner/Assets.xcassets/iTunesArtwork@3x.png new file mode 100644 index 0000000..47bdf34 Binary files /dev/null and b/frontend/app/ios/Runner/Assets.xcassets/iTunesArtwork@3x.png differ diff --git a/frontend/app/lib/main.dart b/frontend/app/lib/main.dart index c421f10..b48949c 100644 --- a/frontend/app/lib/main.dart +++ b/frontend/app/lib/main.dart @@ -1,6 +1,14 @@ import 'package:app/model/services/auth_service.dart'; import 'package:app/model/services/storage_service.dart'; +import 'package:app/model/view_model/base_vm.dart'; +import 'package:app/pages/account_info_page.dart'; +import 'package:app/pages/late_person_page.dart'; +import 'package:app/pages/notifications_page.dart'; +import 'package:app/pages/registration_page.dart'; +import 'package:app/pages/security_page.dart'; import 'package:app/pages/start_page.dart'; +import 'package:app/pages/verify_email_page.dart'; +import 'package:app/pb/account.pb.dart'; import 'package:app/util/colors.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart' @@ -63,8 +71,12 @@ class DigitalerFrieden extends StatefulWidget { class _DigitalerFriedenState extends State { final StorageService _storageService = StorageService(); + final BaseViewModel _vm = BaseViewModel(); int? accountLevel; - bool? authenticated; + String? accessToken; + bool authenticated = false; + Account? account; + bool verified = false; bool _loading = true; @override void initState() { @@ -74,39 +86,76 @@ class _DigitalerFriedenState extends State { void _init() async { accountLevel = await _storageService.accountLevel; - if (accountLevel! > 0) { + accessToken = await _storageService.accessToken; + verified = await _storageService.verified; + if (accountLevel! > 1) { authenticated = await AuthService.authenticateWithBiometrics(); } + if (authenticated && accountLevel != null && accountLevel! > 3) { + account = await _vm.account; + } + + if (account != null && !verified && account!.emailVerified) { + await _storageService.setVerified(account!.emailVerified); + verified = account!.emailVerified; + } + + print( + 'ACCOUNTLEVEL: $accountLevel ======= VERIFIED: $verified ======= ID: ${account?.id}\nTOKEN: $accessToken'); setState(() { _loading = false; }); } + Future getAccount(BuildContext context) async {} + @override Widget build(BuildContext context) { if (_loading) { - return SafeArea( - child: Center( - child: Column( - children: [ - const SizedBox( - height: 150, - ), - Hero( - tag: 'logo', - child: Image.asset( - 'assets/JPEG.jpg', - height: 180, - ), - ), - CircularProgressIndicator( - color: CustomColors.primary, - ), - ], - ), - ), - ); + return const StartPage(); + // return SafeArea( + // child: Center( + // child: Column( + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // Hero( + // tag: 'logo', + // child: Image.asset( + // 'assets/JPEG.jpg', + // height: 180, + // ), + // ), + // ], + // ), + // ), + // ); + } + if (verified) { + switch (accountLevel) { + case 6: + return const LatePersonPage(); + case 4 || 5: + return const AccountInfoPage(); + default: + return const StartPage(); + } + } else { + switch (accountLevel) { + case 1: + return const SecurityPage(); + case 2: + return const NotificationsPage(); + case 4: + return const VerifyEmailPage(); + case 3: + if (accessToken != null) { + return const VerifyEmailPage(); + } else { + return const RegistrationPage(); + } + default: + return const StartPage(); + } } - return const StartPage(); } } diff --git a/frontend/app/lib/model/services/backend_service.dart b/frontend/app/lib/model/services/backend_service.dart index a09ceaf..d3e8e86 100644 --- a/frontend/app/lib/model/services/backend_service.dart +++ b/frontend/app/lib/model/services/backend_service.dart @@ -8,6 +8,7 @@ import 'package:app/pb/google/protobuf/timestamp.pb.dart'; import 'package:app/pb/person.pb.dart'; import 'package:app/data/database.dart'; import 'package:app/pb/rpc_create_account.pb.dart'; +import 'package:app/pb/rpc_create_account_info.pb.dart'; import 'package:app/pb/rpc_create_person.pb.dart'; import 'package:app/pb/rpc_get_account.pb.dart'; import 'package:app/pb/rpc_get_account_info.pb.dart'; @@ -126,13 +127,13 @@ class BackendService { Future createAccount( {required String email, required String password}) async { try { - final resp = - await BackendService.client.createAccount(CreateAccountRequest( + // final resp = + await BackendService.client.createAccount(CreateAccountRequest( email: email, password: password, )); - print(resp); - await _storageService.setAccountId(resp.account.id); + // print(resp); + // await _storageService.setAccountId(resp.account.id); return await login(email: email, password: password); } on SocketException { throw FetchDataException('Keine Internet Verbindung'); @@ -143,16 +144,84 @@ class BackendService { } } + Future createAccountInfo( + {required String firstname, + required String lastname, + required String streetAddress, + required String zip, + required String city, + required String country, + required String phoneNumber, + required DateTime birthday}) async { + try { + final acc = await account; + if (acc == null) { + throw FetchDataException('AccountID nicht gespeichert'); + } + final resp = BackendService.client.createAccountInfo( + CreateAccountInfoRequest( + accountId: acc.id, + firstname: firstname, + lastname: lastname, + street: streetAddress, + zip: zip, + city: city, + country: country, + phone: phoneNumber, + birthday: Timestamp.fromDateTime(birthday), + ), + options: CallOptions( + metadata: { + 'Authorization': 'Bearer ${await _storageService.accessToken}' + }, + ), + ); + return resp != null; + } on SocketException { + throw FetchDataException('Keine Internet Verbindung'); + } on GrpcError catch (err) { + throw FetchDataException('${err.message}'); + } catch (err) { + throw InternalException(err.toString()); + } + } + Future resendVerification({required Int64 accountId}) async { try { final resp = await BackendService.client.resendVerification( - ResendVerificationRequest( - accountId: accountId, - ), + ResendVerificationRequest( + accountId: accountId, + ), + options: CallOptions( + metadata: { + 'Authorization': 'Bearer ${await _storageService.accessToken}' + }, + ), + ); + return resp.account.id == accountId; + } on SocketException { + throw FetchDataException('Keine Internet Verbindung'); + } on GrpcError catch (err) { + throw FetchDataException('${err.message}'); + } catch (err) { + throw InternalException(err.toString()); + } + } + + Future get account async { + try { + final id = await _storageService.accountId; + if (id == 0) { + return null; + } + final resp = await _client.getAccount(GetAccountRequest(id: id), options: CallOptions(metadata: { 'Authorization': 'Bearer ${await _storageService.accessToken}' })); - return resp.account.id == accountId; + if (resp.account.id < 1) { + return null; + } + return resp.account; } on SocketException { throw FetchDataException('Keine Internet Verbindung'); } on GrpcError catch (err) { @@ -399,6 +468,7 @@ class BackendService { // ); await _storageService.setAccessToken(response.accessToken); + await _storageService.setAccountId(response.accountId); // await Session.newSession(s); return response.accessToken != ''; diff --git a/frontend/app/lib/model/services/storage_service.dart b/frontend/app/lib/model/services/storage_service.dart index 1ea5ffd..785eb59 100644 --- a/frontend/app/lib/model/services/storage_service.dart +++ b/frontend/app/lib/model/services/storage_service.dart @@ -73,6 +73,14 @@ class StorageService { return await readData('access_token'); } + Future setVerified(bool verified) async { + return await writeData(StorageItem('verified', verified ? '1' : '0')); + } + + Future get verified async { + return await readData('verified') == '1'; + } + Future setAccountId(Int64 accountId) async { return await writeData(StorageItem('account_id', '$accountId')); } diff --git a/frontend/app/lib/model/view_model/account_vm.dart b/frontend/app/lib/model/view_model/account_vm.dart deleted file mode 100644 index bbdbbac..0000000 --- a/frontend/app/lib/model/view_model/account_vm.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:app/model/apis/api_response.dart'; -import 'package:app/model/services/backend_service.dart'; -import 'package:app/model/view_model/base_vm.dart'; -import 'package:app/pb/account.pb.dart'; - -class AccountViewModel extends BaseViewModel { - AccountViewModel() { - _init(); - } - final ApiResponse _apiResponse = ApiResponse.initial('Keine Daten'); - - final BackendService _service = BackendService(); - Account? _account; - - @override - ApiResponse get response { - return _apiResponse; - } - - Account? get account { - return _account; - } - - void _init() async { - // super.init(); - // try { - // _apiResponse = ApiResponse.completed(await _service.getAccount()); - // } catch (e) { - // _apiResponse = ApiResponse.error(e.toString()); - // } - // notifyListeners(); - } -} diff --git a/frontend/app/lib/model/view_model/base_vm.dart b/frontend/app/lib/model/view_model/base_vm.dart index df85f21..25cee29 100644 --- a/frontend/app/lib/model/view_model/base_vm.dart +++ b/frontend/app/lib/model/view_model/base_vm.dart @@ -1,7 +1,7 @@ import 'package:app/model/apis/api_response.dart'; import 'package:app/model/services/backend_service.dart'; import 'package:app/model/services/storage_service.dart'; -import 'package:app/pages_draft/home_page.dart'; +import 'package:app/pb/account.pb.dart'; import 'package:app/util/colors.dart'; import 'package:flutter/material.dart'; @@ -29,51 +29,59 @@ class BaseViewModel with ChangeNotifier { // // } // } - Future isLoggedIn(BuildContext context) async { - final messenger = ScaffoldMessenger.of(context); - final navigator = Navigator.of(context); - bool loggedIn = false; - try { - loggedIn = await BackendService.isLoggedIn; - } catch (err) { - if (err.toString().contains('session is blocked')) { - _apiResponse = ApiResponse.error('Sitzung ist abgelaufen'); - navigator.pushAndRemoveUntil( - MaterialPageRoute( - builder: (builder) => HomePage( - loggedOut: true, - )), - (route) => false); - messenger.showSnackBar(SnackBar( - backgroundColor: CustomColors.error, - content: const Text( - 'Sitzung ist abgelaufen', - style: TextStyle(color: Colors.white), - ), - // action: SnackBarAction( - // label: 'Details', - // onPressed: () { - // if (context.mounted) { - // showDialog( - // context: context, - // builder: (context) => AlertDialog( - // backgroundColor: Colors.black, - // icon: Icon( - // Icons.error, - // color: CustomColors.error, - // ), - // content: Text( - // err.toString(), - // textAlign: TextAlign.center, - // ), - // )); - // } - // }, - // ), - )); - } - } - return loggedIn; + // Future isLoggedIn(BuildContext context) async { + // final messenger = ScaffoldMessenger.of(context); + // final navigator = Navigator.of(context); + // bool loggedIn = false; + // try { + // loggedIn = await BackendService.isLoggedIn; + // } catch (err) { + // if (err.toString().contains('session is blocked')) { + // _apiResponse = ApiResponse.error('Sitzung ist abgelaufen'); + // navigator.pushAndRemoveUntil( + // MaterialPageRoute( + // builder: (builder) => HomePage( + // loggedOut: true, + // )), + // (route) => false); + // messenger.showSnackBar(SnackBar( + // backgroundColor: CustomColors.error, + // content: const Text( + // 'Sitzung ist abgelaufen', + // style: TextStyle(color: Colors.white), + // ), + // // action: SnackBarAction( + // // label: 'Details', + // // onPressed: () { + // // if (context.mounted) { + // // showDialog( + // // context: context, + // // builder: (context) => AlertDialog( + // // backgroundColor: Colors.black, + // // icon: Icon( + // // Icons.error, + // // color: CustomColors.error, + // // ), + // // content: Text( + // // err.toString(), + // // textAlign: TextAlign.center, + // // ), + // // )); + // // } + // // }, + // // ), + // )); + // } + // } + // return loggedIn; + // } + + Future get account async { + notifyListeners(); + final acc = await _service.account; + ApiResponse.completed(acc); + notifyListeners(); + return acc; } Future getAccount(BuildContext context) async { @@ -141,6 +149,67 @@ class BaseViewModel with ChangeNotifier { notifyListeners(); } + Future createAccountInfo( + BuildContext context, { + required String firstname, + required String lastname, + required String streetAddress, + required String zip, + required String city, + required String country, + required String phoneNumber, + required DateTime birthday, + }) async { + notifyListeners(); + final messenger = ScaffoldMessenger.of(context); + bool resp = false; + try { + resp = await _service.createAccountInfo( + firstname: firstname, + lastname: lastname, + streetAddress: streetAddress, + zip: zip, + city: city, + country: country, + phoneNumber: phoneNumber, + birthday: birthday, + ); + if (resp) { + _apiResponse = ApiResponse.completed('Registrierung abgeschlossen'); + } + return resp; + } catch (e) { + messenger.showSnackBar(SnackBar( + backgroundColor: CustomColors.error, + content: const Text( + 'Daten konnten nicht übertragen werden', + style: TextStyle(color: Colors.white), + ), + action: SnackBarAction( + label: 'Details', + onPressed: () { + showDialog( + context: context, + builder: (context) => AlertDialog( + backgroundColor: Colors.black, + icon: Icon( + Icons.error, + color: CustomColors.error, + ), + content: Text( + e.toString(), + textAlign: TextAlign.center, + ), + )); + }, + ), + )); + _apiResponse = ApiResponse.error(e.toString()); + } + notifyListeners(); + return resp; + } + Future logout() async { _apiResponse = ApiResponse.loading('Logge aus'); notifyListeners(); diff --git a/frontend/app/lib/pages/account_info_page.dart b/frontend/app/lib/pages/account_info_page.dart new file mode 100644 index 0000000..2cb11f5 --- /dev/null +++ b/frontend/app/lib/pages/account_info_page.dart @@ -0,0 +1,359 @@ +import 'package:app/model/services/storage_service.dart'; +import 'package:app/model/view_model/base_vm.dart'; +import 'package:app/pages/late_person_page.dart'; +import 'package:app/pages/loading_page.dart'; +import 'package:app/pages/notifications_page.dart'; +import 'package:app/util/colors.dart'; +import 'package:app/util/validation.dart'; +import 'package:app/widgets/custom_scaffold.dart'; +import 'package:flutter/material.dart'; + +class AccountInfoPage extends StatefulWidget { + const AccountInfoPage({super.key}); + + @override + State createState() => _AccountInfoPageState(); +} + +class _AccountInfoPageState extends State { + bool _loading = true; + final StorageService _storageService = StorageService(); + final BaseViewModel _vm = BaseViewModel(); + final _formKey = GlobalKey(); + final _firstNameController = TextEditingController(); + final _lastNameController = TextEditingController(); + final _streetController = TextEditingController(); + final _houseNumberController = TextEditingController(); + final _zipController = TextEditingController(); + final _cityController = TextEditingController(); + final _phoneController = TextEditingController(); + final _countryController = TextEditingController(); + final _birthdayController = TextEditingController(); + final _birthPlaceController = TextEditingController(); + + DateTime? _birthday; + @override + void initState() { + _init(); + super.initState(); + } + + @override + void dispose() { + _firstNameController.dispose(); + _lastNameController.dispose(); + _streetController.dispose(); + _houseNumberController.dispose(); + _zipController.dispose(); + _cityController.dispose(); + _phoneController.dispose(); + _countryController.dispose(); + _birthPlaceController.dispose(); + _birthdayController.dispose(); + super.dispose(); + } + + void _init() async { + _countryController.text = 'Deutschland'; + if (await _storageService.accountLevel < 5) { + await _storageService.setAccountLevel(5); + } + setState(() { + _loading = false; + }); + } + + Future _selectDate(BuildContext context) async { + final DateTime? picked = await showDatePicker( + context: context, + builder: (context, child) => Theme( + data: ThemeData.dark(), + child: child ?? const Text(''), + ), + initialDate: DateTime.now().add(const Duration(days: 365 * -18)), + firstDate: DateTime.now().add(const Duration(days: 365 * -100)), + lastDate: DateTime.now().add(const Duration(days: 365 * -18)), + ); + // firstDate: DateTime.now().add(const Duration(days: 365 * -100)), + // lastDate: DateTime.now().add(const Duration(days: 365 * -18))); + if (picked != null && picked != _birthday) { + setState(() { + _birthday = picked; + _birthdayController.text = + '${picked.day.toString().padLeft(2, '0')}.${picked.month.toString().padLeft(2, '0')}.${picked.year}'; + }); + } + } + + @override + Widget build(BuildContext context) { + return SizedBox( + height: MediaQuery.of(context).size.height, + child: CustomScaffold( + backButton: BackButton( + color: CustomColors.primary, + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => const NotificationsPage())); + }, + ), + children: _loading + ? [ + LoadingPage(), + ] + : [ + const Text( + 'Registrierung abschließen', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'sans-serif', + fontWeight: FontWeight.bold, + letterSpacing: 2.0, + fontSize: 25, + ), + ), + const SizedBox( + height: 20, + ), + SizedBox( + height: + MediaQuery.of(context).viewInsets.bottom > 0 ? 230 : 460, + child: SingleChildScrollView( + scrollDirection: Axis.vertical, + child: Stack( + children: [ + Form( + key: _formKey, + child: Column( + children: [ + TextFormField( + controller: _firstNameController, + autocorrect: false, + autofocus: true, + decoration: const InputDecoration( + label: Text('Vorname'), + filled: true, + ), + keyboardType: TextInputType.name, + validator: (value) { + if (value == null || !value.isValidName) { + return 'Bitte einen gültigen Vornamen eingeben'; + } + return null; + }, + ), + const SizedBox(height: 20), + TextFormField( + controller: _lastNameController, + autocorrect: false, + autofocus: true, + decoration: const InputDecoration( + label: Text('Nachname'), + filled: true, + ), + keyboardType: TextInputType.name, + validator: (value) { + if (value == null || !value.isValidName) { + return 'Bitte einen gültigen Nachnamen eingeben'; + } + return null; + }, + ), + const SizedBox(height: 20), + TextFormField( + controller: _streetController, + autocorrect: false, + autofocus: true, + decoration: const InputDecoration( + label: Text('Straße'), + filled: true, + ), + keyboardType: TextInputType.streetAddress, + validator: (value) { + if (value == null || + !value.isValidStreetAddress) { + return 'Bitte eine gültige Straße eingeben'; + } + return null; + }, + ), + const SizedBox(height: 20), + Row( + children: [ + SizedBox( + width: 130, + child: TextFormField( + controller: _houseNumberController, + autocorrect: false, + autofocus: true, + decoration: const InputDecoration( + label: Text('Hausnummer'), + filled: true, + ), + keyboardType: TextInputType.number, + validator: (value) { + if (value == null || + !value.isValidHouseNumber) { + return 'Nur Zahlen erlaubt'; + } + return null; + }, + ), + ), + const Spacer(), + SizedBox( + width: 160, + child: TextFormField( + controller: _zipController, + autocorrect: false, + autofocus: true, + decoration: const InputDecoration( + label: Text('Postleitzahl'), + filled: true, + ), + keyboardType: TextInputType.number, + validator: (value) { + if (value == null || + !value.isValidZip) { + return 'Bitte eine gültige Postleitzahl eingeben'; + } + return null; + }, + ), + ), + ], + ), + const SizedBox(height: 20), + TextFormField( + controller: _cityController, + autocorrect: false, + autofocus: true, + decoration: const InputDecoration( + label: Text('Stadt'), + filled: true, + ), + keyboardType: TextInputType.name, + validator: (value) { + if (value == null || !value.isValidCity) { + return 'Bitte einen gültigen Ort eingeben'; + } + return null; + }, + ), + const SizedBox(height: 20), + TextFormField( + controller: _countryController, + autocorrect: false, + autofocus: true, + readOnly: true, + decoration: const InputDecoration( + label: Text('Land'), + filled: true, + ), + keyboardType: TextInputType.name, + validator: (value) { + if (value == null || !value.isValidName) { + return 'Bitte einen gültigen Ort eingeben'; + } + return null; + }, + ), + const SizedBox(height: 20), + TextFormField( + controller: _phoneController, + autocorrect: false, + autofocus: true, + decoration: const InputDecoration( + label: Text('Telefonnummer'), + filled: true, + ), + keyboardType: TextInputType.phone, + validator: (value) { + if (value == null || !value.isValidPhone) { + return 'Bitte eine gültige Telefonnummer eingeben'; + } + return null; + }, + ), + const SizedBox(height: 20), + TextFormField( + onTap: () => _selectDate(context), + controller: _birthdayController, + autocorrect: false, + autofocus: true, + readOnly: true, + decoration: const InputDecoration( + label: Text('Geburtsdatum'), + filled: true, + ), + keyboardType: TextInputType.datetime, + validator: (value) { + if (value == null || value.isEmpty) { + return 'Bitte ein gültiges Datum eingeben'; + } + return null; + }, + ), + ], + ), + ), + ], + ), + ), + ), + const SizedBox(height: 20), + Hero( + tag: 'flow-button', + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: CustomColors.primary, + ), + onPressed: () async { + if (_formKey.currentState!.validate()) { + final resp = await _vm.createAccountInfo( + context, + firstname: _firstNameController.text, + lastname: _lastNameController.text, + city: _cityController.text, + country: _countryController.text, + zip: _zipController.text, + phoneNumber: _phoneController.text, + streetAddress: _streetController.text, + birthday: _birthday!, + ); + + if (resp) { + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => const LatePersonPage(), + ), + ); + } + } + } + }, + child: const SizedBox( + height: 60, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Weiter', + style: TextStyle( + fontSize: 20, + ), + ), + ], + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/frontend/app/lib/pages/late_person_page.dart b/frontend/app/lib/pages/late_person_page.dart new file mode 100644 index 0000000..7e2a5cb --- /dev/null +++ b/frontend/app/lib/pages/late_person_page.dart @@ -0,0 +1,64 @@ +import 'package:app/model/services/storage_service.dart'; +import 'package:app/pages/loading_page.dart'; +import 'package:app/pages/notifications_page.dart'; +import 'package:app/util/colors.dart'; +import 'package:app/widgets/custom_scaffold.dart'; +import 'package:flutter/material.dart'; + +class LatePersonPage extends StatefulWidget { + const LatePersonPage({super.key}); + + @override + State createState() => _LatePersonPageState(); +} + +class _LatePersonPageState extends State { + final StorageService _storageService = StorageService(); + bool _loading = true; + + @override + void initState() { + _init(); + super.initState(); + } + + void _init() async { + if (await _storageService.accountLevel < 6) { + await _storageService.setAccountLevel(6); + } + setState(() { + _loading = false; + }); + } + + @override + Widget build(BuildContext context) { + return CustomScaffold( + backButton: BackButton( + color: CustomColors.primary, + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => const NotificationsPage())); + }, + ), + children: _loading + ? [ + LoadingPage(), + ] + : [ + const Text( + 'Daten der Verstorbenen', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'sans-serif', + fontWeight: FontWeight.bold, + letterSpacing: 2.0, + fontSize: 25, + ), + ), + ], + ); + } +} diff --git a/frontend/app/lib/pages/loading_page.dart b/frontend/app/lib/pages/loading_page.dart new file mode 100644 index 0000000..263cf4c --- /dev/null +++ b/frontend/app/lib/pages/loading_page.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; + +class LoadingPage extends StatelessWidget { + LoadingPage({super.key}); + + @override + Widget build(BuildContext context) { + return Center( + child: Hero( + tag: 'logo', + child: Image.asset( + 'assets/icons/icon.jpg', + // height: 180, + ), + ), + ); + } +} diff --git a/frontend/app/lib/pages/notifications_page.dart b/frontend/app/lib/pages/notifications_page.dart index a2f4690..e7e4628 100644 --- a/frontend/app/lib/pages/notifications_page.dart +++ b/frontend/app/lib/pages/notifications_page.dart @@ -1,5 +1,9 @@ import 'package:app/model/services/storage_service.dart'; +import 'package:app/pages/account_info_page.dart'; +import 'package:app/pages/late_person_page.dart'; import 'package:app/pages/registration_page.dart'; +import 'package:app/pages/security_page.dart'; +import 'package:app/pages/verify_email_page.dart'; import 'package:app/util/colors.dart'; import 'package:flutter/material.dart'; @@ -25,18 +29,12 @@ class _NotificationsPageState extends State { } void _init() async { - final accountLevel = await _storageService.accountLevel; - if (accountLevel > 2 && mounted) { - await Navigator.push(context, - MaterialPageRoute(builder: (builder) => const RegistrationPage())); - setState(() { - _loading = false; - }); - } else { - setState(() { - _loading = false; - }); + if (await _storageService.accountLevel < 2) { + await _storageService.setAccountLevel(2); } + setState(() { + _loading = false; + }); } @override @@ -67,11 +65,12 @@ class _NotificationsPageState extends State { appBar: AppBar( leading: BackButton( color: CustomColors.primary, - onPressed: () async { - await _storageService.setAccountLevel(1); - if (mounted) { - Navigator.pop(context); - } + onPressed: () { + Navigator.pushAndRemoveUntil( + context, + MaterialPageRoute( + builder: (builder) => const SecurityPage()), + (route) => false); }, ), iconTheme: IconThemeData( @@ -125,15 +124,51 @@ class _NotificationsPageState extends State { ), onPressed: () async { await _setNotificationSetting(true); - await _storageService.setAccountLevel(3); - if (mounted) { - Navigator.push( - context, - MaterialPageRoute( - builder: (builder) => const RegistrationPage(), - // builder: (builder) => SecurityPage(), - ), - ); + if (await _storageService.accessToken != null) { + if (await _storageService.verified) { + switch (await _storageService.accountLevel) { + case 4 || 5: + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => + const AccountInfoPage(), + ), + ); + } + case 6: + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => + const LatePersonPage(), + ), + ); + } + } + } else { + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => + const VerifyEmailPage(), + ), + ); + } + } + } else { + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => + const RegistrationPage(), + ), + ); + } } }, child: const SizedBox( @@ -163,15 +198,49 @@ class _NotificationsPageState extends State { TextButton( onPressed: () async { await _setNotificationSetting(false); - await _storageService.setAccountLevel(3); - if (mounted) { - Navigator.push( - context, - MaterialPageRoute( - builder: (builder) => const RegistrationPage(), - // builder: (builder) => SecurityPage(), - ), - ); + if (await _storageService.accessToken != null) { + if (await _storageService.verified) { + switch (await _storageService.accountLevel) { + case 4 || 5: + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => + const AccountInfoPage(), + ), + ); + } + case 6: + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => + const LatePersonPage(), + ), + ); + } + } + } else { + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => const VerifyEmailPage(), + ), + ); + } + } + } else { + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => const RegistrationPage(), + ), + ); + } } }, child: Text( diff --git a/frontend/app/lib/pages/password_page.dart b/frontend/app/lib/pages/password_page.dart index 9767dc4..287711e 100644 --- a/frontend/app/lib/pages/password_page.dart +++ b/frontend/app/lib/pages/password_page.dart @@ -1,5 +1,5 @@ -import 'package:app/model/services/storage_service.dart'; import 'package:app/model/view_model/base_vm.dart'; +import 'package:app/pages/account_info_page.dart'; import 'package:app/pages/verify_email_page.dart'; import 'package:app/util/colors.dart'; import 'package:flutter/material.dart'; @@ -17,7 +17,6 @@ class PasswordPage extends StatefulWidget { class _PasswordPageState extends State { final BaseViewModel _vm = BaseViewModel(); - final StorageService _storageService = StorageService(); final _formKey = GlobalKey(); final _passwordController1 = TextEditingController(); @@ -203,8 +202,17 @@ class _PasswordPageState extends State { password: _passwordController1.text, ); } - if (loggedin && mounted) { - await _storageService.setAccountLevel(4); + if (loggedin) { + FocusManager.instance.primaryFocus + ?.unfocus(); + final acc = await _vm.account; + if (acc!.emailVerified) { + navigator.push( + MaterialPageRoute( + builder: (builder) => + const AccountInfoPage()), + ); + } navigator.push( MaterialPageRoute( builder: (builder) => @@ -223,7 +231,7 @@ class _PasswordPageState extends State { children: [ Text( widget.register - ? 'Registrierung abschließen' + ? 'Konto erstellen' : 'Einloggen', style: const TextStyle( fontSize: 20, diff --git a/frontend/app/lib/pages/registration_page.dart b/frontend/app/lib/pages/registration_page.dart index dd66e8c..bc8a549 100644 --- a/frontend/app/lib/pages/registration_page.dart +++ b/frontend/app/lib/pages/registration_page.dart @@ -1,8 +1,10 @@ import 'package:app/model/services/storage_service.dart'; +import 'package:app/pages/loading_page.dart'; +import 'package:app/pages/notifications_page.dart'; import 'package:app/pages/password_page.dart'; -import 'package:app/pages/verify_email_page.dart'; import 'package:app/util/colors.dart'; import 'package:app/util/validation.dart'; +import 'package:app/widgets/custom_scaffold.dart'; import 'package:flutter/material.dart'; class RegistrationPage extends StatefulWidget { @@ -26,18 +28,12 @@ class _RegistrationPageState extends State { } void _init() async { - final accountLevel = await _storageService.accountLevel; - if (accountLevel > 3 && mounted) { - await Navigator.push(context, - MaterialPageRoute(builder: (builder) => const VerifyEmailPage())); - setState(() { - _loading = false; - }); - } else { - setState(() { - _loading = false; - }); + if (await _storageService.accountLevel < 3) { + await _storageService.setAccountLevel(3); } + setState(() { + _loading = false; + }); } @override @@ -48,168 +44,140 @@ class _RegistrationPageState extends State { @override Widget build(BuildContext context) { - return SafeArea( - child: _loading - ? Center( - child: Column( - children: [ - const SizedBox( - height: 150, - ), - Hero( - tag: 'logo', - child: Image.asset( - 'assets/JPEG.jpg', - height: 180, - ), - ), - CircularProgressIndicator( - color: CustomColors.primary, - ), - ], + return CustomScaffold( + backButton: BackButton( + color: CustomColors.primary, + onPressed: () { + Navigator.pushAndRemoveUntil( + context, + MaterialPageRoute( + builder: (builder) => const NotificationsPage()), + (route) => false); + }, + ), + children: _loading + ? [ + LoadingPage(), + ] + : [ + const SizedBox( + height: 20, ), - ) - : Scaffold( - appBar: AppBar( - leading: BackButton( - color: CustomColors.primary, - onPressed: () async { - await _storageService.setAccountLevel(2); - if (mounted) { - Navigator.pop(context); - } - }, - ), - iconTheme: IconThemeData( - color: CustomColors.primary, + const Text( + 'Jetzt Registrieren', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'sans-serif', + fontWeight: FontWeight.bold, + letterSpacing: 2.0, + fontSize: 25, ), ), - body: Padding( - padding: const EdgeInsets.fromLTRB(20, 20, 20, 16), + const SizedBox( + height: 20, + ), + const Text( + 'Gib deine E-Mail Adresse ein.', + // textAlign: TextAlign.center, + ), + const SizedBox( + height: 20, + ), + Form( + key: formKey, child: Column( - // mainAxisAlignment: MainAxisAlignment.center, children: [ - const SizedBox( - height: 20, - ), - const Text( - 'Jetzt Registrieren', - textAlign: TextAlign.center, - style: TextStyle( - fontFamily: 'sans-serif', - fontWeight: FontWeight.bold, - letterSpacing: 2.0, - fontSize: 25, + TextFormField( + autocorrect: false, + autofocus: true, + controller: mailController, + keyboardType: TextInputType.emailAddress, + decoration: const InputDecoration( + helperText: 'test', + label: Text('E-Mail Adresse'), + filled: true, ), - ), - const SizedBox( - height: 20, - ), - const Text( - 'Gib deine E-Mail Adresse ein.', - // textAlign: TextAlign.center, - ), - const SizedBox( - height: 20, - ), - Form( - key: formKey, - child: Column( - children: [ - TextFormField( - autocorrect: false, - autofocus: true, - controller: mailController, - keyboardType: TextInputType.emailAddress, - decoration: const InputDecoration( - helperText: 'test', - label: Text('E-Mail Adresse'), - filled: true, - ), - validator: (value) { - if (value == null || !value.isValidEmail) { - return 'Bitte eine valide E-Mail Adresse angeben'; - } else { - return null; - } - }, - ), - ], - ), - ), - const SizedBox( - height: 20, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - TextButton( - onPressed: () { - if (formKey.currentState!.validate()) { - Navigator.push( - context, - MaterialPageRoute( - builder: (builder) => PasswordPage( - email: mailController.text, - register: false, - ), - ), - ); - } - }, - child: Text( - 'Stattdessen anmelden', - // textAlign: TextAlign.center, - style: TextStyle( - color: CustomColors.primary, - ), - ), - ), - Hero( - tag: 'flow-button', - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: CustomColors.primary, - ), - onPressed: () { - if (formKey.currentState!.validate()) { - Navigator.push( - context, - MaterialPageRoute( - builder: (builder) => PasswordPage( - email: mailController.text, - register: true, - ), - ), - ); - } - }, - child: const SizedBox( - height: 50, - width: 100, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Weiter', - style: TextStyle( - fontSize: 20, - ), - ), - ], - ), - ), - ), - ), - ], - ), - const Spacer( - flex: 2, + validator: (value) { + if (value == null || !value.isValidEmail) { + return 'Bitte eine valide E-Mail Adresse angeben'; + } else { + return null; + } + }, ), ], ), ), - ), + const SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TextButton( + onPressed: () { + if (formKey.currentState!.validate()) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => PasswordPage( + email: mailController.text, + register: false, + ), + ), + ); + } + }, + child: Text( + 'Stattdessen anmelden', + // textAlign: TextAlign.center, + style: TextStyle( + color: CustomColors.primary, + ), + ), + ), + Hero( + tag: 'flow-button', + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: CustomColors.primary, + ), + onPressed: () { + if (formKey.currentState!.validate()) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => PasswordPage( + email: mailController.text, + register: true, + ), + ), + ); + } + }, + child: const SizedBox( + height: 50, + width: 100, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Weiter', + style: TextStyle( + fontSize: 20, + ), + ), + ], + ), + ), + ), + ), + ], + ), + const Spacer( + flex: 2, + ), + ], ); } } diff --git a/frontend/app/lib/pages/security_page.dart b/frontend/app/lib/pages/security_page.dart index fd10999..e92fff4 100644 --- a/frontend/app/lib/pages/security_page.dart +++ b/frontend/app/lib/pages/security_page.dart @@ -1,7 +1,10 @@ import 'package:app/model/services/auth_service.dart'; import 'package:app/model/services/storage_service.dart'; +import 'package:app/pages/loading_page.dart'; import 'package:app/pages/notifications_page.dart'; +import 'package:app/pages/start_page.dart'; import 'package:app/util/colors.dart'; +import 'package:app/widgets/custom_scaffold.dart'; import 'package:flutter/material.dart'; class SecurityPage extends StatefulWidget { @@ -22,166 +25,140 @@ class _SecurityPageState extends State { } void _init() async { - final accountLevel = await _storageService.accountLevel; - if (accountLevel > 1 && mounted) { - await Navigator.push(context, - MaterialPageRoute(builder: (builder) => const NotificationsPage())); - setState(() { - _loading = false; - }); - } else { - setState(() { - _loading = false; - }); + if (await _storageService.accountLevel < 1) { + await _storageService.setAccountLevel(1); } + setState(() { + _loading = false; + }); } @override Widget build(BuildContext context) { - return SafeArea( - child: _loading - ? Center( - child: Column( - children: [ - const SizedBox( - height: 150, - ), - Hero( - tag: 'logo', - child: Image.asset( - 'assets/JPEG.jpg', - height: 180, - ), - ), - CircularProgressIndicator( - color: CustomColors.primary, - ), - ], + return CustomScaffold( + backButton: BackButton( + color: CustomColors.primary, + onPressed: () { + Navigator.push( + context, + MaterialPageRoute(builder: (builder) => const StartPage()), + ); + }, + ), + children: _loading + ? [ + LoadingPage(), + // Center( + // child: Hero( + // tag: 'logo', + // child: Image.asset( + // 'assets/JPEG.jpg', + // height: 180, + // ), + // ), + // ), + ] + : [ + const Spacer(), + const Hero( + tag: 'flow-icon', + child: Icon( + Icons.fingerprint, + color: Colors.white, + size: 200, + ), ), - ) - : Scaffold( - appBar: AppBar( - leading: BackButton( - color: CustomColors.primary, + const Spacer(), + const Text( + 'Deine Sicherheit kommt an erster Stelle', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'sans-serif', + fontSize: 25, + fontWeight: FontWeight.bold), + ), + const SizedBox( + height: 30, + ), + const Text( + 'Schütze dein Konto mit der biometrischen Erkennung deines Geräts oder lege einen Code fest.', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'sans-serif', + fontSize: 18, + fontWeight: FontWeight.bold), + ), + const Spacer(), + Hero( + tag: 'flow-button', + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: CustomColors.primary, + ), onPressed: () async { - await _storageService.setAccountLevel(0); - if (mounted) { - Navigator.pop(context); + bool isAuthenticated = + await AuthService.authenticateWithBiometrics(); + if (isAuthenticated) { + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const NotificationsPage()), + ); + } } }, - ), - iconTheme: IconThemeData(color: CustomColors.primary), - ), - body: Padding( - padding: const EdgeInsets.fromLTRB(16, 20, 16, 16), - child: Center( - child: Column( - children: [ - const Spacer(), - const Hero( - tag: 'flow-icon', - child: Icon( - Icons.fingerprint, - color: Colors.white, - size: 200, - ), - ), - const Spacer(), - const Text( - 'Deine Sicherheit kommt an erster Stelle', - textAlign: TextAlign.center, - style: TextStyle( - fontFamily: 'sans-serif', - fontSize: 25, - fontWeight: FontWeight.bold), - ), - const SizedBox( - height: 30, - ), - const Text( - 'Schütze dein Konto mit der biometrischen Erkennung deines Geräts oder lege einen Code fest.', - textAlign: TextAlign.center, - style: TextStyle( - fontFamily: 'sans-serif', - fontSize: 18, - fontWeight: FontWeight.bold), - ), - const Spacer(), - Hero( - tag: 'flow-button', - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: CustomColors.primary, - ), - onPressed: () async { - bool isAuthenticated = - await AuthService.authenticateWithBiometrics(); - if (isAuthenticated) { - await _storageService.setAccountLevel(2); - // ignore: use_build_context_synchronously - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => - const NotificationsPage()), - ); - } - }, - child: const SizedBox( - height: 60, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'App absichern', - style: TextStyle( - fontSize: 20, - ), - ), - ], - ), + child: const SizedBox( + height: 60, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'App absichern', + style: TextStyle( + fontSize: 20, ), ), - ), - // const SizedBox( - // height: 10, - // ), - // ElevatedButton( - // style: ElevatedButton.styleFrom( - // backgroundColor: CustomColors.secondary, - // ), - // onPressed: () { - // Navigator.push( - // context, - // MaterialPageRoute( - // builder: (builder) => SecurityPage(), - // ), - // ); - // }, - // child: const SizedBox( - // height: 60, - // child: Row( - // mainAxisAlignment: MainAxisAlignment.center, - // children: [ - // Text( - // 'Eigenen Code festlegen', - // style: TextStyle( - // color: Colors.white, - // fontSize: 22, - // ), - // ), - // ], - // ), - // ), - // ), - const Spacer( - flex: 2, - ), - ], + ], + ), ), ), ), - ), + // const SizedBox( + // height: 10, + // ), + // ElevatedButton( + // style: ElevatedButton.styleFrom( + // backgroundColor: CustomColors.secondary, + // ), + // onPressed: () { + // Navigator.push( + // context, + // MaterialPageRoute( + // builder: (builder) => SecurityPage(), + // ), + // ); + // }, + // child: const SizedBox( + // height: 60, + // child: Row( + // mainAxisAlignment: MainAxisAlignment.center, + // children: [ + // Text( + // 'Eigenen Code festlegen', + // style: TextStyle( + // color: Colors.white, + // fontSize: 22, + // ), + // ), + // ], + // ), + // ), + // ), + const Spacer( + flex: 2, + ), + ], ); } } diff --git a/frontend/app/lib/pages/start_page.dart b/frontend/app/lib/pages/start_page.dart index 65fbf89..4149bf1 100644 --- a/frontend/app/lib/pages/start_page.dart +++ b/frontend/app/lib/pages/start_page.dart @@ -1,166 +1,102 @@ -import 'package:app/model/services/storage_service.dart'; import 'package:app/pages/agb_page.dart'; import 'package:app/pages/security_page.dart'; import 'package:app/util/colors.dart'; +import 'package:app/widgets/custom_scaffold.dart'; import 'package:flutter/material.dart'; -class StartPage extends StatefulWidget { +class StartPage extends StatelessWidget { const StartPage({super.key}); - @override - State createState() => _StartPageState(); -} - -class _StartPageState extends State { - final StorageService _storageService = StorageService(); - bool _loading = true; - - @override - void initState() { - _init(); - super.initState(); - } - - void _init() async { - int accountLevel = await _storageService.accountLevel; - if (accountLevel > 0 && mounted) { - await Navigator.push(context, - MaterialPageRoute(builder: (builder) => const SecurityPage())); - setState(() { - _loading = false; - }); - } else { - setState(() { - _loading = false; - }); - } - } - @override Widget build(BuildContext context) { - return SafeArea( - child: _loading - ? Center( - child: Column( + return CustomScaffold( + children: [ + Hero( + tag: 'flow-icon', + child: Image.asset( + 'assets/JPEG.jpg', + height: 180, + ), + ), + const SizedBox( + height: 30, + ), + const Text( + 'Hallo. Digitale Spuren\nentfernen\nper Knopfdruck.', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'sans-serif', + fontWeight: FontWeight.bold, + letterSpacing: 2.0, + fontSize: 25, + ), + ), + const SizedBox( + height: 20, + ), + const Text( + 'Mit uns finden Sie Ihre Digitalen Spuren und können diese entfernen.', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'sans-serif', + fontSize: 18, + ), + ), + const Spacer( + flex: 1, + ), + Hero( + tag: 'flow-button', + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: CustomColors.primary, + ), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => const SecurityPage(), + // builder: (builder) => SecurityPage(), + ), + ); + }, + child: const SizedBox( + height: 60, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ - const SizedBox( - height: 150, - ), - Hero( - tag: 'logo', - child: Image.asset( - 'assets/JPEG.jpg', - height: 180, + Text( + 'Weiter', + style: TextStyle( + fontSize: 20, ), ), - CircularProgressIndicator( - color: CustomColors.primary, - ), ], ), - ) - : Scaffold( - appBar: AppBar( - iconTheme: IconThemeData(color: CustomColors.primary), - ), - body: Padding( - padding: const EdgeInsets.fromLTRB(16, 20, 16, 16), - child: Column( - children: [ - Hero( - tag: 'flow-icon', - child: Image.asset( - 'assets/JPEG.jpg', - height: 180, - ), - ), - const SizedBox( - height: 30, - ), - const Text( - 'Hallo. Digitale Spuren\nentfernen\nper Knopfdruck.', - textAlign: TextAlign.center, - style: TextStyle( - fontFamily: 'sans-serif', - fontWeight: FontWeight.bold, - letterSpacing: 2.0, - fontSize: 25, - ), - ), - const SizedBox( - height: 20, - ), - const Text( - 'Mit uns finden Sie Ihre Digitalen Spuren und können diese entfernen.', - textAlign: TextAlign.center, - style: TextStyle( - fontFamily: 'sans-serif', - fontSize: 18, - ), - ), - const Spacer( - flex: 1, - ), - Hero( - tag: 'flow-button', - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: CustomColors.primary, - ), - onPressed: () async { - await _storageService.setAccountLevel(1); - if (mounted) { - Navigator.push( - context, - MaterialPageRoute( - builder: (builder) => const SecurityPage(), - // builder: (builder) => SecurityPage(), - ), - ); - } - }, - child: const SizedBox( - height: 60, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Weiter', - style: TextStyle( - fontSize: 20, - ), - ), - ], - ), - ), - ), - ), - const Spacer( - flex: 1, - ), - const Text( - 'Mit der weiteren Nutzung stimmst du den folgenden Bedingungen zu:', - textAlign: TextAlign.center, - style: TextStyle( - fontFamily: 'sans-serif', - fontSize: 16, - ), - ), - TextButton( - onPressed: () { - showDialog( - context: context, - builder: (builder) => AgbPage()); - }, - child: Text( - 'AGB - Datenschutzerklärung', - textAlign: TextAlign.center, - style: TextStyle(color: CustomColors.primary), - )) - ], - ), - ), ), + ), + ), + const Spacer( + flex: 1, + ), + const Text( + 'Mit der weiteren Nutzung stimmst du den folgenden Bedingungen zu:', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'sans-serif', + fontSize: 16, + ), + ), + TextButton( + onPressed: () { + showDialog(context: context, builder: (builder) => AgbPage()); + }, + child: Text( + 'AGB - Datenschutzerklärung', + textAlign: TextAlign.center, + style: TextStyle(color: CustomColors.primary), + )) + ], ); } } diff --git a/frontend/app/lib/pages/verify_email_page.dart b/frontend/app/lib/pages/verify_email_page.dart index 046461d..973cd4a 100644 --- a/frontend/app/lib/pages/verify_email_page.dart +++ b/frontend/app/lib/pages/verify_email_page.dart @@ -1,5 +1,7 @@ import 'package:app/model/services/storage_service.dart'; import 'package:app/model/view_model/base_vm.dart'; +import 'package:app/pages/account_info_page.dart'; +import 'package:app/pages/notifications_page.dart'; import 'package:app/util/colors.dart'; import 'package:flutter/material.dart'; @@ -18,6 +20,13 @@ class _VerifyEmailPageState extends State { @override void initState() { super.initState(); + _init(); + } + + void _init() async { + if (await _storageService.accountLevel < 4) { + await _storageService.setAccountLevel(4); + } setState(() { _loading = false; }); @@ -50,11 +59,12 @@ class _VerifyEmailPageState extends State { appBar: AppBar( leading: BackButton( color: CustomColors.primary, - onPressed: () async { - await _storageService.setAccountLevel(3); - if (mounted) { - Navigator.pop(context); - } + onPressed: () { + Navigator.pushAndRemoveUntil( + context, + MaterialPageRoute( + builder: (builder) => const NotificationsPage()), + (route) => false); }, ), iconTheme: IconThemeData( @@ -63,95 +73,136 @@ class _VerifyEmailPageState extends State { ), body: Padding( padding: const EdgeInsets.fromLTRB(20, 20, 20, 16), - child: Column( - // mainAxisAlignment: MainAxisAlignment.center, - children: [ - const SizedBox( - height: 80, - ), - const Text( - 'Verifizieren', - textAlign: TextAlign.center, - style: TextStyle( - fontFamily: 'sans-serif', - fontWeight: FontWeight.bold, - letterSpacing: 2.0, - fontSize: 25, + child: Center( + child: Column( + children: [ + const SizedBox( + height: 80, ), - ), - const SizedBox( - height: 50, - ), - const Text( - 'Wir haben dir eine E-Mail geschickt.', - textAlign: TextAlign.center, - // textAlign: TextAlign.center, - ), - const SizedBox( - height: 20, - ), - const Text( - 'Bitte verifiziere deine E-Mail Adresse, dann geht es weiter.', - textAlign: TextAlign.center, - // textAlign: TextAlign.center, - ), - const SizedBox( - height: 80, - ), - Hero( - tag: 'flow-button', - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: CustomColors.primary, + const Text( + 'Verifizieren', + textAlign: TextAlign.center, + style: TextStyle( + fontFamily: 'sans-serif', + fontWeight: FontWeight.bold, + letterSpacing: 2.0, + fontSize: 25, ), - onPressed: () {}, - child: const SizedBox( - height: 50, - width: 100, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Weiter', - style: TextStyle( - fontSize: 20, + ), + const SizedBox( + height: 50, + ), + const Text( + 'Wir haben dir eine E-Mail geschickt.', + textAlign: TextAlign.center, + // textAlign: TextAlign.center, + ), + const SizedBox( + height: 20, + ), + const Text( + 'Bitte verifiziere deine E-Mail Adresse, dann geht es weiter.', + textAlign: TextAlign.center, + // textAlign: TextAlign.center, + ), + const SizedBox( + height: 80, + ), + Hero( + tag: 'flow-button', + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: CustomColors.primary, + ), + onPressed: () async { + final acc = await _vm.account; + if (acc != null && acc.emailVerified) { + if (mounted) { + Navigator.push( + context, + MaterialPageRoute( + builder: (builder) => + const AccountInfoPage()), + ); + } + } else { + if (mounted) { + ScaffoldMessenger.of(context).clearSnackBars(); + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar( + backgroundColor: CustomColors.error, + content: const Text( + 'E-Mail Adresse ist noch nicht verifiziert.', + style: TextStyle(color: Colors.white), + ), + )); + } + } + }, + child: const SizedBox( + height: 50, + width: 100, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Weiter', + style: TextStyle( + fontSize: 20, + ), ), - ), - ], + ], + ), ), ), ), - ), - const SizedBox( - height: 60, - ), - const Text( - 'Noch keine E-Mail erhalten?', - // textAlign: TextAlign.center, - ), - const Text( - 'Schon im Spam-Ordner nachgeschaut?', - // textAlign: TextAlign.center, - ), - const SizedBox( - height: 20, - ), - TextButton( - onPressed: () async { - await _vm.resendVerification(context); - }, - child: Text( - 'Erneut senden', + const SizedBox( + height: 60, + ), + const Text( + 'Noch keine E-Mail erhalten?', // textAlign: TextAlign.center, - style: TextStyle( - color: CustomColors.primary, + ), + const Text( + 'Schon im Spam-Ordner nachgeschaut?', + // textAlign: TextAlign.center, + ), + // const SizedBox( + // height: 20, + // ), + TextButton( + onPressed: () async { + await _vm.resendVerification(context); + }, + child: Text( + 'Erneut senden', + // textAlign: TextAlign.center, + style: TextStyle( + color: CustomColors.primary, + ), ), ), - ), - const Spacer( - flex: 2, - ), - ], + const Spacer( + flex: 2, + ), + const Text('Account versehentlich angelegt?'), + // const SizedBox( + // height: 10, + // ), + TextButton( + onPressed: () async {}, + child: Text( + 'Account löschen', + style: TextStyle( + color: CustomColors.primary, + ), + ), + ), + const SizedBox( + height: 30, + ), + ], + ), ), ), ), diff --git a/frontend/app/lib/pages_draft/home_page.dart b/frontend/app/lib/pages_draft/home_page.dart deleted file mode 100644 index 0774069..0000000 --- a/frontend/app/lib/pages_draft/home_page.dart +++ /dev/null @@ -1,221 +0,0 @@ -import 'package:app/model/services/backend_service.dart'; -import 'package:app/model/view_model/account_vm.dart'; -import 'package:app/model/view_model/base_vm.dart'; -import 'package:app/pages_draft/login_overlay.dart'; -import 'package:app/pages_draft/persons_page.dart'; -import 'package:app/widgets/background.dart'; -import 'package:app/widgets/bottom_navigation.dart'; -import 'package:app/widgets/bottom_navigation_item.dart'; -import 'package:app/widgets/drawer.dart'; -import 'package:app/widgets/side_drawer_item.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - -// ignore: must_be_immutable -class HomePage extends StatefulWidget { - HomePage({super.key, required this.loggedOut}); - - bool loggedOut; - - @override - State createState() => _HomePageState(); -} - -class _HomePageState extends State { - @override - void initState() { - super.initState(); - _init(); - } - - AccountViewModel vm = AccountViewModel(); - void _init() async { - // _setLoading(true); - // _setLoading(widget.loggedOut); - // _loading = widget.loggedOut; - // _loggedin = await BackendService.isLoggedIn; - // if (!_loggedin) { - // await BackendService.logout(); - // final navigator = Navigator.of(context); - // navigator.pushAndRemoveUntil( - // MaterialPageRoute( - // builder: (builder) => HomePage( - // loggedOut: true, - // )), - // (route) => false); - // } - _setLoading(false); - } - - _isLoggedIn(BuildContext context) async { - bool logged = await vm.isLoggedIn(context); - setState(() { - _loggedin = logged; - }); - } - - void _setLoading(bool loading) { - setState(() { - _loading = loading; - }); - } - - bool _loading = true; - bool _loggedin = false; - @override - Widget build(BuildContext context) { - return Background( - child: Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - // flexibleSpace: Image.asset( - // 'lib/assets/logo_300x200.png', - // // height: 400, - // ), - ), - drawer: SideDrawer( - children: [ - const Spacer( - flex: 3, - ), - SideDrawerItem( - onPressed: () {}, - icon: Icons.question_answer, - color: Colors.white, - label: 'About', - ), - SideDrawerItem( - onPressed: () {}, - icon: Icons.privacy_tip, - color: Colors.white, - label: 'Datenschutz', - ), - SideDrawerItem( - onPressed: () {}, - icon: Icons.apartment, - color: Colors.white, - label: 'Impressum', - ), - const Spacer( - flex: 1, - ), - if (_loggedin) - SideDrawerItem( - onPressed: () async { - setState(() { - _loading = true; - }); - await BackendService.logout(); - // ignore: use_build_context_synchronously - Navigator.of(context).pushAndRemoveUntil( - MaterialPageRoute( - builder: (builder) => HomePage( - loggedOut: true, - )), - (route) => false); - setState(() { - _loggedin = false; - _loading = false; - }); - }, - icon: Icons.logout, - color: Colors.white, - label: 'Logout', - ), - ], - ), - bottomNavigationBar: BottomNavigation( - children: [ - if (!_loggedin) ...[ - BottomNavigationItem( - onPressed: () async { - final bool res = await showLogin(context, registration: true); - setState(() { - _loggedin = res; - }); - }, - icon: Icons.person_add_alt, - color: Colors.white, - label: 'Registrieren', - ), - BottomNavigationItem( - onPressed: () async { - bool res = await showLogin(context); - setState(() { - _loggedin = res; - // vm.isLoggedIn(context); - }); - }, - icon: Icons.login, - color: Colors.white, - label: 'Login', - ), - ] else - BottomNavigationItem( - onPressed: () async { - final navigator = Navigator.of(context); - if (_loggedin) { - navigator.push(MaterialPageRoute( - builder: (builder) => const PersonsPage())); - } else { - navigator.pushAndRemoveUntil( - MaterialPageRoute( - builder: (builder) => const PersonsPage()), - (route) => false); - } - }, - icon: Icons.person_search, - color: Colors.white, - label: 'Personen', - ), - BottomNavigationItem( - onPressed: () {}, - icon: Icons.dashboard, - color: Colors.white, - label: 'Dashboard', - ), - ...[] - ], - ), - body: Padding( - padding: const EdgeInsets.fromLTRB(16, 45, 16, 16), - child: Center( - child: ChangeNotifierProvider( - create: (context) => BaseViewModel(), - child: Consumer(builder: (context, value, child) { - // _checkResponse(value.response); - if (!widget.loggedOut) { - _isLoggedIn(context); - } - return _loading - ? const CircularProgressIndicator( - color: Colors.grey, - ) - : Column( - children: [ - Image.asset( - 'lib/assets/logo_300x200.png', - ), - const SizedBox( - height: 40, - ), - Text( - 'Digitale Spuren auf Knopfdruck entfernen' - .toUpperCase(), - textAlign: TextAlign.center, - style: const TextStyle( - fontFamily: 'sans-serif', - fontSize: 24, - height: 1.6, - fontWeight: FontWeight.normal, - letterSpacing: 6, - ), - ), - ], - ); - })), - ), - ), - )); - } -} diff --git a/frontend/app/lib/pages_draft/login_overlay.dart b/frontend/app/lib/pages_draft/login_overlay.dart deleted file mode 100644 index ef927a5..0000000 --- a/frontend/app/lib/pages_draft/login_overlay.dart +++ /dev/null @@ -1,239 +0,0 @@ -import 'package:app/model/view_model/base_vm.dart'; -import 'package:app/widgets/background.dart'; -import 'package:app/widgets/bottom_navigation.dart'; -import 'package:app/widgets/bottom_navigation_item.dart'; -import 'package:app/widgets/side_drawer.dart'; -import 'package:app/widgets/side_drawer_item.dart'; -import 'package:flutter/material.dart'; -import 'package:app/util/validation.dart'; -import 'package:provider/provider.dart'; - -Future showLogin(BuildContext context, - {bool registration = false}) async { - final formKey = GlobalKey(); - final mailController = TextEditingController(); - final passwordController = TextEditingController(); - - BaseViewModel vm = BaseViewModel(); - bool submitted = false; - bool loggedin = false; - void login(BuildContext context) { - if (formKey.currentState!.validate()) { - submitted = true; - FocusScope.of(context).unfocus(); - vm - .login(context, - email: mailController.text, password: passwordController.text) - .then( - (r) { - if (r) { - loggedin = r; - Navigator.pop(context, true); - } - }, - ); - passwordController.clear(); - submitted = false; - } - } - - void register(BuildContext context) { - if (formKey.currentState!.validate()) { - submitted = true; - vm - .createAccount( - context, - email: mailController.text, - password: passwordController.text, - ) - .then( - (r) { - if (r) { - loggedin = r; - Navigator.pop(context, true); - } - }, - ); - } - } - - await showModalBottomSheet( - useSafeArea: true, - isScrollControlled: true, - backgroundColor: Colors.black, - context: context, - builder: (builder) { - return Background( - child: Scaffold( - drawer: SideDrawer( - children: [ - const Spacer( - flex: 3, - ), - SideDrawerItem( - onPressed: () {}, - icon: Icons.question_answer, - color: Colors.white, - label: 'About', - ), - SideDrawerItem( - onPressed: () {}, - icon: Icons.privacy_tip, - color: Colors.white, - label: 'Datenschutz', - ), - SideDrawerItem( - onPressed: () {}, - icon: Icons.apartment, - color: Colors.white, - label: 'Impressum', - ), - const Spacer( - flex: 1, - ), - ], - ), - bottomNavigationBar: BottomNavigation( - children: [ - BottomNavigationItem( - onPressed: () { - Navigator.pop(context, false); - }, - icon: Icons.arrow_back, - color: Colors.white, - label: 'Zurück', - ), - BottomNavigationItem( - onPressed: () { - Navigator.pop(context, false); - }, - icon: Icons.home, - color: Colors.white, - label: 'Home', - ), - ], - ), - body: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const SizedBox( - height: 50, - ), - const Image( - width: 180, - image: AssetImage( - 'lib/assets/logo_300x200.png', - ), - ), - const SizedBox( - height: 30, - ), - Text( - registration ? 'Registrieren' : 'Login', - style: const TextStyle( - fontFamily: 'sans-serif', - fontSize: 24, - height: 1.6, - fontWeight: FontWeight.normal, - letterSpacing: 6, - ), - ), - ChangeNotifierProvider( - create: (context) => BaseViewModel(), - child: Consumer( - builder: (context, value, child) => Form( - key: formKey, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox( - height: 40, - ), - TextFormField( - // autofocus: true, - // inputFormatters: [ - // FilteringTextInputFormatter.allow( - // emailRegExp, - // ), - // ], - controller: mailController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'E-Mail Adresse', - ), - keyboardType: TextInputType.emailAddress, - validator: (value) { - if (value == null || !value.isValidEmail) { - return 'Bitte eine gültige E-Mail Adresse eingeben'; - } - return null; - }, - ), - TextFormField( - style: const TextStyle( - color: Colors.white, - ), - // inputFormatters: [ - // FilteringTextInputFormatter.allow( - // passwordRegExp, - // ), - // ], - controller: passwordController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'Passwort', - ), - keyboardType: TextInputType.visiblePassword, - obscureText: true, - validator: (value) { - if (value == null || !value.isValidPassword) { - return 'Bitte geben Sie Ihr Passwort ein'; - } - return null; - }, - ), - const SizedBox( - height: 15, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - ElevatedButton( - onPressed: !submitted - ? !registration - ? () { - login(context); - } - : () { - register(context); - } - : null, - child: const Icon(Icons.login), - ), - ], - ) - ], - ), - ), - ), - ), - const Spacer(), - ], - ), - ), - ), - ); - }); - return loggedin; -} diff --git a/frontend/app/lib/pages_draft/person_details_page.dart b/frontend/app/lib/pages_draft/person_details_page.dart deleted file mode 100644 index 86f38b6..0000000 --- a/frontend/app/lib/pages_draft/person_details_page.dart +++ /dev/null @@ -1,339 +0,0 @@ -import 'package:app/model/view_model/persons_vm.dart'; -import 'package:app/pb/google/protobuf/timestamp.pb.dart'; -import 'package:app/pb/person.pb.dart'; -import 'package:app/util/validation.dart'; -import 'package:app/widgets/background.dart'; -import 'package:app/widgets/bottom_navigation.dart'; -import 'package:app/widgets/bottom_navigation_item.dart'; -import 'package:fixnum/fixnum.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:intl/intl.dart'; - -Future showPerson(BuildContext context, {Person? person}) async { - PersonsViewModel vm = PersonsViewModel(); - - final formKey = GlobalKey(); - final firstnameController = TextEditingController(); - final lastnameController = TextEditingController(); - final cityController = TextEditingController(); - final zipController = TextEditingController(); - final streetController = TextEditingController(); - final countryController = TextEditingController(); - final birthdayController = TextEditingController(); - - Future _init() async { - if (person == null) { - person ??= Person(); - // person ??= Person(accountId: await BackendService.accountId); - } else { - firstnameController.text = person!.firstname; - lastnameController.text = person!.lastname; - cityController.text = person!.city; - zipController.text = person!.zip; - streetController.text = person!.street; - countryController.text = person!.country; - birthdayController.text = - DateFormat('dd.MM.yyyy').format(person!.birthday.toDateTime()); - } - } - - await _init(); - - void _updateData() { - person!.firstname = firstnameController.text; - person!.lastname = lastnameController.text; - person!.city = cityController.text; - person!.street = streetController.text; - person!.zip = zipController.text; - person!.country = countryController.text; - } - - Future createPerson(BuildContext context) async { - final navigator = Navigator.of(context); - _updateData(); - person!.id = Int64(0); - person = await vm.createPerson(context, - firstname: person!.firstname, - lastname: person!.lastname, - street: person!.street, - zip: person!.zip, - city: person!.city, - country: person!.country, - birthday: person!.birthday); - - if (person!.id != 0) { - navigator.pop(person); - } - } - - Future updatePerson(BuildContext context) async { - final navigator = Navigator.of(context); - _updateData(); - final personUpdate = await vm.updatePerson(context, - id: person!.id, - firstname: person!.firstname != firstnameController.text - ? person!.firstname - : null, - lastname: person!.lastname != lastnameController.text - ? person!.lastname - : null, - street: person!.street != streetController.text ? person!.street : null, - zip: person!.zip != zipController.text ? person!.zip : null, - city: person!.city != cityController.text ? person!.city : null, - country: - person!.country != countryController.text ? person!.country : null, - birthday: - DateFormat('dd.MM.yyyy').format(person!.birthday.toDateTime()) != - birthdayController.text - ? person!.birthday - : null); - - if (personUpdate != person) { - navigator.pop(person); - } - } - - // ignore: use_build_context_synchronously - await showModalBottomSheet( - context: context, - builder: (builder) { - return Background( - child: Scaffold( - bottomNavigationBar: BottomNavigation( - hideMenu: true, - children: [ - BottomNavigationItem( - onPressed: () { - Navigator.pop(context, false); - }, - icon: Icons.arrow_back, - color: Colors.white, - label: 'Zurück', - ), - BottomNavigationItem( - onPressed: () { - Navigator.pop(context, false); - }, - icon: Icons.home, - color: Colors.white, - label: 'Home', - ), - ], - ), - body: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const SizedBox( - height: 50, - ), - Text( - person!.id == 0 ? 'Person anlegen' : 'Person anpassen', - style: const TextStyle( - fontFamily: 'sans-serif', - fontSize: 24, - height: 1.6, - fontWeight: FontWeight.normal, - letterSpacing: 6), - ), - ChangeNotifierProvider( - create: (context) => PersonsViewModel(), - child: Consumer( - builder: (context, value, child) => Form( - key: formKey, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const SizedBox( - height: 40, - ), - TextFormField( - controller: firstnameController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - suffix: Text('Vorname'), - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'Vorname', - ), - keyboardType: TextInputType.name, - validator: (value) { - if (value == null || !value.isValidName) { - return 'Bitte einen gültigen Vornamen eingeben'; - } - return null; - }, - ), - TextFormField( - controller: lastnameController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - suffix: Text('Nachname'), - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'Nachname', - ), - keyboardType: TextInputType.name, - validator: (value) { - if (value == null || !value.isValidName) { - return 'Bitte einen gültigen Nachnamen eingeben'; - } - return null; - }, - ), - TextFormField( - readOnly: true, - onTap: () async { - DateTime? pickedDate = await showDatePicker( - context: context, - locale: const Locale('de', 'DE'), - initialDate: DateTime.now(), - firstDate: DateTime(1930), - lastDate: DateTime(DateTime.now().year + 1), - builder: (context, child) => Theme( - data: ThemeData.dark(), - child: child != null ? child : Text(''), - ), - ); - - if (pickedDate != null) { - person!.birthday = - Timestamp.fromDateTime(pickedDate); - birthdayController.text = - DateFormat('dd.MM.yyyy') - .format(pickedDate); - } - }, - controller: birthdayController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - suffix: Text('Geburtstag'), - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'Geburtstag', - ), - keyboardType: TextInputType.name, - // validator: (value) { - // if (value == null || !value.isValidName) { - // return 'Bitte einen gültigen Nachnamen eingeben'; - // } - // return null; - // }, - ), - TextFormField( - controller: streetController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - suffix: Text('Straße'), - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'Straße mit Hausnummer', - ), - keyboardType: TextInputType.name, - validator: (value) { - if (value == null || !value.isValidName) { - return 'Bitte eine gültige Straße mit Hausnummer eingeben'; - } - return null; - }, - ), - TextFormField( - controller: zipController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - suffix: Text('PLZ'), - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'PLZ', - ), - keyboardType: TextInputType.name, - validator: (value) { - if (value == null || !value.isValidName) { - return 'Bitte eine gültige PLZ eingeben'; - } - return null; - }, - ), - TextFormField( - controller: cityController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - suffix: Text('Stadt'), - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'Stadt', - ), - keyboardType: TextInputType.name, - validator: (value) { - if (value == null || !value.isValidName) { - return 'Bitte eine gültige Stadt eingeben'; - } - return null; - }, - ), - TextFormField( - controller: countryController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - suffix: Text('Land'), - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'Land', - ), - keyboardType: TextInputType.name, - validator: (value) { - if (value == null || !value.isValidName) { - return 'Bitte ein gültiges Land eingeben'; - } - return null; - }, - ), - const SizedBox( - height: 15, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - ElevatedButton( - onPressed: () async { - person!.id.isZero - ? await createPerson(context) - : await updatePerson(context); - }, - child: const Icon(Icons.update), - ), - ], - ) - ], - ), - ), - ), - ), - ], - ), - ), - ), - ); - }, - useSafeArea: true, - isScrollControlled: true, - backgroundColor: Colors.black); - return person!; -} diff --git a/frontend/app/lib/pages_draft/persons_page.dart b/frontend/app/lib/pages_draft/persons_page.dart deleted file mode 100644 index 1f22ca9..0000000 --- a/frontend/app/lib/pages_draft/persons_page.dart +++ /dev/null @@ -1,241 +0,0 @@ -import 'package:app/model/apis/api_response.dart'; -import 'package:app/model/services/backend_service.dart'; -import 'package:app/model/view_model/persons_vm.dart'; -import 'package:app/pages_draft/home_page.dart'; -import 'package:app/pages_draft/person_details_page.dart'; -import 'package:app/pb/person.pb.dart'; -import 'package:app/util/validation.dart'; -import 'package:app/widgets/background.dart'; -import 'package:app/widgets/bottom_navigation.dart'; -import 'package:app/widgets/bottom_navigation_item.dart'; -import 'package:app/widgets/side_drawer.dart'; -import 'package:app/widgets/side_drawer_item.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - -class PersonsPage extends StatefulWidget { - const PersonsPage({super.key}); - - @override - State createState() => _PersonsPageState(); -} - -class _PersonsPageState extends State { - @override - void initState() { - super.initState(); - // _init(); - } - - // void _init() async { - // _setLoading(true); - // _loggedin = await BackendService.isLoggedIn; - // _setLoading(false); - // } - - // void _setLoading(bool loading) { - // setState(() { - // _loading = loading; - // }); - // } - - void _checkResponse(ApiResponse response) { - if (response.status == Status.ERROR && - (response.message!.contains('unauthenticated') || - response.message!.contains('blocked'))) { - BackendService.logout(); - Navigator.of(context).pushAndRemoveUntil( - MaterialPageRoute( - builder: (builder) => HomePage( - loggedOut: true, - )), - (route) => false); - } - } - - bool _loading = false; - bool _loggedin = false; - List persons = []; - - PersonsViewModel vm = PersonsViewModel(); - - void listPersons(BuildContext context) async { - persons = await vm.listPersons(); - } - - List _personsList(List persons) { - persons.sort((a, b) { - final comp = a.lastname.compareTo(b.lastname); - if (comp != 0) { - return comp; - } - return a.firstname.compareTo(b.firstname); - }); - final List list = []; - for (var p in persons) { - list.add(TextButton( - onPressed: () async { - final Person per = await showPerson(context, person: p); - if (!per.id.isZero && !persons.contains(per)) { - setState(() { - this.persons.add(per); - }); - } - }, - child: Card( - shape: - RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), - color: const Color.fromARGB(100, 89, 88, 88), - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 20, horizontal: 14), - child: Row( - children: [ - SizedBox( - height: 40, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - p.lastname.titleCase, - style: const TextStyle(color: Colors.white), - // overflow: TextOverflow.fade, - textAlign: TextAlign.start, - ), - const Spacer(), - Text( - p.firstname.titleCase, - style: const TextStyle(color: Colors.white), - textAlign: TextAlign.start, - // overflow: TextOverflow.fade, - ), - ], - ), - ), - const Spacer(), - const Text('STATUS') - ], - ), - ), - ), - )); - } - return list; - } - - @override - Widget build(BuildContext context) { - return Background( - child: Scaffold( - floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, - floatingActionButton: FloatingActionButton( - onPressed: () async { - final p = await showPerson(context); - if (!p.id.isZero && !persons.contains(p)) { - setState(() { - persons.add(p); - }); - } - }, - child: const Icon(Icons.add), - ), - appBar: AppBar( - automaticallyImplyLeading: false, - ), - drawer: SideDrawer( - children: [ - const Spacer( - flex: 3, - ), - SideDrawerItem( - onPressed: () {}, - icon: Icons.question_answer, - color: Colors.white, - label: 'About', - ), - SideDrawerItem( - onPressed: () {}, - icon: Icons.privacy_tip, - color: Colors.white, - label: 'Datenschutz', - ), - SideDrawerItem( - onPressed: () {}, - icon: Icons.apartment, - color: Colors.white, - label: 'Impressum', - ), - const Spacer( - flex: 1, - ), - if (_loggedin) - SideDrawerItem( - onPressed: () async { - setState(() { - _loading = true; - }); - await BackendService.logout(); - // ignore: use_build_context_synchronously - Navigator.of(context).pushAndRemoveUntil( - MaterialPageRoute( - builder: (builder) => HomePage( - loggedOut: true, - )), - (route) => false); - setState(() { - _loggedin = false; - _loading = false; - }); - }, - icon: Icons.logout, - color: Colors.white, - label: 'Logout', - ), - ], - ), - bottomNavigationBar: BottomNavigation( - children: [ - BottomNavigationItem( - onPressed: () {}, - icon: Icons.dashboard, - color: Colors.white, - label: 'Dashboard', - ), - BottomNavigationItem( - onPressed: () { - Navigator.of(context).pop(); - }, - icon: Icons.home, - color: Colors.white, - label: 'Home', - ), - ], - ), - body: Padding( - padding: const EdgeInsets.all(16), - child: Center( - child: ChangeNotifierProvider( - create: (context) => PersonsViewModel(), - child: Consumer( - builder: (context, value, child) { - _checkResponse(value.response); - if (persons.isEmpty) { - listPersons(context); - } - return _loading - ? const CircularProgressIndicator( - color: Colors.grey, - ) - : value.response.status == Status.COMPLETED - ? value.response.data.length > 0 - ? ListView(children: _personsList(persons)) - : const Text('Noch keine Personen angelegt') - : const Text('Lade Daten...'); - }, - ), - ), - ), - ), - ), - ); - } -} diff --git a/frontend/app/lib/pages_old/dashboard_page.dart b/frontend/app/lib/pages_old/dashboard_page.dart deleted file mode 100644 index e012989..0000000 --- a/frontend/app/lib/pages_old/dashboard_page.dart +++ /dev/null @@ -1,298 +0,0 @@ -import 'package:app/pb/account_info.pb.dart'; -import 'package:app/widgets/background.dart'; -import 'package:app/widgets/loading_widget.dart'; -import 'package:app/widgets/side_drawer.dart'; -import 'package:flutter/material.dart'; - -class DashboardPage extends StatefulWidget { - const DashboardPage({ - super.key, - // required this.client, - }); - - // final GClient client; - - @override - State createState() => _DashboardPageState(); -} - -class _DashboardPageState extends State { - bool _loading = false; - late AccountInfo accountInfo; - - void _setLoading(bool loading) { - setState(() { - _loading = loading; - }); - } - - @override - void initState() { - super.initState(); - - _setLoading(true); - // widget.client.getAccountInfo( - // GetAccountInfoRequest( - // accountId: widget.client.session.accountId, - // ), - // onError: ({String? msg}) { - // ScaffoldMessenger.of(context).showSnackBar( - // SnackBar( - // content: const Text('AccountInfo konnte nicht geladen werden'), - // action: msg != null - // ? SnackBarAction( - // label: 'Details', - // textColor: Colors.grey, - // onPressed: () { - // showDialog( - // context: context, - // builder: (context) { - // return AlertDialog( - // content: Text( - // msg, - // textAlign: TextAlign.center, - // style: const TextStyle(color: Colors.black), - // ), - // icon: const Icon( - // Icons.warning, - // color: Colors.red, - // ), - // ); - // }, - // ); - // }) - // : null, - // ), - // ); - // }, - // ).then((value) { - // accountInfo = value.accountInfo; - // _setLoading(false); - // }); - } - - @override - Widget build(BuildContext context) { - return Background( - child: Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - flexibleSpace: Image.asset( - 'lib/assets/logo_300x200.png', - height: 80, - ), - ), - drawer: Builder(builder: (context) { - return SideDrawer( - children: [ - const Spacer(), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'About', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.question_answer, - color: Colors.white, - ), - ], - ), - ), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'Datenschutz', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.privacy_tip, - color: Colors.white, - ), - ], - ), - ), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'Impressum', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.apartment, - color: Colors.white, - ), - ], - ), - ), - // if (widget.client.session.accessToken != null) - // TextButton( - // onPressed: () { - // widget.client.session.accessToken = null; - // widget.client.session - // .removeSession(widget.client.session.sessionId!); - - // Navigator.of(context).pushAndRemoveUntil( - // MaterialPageRoute( - // builder: (context) => - // StartPage(client: widget.client), - // ), - // (route) => false); - // }, - // child: const Row( - // children: [ - // Text( - // 'Log out', - // style: TextStyle(fontSize: 20), - // ), - // Spacer(), - // Icon( - // Icons.logout, - // color: Colors.white, - // ), - // ], - // ), - // ), - const SizedBox( - height: 250, - ) - ], - ); - }), - // bottomNavigationBar: Builder( - // builder: (context) { - // return BottomBar( - // children: widget.client.session.accessToken != null - // ? [ - // BottomNavigationBarItem( - // backgroundColor: Colors.white, - // label: 'Personen', - // icon: Column( - // children: [ - // IconButton( - // onPressed: () => - // Scaffold.of(context).openDrawer(), - // icon: const Icon( - // Icons.group, - // color: Colors.white, - // ), - // ), - // const Text( - // 'Personen', - // style: TextStyle( - // color: Colors.white, - // fontSize: 16, - // ), - // ) - // ], - // ), - // ), - // BottomNavigationBarItem( - // backgroundColor: Colors.white, - // label: 'Home', - // icon: Column( - // children: [ - // IconButton( - // onPressed: () { - // Navigator.of(context).push( - // MaterialPageRoute( - // builder: (context) => StartPage( - // client: widget.client, - // ), - // ), - // ); - // }, - // icon: const Icon( - // Icons.home, - // color: Colors.white, - // ), - // ), - // const Text( - // 'Home', - // style: TextStyle( - // color: Colors.white, - // fontSize: 16, - // ), - // ) - // ], - // ), - // ), - // BottomNavigationBarItem( - // backgroundColor: Colors.white, - // label: 'Menu', - // icon: IconButton( - // onPressed: () { - // Scaffold.of(context).openDrawer(); - // }, - // icon: const Icon( - // Icons.menu, - // color: Colors.white, - // ), - // ), - // ) - // ] - // : [ - // BottomNavigationBarItem( - // label: 'back', - // backgroundColor: Colors.white, - // icon: IconButton( - // onPressed: () {}, - // icon: const Icon( - // Icons.arrow_back, - // color: Colors.white, - // ), - // ), - // ), - // BottomNavigationBarItem( - // backgroundColor: Colors.white, - // label: 'Menu', - // icon: IconButton( - // onPressed: () => Scaffold.of(context).openDrawer(), - // icon: const Icon( - // Icons.menu, - // color: Colors.white, - // ), - // ), - // ), - // ], - // ); - // }, - // ), - body: !_loading - ? Background( - child: Center( - child: Column( - children: [ - const SizedBox( - height: 48, - ), - Text( - 'Willkommen ${accountInfo.firstname} ${accountInfo.lastname}!', - style: const TextStyle( - fontSize: 24, - ), - ), - ], - ), - ), - ) - : const LoadingWidget(), - ), - ); - } -} diff --git a/frontend/app/lib/pages_old/login_page.dart b/frontend/app/lib/pages_old/login_page.dart deleted file mode 100644 index 3bc0ae5..0000000 --- a/frontend/app/lib/pages_old/login_page.dart +++ /dev/null @@ -1,287 +0,0 @@ -import 'package:app/model/services/backend_service.dart'; -import 'package:app/widgets/background.dart'; -import 'package:app/widgets/bottom_bar.dart'; -import 'package:app/widgets/loading_widget.dart'; -import 'package:app/widgets/side_drawer.dart'; -import 'package:flutter/material.dart'; - -// GlobalKey scaffoldKey = GlobalKey(); - -class LoginPage extends StatefulWidget { - const LoginPage({ - super.key, - // required this.client, - // required this.onChangePage, - }); - - // final GClient client; - // void Function(Pages page) onChangePage; - - @override - State createState() => _LoginPageState(); -} - -class _LoginPageState extends State { - bool _loading = false; - final List bottombarButtons = []; - - // List _selectedBottomBarButtons = bottomBarButtons; - @override - void initState() { - super.initState(); - _addBottomBarButtons(); - } - - void _addBottomBarButtons() { - bottombarButtons.addAll([ - const BottomNavigationBarItem( - label: 'back', - backgroundColor: Colors.white, - icon: Icon( - Icons.arrow_back, - color: Colors.white, - ), - ), - BottomNavigationBarItem( - backgroundColor: Colors.white, - label: 'Menu', - icon: IconButton( - onPressed: () => Scaffold.of(context).openDrawer(), - icon: const Icon( - Icons.menu, - color: Colors.white, - ), - ), - ), - ]); - } - - void _setLoading(bool loading) { - setState(() { - _loading = loading; - }); - } - - // final GClient client = GClient(); - - final _formKey = GlobalKey(); - final mailController = TextEditingController(); - final passwordController = TextEditingController(); - - @override - Widget build(BuildContext context) { - return Background( - child: Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - // flexibleSpace: Image.asset( - // 'lib/assets/logo_300x200.png', - // height: 80, - // ), - ), - bottomNavigationBar: BottomBar( - children: [ - BottomNavigationBarItem( - label: 'back', - backgroundColor: Colors.white, - icon: IconButton( - onPressed: () => Navigator.of(context).pop(), - icon: const Icon( - Icons.arrow_back, - color: Colors.white, - ), - ), - ), - BottomNavigationBarItem( - backgroundColor: Colors.white, - label: 'Menu', - icon: IconButton( - onPressed: () => Scaffold.of(context).openDrawer(), - icon: const Icon( - Icons.menu, - color: Colors.white, - ), - ), - ), - ], - ), - drawer: SideDrawer(children: [ - const Spacer(), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'About', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.question_answer, - color: Colors.white, - ), - ], - ), - ), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'Datenschutz', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.privacy_tip, - color: Colors.white, - ), - ], - ), - ), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'Impressum', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.apartment, - color: Colors.white, - ), - ], - ), - ), - const SizedBox( - height: 250, - ) - ]), - body: !_loading - ? Form( - key: _formKey, - child: Padding( - padding: const EdgeInsets.fromLTRB(16, 100, 16, 16), - child: SingleChildScrollView( - child: Column( - // mainAxisAlignment: MainAxisAlignment.spaceAround, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const Image( - width: 180, - image: AssetImage( - 'lib/assets/logo_300x200.png', - ), - ), - const SizedBox( - height: 30, - ), - const Text( - 'Login', - style: TextStyle( - fontFamily: 'sans-serif', - fontSize: 24, - height: 1.6, - fontWeight: FontWeight.normal, - letterSpacing: 6, - ), - ), - const SizedBox( - height: 20, - ), - TextFormField( - // style: TextStyle( - // color: Theme.of(context).colorScheme.primary, - // ), - controller: mailController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'E-Mail Adresse', - ), - keyboardType: TextInputType.emailAddress, - validator: (value) { - if (value == null || value.isEmpty) { - return 'Bitte eine gültige E-Mail Adresse eingeben'; - } - return null; - }, - ), - TextFormField( - style: const TextStyle( - color: Colors.white, - ), - controller: passwordController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'Passwort', - ), - keyboardType: TextInputType.visiblePassword, - obscureText: true, - validator: (value) { - if (value == null || value.isEmpty) { - return 'Bitte geben Sie Ihr Passwort ein'; - } - return null; - }, - ), - const SizedBox( - height: 15, - ), - ElevatedButton( - onPressed: () { - if (_formKey.currentState!.validate()) { - // final navigator = Navigator.of(context); - _setLoading(true); - // BackendService.login( - // email: mailController.text, - // password: passwordController.text, - // ).then( - // (r) { - // if (r) { - // Navigator.pop(context); - // Navigator.pop(context); - // // Navigator.pushAndRemoveUntil( - // // context, - // // MaterialPageRoute( - // // builder: (ctx) => const StartPage( - // // // client: widget.client, - // // ), - // // ), - // // (ctx) => false, - // // ); - // // widget.onChangePage( - // // Pages.dashboard, - // // ); - // } - // // _setLoading(false); - // }, - // ); - } - }, - child: const Icon(Icons.login)) - ], - ), - ), - ), - ) - : const LoadingWidget(), - ), - ); - } -} diff --git a/frontend/app/lib/pages_old/register_page.dart b/frontend/app/lib/pages_old/register_page.dart deleted file mode 100644 index 5532a09..0000000 --- a/frontend/app/lib/pages_old/register_page.dart +++ /dev/null @@ -1,221 +0,0 @@ -import 'package:app/widgets/background.dart'; -import 'package:app/widgets/bottom_bar.dart'; -import 'package:app/widgets/loading_widget.dart'; -import 'package:app/widgets/side_drawer.dart'; -import 'package:flutter/material.dart'; - -class RegisterPage extends StatefulWidget { - const RegisterPage({ - super.key, - // required this.client, - }); - - // final GClient client; - - @override - State createState() => _RegisterPageState(); -} - -class _RegisterPageState extends State { - bool _loading = false; - final _formKey = GlobalKey(); - final mailController = TextEditingController(); - final passwordController = TextEditingController(); - - void _setLoading(bool loading) { - setState(() { - _loading = loading; - }); - } - - @override - Widget build(BuildContext context) { - return Background( - child: Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - flexibleSpace: Image.asset( - 'lib/assets/logo_300x200.png', - height: 80, - ), - ), - drawer: Builder(builder: (context) { - return SideDrawer( - children: [ - const Spacer(), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'About', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.question_answer, - color: Colors.white, - ), - ], - ), - ), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'Datenschutz', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.privacy_tip, - color: Colors.white, - ), - ], - ), - ), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'Impressum', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.apartment, - color: Colors.white, - ), - ], - ), - ), - const SizedBox( - height: 250, - ) - ], - ); - }), - bottomNavigationBar: BottomBar( - children: [ - BottomNavigationBarItem( - label: 'back', - backgroundColor: Colors.white, - icon: IconButton( - onPressed: () => Navigator.of(context).pop(), - icon: const Icon( - Icons.arrow_back, - color: Colors.white, - ), - ), - ), - BottomNavigationBarItem( - backgroundColor: Colors.white, - label: 'Menu', - icon: IconButton( - onPressed: () => Scaffold.of(context).openDrawer(), - icon: const Icon( - Icons.menu, - color: Colors.white, - ), - ), - ), - ], - ), - body: !_loading - ? Form( - key: _formKey, - child: Padding( - padding: const EdgeInsets.fromLTRB(16, 100, 16, 16), - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const Image( - width: 180, - image: AssetImage( - 'lib/assets/logo_300x200.png', - ), - ), - const SizedBox( - height: 30, - ), - const Text( - 'Registrieren', - style: TextStyle( - fontFamily: 'sans-serif', - fontSize: 24, - height: 1.6, - fontWeight: FontWeight.normal, - letterSpacing: 6, - ), - ), - const SizedBox( - height: 20, - ), - TextFormField( - controller: mailController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'E-Mail Adresse', - ), - keyboardType: TextInputType.emailAddress, - validator: (value) { - if (value == null || value.isEmpty) { - return 'Bitte eine gültige E-Mail Adresse eingeben'; - } - return null; - }, - ), - TextFormField( - style: const TextStyle( - color: Colors.white, - ), - controller: passwordController, - decoration: const InputDecoration( - fillColor: Color.fromARGB(30, 255, 255, 255), - filled: true, - hintStyle: TextStyle( - color: Colors.white38, - ), - hintText: 'Passwort', - ), - keyboardType: TextInputType.visiblePassword, - obscureText: true, - validator: (value) { - if (value == null || value.isEmpty) { - return 'Bitte geben Sie Ihr Passwort ein'; - } - return null; - }, - ), - const SizedBox( - height: 15, - ), - ElevatedButton( - onPressed: () { - if (_formKey.currentState!.validate()) { - // _setLoading(true); - } - }, - child: const Icon(Icons.login)) - ], - ), - ), - ), - ) - : const LoadingWidget()), - ); - } -} diff --git a/frontend/app/lib/pages_old/start_page.dart b/frontend/app/lib/pages_old/start_page.dart deleted file mode 100644 index 4eb160f..0000000 --- a/frontend/app/lib/pages_old/start_page.dart +++ /dev/null @@ -1,370 +0,0 @@ -import 'package:app/model/apis/api_response.dart'; -import 'package:app/model/view_model/account_vm.dart'; -import 'package:app/pages_old/login_page.dart'; -import 'package:app/pb/account.pb.dart'; -import 'package:app/widgets/background.dart'; -import 'package:app/widgets/bottom_bar.dart'; -import 'package:app/widgets/side_drawer.dart'; -import 'package:flutter/material.dart'; -import 'dart:core'; - -import 'package:provider/provider.dart'; - -// ignore: must_be_immutable -class StartPage extends StatefulWidget { - const StartPage({ - super.key, - // required this.client, - }); - - // GClient client; - - @override - State createState() => _StartPageState(); -} - -class _StartPageState extends State { - final List bottombarButtons = []; - - // void _updateClient(GClient c) { - // setState(() { - // widget.client = c; - // }); - // } - - @override - void initState() { - super.initState(); - } - - SnackBar _snackBar(BuildContext context, String message, String label, - void Function() action) { - ScaffoldMessenger.of(context).removeCurrentSnackBar(); - // ScaffoldMessenger.of(context).clearSnackBars(); - return SnackBar( - content: Text( - message, - style: const TextStyle(color: Colors.black), - ), - backgroundColor: Colors.white, - action: SnackBarAction( - label: label, - onPressed: action, - ), - ); - } - - @override - Widget build(BuildContext context) { - return Background( - child: ChangeNotifierProvider( - create: (context) => AccountViewModel(), - child: Consumer(builder: (context, value, child) { - return Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - ), - drawer: Builder(builder: (context) { - return SideDrawer(children: [ - const Spacer(), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'About', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.question_answer, - color: Colors.white, - ), - ], - ), - ), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'Datenschutz', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.privacy_tip, - color: Colors.white, - ), - ], - ), - ), - TextButton( - onPressed: () { - Scaffold.of(context).closeDrawer(); - }, - child: const Row( - children: [ - Text( - 'Impressum', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.apartment, - color: Colors.white, - ), - ], - ), - ), - TextButton( - onPressed: () { - value.logout(); - // ScaffoldMessenger.of(context).clearSnackBars(); - ScaffoldMessenger.of(context).showSnackBar( - _snackBar( - context, - value.response.message != null - ? value.response.message! - : value.response.status.toString(), - value.response.status.toString(), - () { - print('asdf'); - }, - ), - ); - }, - child: const Row( - children: [ - Text( - 'Log out', - style: TextStyle(fontSize: 20), - ), - Spacer(), - Icon( - Icons.logout, - color: Colors.white, - ), - ], - ), - ), - const SizedBox( - height: 250, - ) - ]); - }), - bottomNavigationBar: Builder(builder: (context) { - return BottomBar( - // onTap: (value) => _bottomBarAction(value), - children: value.response.data != null - ? [ - BottomNavigationBarItem( - backgroundColor: Colors.white, - label: 'Personen', - icon: Column( - children: [ - IconButton( - onPressed: () => - Scaffold.of(context).openDrawer(), - icon: const Icon( - Icons.group, - color: Colors.white, - ), - ), - const Text( - 'Personen', - style: TextStyle( - color: Colors.white, - fontSize: 16, - ), - ) - ], - ), - ), - BottomNavigationBarItem( - backgroundColor: Colors.white, - label: 'Dashboard', - icon: Column( - children: [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.dashboard, - color: Colors.white, - ), - ), - const Text( - 'Dashboard', - style: TextStyle( - color: Colors.white, - fontSize: 16, - ), - ) - ], - ), - ), - BottomNavigationBarItem( - backgroundColor: Colors.white, - label: 'Menu', - icon: IconButton( - onPressed: () { - Scaffold.of(context).openDrawer(); - }, - icon: const Icon( - Icons.menu, - color: Colors.white, - ), - ), - ) - ] - : [ - BottomNavigationBarItem( - label: 'register', - backgroundColor: Colors.white, - icon: Column( - children: [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.login, - color: Colors.white, - ), - ), - const Text( - 'Registrieren', - style: TextStyle( - color: Colors.white, - fontSize: 16, - ), - ) - ], - ), - ), - BottomNavigationBarItem( - label: 'login', - backgroundColor: Colors.white, - icon: Column( - children: [ - IconButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (builder) => - const LoginPage())); - }, - icon: const Icon( - Icons.login, - color: Colors.white, - ), - ), - const Text( - 'Login', - style: TextStyle( - color: Colors.white, - fontSize: 16, - ), - ) - ], - ), - ), - BottomNavigationBarItem( - backgroundColor: Colors.white, - label: 'Menu', - icon: IconButton( - onPressed: () => Scaffold.of(context).openDrawer(), - icon: const Icon( - Icons.menu, - color: Colors.white, - ), - ), - ), - ], - ); - }), - body: Column( - children: [ - if (value.response.status == Status.COMPLETED && - value.response.data != null && - !(value.response.data as Account).emailVerified) - Card( - color: Colors.orange, - child: Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - const Text( - 'E-Mail ist noch nicht verifiziert.', - style: TextStyle( - fontWeight: FontWeight.bold, - fontFamily: 'sans-serif', - fontSize: 14), - ), - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.restore, - color: Colors.white, - ), - ), - ], - ), - ), - ), - Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Image( - image: AssetImage( - 'lib/assets/logo_300x200.png', - ), - ), - const SizedBox( - height: 40, - ), - Text( - 'Digitale Spuren auf Knopfdruck entfernen' - .toUpperCase(), - textAlign: TextAlign.center, - style: const TextStyle( - fontFamily: 'sans-serif', - fontSize: 24, - height: 1.6, - fontWeight: FontWeight.normal, - letterSpacing: 6, - ), - ), - TextButton( - onPressed: () { - // ScaffoldMessenger.of(context).clearSnackBars(); - ScaffoldMessenger.of(context).showSnackBar( - _snackBar( - context, - value.response.message != null - ? value.response.message! - : value.response.status.toString(), - value.response.status.toString(), - () { - print('asdf'); - }, - ), - ); - }, - child: const Text('asdf')) - ], - ), - ), - ], - ), - ); - }), - ), - ); - } -} diff --git a/frontend/app/lib/pb/account.pb.dart b/frontend/app/lib/pb/account.pb.dart index 706b8c1..4b052fc 100644 --- a/frontend/app/lib/pb/account.pb.dart +++ b/frontend/app/lib/pb/account.pb.dart @@ -14,16 +14,17 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'google/protobuf/timestamp.pb.dart' as $30; class Account extends $pb.GeneratedMessage { factory Account({ $fixnum.Int64? id, $core.String? email, $core.String? secretKey, - $28.Timestamp? emailVerifiedTime, + $core.int? accountLevel, + $30.Timestamp? emailVerifiedTime, $core.bool? emailVerified, - $28.Timestamp? privacyAcceptedDate, + $30.Timestamp? privacyAcceptedDate, $core.int? permissionLevel, }) { final $result = create(); @@ -36,6 +37,9 @@ class Account extends $pb.GeneratedMessage { if (secretKey != null) { $result.secretKey = secretKey; } + if (accountLevel != null) { + $result.accountLevel = accountLevel; + } if (emailVerifiedTime != null) { $result.emailVerifiedTime = emailVerifiedTime; } @@ -58,9 +62,10 @@ class Account extends $pb.GeneratedMessage { ..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'id', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) ..aOS(2, _omitFieldNames ? '' : 'email') ..aOS(3, _omitFieldNames ? '' : 'secretKey') - ..aOM<$28.Timestamp>(9, _omitFieldNames ? '' : 'emailVerifiedTime', subBuilder: $28.Timestamp.create) + ..a<$core.int>(4, _omitFieldNames ? '' : 'accountLevel', $pb.PbFieldType.OU3) + ..aOM<$30.Timestamp>(9, _omitFieldNames ? '' : 'emailVerifiedTime', subBuilder: $30.Timestamp.create) ..aOB(10, _omitFieldNames ? '' : 'emailVerified') - ..aOM<$28.Timestamp>(12, _omitFieldNames ? '' : 'privacyAcceptedDate', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(12, _omitFieldNames ? '' : 'privacyAcceptedDate', subBuilder: $30.Timestamp.create) ..a<$core.int>(13, _omitFieldNames ? '' : 'permissionLevel', $pb.PbFieldType.O3) ..hasRequiredFields = false ; @@ -113,43 +118,52 @@ class Account extends $pb.GeneratedMessage { @$pb.TagNumber(3) void clearSecretKey() => clearField(3); + @$pb.TagNumber(4) + $core.int get accountLevel => $_getIZ(3); + @$pb.TagNumber(4) + set accountLevel($core.int v) { $_setUnsignedInt32(3, v); } + @$pb.TagNumber(4) + $core.bool hasAccountLevel() => $_has(3); + @$pb.TagNumber(4) + void clearAccountLevel() => clearField(4); + @$pb.TagNumber(9) - $28.Timestamp get emailVerifiedTime => $_getN(3); + $30.Timestamp get emailVerifiedTime => $_getN(4); @$pb.TagNumber(9) - set emailVerifiedTime($28.Timestamp v) { setField(9, v); } + set emailVerifiedTime($30.Timestamp v) { setField(9, v); } @$pb.TagNumber(9) - $core.bool hasEmailVerifiedTime() => $_has(3); + $core.bool hasEmailVerifiedTime() => $_has(4); @$pb.TagNumber(9) void clearEmailVerifiedTime() => clearField(9); @$pb.TagNumber(9) - $28.Timestamp ensureEmailVerifiedTime() => $_ensure(3); + $30.Timestamp ensureEmailVerifiedTime() => $_ensure(4); @$pb.TagNumber(10) - $core.bool get emailVerified => $_getBF(4); + $core.bool get emailVerified => $_getBF(5); @$pb.TagNumber(10) - set emailVerified($core.bool v) { $_setBool(4, v); } + set emailVerified($core.bool v) { $_setBool(5, v); } @$pb.TagNumber(10) - $core.bool hasEmailVerified() => $_has(4); + $core.bool hasEmailVerified() => $_has(5); @$pb.TagNumber(10) void clearEmailVerified() => clearField(10); @$pb.TagNumber(12) - $28.Timestamp get privacyAcceptedDate => $_getN(5); + $30.Timestamp get privacyAcceptedDate => $_getN(6); @$pb.TagNumber(12) - set privacyAcceptedDate($28.Timestamp v) { setField(12, v); } + set privacyAcceptedDate($30.Timestamp v) { setField(12, v); } @$pb.TagNumber(12) - $core.bool hasPrivacyAcceptedDate() => $_has(5); + $core.bool hasPrivacyAcceptedDate() => $_has(6); @$pb.TagNumber(12) void clearPrivacyAcceptedDate() => clearField(12); @$pb.TagNumber(12) - $28.Timestamp ensurePrivacyAcceptedDate() => $_ensure(5); + $30.Timestamp ensurePrivacyAcceptedDate() => $_ensure(6); @$pb.TagNumber(13) - $core.int get permissionLevel => $_getIZ(6); + $core.int get permissionLevel => $_getIZ(7); @$pb.TagNumber(13) - set permissionLevel($core.int v) { $_setSignedInt32(6, v); } + set permissionLevel($core.int v) { $_setSignedInt32(7, v); } @$pb.TagNumber(13) - $core.bool hasPermissionLevel() => $_has(6); + $core.bool hasPermissionLevel() => $_has(7); @$pb.TagNumber(13) void clearPermissionLevel() => clearField(13); } diff --git a/frontend/app/lib/pb/account.pbjson.dart b/frontend/app/lib/pb/account.pbjson.dart index 0c3e1fb..174cce5 100644 --- a/frontend/app/lib/pb/account.pbjson.dart +++ b/frontend/app/lib/pb/account.pbjson.dart @@ -20,6 +20,7 @@ const Account$json = { {'1': 'id', '3': 1, '4': 1, '5': 4, '10': 'id'}, {'1': 'email', '3': 2, '4': 1, '5': 9, '10': 'email'}, {'1': 'secret_key', '3': 3, '4': 1, '5': 9, '9': 0, '10': 'secretKey', '17': true}, + {'1': 'account_level', '3': 4, '4': 1, '5': 13, '9': 1, '10': 'accountLevel', '17': true}, {'1': 'email_verified_time', '3': 9, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '8': {}, '10': 'emailVerifiedTime'}, {'1': 'email_verified', '3': 10, '4': 1, '5': 8, '10': 'emailVerified'}, {'1': 'privacy_accepted_date', '3': 12, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '8': {}, '10': 'privacyAcceptedDate'}, @@ -28,25 +29,27 @@ const Account$json = { '7': {}, '8': [ {'1': '_secret_key'}, + {'1': '_account_level'}, ], }; /// Descriptor for `Account`. Decode as a `google.protobuf.DescriptorProto`. final $typed_data.Uint8List accountDescriptor = $convert.base64Decode( 'CgdBY2NvdW50Eg4KAmlkGAEgASgEUgJpZBIUCgVlbWFpbBgCIAEoCVIFZW1haWwSIgoKc2Vjcm' - 'V0X2tleRgDIAEoCUgAUglzZWNyZXRLZXmIAQESZwoTZW1haWxfdmVyaWZpZWRfdGltZRgJIAEo' - 'CzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCG5JBGEoWIjIwMjMtMTAtMDVUMDA6MDA6MD' - 'BaIlIRZW1haWxWZXJpZmllZFRpbWUSJQoOZW1haWxfdmVyaWZpZWQYCiABKAhSDWVtYWlsVmVy' - 'aWZpZWQSawoVcHJpdmFjeV9hY2NlcHRlZF9kYXRlGAwgASgLMhouZ29vZ2xlLnByb3RvYnVmLl' - 'RpbWVzdGFtcEIbkkEYShYiMjAyMy0xMC0wNVQwMDowMDowMFoiUhNwcml2YWN5QWNjZXB0ZWRE' - 'YXRlEk4KEHBlcm1pc3Npb25fbGV2ZWwYDSABKAVCI5JBIDIeRGVmYXVsdCBpcyAwIChub24tcH' - 'JpdmlsZWRnZWQpUg9wZXJtaXNzaW9uTGV2ZWw6vQOSQbkDCgkqB0FjY291bnQyqwN7ImlkIjog' - 'IjEiLCJlbWFpbCI6ICJqb2huLmRvZUBleGFtcGxlLmNvbSIsICJmaXJzdG5hbWUiOiAiSm9obi' - 'IsICJsYXN0bmFtZSI6ICJEb2UiLCAicGhvbmUiOiAiIiwgInN0cmVldCI6ICJEZWF0aCBTdGFy' - 'IDIiLCAiemlwIjogIjA4MTUiLCAiY2l0eSI6ICJOZXcgWW9yayIsICJjb3VudHJ5IjogIlVTQS' - 'IsICJiaXJ0aGRheSI6ICIxOTkwLTEwLTA1VDAwOjAwOjAwWiIsICJwcml2YWN5X2FjY2VwdGVk' - 'IjogZmFsc2UsICJwcml2YWN5X2FjY2VwdGVkX2RhdGUiOiAiMDAwMS0wMS0wMVQwMDowMDowMF' - 'oiLCAiY3JlYXRvciI6ICJqb2huLmRvZUBleGFtcGxlLmNvbSIsICJjcmVhdGVkIjogIjIwMjMt' - 'MTAtMDVUMDI6MzA6NTNaIiwgImNoYW5nZXIiOiAiam9obi5kb2VAZXhhbXBsZS5jb20iLCAiY2' - 'hhbmdlZCI6ICIyMDIzLTEwLTA1VDAyOjMwOjUzWiJ9Qg0KC19zZWNyZXRfa2V5'); + 'V0X2tleRgDIAEoCUgAUglzZWNyZXRLZXmIAQESKAoNYWNjb3VudF9sZXZlbBgEIAEoDUgBUgxh' + 'Y2NvdW50TGV2ZWyIAQESZwoTZW1haWxfdmVyaWZpZWRfdGltZRgJIAEoCzIaLmdvb2dsZS5wcm' + '90b2J1Zi5UaW1lc3RhbXBCG5JBGEoWIjIwMjMtMTAtMDVUMDA6MDA6MDBaIlIRZW1haWxWZXJp' + 'ZmllZFRpbWUSJQoOZW1haWxfdmVyaWZpZWQYCiABKAhSDWVtYWlsVmVyaWZpZWQSawoVcHJpdm' + 'FjeV9hY2NlcHRlZF9kYXRlGAwgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIbkkEY' + 'ShYiMjAyMy0xMC0wNVQwMDowMDowMFoiUhNwcml2YWN5QWNjZXB0ZWREYXRlEk4KEHBlcm1pc3' + 'Npb25fbGV2ZWwYDSABKAVCI5JBIDIeRGVmYXVsdCBpcyAwIChub24tcHJpdmlsZWRnZWQpUg9w' + 'ZXJtaXNzaW9uTGV2ZWw6vQOSQbkDCgkqB0FjY291bnQyqwN7ImlkIjogIjEiLCJlbWFpbCI6IC' + 'Jqb2huLmRvZUBleGFtcGxlLmNvbSIsICJmaXJzdG5hbWUiOiAiSm9obiIsICJsYXN0bmFtZSI6' + 'ICJEb2UiLCAicGhvbmUiOiAiIiwgInN0cmVldCI6ICJEZWF0aCBTdGFyIDIiLCAiemlwIjogIj' + 'A4MTUiLCAiY2l0eSI6ICJOZXcgWW9yayIsICJjb3VudHJ5IjogIlVTQSIsICJiaXJ0aGRheSI6' + 'ICIxOTkwLTEwLTA1VDAwOjAwOjAwWiIsICJwcml2YWN5X2FjY2VwdGVkIjogZmFsc2UsICJwcm' + 'l2YWN5X2FjY2VwdGVkX2RhdGUiOiAiMDAwMS0wMS0wMVQwMDowMDowMFoiLCAiY3JlYXRvciI6' + 'ICJqb2huLmRvZUBleGFtcGxlLmNvbSIsICJjcmVhdGVkIjogIjIwMjMtMTAtMDVUMDI6MzA6NT' + 'NaIiwgImNoYW5nZXIiOiAiam9obi5kb2VAZXhhbXBsZS5jb20iLCAiY2hhbmdlZCI6ICIyMDIz' + 'LTEwLTA1VDAyOjMwOjUzWiJ9Qg0KC19zZWNyZXRfa2V5QhAKDl9hY2NvdW50X2xldmVs'); diff --git a/frontend/app/lib/pb/account_info.pb.dart b/frontend/app/lib/pb/account_info.pb.dart index bceaa97..38090ad 100644 --- a/frontend/app/lib/pb/account_info.pb.dart +++ b/frontend/app/lib/pb/account_info.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'google/protobuf/timestamp.pb.dart' as $30; class AccountInfo extends $pb.GeneratedMessage { factory AccountInfo({ @@ -25,15 +25,15 @@ class AccountInfo extends $pb.GeneratedMessage { $core.String? city, $core.String? zip, $core.String? country, - $28.Timestamp? birthday, + $30.Timestamp? birthday, $core.String? phone, $core.bool? privacyAccepted, - $28.Timestamp? privacyAcceptedDate, + $30.Timestamp? privacyAcceptedDate, $core.int? permissionLevel, $core.String? creator, - $28.Timestamp? created, + $30.Timestamp? created, $core.String? changer, - $28.Timestamp? changed, + $30.Timestamp? changed, }) { final $result = create(); if (accountId != null) { @@ -98,15 +98,15 @@ class AccountInfo extends $pb.GeneratedMessage { ..aOS(6, _omitFieldNames ? '' : 'city') ..aOS(7, _omitFieldNames ? '' : 'zip') ..aOS(8, _omitFieldNames ? '' : 'country') - ..aOM<$28.Timestamp>(9, _omitFieldNames ? '' : 'birthday', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(9, _omitFieldNames ? '' : 'birthday', subBuilder: $30.Timestamp.create) ..aOS(10, _omitFieldNames ? '' : 'phone') ..aOB(11, _omitFieldNames ? '' : 'privacyAccepted') - ..aOM<$28.Timestamp>(12, _omitFieldNames ? '' : 'privacyAcceptedDate', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(12, _omitFieldNames ? '' : 'privacyAcceptedDate', subBuilder: $30.Timestamp.create) ..a<$core.int>(13, _omitFieldNames ? '' : 'permissionLevel', $pb.PbFieldType.O3) ..aOS(14, _omitFieldNames ? '' : 'creator') - ..aOM<$28.Timestamp>(15, _omitFieldNames ? '' : 'created', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(15, _omitFieldNames ? '' : 'created', subBuilder: $30.Timestamp.create) ..aOS(16, _omitFieldNames ? '' : 'changer') - ..aOM<$28.Timestamp>(17, _omitFieldNames ? '' : 'changed', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(17, _omitFieldNames ? '' : 'changed', subBuilder: $30.Timestamp.create) ..hasRequiredFields = false ; @@ -195,15 +195,15 @@ class AccountInfo extends $pb.GeneratedMessage { void clearCountry() => clearField(8); @$pb.TagNumber(9) - $28.Timestamp get birthday => $_getN(7); + $30.Timestamp get birthday => $_getN(7); @$pb.TagNumber(9) - set birthday($28.Timestamp v) { setField(9, v); } + set birthday($30.Timestamp v) { setField(9, v); } @$pb.TagNumber(9) $core.bool hasBirthday() => $_has(7); @$pb.TagNumber(9) void clearBirthday() => clearField(9); @$pb.TagNumber(9) - $28.Timestamp ensureBirthday() => $_ensure(7); + $30.Timestamp ensureBirthday() => $_ensure(7); @$pb.TagNumber(10) $core.String get phone => $_getSZ(8); @@ -224,15 +224,15 @@ class AccountInfo extends $pb.GeneratedMessage { void clearPrivacyAccepted() => clearField(11); @$pb.TagNumber(12) - $28.Timestamp get privacyAcceptedDate => $_getN(10); + $30.Timestamp get privacyAcceptedDate => $_getN(10); @$pb.TagNumber(12) - set privacyAcceptedDate($28.Timestamp v) { setField(12, v); } + set privacyAcceptedDate($30.Timestamp v) { setField(12, v); } @$pb.TagNumber(12) $core.bool hasPrivacyAcceptedDate() => $_has(10); @$pb.TagNumber(12) void clearPrivacyAcceptedDate() => clearField(12); @$pb.TagNumber(12) - $28.Timestamp ensurePrivacyAcceptedDate() => $_ensure(10); + $30.Timestamp ensurePrivacyAcceptedDate() => $_ensure(10); @$pb.TagNumber(13) $core.int get permissionLevel => $_getIZ(11); @@ -253,15 +253,15 @@ class AccountInfo extends $pb.GeneratedMessage { void clearCreator() => clearField(14); @$pb.TagNumber(15) - $28.Timestamp get created => $_getN(13); + $30.Timestamp get created => $_getN(13); @$pb.TagNumber(15) - set created($28.Timestamp v) { setField(15, v); } + set created($30.Timestamp v) { setField(15, v); } @$pb.TagNumber(15) $core.bool hasCreated() => $_has(13); @$pb.TagNumber(15) void clearCreated() => clearField(15); @$pb.TagNumber(15) - $28.Timestamp ensureCreated() => $_ensure(13); + $30.Timestamp ensureCreated() => $_ensure(13); @$pb.TagNumber(16) $core.String get changer => $_getSZ(14); @@ -273,15 +273,15 @@ class AccountInfo extends $pb.GeneratedMessage { void clearChanger() => clearField(16); @$pb.TagNumber(17) - $28.Timestamp get changed => $_getN(15); + $30.Timestamp get changed => $_getN(15); @$pb.TagNumber(17) - set changed($28.Timestamp v) { setField(17, v); } + set changed($30.Timestamp v) { setField(17, v); } @$pb.TagNumber(17) $core.bool hasChanged() => $_has(15); @$pb.TagNumber(17) void clearChanged() => clearField(17); @$pb.TagNumber(17) - $28.Timestamp ensureChanged() => $_ensure(15); + $30.Timestamp ensureChanged() => $_ensure(15); } diff --git a/frontend/app/lib/pb/document.pb.dart b/frontend/app/lib/pb/document.pb.dart index ceb5485..0d7e513 100644 --- a/frontend/app/lib/pb/document.pb.dart +++ b/frontend/app/lib/pb/document.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'google/protobuf/timestamp.pb.dart' as $30; class Document extends $pb.GeneratedMessage { factory Document({ @@ -26,11 +26,11 @@ class Document extends $pb.GeneratedMessage { $core.String? url, $core.bool? valid, $core.String? validatedBy, - $28.Timestamp? validDate, + $30.Timestamp? validDate, $core.String? creator, - $28.Timestamp? created, + $30.Timestamp? created, $core.String? changer, - $28.Timestamp? changed, + $30.Timestamp? changed, $fixnum.Int64? id, }) { final $result = create(); @@ -91,11 +91,11 @@ class Document extends $pb.GeneratedMessage { ..aOS(6, _omitFieldNames ? '' : 'url') ..aOB(7, _omitFieldNames ? '' : 'valid') ..aOS(8, _omitFieldNames ? '' : 'validatedBy') - ..aOM<$28.Timestamp>(9, _omitFieldNames ? '' : 'validDate', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(9, _omitFieldNames ? '' : 'validDate', subBuilder: $30.Timestamp.create) ..aOS(10, _omitFieldNames ? '' : 'creator') - ..aOM<$28.Timestamp>(11, _omitFieldNames ? '' : 'created', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(11, _omitFieldNames ? '' : 'created', subBuilder: $30.Timestamp.create) ..aOS(12, _omitFieldNames ? '' : 'changer') - ..aOM<$28.Timestamp>(13, _omitFieldNames ? '' : 'changed', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(13, _omitFieldNames ? '' : 'changed', subBuilder: $30.Timestamp.create) ..a<$fixnum.Int64>(14, _omitFieldNames ? '' : 'id', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) ..hasRequiredFields = false ; @@ -194,15 +194,15 @@ class Document extends $pb.GeneratedMessage { void clearValidatedBy() => clearField(8); @$pb.TagNumber(9) - $28.Timestamp get validDate => $_getN(8); + $30.Timestamp get validDate => $_getN(8); @$pb.TagNumber(9) - set validDate($28.Timestamp v) { setField(9, v); } + set validDate($30.Timestamp v) { setField(9, v); } @$pb.TagNumber(9) $core.bool hasValidDate() => $_has(8); @$pb.TagNumber(9) void clearValidDate() => clearField(9); @$pb.TagNumber(9) - $28.Timestamp ensureValidDate() => $_ensure(8); + $30.Timestamp ensureValidDate() => $_ensure(8); @$pb.TagNumber(10) $core.String get creator => $_getSZ(9); @@ -214,15 +214,15 @@ class Document extends $pb.GeneratedMessage { void clearCreator() => clearField(10); @$pb.TagNumber(11) - $28.Timestamp get created => $_getN(10); + $30.Timestamp get created => $_getN(10); @$pb.TagNumber(11) - set created($28.Timestamp v) { setField(11, v); } + set created($30.Timestamp v) { setField(11, v); } @$pb.TagNumber(11) $core.bool hasCreated() => $_has(10); @$pb.TagNumber(11) void clearCreated() => clearField(11); @$pb.TagNumber(11) - $28.Timestamp ensureCreated() => $_ensure(10); + $30.Timestamp ensureCreated() => $_ensure(10); @$pb.TagNumber(12) $core.String get changer => $_getSZ(11); @@ -234,15 +234,15 @@ class Document extends $pb.GeneratedMessage { void clearChanger() => clearField(12); @$pb.TagNumber(13) - $28.Timestamp get changed => $_getN(12); + $30.Timestamp get changed => $_getN(12); @$pb.TagNumber(13) - set changed($28.Timestamp v) { setField(13, v); } + set changed($30.Timestamp v) { setField(13, v); } @$pb.TagNumber(13) $core.bool hasChanged() => $_has(12); @$pb.TagNumber(13) void clearChanged() => clearField(13); @$pb.TagNumber(13) - $28.Timestamp ensureChanged() => $_ensure(12); + $30.Timestamp ensureChanged() => $_ensure(12); @$pb.TagNumber(14) $fixnum.Int64 get id => $_getI64(13); diff --git a/frontend/app/lib/pb/email_address.pb.dart b/frontend/app/lib/pb/email_address.pb.dart new file mode 100644 index 0000000..9c03e6e --- /dev/null +++ b/frontend/app/lib/pb/email_address.pb.dart @@ -0,0 +1,97 @@ +// +// Generated code. Do not modify. +// source: email_address.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +class EmailAddress extends $pb.GeneratedMessage { + factory EmailAddress({ + $fixnum.Int64? id, + $fixnum.Int64? personId, + $core.String? email, + }) { + final $result = create(); + if (id != null) { + $result.id = id; + } + if (personId != null) { + $result.personId = personId; + } + if (email != null) { + $result.email = email; + } + return $result; + } + EmailAddress._() : super(); + factory EmailAddress.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory EmailAddress.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'EmailAddress', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) + ..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'id', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) + ..a<$fixnum.Int64>(2, _omitFieldNames ? '' : 'personId', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) + ..aOS(3, _omitFieldNames ? '' : 'email') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + EmailAddress clone() => EmailAddress()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + EmailAddress copyWith(void Function(EmailAddress) updates) => super.copyWith((message) => updates(message as EmailAddress)) as EmailAddress; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static EmailAddress create() => EmailAddress._(); + EmailAddress createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static EmailAddress getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static EmailAddress? _defaultInstance; + + @$pb.TagNumber(1) + $fixnum.Int64 get id => $_getI64(0); + @$pb.TagNumber(1) + set id($fixnum.Int64 v) { $_setInt64(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); + + @$pb.TagNumber(2) + $fixnum.Int64 get personId => $_getI64(1); + @$pb.TagNumber(2) + set personId($fixnum.Int64 v) { $_setInt64(1, v); } + @$pb.TagNumber(2) + $core.bool hasPersonId() => $_has(1); + @$pb.TagNumber(2) + void clearPersonId() => clearField(2); + + @$pb.TagNumber(3) + $core.String get email => $_getSZ(2); + @$pb.TagNumber(3) + set email($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasEmail() => $_has(2); + @$pb.TagNumber(3) + void clearEmail() => clearField(3); +} + + +const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names'); +const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/frontend/app/lib/pb/email_address.pbenum.dart b/frontend/app/lib/pb/email_address.pbenum.dart new file mode 100644 index 0000000..1a8ec51 --- /dev/null +++ b/frontend/app/lib/pb/email_address.pbenum.dart @@ -0,0 +1,11 @@ +// +// Generated code. Do not modify. +// source: email_address.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + diff --git a/frontend/app/lib/pb/email_address.pbjson.dart b/frontend/app/lib/pb/email_address.pbjson.dart new file mode 100644 index 0000000..fe24bf2 --- /dev/null +++ b/frontend/app/lib/pb/email_address.pbjson.dart @@ -0,0 +1,31 @@ +// +// Generated code. Do not modify. +// source: email_address.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:convert' as $convert; +import 'dart:core' as $core; +import 'dart:typed_data' as $typed_data; + +@$core.Deprecated('Use emailAddressDescriptor instead') +const EmailAddress$json = { + '1': 'EmailAddress', + '2': [ + {'1': 'id', '3': 1, '4': 1, '5': 4, '10': 'id'}, + {'1': 'person_id', '3': 2, '4': 1, '5': 4, '10': 'personId'}, + {'1': 'email', '3': 3, '4': 1, '5': 9, '10': 'email'}, + ], + '7': {}, +}; + +/// Descriptor for `EmailAddress`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List emailAddressDescriptor = $convert.base64Decode( + 'CgxFbWFpbEFkZHJlc3MSDgoCaWQYASABKARSAmlkEhsKCXBlcnNvbl9pZBgCIAEoBFIIcGVyc2' + '9uSWQSFAoFZW1haWwYAyABKAlSBWVtYWlsOhOSQRAKDioMRW1haWxBZGRyZXNz'); + diff --git a/frontend/app/lib/pb/payment.pb.dart b/frontend/app/lib/pb/payment.pb.dart index b2eb4ac..86d7e08 100644 --- a/frontend/app/lib/pb/payment.pb.dart +++ b/frontend/app/lib/pb/payment.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'google/protobuf/timestamp.pb.dart' as $30; class Payment extends $pb.GeneratedMessage { factory Payment({ @@ -29,9 +29,9 @@ class Payment extends $pb.GeneratedMessage { $core.String? paymentSystem, $core.String? type, $core.String? creator, - $28.Timestamp? created, + $30.Timestamp? created, $core.String? changer, - $28.Timestamp? changed, + $30.Timestamp? changed, }) { final $result = create(); if (id != null) { @@ -94,9 +94,9 @@ class Payment extends $pb.GeneratedMessage { ..aOS(9, _omitFieldNames ? '' : 'paymentSystem') ..aOS(10, _omitFieldNames ? '' : 'type') ..aOS(11, _omitFieldNames ? '' : 'creator') - ..aOM<$28.Timestamp>(12, _omitFieldNames ? '' : 'created', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(12, _omitFieldNames ? '' : 'created', subBuilder: $30.Timestamp.create) ..aOS(13, _omitFieldNames ? '' : 'changer') - ..aOM<$28.Timestamp>(14, _omitFieldNames ? '' : 'changed', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(14, _omitFieldNames ? '' : 'changed', subBuilder: $30.Timestamp.create) ..hasRequiredFields = false ; @@ -221,15 +221,15 @@ class Payment extends $pb.GeneratedMessage { void clearCreator() => clearField(11); @$pb.TagNumber(12) - $28.Timestamp get created => $_getN(11); + $30.Timestamp get created => $_getN(11); @$pb.TagNumber(12) - set created($28.Timestamp v) { setField(12, v); } + set created($30.Timestamp v) { setField(12, v); } @$pb.TagNumber(12) $core.bool hasCreated() => $_has(11); @$pb.TagNumber(12) void clearCreated() => clearField(12); @$pb.TagNumber(12) - $28.Timestamp ensureCreated() => $_ensure(11); + $30.Timestamp ensureCreated() => $_ensure(11); @$pb.TagNumber(13) $core.String get changer => $_getSZ(12); @@ -241,15 +241,15 @@ class Payment extends $pb.GeneratedMessage { void clearChanger() => clearField(13); @$pb.TagNumber(14) - $28.Timestamp get changed => $_getN(13); + $30.Timestamp get changed => $_getN(13); @$pb.TagNumber(14) - set changed($28.Timestamp v) { setField(14, v); } + set changed($30.Timestamp v) { setField(14, v); } @$pb.TagNumber(14) $core.bool hasChanged() => $_has(13); @$pb.TagNumber(14) void clearChanged() => clearField(14); @$pb.TagNumber(14) - $28.Timestamp ensureChanged() => $_ensure(13); + $30.Timestamp ensureChanged() => $_ensure(13); } diff --git a/frontend/app/lib/pb/person.pb.dart b/frontend/app/lib/pb/person.pb.dart index a06b849..fc789a0 100644 --- a/frontend/app/lib/pb/person.pb.dart +++ b/frontend/app/lib/pb/person.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'google/protobuf/timestamp.pb.dart' as $30; class Person extends $pb.GeneratedMessage { factory Person({ @@ -26,11 +26,12 @@ class Person extends $pb.GeneratedMessage { $core.String? city, $core.String? zip, $core.String? country, - $28.Timestamp? birthday, + $30.Timestamp? birthday, $core.String? creator, - $28.Timestamp? created, + $30.Timestamp? created, $core.String? changer, - $28.Timestamp? changed, + $30.Timestamp? changed, + $core.String? relationship, }) { final $result = create(); if (id != null) { @@ -72,6 +73,9 @@ class Person extends $pb.GeneratedMessage { if (changed != null) { $result.changed = changed; } + if (relationship != null) { + $result.relationship = relationship; + } return $result; } Person._() : super(); @@ -87,11 +91,12 @@ class Person extends $pb.GeneratedMessage { ..aOS(6, _omitFieldNames ? '' : 'city') ..aOS(7, _omitFieldNames ? '' : 'zip') ..aOS(8, _omitFieldNames ? '' : 'country') - ..aOM<$28.Timestamp>(9, _omitFieldNames ? '' : 'birthday', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(9, _omitFieldNames ? '' : 'birthday', subBuilder: $30.Timestamp.create) ..aOS(10, _omitFieldNames ? '' : 'creator') - ..aOM<$28.Timestamp>(11, _omitFieldNames ? '' : 'created', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(11, _omitFieldNames ? '' : 'created', subBuilder: $30.Timestamp.create) ..aOS(12, _omitFieldNames ? '' : 'changer') - ..aOM<$28.Timestamp>(13, _omitFieldNames ? '' : 'changed', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(13, _omitFieldNames ? '' : 'changed', subBuilder: $30.Timestamp.create) + ..aOS(14, _omitFieldNames ? '' : 'relationship') ..hasRequiredFields = false ; @@ -189,15 +194,15 @@ class Person extends $pb.GeneratedMessage { void clearCountry() => clearField(8); @$pb.TagNumber(9) - $28.Timestamp get birthday => $_getN(8); + $30.Timestamp get birthday => $_getN(8); @$pb.TagNumber(9) - set birthday($28.Timestamp v) { setField(9, v); } + set birthday($30.Timestamp v) { setField(9, v); } @$pb.TagNumber(9) $core.bool hasBirthday() => $_has(8); @$pb.TagNumber(9) void clearBirthday() => clearField(9); @$pb.TagNumber(9) - $28.Timestamp ensureBirthday() => $_ensure(8); + $30.Timestamp ensureBirthday() => $_ensure(8); @$pb.TagNumber(10) $core.String get creator => $_getSZ(9); @@ -209,15 +214,15 @@ class Person extends $pb.GeneratedMessage { void clearCreator() => clearField(10); @$pb.TagNumber(11) - $28.Timestamp get created => $_getN(10); + $30.Timestamp get created => $_getN(10); @$pb.TagNumber(11) - set created($28.Timestamp v) { setField(11, v); } + set created($30.Timestamp v) { setField(11, v); } @$pb.TagNumber(11) $core.bool hasCreated() => $_has(10); @$pb.TagNumber(11) void clearCreated() => clearField(11); @$pb.TagNumber(11) - $28.Timestamp ensureCreated() => $_ensure(10); + $30.Timestamp ensureCreated() => $_ensure(10); @$pb.TagNumber(12) $core.String get changer => $_getSZ(11); @@ -229,15 +234,24 @@ class Person extends $pb.GeneratedMessage { void clearChanger() => clearField(12); @$pb.TagNumber(13) - $28.Timestamp get changed => $_getN(12); + $30.Timestamp get changed => $_getN(12); @$pb.TagNumber(13) - set changed($28.Timestamp v) { setField(13, v); } + set changed($30.Timestamp v) { setField(13, v); } @$pb.TagNumber(13) $core.bool hasChanged() => $_has(12); @$pb.TagNumber(13) void clearChanged() => clearField(13); @$pb.TagNumber(13) - $28.Timestamp ensureChanged() => $_ensure(12); + $30.Timestamp ensureChanged() => $_ensure(12); + + @$pb.TagNumber(14) + $core.String get relationship => $_getSZ(13); + @$pb.TagNumber(14) + set relationship($core.String v) { $_setString(13, v); } + @$pb.TagNumber(14) + $core.bool hasRelationship() => $_has(13); + @$pb.TagNumber(14) + void clearRelationship() => clearField(14); } diff --git a/frontend/app/lib/pb/person.pbjson.dart b/frontend/app/lib/pb/person.pbjson.dart index 0594753..cb999fd 100644 --- a/frontend/app/lib/pb/person.pbjson.dart +++ b/frontend/app/lib/pb/person.pbjson.dart @@ -30,8 +30,12 @@ const Person$json = { {'1': 'created', '3': 11, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '8': {}, '10': 'created'}, {'1': 'changer', '3': 12, '4': 1, '5': 9, '10': 'changer'}, {'1': 'changed', '3': 13, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '8': {}, '10': 'changed'}, + {'1': 'relationship', '3': 14, '4': 1, '5': 9, '9': 0, '10': 'relationship', '17': true}, ], '7': {}, + '8': [ + {'1': '_relationship'}, + ], }; /// Descriptor for `Person`. Decode as a `google.protobuf.DescriptorProto`. @@ -45,13 +49,14 @@ final $typed_data.Uint8List personDescriptor = $convert.base64Decode( 'b29nbGUucHJvdG9idWYuVGltZXN0YW1wQhuSQRhKFiIyMDIzLTEwLTA1VDAwOjAwOjAwWiJSB2' 'NyZWF0ZWQSGAoHY2hhbmdlchgMIAEoCVIHY2hhbmdlchJRCgdjaGFuZ2VkGA0gASgLMhouZ29v' 'Z2xlLnByb3RvYnVmLlRpbWVzdGFtcEIbkkEYShYiMjAyMy0xMC0wNVQwMDowMDowMFoiUgdjaG' - 'FuZ2VkOrwDkkG4AwoIKgZQZXJzb24yqwN7ImlkIjogIjEiLCJlbWFpbCI6ICJqb2huLmRvZUBl' - 'eGFtcGxlLmNvbSIsICJmaXJzdG5hbWUiOiAiSm9obiIsICJsYXN0bmFtZSI6ICJEb2UiLCAicG' - 'hvbmUiOiAiIiwgInN0cmVldCI6ICJEZWF0aCBTdGFyIDIiLCAiemlwIjogIjA4MTUiLCAiY2l0' - 'eSI6ICJOZXcgWW9yayIsICJjb3VudHJ5IjogIlVTQSIsICJiaXJ0aGRheSI6ICIxOTkwLTEwLT' - 'A1VDAwOjAwOjAwWiIsICJwcml2YWN5X2FjY2VwdGVkIjogZmFsc2UsICJwcml2YWN5X2FjY2Vw' - 'dGVkX2RhdGUiOiAiMDAwMS0wMS0wMVQwMDowMDowMFoiLCAiY3JlYXRvciI6ICJqb2huLmRvZU' - 'BleGFtcGxlLmNvbSIsICJjcmVhdGVkIjogIjIwMjMtMTAtMDVUMDI6MzA6NTNaIiwgImNoYW5n' - 'ZXIiOiAiam9obi5kb2VAZXhhbXBsZS5jb20iLCAiY2hhbmdlZCI6ICIyMDIzLTEwLTA1VDAyOj' - 'MwOjUzWiJ9'); + 'FuZ2VkEicKDHJlbGF0aW9uc2hpcBgOIAEoCUgAUgxyZWxhdGlvbnNoaXCIAQE6vAOSQbgDCggq' + 'BlBlcnNvbjKrA3siaWQiOiAiMSIsImVtYWlsIjogImpvaG4uZG9lQGV4YW1wbGUuY29tIiwgIm' + 'ZpcnN0bmFtZSI6ICJKb2huIiwgImxhc3RuYW1lIjogIkRvZSIsICJwaG9uZSI6ICIiLCAic3Ry' + 'ZWV0IjogIkRlYXRoIFN0YXIgMiIsICJ6aXAiOiAiMDgxNSIsICJjaXR5IjogIk5ldyBZb3JrIi' + 'wgImNvdW50cnkiOiAiVVNBIiwgImJpcnRoZGF5IjogIjE5OTAtMTAtMDVUMDA6MDA6MDBaIiwg' + 'InByaXZhY3lfYWNjZXB0ZWQiOiBmYWxzZSwgInByaXZhY3lfYWNjZXB0ZWRfZGF0ZSI6ICIwMD' + 'AxLTAxLTAxVDAwOjAwOjAwWiIsICJjcmVhdG9yIjogImpvaG4uZG9lQGV4YW1wbGUuY29tIiwg' + 'ImNyZWF0ZWQiOiAiMjAyMy0xMC0wNVQwMjozMDo1M1oiLCAiY2hhbmdlciI6ICJqb2huLmRvZU' + 'BleGFtcGxlLmNvbSIsICJjaGFuZ2VkIjogIjIwMjMtMTAtMDVUMDI6MzA6NTNaIn1CDwoNX3Jl' + 'bGF0aW9uc2hpcA=='); diff --git a/frontend/app/lib/pb/returns_log.pb.dart b/frontend/app/lib/pb/returns_log.pb.dart index 8045641..21b5914 100644 --- a/frontend/app/lib/pb/returns_log.pb.dart +++ b/frontend/app/lib/pb/returns_log.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'google/protobuf/timestamp.pb.dart' as $30; class ReturnsLog extends $pb.GeneratedMessage { factory ReturnsLog({ @@ -23,9 +23,9 @@ class ReturnsLog extends $pb.GeneratedMessage { $fixnum.Int64? mailId, $core.String? status, $core.String? creator, - $28.Timestamp? created, + $30.Timestamp? created, $core.String? changer, - $28.Timestamp? changed, + $30.Timestamp? changed, }) { final $result = create(); if (id != null) { @@ -64,9 +64,9 @@ class ReturnsLog extends $pb.GeneratedMessage { ..a<$fixnum.Int64>(3, _omitFieldNames ? '' : 'mailId', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) ..aOS(4, _omitFieldNames ? '' : 'status') ..aOS(5, _omitFieldNames ? '' : 'creator') - ..aOM<$28.Timestamp>(6, _omitFieldNames ? '' : 'created', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(6, _omitFieldNames ? '' : 'created', subBuilder: $30.Timestamp.create) ..aOS(7, _omitFieldNames ? '' : 'changer') - ..aOM<$28.Timestamp>(8, _omitFieldNames ? '' : 'changed', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(8, _omitFieldNames ? '' : 'changed', subBuilder: $30.Timestamp.create) ..hasRequiredFields = false ; @@ -137,15 +137,15 @@ class ReturnsLog extends $pb.GeneratedMessage { void clearCreator() => clearField(5); @$pb.TagNumber(6) - $28.Timestamp get created => $_getN(5); + $30.Timestamp get created => $_getN(5); @$pb.TagNumber(6) - set created($28.Timestamp v) { setField(6, v); } + set created($30.Timestamp v) { setField(6, v); } @$pb.TagNumber(6) $core.bool hasCreated() => $_has(5); @$pb.TagNumber(6) void clearCreated() => clearField(6); @$pb.TagNumber(6) - $28.Timestamp ensureCreated() => $_ensure(5); + $30.Timestamp ensureCreated() => $_ensure(5); @$pb.TagNumber(7) $core.String get changer => $_getSZ(6); @@ -157,15 +157,15 @@ class ReturnsLog extends $pb.GeneratedMessage { void clearChanger() => clearField(7); @$pb.TagNumber(8) - $28.Timestamp get changed => $_getN(7); + $30.Timestamp get changed => $_getN(7); @$pb.TagNumber(8) - set changed($28.Timestamp v) { setField(8, v); } + set changed($30.Timestamp v) { setField(8, v); } @$pb.TagNumber(8) $core.bool hasChanged() => $_has(7); @$pb.TagNumber(8) void clearChanged() => clearField(8); @$pb.TagNumber(8) - $28.Timestamp ensureChanged() => $_ensure(7); + $30.Timestamp ensureChanged() => $_ensure(7); } diff --git a/frontend/app/lib/pb/rpc_add_email.pb.dart b/frontend/app/lib/pb/rpc_add_email.pb.dart new file mode 100644 index 0000000..0a7f445 --- /dev/null +++ b/frontend/app/lib/pb/rpc_add_email.pb.dart @@ -0,0 +1,137 @@ +// +// Generated code. Do not modify. +// source: rpc_add_email.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +import 'email_address.pb.dart' as $31; + +class AddEmailAddressRequest extends $pb.GeneratedMessage { + factory AddEmailAddressRequest({ + $fixnum.Int64? personId, + $core.String? email, + }) { + final $result = create(); + if (personId != null) { + $result.personId = personId; + } + if (email != null) { + $result.email = email; + } + return $result; + } + AddEmailAddressRequest._() : super(); + factory AddEmailAddressRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory AddEmailAddressRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'AddEmailAddressRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) + ..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'personId', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) + ..aOS(2, _omitFieldNames ? '' : 'email') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + AddEmailAddressRequest clone() => AddEmailAddressRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + AddEmailAddressRequest copyWith(void Function(AddEmailAddressRequest) updates) => super.copyWith((message) => updates(message as AddEmailAddressRequest)) as AddEmailAddressRequest; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static AddEmailAddressRequest create() => AddEmailAddressRequest._(); + AddEmailAddressRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static AddEmailAddressRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static AddEmailAddressRequest? _defaultInstance; + + @$pb.TagNumber(1) + $fixnum.Int64 get personId => $_getI64(0); + @$pb.TagNumber(1) + set personId($fixnum.Int64 v) { $_setInt64(0, v); } + @$pb.TagNumber(1) + $core.bool hasPersonId() => $_has(0); + @$pb.TagNumber(1) + void clearPersonId() => clearField(1); + + @$pb.TagNumber(2) + $core.String get email => $_getSZ(1); + @$pb.TagNumber(2) + set email($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasEmail() => $_has(1); + @$pb.TagNumber(2) + void clearEmail() => clearField(2); +} + +class AddEmailAddressResponse extends $pb.GeneratedMessage { + factory AddEmailAddressResponse({ + $31.EmailAddress? email, + }) { + final $result = create(); + if (email != null) { + $result.email = email; + } + return $result; + } + AddEmailAddressResponse._() : super(); + factory AddEmailAddressResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory AddEmailAddressResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'AddEmailAddressResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) + ..aOM<$31.EmailAddress>(1, _omitFieldNames ? '' : 'email', subBuilder: $31.EmailAddress.create) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + AddEmailAddressResponse clone() => AddEmailAddressResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + AddEmailAddressResponse copyWith(void Function(AddEmailAddressResponse) updates) => super.copyWith((message) => updates(message as AddEmailAddressResponse)) as AddEmailAddressResponse; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static AddEmailAddressResponse create() => AddEmailAddressResponse._(); + AddEmailAddressResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static AddEmailAddressResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static AddEmailAddressResponse? _defaultInstance; + + @$pb.TagNumber(1) + $31.EmailAddress get email => $_getN(0); + @$pb.TagNumber(1) + set email($31.EmailAddress v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasEmail() => $_has(0); + @$pb.TagNumber(1) + void clearEmail() => clearField(1); + @$pb.TagNumber(1) + $31.EmailAddress ensureEmail() => $_ensure(0); +} + + +const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names'); +const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/frontend/app/lib/pb/rpc_add_email.pbenum.dart b/frontend/app/lib/pb/rpc_add_email.pbenum.dart new file mode 100644 index 0000000..71a295e --- /dev/null +++ b/frontend/app/lib/pb/rpc_add_email.pbenum.dart @@ -0,0 +1,11 @@ +// +// Generated code. Do not modify. +// source: rpc_add_email.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + diff --git a/frontend/app/lib/pb/rpc_add_email.pbjson.dart b/frontend/app/lib/pb/rpc_add_email.pbjson.dart new file mode 100644 index 0000000..94e2e20 --- /dev/null +++ b/frontend/app/lib/pb/rpc_add_email.pbjson.dart @@ -0,0 +1,46 @@ +// +// Generated code. Do not modify. +// source: rpc_add_email.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:convert' as $convert; +import 'dart:core' as $core; +import 'dart:typed_data' as $typed_data; + +@$core.Deprecated('Use addEmailAddressRequestDescriptor instead') +const AddEmailAddressRequest$json = { + '1': 'AddEmailAddressRequest', + '2': [ + {'1': 'person_id', '3': 1, '4': 1, '5': 4, '10': 'personId'}, + {'1': 'email', '3': 2, '4': 1, '5': 9, '10': 'email'}, + ], + '7': {}, +}; + +/// Descriptor for `AddEmailAddressRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List addEmailAddressRequestDescriptor = $convert.base64Decode( + 'ChZBZGRFbWFpbEFkZHJlc3NSZXF1ZXN0EhsKCXBlcnNvbl9pZBgBIAEoBFIIcGVyc29uSWQSFA' + 'oFZW1haWwYAiABKAlSBWVtYWlsOkCSQT0KOyoQQWRkIEVtYWlsQWRkcmVzczITQWRkIGFuIEVt' + 'YWlsQWRkcmVzc9IBCXBlcnNvbl9pZNIBBWVtYWls'); + +@$core.Deprecated('Use addEmailAddressResponseDescriptor instead') +const AddEmailAddressResponse$json = { + '1': 'AddEmailAddressResponse', + '2': [ + {'1': 'email', '3': 1, '4': 1, '5': 11, '6': '.pb.EmailAddress', '8': {}, '10': 'email'}, + ], + '7': {}, +}; + +/// Descriptor for `AddEmailAddressResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List addEmailAddressResponseDescriptor = $convert.base64Decode( + 'ChdBZGRFbWFpbEFkZHJlc3NSZXNwb25zZRIrCgVlbWFpbBgBIAEoCzIQLnBiLkVtYWlsQWRkcm' + 'Vzc0IDkkEAUgVlbWFpbDo5kkE2CjQqEkFkZGVkIEVtYWlsQWRkcmVzczIeUmV0dXJucyB0aGUg' + 'YWRkZWQgRW1haWxBZGRyZXNz'); + diff --git a/frontend/app/lib/pb/rpc_add_emails.pb.dart b/frontend/app/lib/pb/rpc_add_emails.pb.dart new file mode 100644 index 0000000..a9b5efd --- /dev/null +++ b/frontend/app/lib/pb/rpc_add_emails.pb.dart @@ -0,0 +1,123 @@ +// +// Generated code. Do not modify. +// source: rpc_add_emails.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +import 'email_address.pb.dart' as $31; + +class AddEmailAddressesRequest extends $pb.GeneratedMessage { + factory AddEmailAddressesRequest({ + $fixnum.Int64? personId, + $core.Iterable<$core.String>? email, + }) { + final $result = create(); + if (personId != null) { + $result.personId = personId; + } + if (email != null) { + $result.email.addAll(email); + } + return $result; + } + AddEmailAddressesRequest._() : super(); + factory AddEmailAddressesRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory AddEmailAddressesRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'AddEmailAddressesRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) + ..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'personId', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) + ..pPS(2, _omitFieldNames ? '' : 'email') + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + AddEmailAddressesRequest clone() => AddEmailAddressesRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + AddEmailAddressesRequest copyWith(void Function(AddEmailAddressesRequest) updates) => super.copyWith((message) => updates(message as AddEmailAddressesRequest)) as AddEmailAddressesRequest; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static AddEmailAddressesRequest create() => AddEmailAddressesRequest._(); + AddEmailAddressesRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static AddEmailAddressesRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static AddEmailAddressesRequest? _defaultInstance; + + @$pb.TagNumber(1) + $fixnum.Int64 get personId => $_getI64(0); + @$pb.TagNumber(1) + set personId($fixnum.Int64 v) { $_setInt64(0, v); } + @$pb.TagNumber(1) + $core.bool hasPersonId() => $_has(0); + @$pb.TagNumber(1) + void clearPersonId() => clearField(1); + + @$pb.TagNumber(2) + $core.List<$core.String> get email => $_getList(1); +} + +class AddEmailAddressesResponse extends $pb.GeneratedMessage { + factory AddEmailAddressesResponse({ + $core.Iterable<$31.EmailAddress>? emails, + }) { + final $result = create(); + if (emails != null) { + $result.emails.addAll(emails); + } + return $result; + } + AddEmailAddressesResponse._() : super(); + factory AddEmailAddressesResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory AddEmailAddressesResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'AddEmailAddressesResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) + ..pc<$31.EmailAddress>(1, _omitFieldNames ? '' : 'emails', $pb.PbFieldType.PM, subBuilder: $31.EmailAddress.create) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + AddEmailAddressesResponse clone() => AddEmailAddressesResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + AddEmailAddressesResponse copyWith(void Function(AddEmailAddressesResponse) updates) => super.copyWith((message) => updates(message as AddEmailAddressesResponse)) as AddEmailAddressesResponse; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static AddEmailAddressesResponse create() => AddEmailAddressesResponse._(); + AddEmailAddressesResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static AddEmailAddressesResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static AddEmailAddressesResponse? _defaultInstance; + + @$pb.TagNumber(1) + $core.List<$31.EmailAddress> get emails => $_getList(0); +} + + +const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names'); +const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/frontend/app/lib/pb/rpc_add_emails.pbenum.dart b/frontend/app/lib/pb/rpc_add_emails.pbenum.dart new file mode 100644 index 0000000..069f355 --- /dev/null +++ b/frontend/app/lib/pb/rpc_add_emails.pbenum.dart @@ -0,0 +1,11 @@ +// +// Generated code. Do not modify. +// source: rpc_add_emails.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + diff --git a/frontend/app/lib/pb/rpc_add_emails.pbjson.dart b/frontend/app/lib/pb/rpc_add_emails.pbjson.dart new file mode 100644 index 0000000..476f2c1 --- /dev/null +++ b/frontend/app/lib/pb/rpc_add_emails.pbjson.dart @@ -0,0 +1,46 @@ +// +// Generated code. Do not modify. +// source: rpc_add_emails.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:convert' as $convert; +import 'dart:core' as $core; +import 'dart:typed_data' as $typed_data; + +@$core.Deprecated('Use addEmailAddressesRequestDescriptor instead') +const AddEmailAddressesRequest$json = { + '1': 'AddEmailAddressesRequest', + '2': [ + {'1': 'person_id', '3': 1, '4': 1, '5': 4, '10': 'personId'}, + {'1': 'email', '3': 2, '4': 3, '5': 9, '10': 'email'}, + ], + '7': {}, +}; + +/// Descriptor for `AddEmailAddressesRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List addEmailAddressesRequestDescriptor = $convert.base64Decode( + 'ChhBZGRFbWFpbEFkZHJlc3Nlc1JlcXVlc3QSGwoJcGVyc29uX2lkGAEgASgEUghwZXJzb25JZB' + 'IUCgVlbWFpbBgCIAMoCVIFZW1haWw6QJJBPQo7KhBBZGQgRW1haWxBZGRyZXNzMhNBZGQgYW4g' + 'RW1haWxBZGRyZXNz0gEJcGVyc29uX2lk0gEFZW1haWw='); + +@$core.Deprecated('Use addEmailAddressesResponseDescriptor instead') +const AddEmailAddressesResponse$json = { + '1': 'AddEmailAddressesResponse', + '2': [ + {'1': 'emails', '3': 1, '4': 3, '5': 11, '6': '.pb.EmailAddress', '8': {}, '10': 'emails'}, + ], + '7': {}, +}; + +/// Descriptor for `AddEmailAddressesResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List addEmailAddressesResponseDescriptor = $convert.base64Decode( + 'ChlBZGRFbWFpbEFkZHJlc3Nlc1Jlc3BvbnNlEi0KBmVtYWlscxgBIAMoCzIQLnBiLkVtYWlsQW' + 'RkcmVzc0IDkkEAUgZlbWFpbHM6PZJBOgo4KhRBZGRlZCBFbWFpbEFkZHJlc3NlczIgUmV0dXJu' + 'cyB0aGUgYWRkZWQgRW1haWxBZGRyZXNzZXM='); + diff --git a/frontend/app/lib/pb/rpc_create_account.pb.dart b/frontend/app/lib/pb/rpc_create_account.pb.dart index 43b7b63..ed425dc 100644 --- a/frontend/app/lib/pb/rpc_create_account.pb.dart +++ b/frontend/app/lib/pb/rpc_create_account.pb.dart @@ -13,7 +13,7 @@ import 'dart:core' as $core; import 'package:protobuf/protobuf.dart' as $pb; -import 'account.pb.dart' as $30; +import 'account.pb.dart' as $33; class CreateAccountRequest extends $pb.GeneratedMessage { factory CreateAccountRequest({ @@ -81,7 +81,7 @@ class CreateAccountRequest extends $pb.GeneratedMessage { class CreateAccountResponse extends $pb.GeneratedMessage { factory CreateAccountResponse({ - $30.Account? account, + $33.Account? account, }) { final $result = create(); if (account != null) { @@ -94,7 +94,7 @@ class CreateAccountResponse extends $pb.GeneratedMessage { factory CreateAccountResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'CreateAccountResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$30.Account>(1, _omitFieldNames ? '' : 'account', subBuilder: $30.Account.create) + ..aOM<$33.Account>(1, _omitFieldNames ? '' : 'account', subBuilder: $33.Account.create) ..hasRequiredFields = false ; @@ -120,15 +120,15 @@ class CreateAccountResponse extends $pb.GeneratedMessage { static CreateAccountResponse? _defaultInstance; @$pb.TagNumber(1) - $30.Account get account => $_getN(0); + $33.Account get account => $_getN(0); @$pb.TagNumber(1) - set account($30.Account v) { setField(1, v); } + set account($33.Account v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasAccount() => $_has(0); @$pb.TagNumber(1) void clearAccount() => clearField(1); @$pb.TagNumber(1) - $30.Account ensureAccount() => $_ensure(0); + $33.Account ensureAccount() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_create_account_info.pb.dart b/frontend/app/lib/pb/rpc_create_account_info.pb.dart index 118ea7b..71f4522 100644 --- a/frontend/app/lib/pb/rpc_create_account_info.pb.dart +++ b/frontend/app/lib/pb/rpc_create_account_info.pb.dart @@ -14,8 +14,8 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'account_info.pb.dart' as $29; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'account_info.pb.dart' as $32; +import 'google/protobuf/timestamp.pb.dart' as $30; class CreateAccountInfoRequest extends $pb.GeneratedMessage { factory CreateAccountInfoRequest({ @@ -27,7 +27,7 @@ class CreateAccountInfoRequest extends $pb.GeneratedMessage { $core.String? zip, $core.String? country, $core.String? phone, - $28.Timestamp? birthday, + $30.Timestamp? birthday, $core.bool? privacyAccepted, }) { final $result = create(); @@ -76,7 +76,7 @@ class CreateAccountInfoRequest extends $pb.GeneratedMessage { ..aOS(7, _omitFieldNames ? '' : 'zip') ..aOS(8, _omitFieldNames ? '' : 'country') ..aOS(9, _omitFieldNames ? '' : 'phone') - ..aOM<$28.Timestamp>(10, _omitFieldNames ? '' : 'birthday', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(10, _omitFieldNames ? '' : 'birthday', subBuilder: $30.Timestamp.create) ..aOB(11, _omitFieldNames ? '' : 'privacyAccepted') ..hasRequiredFields = false ; @@ -175,15 +175,15 @@ class CreateAccountInfoRequest extends $pb.GeneratedMessage { void clearPhone() => clearField(9); @$pb.TagNumber(10) - $28.Timestamp get birthday => $_getN(8); + $30.Timestamp get birthday => $_getN(8); @$pb.TagNumber(10) - set birthday($28.Timestamp v) { setField(10, v); } + set birthday($30.Timestamp v) { setField(10, v); } @$pb.TagNumber(10) $core.bool hasBirthday() => $_has(8); @$pb.TagNumber(10) void clearBirthday() => clearField(10); @$pb.TagNumber(10) - $28.Timestamp ensureBirthday() => $_ensure(8); + $30.Timestamp ensureBirthday() => $_ensure(8); @$pb.TagNumber(11) $core.bool get privacyAccepted => $_getBF(9); @@ -197,7 +197,7 @@ class CreateAccountInfoRequest extends $pb.GeneratedMessage { class CreateAccountInfoResponse extends $pb.GeneratedMessage { factory CreateAccountInfoResponse({ - $29.AccountInfo? accountInfo, + $32.AccountInfo? accountInfo, }) { final $result = create(); if (accountInfo != null) { @@ -210,7 +210,7 @@ class CreateAccountInfoResponse extends $pb.GeneratedMessage { factory CreateAccountInfoResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'CreateAccountInfoResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$29.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', subBuilder: $29.AccountInfo.create) + ..aOM<$32.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', subBuilder: $32.AccountInfo.create) ..hasRequiredFields = false ; @@ -236,15 +236,15 @@ class CreateAccountInfoResponse extends $pb.GeneratedMessage { static CreateAccountInfoResponse? _defaultInstance; @$pb.TagNumber(1) - $29.AccountInfo get accountInfo => $_getN(0); + $32.AccountInfo get accountInfo => $_getN(0); @$pb.TagNumber(1) - set accountInfo($29.AccountInfo v) { setField(1, v); } + set accountInfo($32.AccountInfo v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasAccountInfo() => $_has(0); @$pb.TagNumber(1) void clearAccountInfo() => clearField(1); @$pb.TagNumber(1) - $29.AccountInfo ensureAccountInfo() => $_ensure(0); + $32.AccountInfo ensureAccountInfo() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_create_payment.pb.dart b/frontend/app/lib/pb/rpc_create_payment.pb.dart index e977074..919300e 100644 --- a/frontend/app/lib/pb/rpc_create_payment.pb.dart +++ b/frontend/app/lib/pb/rpc_create_payment.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'payment.pb.dart' as $31; +import 'payment.pb.dart' as $34; class CreatePaymentRequest extends $pb.GeneratedMessage { factory CreatePaymentRequest({ @@ -180,7 +180,7 @@ class CreatePaymentRequest extends $pb.GeneratedMessage { class CreatePaymentResponse extends $pb.GeneratedMessage { factory CreatePaymentResponse({ - $31.Payment? payment, + $34.Payment? payment, }) { final $result = create(); if (payment != null) { @@ -193,7 +193,7 @@ class CreatePaymentResponse extends $pb.GeneratedMessage { factory CreatePaymentResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'CreatePaymentResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$31.Payment>(1, _omitFieldNames ? '' : 'payment', subBuilder: $31.Payment.create) + ..aOM<$34.Payment>(1, _omitFieldNames ? '' : 'payment', subBuilder: $34.Payment.create) ..hasRequiredFields = false ; @@ -219,15 +219,15 @@ class CreatePaymentResponse extends $pb.GeneratedMessage { static CreatePaymentResponse? _defaultInstance; @$pb.TagNumber(1) - $31.Payment get payment => $_getN(0); + $34.Payment get payment => $_getN(0); @$pb.TagNumber(1) - set payment($31.Payment v) { setField(1, v); } + set payment($34.Payment v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasPayment() => $_has(0); @$pb.TagNumber(1) void clearPayment() => clearField(1); @$pb.TagNumber(1) - $31.Payment ensurePayment() => $_ensure(0); + $34.Payment ensurePayment() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_create_person.pb.dart b/frontend/app/lib/pb/rpc_create_person.pb.dart index 9f58dd4..4e8ebd0 100644 --- a/frontend/app/lib/pb/rpc_create_person.pb.dart +++ b/frontend/app/lib/pb/rpc_create_person.pb.dart @@ -14,8 +14,8 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; -import 'person.pb.dart' as $32; +import 'google/protobuf/timestamp.pb.dart' as $30; +import 'person.pb.dart' as $35; class CreatePersonRequest extends $pb.GeneratedMessage { factory CreatePersonRequest({ @@ -26,7 +26,8 @@ class CreatePersonRequest extends $pb.GeneratedMessage { $core.String? city, $core.String? zip, $core.String? country, - $28.Timestamp? birthday, + $core.String? relationship, + $30.Timestamp? birthday, }) { final $result = create(); if (accountId != null) { @@ -50,6 +51,9 @@ class CreatePersonRequest extends $pb.GeneratedMessage { if (country != null) { $result.country = country; } + if (relationship != null) { + $result.relationship = relationship; + } if (birthday != null) { $result.birthday = birthday; } @@ -67,7 +71,8 @@ class CreatePersonRequest extends $pb.GeneratedMessage { ..aOS(5, _omitFieldNames ? '' : 'city') ..aOS(6, _omitFieldNames ? '' : 'zip') ..aOS(7, _omitFieldNames ? '' : 'country') - ..aOM<$28.Timestamp>(8, _omitFieldNames ? '' : 'birthday', subBuilder: $28.Timestamp.create) + ..aOS(8, _omitFieldNames ? '' : 'relationship') + ..aOM<$30.Timestamp>(9, _omitFieldNames ? '' : 'birthday', subBuilder: $30.Timestamp.create) ..hasRequiredFields = false ; @@ -156,20 +161,29 @@ class CreatePersonRequest extends $pb.GeneratedMessage { void clearCountry() => clearField(7); @$pb.TagNumber(8) - $28.Timestamp get birthday => $_getN(7); + $core.String get relationship => $_getSZ(7); @$pb.TagNumber(8) - set birthday($28.Timestamp v) { setField(8, v); } + set relationship($core.String v) { $_setString(7, v); } @$pb.TagNumber(8) - $core.bool hasBirthday() => $_has(7); + $core.bool hasRelationship() => $_has(7); @$pb.TagNumber(8) - void clearBirthday() => clearField(8); - @$pb.TagNumber(8) - $28.Timestamp ensureBirthday() => $_ensure(7); + void clearRelationship() => clearField(8); + + @$pb.TagNumber(9) + $30.Timestamp get birthday => $_getN(8); + @$pb.TagNumber(9) + set birthday($30.Timestamp v) { setField(9, v); } + @$pb.TagNumber(9) + $core.bool hasBirthday() => $_has(8); + @$pb.TagNumber(9) + void clearBirthday() => clearField(9); + @$pb.TagNumber(9) + $30.Timestamp ensureBirthday() => $_ensure(8); } class CreatePersonResponse extends $pb.GeneratedMessage { factory CreatePersonResponse({ - $32.Person? person, + $35.Person? person, }) { final $result = create(); if (person != null) { @@ -182,7 +196,7 @@ class CreatePersonResponse extends $pb.GeneratedMessage { factory CreatePersonResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'CreatePersonResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$32.Person>(1, _omitFieldNames ? '' : 'person', subBuilder: $32.Person.create) + ..aOM<$35.Person>(1, _omitFieldNames ? '' : 'person', subBuilder: $35.Person.create) ..hasRequiredFields = false ; @@ -208,15 +222,15 @@ class CreatePersonResponse extends $pb.GeneratedMessage { static CreatePersonResponse? _defaultInstance; @$pb.TagNumber(1) - $32.Person get person => $_getN(0); + $35.Person get person => $_getN(0); @$pb.TagNumber(1) - set person($32.Person v) { setField(1, v); } + set person($35.Person v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasPerson() => $_has(0); @$pb.TagNumber(1) void clearPerson() => clearField(1); @$pb.TagNumber(1) - $32.Person ensurePerson() => $_ensure(0); + $35.Person ensurePerson() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_create_person.pbjson.dart b/frontend/app/lib/pb/rpc_create_person.pbjson.dart index 5f7b61b..a8bd067 100644 --- a/frontend/app/lib/pb/rpc_create_person.pbjson.dart +++ b/frontend/app/lib/pb/rpc_create_person.pbjson.dart @@ -24,7 +24,8 @@ const CreatePersonRequest$json = { {'1': 'city', '3': 5, '4': 1, '5': 9, '10': 'city'}, {'1': 'zip', '3': 6, '4': 1, '5': 9, '10': 'zip'}, {'1': 'country', '3': 7, '4': 1, '5': 9, '10': 'country'}, - {'1': 'birthday', '3': 8, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '8': {}, '10': 'birthday'}, + {'1': 'relationship', '3': 8, '4': 1, '5': 9, '10': 'relationship'}, + {'1': 'birthday', '3': 9, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '8': {}, '10': 'birthday'}, ], '7': {}, }; @@ -34,14 +35,15 @@ final $typed_data.Uint8List createPersonRequestDescriptor = $convert.base64Decod 'ChNDcmVhdGVQZXJzb25SZXF1ZXN0Eh0KCmFjY291bnRfaWQYASABKARSCWFjY291bnRJZBIcCg' 'lmaXJzdG5hbWUYAiABKAlSCWZpcnN0bmFtZRIaCghsYXN0bmFtZRgDIAEoCVIIbGFzdG5hbWUS' 'FgoGc3RyZWV0GAQgASgJUgZzdHJlZXQSEgoEY2l0eRgFIAEoCVIEY2l0eRIQCgN6aXAYBiABKA' - 'lSA3ppcBIYCgdjb3VudHJ5GAcgASgJUgdjb3VudHJ5ElMKCGJpcnRoZGF5GAggASgLMhouZ29v' - 'Z2xlLnByb3RvYnVmLlRpbWVzdGFtcEIbkkEYShYiMTk5MC0xMC0wNVQwMDowMDowMFoiUghiaX' - 'J0aGRheTqpApJBpQIKcCoNQ3JlYXRlIFBlcnNvbjIQQ3JlYXRlIGFuIFBlcnNvbtIBCmFjY291' - 'bnRfaWTSAQlmaXJzdG5hbWXSAQhsYXN0bmFtZdIBBnN0cmVldNIBBGNpdHnSAQN6aXDSAQdjb3' - 'VudHJ50gEIYmlydGhkYXkysAF7ICJhY2NvdW50X2lkIjogIjEiLCAiZmlyc3RuYW1lIjogIkpv' - 'aG4iLCAibGFzdG5hbWUiOiAiRG9lIiwgInN0cmVldCI6ICJNYWluIFN0cmVldCAxIiwgInppcC' - 'I6ICIwODE1IiwgImNpdHkiOiAiTmV3IFlvcmsiLCAiY291bnRyeSI6ICJVU0EiLCAiYmlydGhk' - 'YXkiOiAiMTk5MC0xMC0wNVQwMDowMDowMFoifQ=='); + 'lSA3ppcBIYCgdjb3VudHJ5GAcgASgJUgdjb3VudHJ5EiIKDHJlbGF0aW9uc2hpcBgIIAEoCVIM' + 'cmVsYXRpb25zaGlwElMKCGJpcnRoZGF5GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdG' + 'FtcEIbkkEYShYiMTk5MC0xMC0wNVQwMDowMDowMFoiUghiaXJ0aGRheTq4ApJBtAIKfyoNQ3Jl' + 'YXRlIFBlcnNvbjIQQ3JlYXRlIGFuIFBlcnNvbtIBCmFjY291bnRfaWTSAQlmaXJzdG5hbWXSAQ' + 'hsYXN0bmFtZdIBBnN0cmVldNIBBGNpdHnSAQN6aXDSAQdjb3VudHJ50gEMcmVsYXRpb25zaGlw' + '0gEIYmlydGhkYXkysAF7ICJhY2NvdW50X2lkIjogIjEiLCAiZmlyc3RuYW1lIjogIkpvaG4iLC' + 'AibGFzdG5hbWUiOiAiRG9lIiwgInN0cmVldCI6ICJNYWluIFN0cmVldCAxIiwgInppcCI6ICIw' + 'ODE1IiwgImNpdHkiOiAiTmV3IFlvcmsiLCAiY291bnRyeSI6ICJVU0EiLCAiYmlydGhkYXkiOi' + 'AiMTk5MC0xMC0wNVQwMDowMDowMFoifQ=='); @$core.Deprecated('Use createPersonResponseDescriptor instead') const CreatePersonResponse$json = { diff --git a/frontend/app/lib/pb/rpc_delete_email.pb.dart b/frontend/app/lib/pb/rpc_delete_email.pb.dart new file mode 100644 index 0000000..9686f95 --- /dev/null +++ b/frontend/app/lib/pb/rpc_delete_email.pb.dart @@ -0,0 +1,119 @@ +// +// Generated code. Do not modify. +// source: rpc_delete_email.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:core' as $core; + +import 'package:fixnum/fixnum.dart' as $fixnum; +import 'package:protobuf/protobuf.dart' as $pb; + +class DeleteEmailAddressRequest extends $pb.GeneratedMessage { + factory DeleteEmailAddressRequest({ + $fixnum.Int64? id, + }) { + final $result = create(); + if (id != null) { + $result.id = id; + } + return $result; + } + DeleteEmailAddressRequest._() : super(); + factory DeleteEmailAddressRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory DeleteEmailAddressRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'DeleteEmailAddressRequest', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) + ..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'id', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + DeleteEmailAddressRequest clone() => DeleteEmailAddressRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DeleteEmailAddressRequest copyWith(void Function(DeleteEmailAddressRequest) updates) => super.copyWith((message) => updates(message as DeleteEmailAddressRequest)) as DeleteEmailAddressRequest; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static DeleteEmailAddressRequest create() => DeleteEmailAddressRequest._(); + DeleteEmailAddressRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static DeleteEmailAddressRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static DeleteEmailAddressRequest? _defaultInstance; + + @$pb.TagNumber(1) + $fixnum.Int64 get id => $_getI64(0); + @$pb.TagNumber(1) + set id($fixnum.Int64 v) { $_setInt64(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); +} + +class DeleteEmailAddressResponse extends $pb.GeneratedMessage { + factory DeleteEmailAddressResponse({ + $fixnum.Int64? id, + }) { + final $result = create(); + if (id != null) { + $result.id = id; + } + return $result; + } + DeleteEmailAddressResponse._() : super(); + factory DeleteEmailAddressResponse.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory DeleteEmailAddressResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'DeleteEmailAddressResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) + ..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'id', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + DeleteEmailAddressResponse clone() => DeleteEmailAddressResponse()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DeleteEmailAddressResponse copyWith(void Function(DeleteEmailAddressResponse) updates) => super.copyWith((message) => updates(message as DeleteEmailAddressResponse)) as DeleteEmailAddressResponse; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static DeleteEmailAddressResponse create() => DeleteEmailAddressResponse._(); + DeleteEmailAddressResponse createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static DeleteEmailAddressResponse getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static DeleteEmailAddressResponse? _defaultInstance; + + @$pb.TagNumber(1) + $fixnum.Int64 get id => $_getI64(0); + @$pb.TagNumber(1) + set id($fixnum.Int64 v) { $_setInt64(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); +} + + +const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names'); +const _omitMessageNames = $core.bool.fromEnvironment('protobuf.omit_message_names'); diff --git a/frontend/app/lib/pb/rpc_delete_email.pbenum.dart b/frontend/app/lib/pb/rpc_delete_email.pbenum.dart new file mode 100644 index 0000000..6ef1704 --- /dev/null +++ b/frontend/app/lib/pb/rpc_delete_email.pbenum.dart @@ -0,0 +1,11 @@ +// +// Generated code. Do not modify. +// source: rpc_delete_email.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + diff --git a/frontend/app/lib/pb/rpc_delete_email.pbjson.dart b/frontend/app/lib/pb/rpc_delete_email.pbjson.dart new file mode 100644 index 0000000..e3dacf8 --- /dev/null +++ b/frontend/app/lib/pb/rpc_delete_email.pbjson.dart @@ -0,0 +1,43 @@ +// +// Generated code. Do not modify. +// source: rpc_delete_email.proto +// +// @dart = 2.12 + +// ignore_for_file: annotate_overrides, camel_case_types, comment_references +// ignore_for_file: constant_identifier_names, library_prefixes +// ignore_for_file: non_constant_identifier_names, prefer_final_fields +// ignore_for_file: unnecessary_import, unnecessary_this, unused_import + +import 'dart:convert' as $convert; +import 'dart:core' as $core; +import 'dart:typed_data' as $typed_data; + +@$core.Deprecated('Use deleteEmailAddressRequestDescriptor instead') +const DeleteEmailAddressRequest$json = { + '1': 'DeleteEmailAddressRequest', + '2': [ + {'1': 'id', '3': 1, '4': 1, '5': 4, '10': 'id'}, + ], + '7': {}, +}; + +/// Descriptor for `DeleteEmailAddressRequest`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List deleteEmailAddressRequestDescriptor = $convert.base64Decode( + 'ChlEZWxldGVFbWFpbEFkZHJlc3NSZXF1ZXN0Eg4KAmlkGAEgASgEUgJpZDo3kkE0CjIqE0RlbG' + 'V0ZSBFbWFpbEFkZHJlc3MyFkRlbGV0ZSBhbiBFbWFpbEFkZHJlc3PSAQJpZA=='); + +@$core.Deprecated('Use deleteEmailAddressResponseDescriptor instead') +const DeleteEmailAddressResponse$json = { + '1': 'DeleteEmailAddressResponse', + '2': [ + {'1': 'id', '3': 1, '4': 1, '5': 4, '8': {}, '10': 'id'}, + ], + '7': {}, +}; + +/// Descriptor for `DeleteEmailAddressResponse`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List deleteEmailAddressResponseDescriptor = $convert.base64Decode( + 'ChpEZWxldGVFbWFpbEFkZHJlc3NSZXNwb25zZRITCgJpZBgBIAEoBEIDkkEAUgJpZDobkkEYCh' + 'YqFERlbGV0ZWQgRW1haWxBZGRyZXNz'); + diff --git a/frontend/app/lib/pb/rpc_get_account.pb.dart b/frontend/app/lib/pb/rpc_get_account.pb.dart index 334f998..d11be9c 100644 --- a/frontend/app/lib/pb/rpc_get_account.pb.dart +++ b/frontend/app/lib/pb/rpc_get_account.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'account.pb.dart' as $30; +import 'account.pb.dart' as $33; class GetAccountRequest extends $pb.GeneratedMessage { factory GetAccountRequest({ @@ -68,7 +68,7 @@ class GetAccountRequest extends $pb.GeneratedMessage { class GetAccountResponse extends $pb.GeneratedMessage { factory GetAccountResponse({ - $30.Account? account, + $33.Account? account, }) { final $result = create(); if (account != null) { @@ -81,7 +81,7 @@ class GetAccountResponse extends $pb.GeneratedMessage { factory GetAccountResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GetAccountResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$30.Account>(1, _omitFieldNames ? '' : 'account', subBuilder: $30.Account.create) + ..aOM<$33.Account>(1, _omitFieldNames ? '' : 'account', subBuilder: $33.Account.create) ..hasRequiredFields = false ; @@ -107,15 +107,15 @@ class GetAccountResponse extends $pb.GeneratedMessage { static GetAccountResponse? _defaultInstance; @$pb.TagNumber(1) - $30.Account get account => $_getN(0); + $33.Account get account => $_getN(0); @$pb.TagNumber(1) - set account($30.Account v) { setField(1, v); } + set account($33.Account v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasAccount() => $_has(0); @$pb.TagNumber(1) void clearAccount() => clearField(1); @$pb.TagNumber(1) - $30.Account ensureAccount() => $_ensure(0); + $33.Account ensureAccount() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_get_account_info.pb.dart b/frontend/app/lib/pb/rpc_get_account_info.pb.dart index 28abcba..9fa12ca 100644 --- a/frontend/app/lib/pb/rpc_get_account_info.pb.dart +++ b/frontend/app/lib/pb/rpc_get_account_info.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'account_info.pb.dart' as $29; +import 'account_info.pb.dart' as $32; class GetAccountInfoRequest extends $pb.GeneratedMessage { factory GetAccountInfoRequest({ @@ -68,7 +68,7 @@ class GetAccountInfoRequest extends $pb.GeneratedMessage { class GetAccountInfoResponse extends $pb.GeneratedMessage { factory GetAccountInfoResponse({ - $29.AccountInfo? accountInfo, + $32.AccountInfo? accountInfo, }) { final $result = create(); if (accountInfo != null) { @@ -81,7 +81,7 @@ class GetAccountInfoResponse extends $pb.GeneratedMessage { factory GetAccountInfoResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GetAccountInfoResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$29.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', subBuilder: $29.AccountInfo.create) + ..aOM<$32.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', subBuilder: $32.AccountInfo.create) ..hasRequiredFields = false ; @@ -107,15 +107,15 @@ class GetAccountInfoResponse extends $pb.GeneratedMessage { static GetAccountInfoResponse? _defaultInstance; @$pb.TagNumber(1) - $29.AccountInfo get accountInfo => $_getN(0); + $32.AccountInfo get accountInfo => $_getN(0); @$pb.TagNumber(1) - set accountInfo($29.AccountInfo v) { setField(1, v); } + set accountInfo($32.AccountInfo v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasAccountInfo() => $_has(0); @$pb.TagNumber(1) void clearAccountInfo() => clearField(1); @$pb.TagNumber(1) - $29.AccountInfo ensureAccountInfo() => $_ensure(0); + $32.AccountInfo ensureAccountInfo() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_get_payment.pb.dart b/frontend/app/lib/pb/rpc_get_payment.pb.dart index 261c13c..14b5864 100644 --- a/frontend/app/lib/pb/rpc_get_payment.pb.dart +++ b/frontend/app/lib/pb/rpc_get_payment.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'payment.pb.dart' as $31; +import 'payment.pb.dart' as $34; class GetPaymentRequest extends $pb.GeneratedMessage { factory GetPaymentRequest({ @@ -68,7 +68,7 @@ class GetPaymentRequest extends $pb.GeneratedMessage { class GetPaymentResponse extends $pb.GeneratedMessage { factory GetPaymentResponse({ - $31.Payment? payment, + $34.Payment? payment, }) { final $result = create(); if (payment != null) { @@ -81,7 +81,7 @@ class GetPaymentResponse extends $pb.GeneratedMessage { factory GetPaymentResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GetPaymentResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$31.Payment>(1, _omitFieldNames ? '' : 'payment', subBuilder: $31.Payment.create) + ..aOM<$34.Payment>(1, _omitFieldNames ? '' : 'payment', subBuilder: $34.Payment.create) ..hasRequiredFields = false ; @@ -107,15 +107,15 @@ class GetPaymentResponse extends $pb.GeneratedMessage { static GetPaymentResponse? _defaultInstance; @$pb.TagNumber(1) - $31.Payment get payment => $_getN(0); + $34.Payment get payment => $_getN(0); @$pb.TagNumber(1) - set payment($31.Payment v) { setField(1, v); } + set payment($34.Payment v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasPayment() => $_has(0); @$pb.TagNumber(1) void clearPayment() => clearField(1); @$pb.TagNumber(1) - $31.Payment ensurePayment() => $_ensure(0); + $34.Payment ensurePayment() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_get_person.pb.dart b/frontend/app/lib/pb/rpc_get_person.pb.dart index 27d38f6..1a69716 100644 --- a/frontend/app/lib/pb/rpc_get_person.pb.dart +++ b/frontend/app/lib/pb/rpc_get_person.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'person.pb.dart' as $32; +import 'person.pb.dart' as $35; class GetPersonRequest extends $pb.GeneratedMessage { factory GetPersonRequest({ @@ -68,7 +68,7 @@ class GetPersonRequest extends $pb.GeneratedMessage { class GetPersonResponse extends $pb.GeneratedMessage { factory GetPersonResponse({ - $32.Person? person, + $35.Person? person, }) { final $result = create(); if (person != null) { @@ -81,7 +81,7 @@ class GetPersonResponse extends $pb.GeneratedMessage { factory GetPersonResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'GetPersonResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$32.Person>(1, _omitFieldNames ? '' : 'person', subBuilder: $32.Person.create) + ..aOM<$35.Person>(1, _omitFieldNames ? '' : 'person', subBuilder: $35.Person.create) ..hasRequiredFields = false ; @@ -107,15 +107,15 @@ class GetPersonResponse extends $pb.GeneratedMessage { static GetPersonResponse? _defaultInstance; @$pb.TagNumber(1) - $32.Person get person => $_getN(0); + $35.Person get person => $_getN(0); @$pb.TagNumber(1) - set person($32.Person v) { setField(1, v); } + set person($35.Person v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasPerson() => $_has(0); @$pb.TagNumber(1) void clearPerson() => clearField(1); @$pb.TagNumber(1) - $32.Person ensurePerson() => $_ensure(0); + $35.Person ensurePerson() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_list_account_info.pb.dart b/frontend/app/lib/pb/rpc_list_account_info.pb.dart index 88c935b..c7b3127 100644 --- a/frontend/app/lib/pb/rpc_list_account_info.pb.dart +++ b/frontend/app/lib/pb/rpc_list_account_info.pb.dart @@ -13,7 +13,7 @@ import 'dart:core' as $core; import 'package:protobuf/protobuf.dart' as $pb; -import 'account_info.pb.dart' as $29; +import 'account_info.pb.dart' as $32; class ListAccountInfoRequest extends $pb.GeneratedMessage { factory ListAccountInfoRequest({ @@ -81,7 +81,7 @@ class ListAccountInfoRequest extends $pb.GeneratedMessage { class ListAccountInfoResponse extends $pb.GeneratedMessage { factory ListAccountInfoResponse({ - $core.Iterable<$29.AccountInfo>? accountInfo, + $core.Iterable<$32.AccountInfo>? accountInfo, }) { final $result = create(); if (accountInfo != null) { @@ -94,7 +94,7 @@ class ListAccountInfoResponse extends $pb.GeneratedMessage { factory ListAccountInfoResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ListAccountInfoResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..pc<$29.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', $pb.PbFieldType.PM, subBuilder: $29.AccountInfo.create) + ..pc<$32.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', $pb.PbFieldType.PM, subBuilder: $32.AccountInfo.create) ..hasRequiredFields = false ; @@ -120,7 +120,7 @@ class ListAccountInfoResponse extends $pb.GeneratedMessage { static ListAccountInfoResponse? _defaultInstance; @$pb.TagNumber(1) - $core.List<$29.AccountInfo> get accountInfo => $_getList(0); + $core.List<$32.AccountInfo> get accountInfo => $_getList(0); } diff --git a/frontend/app/lib/pb/rpc_list_accounts.pb.dart b/frontend/app/lib/pb/rpc_list_accounts.pb.dart index 85c1510..2f707d0 100644 --- a/frontend/app/lib/pb/rpc_list_accounts.pb.dart +++ b/frontend/app/lib/pb/rpc_list_accounts.pb.dart @@ -13,7 +13,7 @@ import 'dart:core' as $core; import 'package:protobuf/protobuf.dart' as $pb; -import 'account.pb.dart' as $30; +import 'account.pb.dart' as $33; class ListAccountsRequest extends $pb.GeneratedMessage { factory ListAccountsRequest({ @@ -81,7 +81,7 @@ class ListAccountsRequest extends $pb.GeneratedMessage { class ListAccountsResponse extends $pb.GeneratedMessage { factory ListAccountsResponse({ - $core.Iterable<$30.Account>? accounts, + $core.Iterable<$33.Account>? accounts, }) { final $result = create(); if (accounts != null) { @@ -94,7 +94,7 @@ class ListAccountsResponse extends $pb.GeneratedMessage { factory ListAccountsResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ListAccountsResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..pc<$30.Account>(1, _omitFieldNames ? '' : 'accounts', $pb.PbFieldType.PM, subBuilder: $30.Account.create) + ..pc<$33.Account>(1, _omitFieldNames ? '' : 'accounts', $pb.PbFieldType.PM, subBuilder: $33.Account.create) ..hasRequiredFields = false ; @@ -120,7 +120,7 @@ class ListAccountsResponse extends $pb.GeneratedMessage { static ListAccountsResponse? _defaultInstance; @$pb.TagNumber(1) - $core.List<$30.Account> get accounts => $_getList(0); + $core.List<$33.Account> get accounts => $_getList(0); } diff --git a/frontend/app/lib/pb/rpc_list_payments.pb.dart b/frontend/app/lib/pb/rpc_list_payments.pb.dart index 0bb3df1..8bf8b6c 100644 --- a/frontend/app/lib/pb/rpc_list_payments.pb.dart +++ b/frontend/app/lib/pb/rpc_list_payments.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'payment.pb.dart' as $31; +import 'payment.pb.dart' as $34; class ListPaymentsRequest extends $pb.GeneratedMessage { factory ListPaymentsRequest({ @@ -68,7 +68,7 @@ class ListPaymentsRequest extends $pb.GeneratedMessage { class ListPaymentsResponse extends $pb.GeneratedMessage { factory ListPaymentsResponse({ - $core.Iterable<$31.Payment>? payments, + $core.Iterable<$34.Payment>? payments, }) { final $result = create(); if (payments != null) { @@ -81,7 +81,7 @@ class ListPaymentsResponse extends $pb.GeneratedMessage { factory ListPaymentsResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ListPaymentsResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..pc<$31.Payment>(1, _omitFieldNames ? '' : 'payments', $pb.PbFieldType.PM, subBuilder: $31.Payment.create) + ..pc<$34.Payment>(1, _omitFieldNames ? '' : 'payments', $pb.PbFieldType.PM, subBuilder: $34.Payment.create) ..hasRequiredFields = false ; @@ -107,7 +107,7 @@ class ListPaymentsResponse extends $pb.GeneratedMessage { static ListPaymentsResponse? _defaultInstance; @$pb.TagNumber(1) - $core.List<$31.Payment> get payments => $_getList(0); + $core.List<$34.Payment> get payments => $_getList(0); } diff --git a/frontend/app/lib/pb/rpc_list_persons.pb.dart b/frontend/app/lib/pb/rpc_list_persons.pb.dart index 297cbb2..6069508 100644 --- a/frontend/app/lib/pb/rpc_list_persons.pb.dart +++ b/frontend/app/lib/pb/rpc_list_persons.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'person.pb.dart' as $32; +import 'person.pb.dart' as $35; class ListPersonsRequest extends $pb.GeneratedMessage { factory ListPersonsRequest({ @@ -68,7 +68,7 @@ class ListPersonsRequest extends $pb.GeneratedMessage { class ListPersonsResponse extends $pb.GeneratedMessage { factory ListPersonsResponse({ - $core.Iterable<$32.Person>? persons, + $core.Iterable<$35.Person>? persons, }) { final $result = create(); if (persons != null) { @@ -81,7 +81,7 @@ class ListPersonsResponse extends $pb.GeneratedMessage { factory ListPersonsResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ListPersonsResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..pc<$32.Person>(1, _omitFieldNames ? '' : 'persons', $pb.PbFieldType.PM, subBuilder: $32.Person.create) + ..pc<$35.Person>(1, _omitFieldNames ? '' : 'persons', $pb.PbFieldType.PM, subBuilder: $35.Person.create) ..hasRequiredFields = false ; @@ -107,7 +107,7 @@ class ListPersonsResponse extends $pb.GeneratedMessage { static ListPersonsResponse? _defaultInstance; @$pb.TagNumber(1) - $core.List<$32.Person> get persons => $_getList(0); + $core.List<$35.Person> get persons => $_getList(0); } diff --git a/frontend/app/lib/pb/rpc_list_returns_log_by_person_id.pb.dart b/frontend/app/lib/pb/rpc_list_returns_log_by_person_id.pb.dart index 44a6367..7847ab0 100644 --- a/frontend/app/lib/pb/rpc_list_returns_log_by_person_id.pb.dart +++ b/frontend/app/lib/pb/rpc_list_returns_log_by_person_id.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'returns_log.pb.dart' as $33; +import 'returns_log.pb.dart' as $36; class ListReturnsLogRequest extends $pb.GeneratedMessage { factory ListReturnsLogRequest({ @@ -68,7 +68,7 @@ class ListReturnsLogRequest extends $pb.GeneratedMessage { class ListReturnsLogResponse extends $pb.GeneratedMessage { factory ListReturnsLogResponse({ - $core.Iterable<$33.ReturnsLog>? returnsLog, + $core.Iterable<$36.ReturnsLog>? returnsLog, }) { final $result = create(); if (returnsLog != null) { @@ -81,7 +81,7 @@ class ListReturnsLogResponse extends $pb.GeneratedMessage { factory ListReturnsLogResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ListReturnsLogResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..pc<$33.ReturnsLog>(1, _omitFieldNames ? '' : 'returnsLog', $pb.PbFieldType.PM, subBuilder: $33.ReturnsLog.create) + ..pc<$36.ReturnsLog>(1, _omitFieldNames ? '' : 'returnsLog', $pb.PbFieldType.PM, subBuilder: $36.ReturnsLog.create) ..hasRequiredFields = false ; @@ -107,7 +107,7 @@ class ListReturnsLogResponse extends $pb.GeneratedMessage { static ListReturnsLogResponse? _defaultInstance; @$pb.TagNumber(1) - $core.List<$33.ReturnsLog> get returnsLog => $_getList(0); + $core.List<$36.ReturnsLog> get returnsLog => $_getList(0); } diff --git a/frontend/app/lib/pb/rpc_list_sessions.pb.dart b/frontend/app/lib/pb/rpc_list_sessions.pb.dart index 315de82..30d6c32 100644 --- a/frontend/app/lib/pb/rpc_list_sessions.pb.dart +++ b/frontend/app/lib/pb/rpc_list_sessions.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'session.pb.dart' as $34; +import 'session.pb.dart' as $37; class ListSessionsRequest extends $pb.GeneratedMessage { factory ListSessionsRequest({ @@ -68,7 +68,7 @@ class ListSessionsRequest extends $pb.GeneratedMessage { class ListSessionsResponse extends $pb.GeneratedMessage { factory ListSessionsResponse({ - $core.Iterable<$34.Session>? sessions, + $core.Iterable<$37.Session>? sessions, }) { final $result = create(); if (sessions != null) { @@ -81,7 +81,7 @@ class ListSessionsResponse extends $pb.GeneratedMessage { factory ListSessionsResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ListSessionsResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..pc<$34.Session>(1, _omitFieldNames ? '' : 'sessions', $pb.PbFieldType.PM, subBuilder: $34.Session.create) + ..pc<$37.Session>(1, _omitFieldNames ? '' : 'sessions', $pb.PbFieldType.PM, subBuilder: $37.Session.create) ..hasRequiredFields = false ; @@ -107,7 +107,7 @@ class ListSessionsResponse extends $pb.GeneratedMessage { static ListSessionsResponse? _defaultInstance; @$pb.TagNumber(1) - $core.List<$34.Session> get sessions => $_getList(0); + $core.List<$37.Session> get sessions => $_getList(0); } diff --git a/frontend/app/lib/pb/rpc_login.pb.dart b/frontend/app/lib/pb/rpc_login.pb.dart index ee7ee16..03e2d5e 100644 --- a/frontend/app/lib/pb/rpc_login.pb.dart +++ b/frontend/app/lib/pb/rpc_login.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'google/protobuf/timestamp.pb.dart' as $30; class LoginRequest extends $pb.GeneratedMessage { factory LoginRequest({ @@ -84,9 +84,9 @@ class LoginResponse extends $pb.GeneratedMessage { factory LoginResponse({ $core.String? sessionId, $core.String? accessToken, - $28.Timestamp? accessTokenExpiresAt, + $30.Timestamp? accessTokenExpiresAt, $core.String? refreshToken, - $28.Timestamp? refreshTokenExpiresAt, + $30.Timestamp? refreshTokenExpiresAt, $fixnum.Int64? accountId, }) { final $result = create(); @@ -117,9 +117,9 @@ class LoginResponse extends $pb.GeneratedMessage { static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'LoginResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) ..aOS(1, _omitFieldNames ? '' : 'sessionId') ..aOS(2, _omitFieldNames ? '' : 'accessToken') - ..aOM<$28.Timestamp>(3, _omitFieldNames ? '' : 'accessTokenExpiresAt', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(3, _omitFieldNames ? '' : 'accessTokenExpiresAt', subBuilder: $30.Timestamp.create) ..aOS(4, _omitFieldNames ? '' : 'refreshToken') - ..aOM<$28.Timestamp>(5, _omitFieldNames ? '' : 'refreshTokenExpiresAt', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(5, _omitFieldNames ? '' : 'refreshTokenExpiresAt', subBuilder: $30.Timestamp.create) ..a<$fixnum.Int64>(6, _omitFieldNames ? '' : 'accountId', $pb.PbFieldType.OU6, defaultOrMaker: $fixnum.Int64.ZERO) ..hasRequiredFields = false ; @@ -164,15 +164,15 @@ class LoginResponse extends $pb.GeneratedMessage { void clearAccessToken() => clearField(2); @$pb.TagNumber(3) - $28.Timestamp get accessTokenExpiresAt => $_getN(2); + $30.Timestamp get accessTokenExpiresAt => $_getN(2); @$pb.TagNumber(3) - set accessTokenExpiresAt($28.Timestamp v) { setField(3, v); } + set accessTokenExpiresAt($30.Timestamp v) { setField(3, v); } @$pb.TagNumber(3) $core.bool hasAccessTokenExpiresAt() => $_has(2); @$pb.TagNumber(3) void clearAccessTokenExpiresAt() => clearField(3); @$pb.TagNumber(3) - $28.Timestamp ensureAccessTokenExpiresAt() => $_ensure(2); + $30.Timestamp ensureAccessTokenExpiresAt() => $_ensure(2); @$pb.TagNumber(4) $core.String get refreshToken => $_getSZ(3); @@ -184,15 +184,15 @@ class LoginResponse extends $pb.GeneratedMessage { void clearRefreshToken() => clearField(4); @$pb.TagNumber(5) - $28.Timestamp get refreshTokenExpiresAt => $_getN(4); + $30.Timestamp get refreshTokenExpiresAt => $_getN(4); @$pb.TagNumber(5) - set refreshTokenExpiresAt($28.Timestamp v) { setField(5, v); } + set refreshTokenExpiresAt($30.Timestamp v) { setField(5, v); } @$pb.TagNumber(5) $core.bool hasRefreshTokenExpiresAt() => $_has(4); @$pb.TagNumber(5) void clearRefreshTokenExpiresAt() => clearField(5); @$pb.TagNumber(5) - $28.Timestamp ensureRefreshTokenExpiresAt() => $_ensure(4); + $30.Timestamp ensureRefreshTokenExpiresAt() => $_ensure(4); @$pb.TagNumber(6) $fixnum.Int64 get accountId => $_getI64(5); diff --git a/frontend/app/lib/pb/rpc_refresh_token.pb.dart b/frontend/app/lib/pb/rpc_refresh_token.pb.dart index a654923..a1766ba 100644 --- a/frontend/app/lib/pb/rpc_refresh_token.pb.dart +++ b/frontend/app/lib/pb/rpc_refresh_token.pb.dart @@ -13,7 +13,7 @@ import 'dart:core' as $core; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'google/protobuf/timestamp.pb.dart' as $30; class RefreshTokenRequest extends $pb.GeneratedMessage { factory RefreshTokenRequest({ @@ -68,7 +68,7 @@ class RefreshTokenRequest extends $pb.GeneratedMessage { class RefreshTokenResponse extends $pb.GeneratedMessage { factory RefreshTokenResponse({ $core.String? accessToken, - $28.Timestamp? accessTokenExpiresAt, + $30.Timestamp? accessTokenExpiresAt, }) { final $result = create(); if (accessToken != null) { @@ -85,7 +85,7 @@ class RefreshTokenResponse extends $pb.GeneratedMessage { static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'RefreshTokenResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) ..aOS(1, _omitFieldNames ? '' : 'accessToken') - ..aOM<$28.Timestamp>(2, _omitFieldNames ? '' : 'accessTokenExpiresAt', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(2, _omitFieldNames ? '' : 'accessTokenExpiresAt', subBuilder: $30.Timestamp.create) ..hasRequiredFields = false ; @@ -120,15 +120,15 @@ class RefreshTokenResponse extends $pb.GeneratedMessage { void clearAccessToken() => clearField(1); @$pb.TagNumber(2) - $28.Timestamp get accessTokenExpiresAt => $_getN(1); + $30.Timestamp get accessTokenExpiresAt => $_getN(1); @$pb.TagNumber(2) - set accessTokenExpiresAt($28.Timestamp v) { setField(2, v); } + set accessTokenExpiresAt($30.Timestamp v) { setField(2, v); } @$pb.TagNumber(2) $core.bool hasAccessTokenExpiresAt() => $_has(1); @$pb.TagNumber(2) void clearAccessTokenExpiresAt() => clearField(2); @$pb.TagNumber(2) - $28.Timestamp ensureAccessTokenExpiresAt() => $_ensure(1); + $30.Timestamp ensureAccessTokenExpiresAt() => $_ensure(1); } diff --git a/frontend/app/lib/pb/rpc_resend_verification.pb.dart b/frontend/app/lib/pb/rpc_resend_verification.pb.dart index 6686ffa..6e12fa6 100644 --- a/frontend/app/lib/pb/rpc_resend_verification.pb.dart +++ b/frontend/app/lib/pb/rpc_resend_verification.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'account.pb.dart' as $30; +import 'account.pb.dart' as $33; class ResendVerificationRequest extends $pb.GeneratedMessage { factory ResendVerificationRequest({ @@ -68,7 +68,7 @@ class ResendVerificationRequest extends $pb.GeneratedMessage { class ResendVerificationResponse extends $pb.GeneratedMessage { factory ResendVerificationResponse({ - $30.Account? account, + $33.Account? account, }) { final $result = create(); if (account != null) { @@ -81,7 +81,7 @@ class ResendVerificationResponse extends $pb.GeneratedMessage { factory ResendVerificationResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'ResendVerificationResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$30.Account>(1, _omitFieldNames ? '' : 'account', subBuilder: $30.Account.create) + ..aOM<$33.Account>(1, _omitFieldNames ? '' : 'account', subBuilder: $33.Account.create) ..hasRequiredFields = false ; @@ -107,15 +107,15 @@ class ResendVerificationResponse extends $pb.GeneratedMessage { static ResendVerificationResponse? _defaultInstance; @$pb.TagNumber(1) - $30.Account get account => $_getN(0); + $33.Account get account => $_getN(0); @$pb.TagNumber(1) - set account($30.Account v) { setField(1, v); } + set account($33.Account v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasAccount() => $_has(0); @$pb.TagNumber(1) void clearAccount() => clearField(1); @$pb.TagNumber(1) - $30.Account ensureAccount() => $_ensure(0); + $33.Account ensureAccount() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_update_account.pb.dart b/frontend/app/lib/pb/rpc_update_account.pb.dart index b7d6b3e..3b4c1e3 100644 --- a/frontend/app/lib/pb/rpc_update_account.pb.dart +++ b/frontend/app/lib/pb/rpc_update_account.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'account.pb.dart' as $30; +import 'account.pb.dart' as $33; class UpdateAccountRequest extends $pb.GeneratedMessage { factory UpdateAccountRequest({ @@ -96,7 +96,7 @@ class UpdateAccountRequest extends $pb.GeneratedMessage { class UpdateAccountResponse extends $pb.GeneratedMessage { factory UpdateAccountResponse({ - $30.Account? account, + $33.Account? account, }) { final $result = create(); if (account != null) { @@ -109,7 +109,7 @@ class UpdateAccountResponse extends $pb.GeneratedMessage { factory UpdateAccountResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'UpdateAccountResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$30.Account>(1, _omitFieldNames ? '' : 'account', subBuilder: $30.Account.create) + ..aOM<$33.Account>(1, _omitFieldNames ? '' : 'account', subBuilder: $33.Account.create) ..hasRequiredFields = false ; @@ -135,15 +135,15 @@ class UpdateAccountResponse extends $pb.GeneratedMessage { static UpdateAccountResponse? _defaultInstance; @$pb.TagNumber(1) - $30.Account get account => $_getN(0); + $33.Account get account => $_getN(0); @$pb.TagNumber(1) - set account($30.Account v) { setField(1, v); } + set account($33.Account v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasAccount() => $_has(0); @$pb.TagNumber(1) void clearAccount() => clearField(1); @$pb.TagNumber(1) - $30.Account ensureAccount() => $_ensure(0); + $33.Account ensureAccount() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_update_account_info.pb.dart b/frontend/app/lib/pb/rpc_update_account_info.pb.dart index f68b3d5..7d015c8 100644 --- a/frontend/app/lib/pb/rpc_update_account_info.pb.dart +++ b/frontend/app/lib/pb/rpc_update_account_info.pb.dart @@ -14,8 +14,8 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'account_info.pb.dart' as $29; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'account_info.pb.dart' as $32; +import 'google/protobuf/timestamp.pb.dart' as $30; class UpdateAccountInfoRequest extends $pb.GeneratedMessage { factory UpdateAccountInfoRequest({ @@ -27,7 +27,7 @@ class UpdateAccountInfoRequest extends $pb.GeneratedMessage { $core.String? zip, $core.String? country, $core.String? phone, - $28.Timestamp? birthday, + $30.Timestamp? birthday, }) { final $result = create(); if (accountId != null) { @@ -72,7 +72,7 @@ class UpdateAccountInfoRequest extends $pb.GeneratedMessage { ..aOS(8, _omitFieldNames ? '' : 'zip') ..aOS(9, _omitFieldNames ? '' : 'country') ..aOS(10, _omitFieldNames ? '' : 'phone') - ..aOM<$28.Timestamp>(11, _omitFieldNames ? '' : 'birthday', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(11, _omitFieldNames ? '' : 'birthday', subBuilder: $30.Timestamp.create) ..hasRequiredFields = false ; @@ -170,20 +170,20 @@ class UpdateAccountInfoRequest extends $pb.GeneratedMessage { void clearPhone() => clearField(10); @$pb.TagNumber(11) - $28.Timestamp get birthday => $_getN(8); + $30.Timestamp get birthday => $_getN(8); @$pb.TagNumber(11) - set birthday($28.Timestamp v) { setField(11, v); } + set birthday($30.Timestamp v) { setField(11, v); } @$pb.TagNumber(11) $core.bool hasBirthday() => $_has(8); @$pb.TagNumber(11) void clearBirthday() => clearField(11); @$pb.TagNumber(11) - $28.Timestamp ensureBirthday() => $_ensure(8); + $30.Timestamp ensureBirthday() => $_ensure(8); } class UpdateAccountInfoResponse extends $pb.GeneratedMessage { factory UpdateAccountInfoResponse({ - $29.AccountInfo? accountInfo, + $32.AccountInfo? accountInfo, }) { final $result = create(); if (accountInfo != null) { @@ -196,7 +196,7 @@ class UpdateAccountInfoResponse extends $pb.GeneratedMessage { factory UpdateAccountInfoResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'UpdateAccountInfoResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$29.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', subBuilder: $29.AccountInfo.create) + ..aOM<$32.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', subBuilder: $32.AccountInfo.create) ..hasRequiredFields = false ; @@ -222,15 +222,15 @@ class UpdateAccountInfoResponse extends $pb.GeneratedMessage { static UpdateAccountInfoResponse? _defaultInstance; @$pb.TagNumber(1) - $29.AccountInfo get accountInfo => $_getN(0); + $32.AccountInfo get accountInfo => $_getN(0); @$pb.TagNumber(1) - set accountInfo($29.AccountInfo v) { setField(1, v); } + set accountInfo($32.AccountInfo v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasAccountInfo() => $_has(0); @$pb.TagNumber(1) void clearAccountInfo() => clearField(1); @$pb.TagNumber(1) - $29.AccountInfo ensureAccountInfo() => $_ensure(0); + $32.AccountInfo ensureAccountInfo() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_update_account_privacy.pb.dart b/frontend/app/lib/pb/rpc_update_account_privacy.pb.dart index 7c007a5..47790b1 100644 --- a/frontend/app/lib/pb/rpc_update_account_privacy.pb.dart +++ b/frontend/app/lib/pb/rpc_update_account_privacy.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'account_info.pb.dart' as $29; +import 'account_info.pb.dart' as $32; class UpdateAccountPrivacyRequest extends $pb.GeneratedMessage { factory UpdateAccountPrivacyRequest({ @@ -82,7 +82,7 @@ class UpdateAccountPrivacyRequest extends $pb.GeneratedMessage { class UpdateAccountPrivacyResponse extends $pb.GeneratedMessage { factory UpdateAccountPrivacyResponse({ - $29.AccountInfo? accountInfo, + $32.AccountInfo? accountInfo, }) { final $result = create(); if (accountInfo != null) { @@ -95,7 +95,7 @@ class UpdateAccountPrivacyResponse extends $pb.GeneratedMessage { factory UpdateAccountPrivacyResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'UpdateAccountPrivacyResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$29.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', subBuilder: $29.AccountInfo.create) + ..aOM<$32.AccountInfo>(1, _omitFieldNames ? '' : 'accountInfo', subBuilder: $32.AccountInfo.create) ..hasRequiredFields = false ; @@ -121,15 +121,15 @@ class UpdateAccountPrivacyResponse extends $pb.GeneratedMessage { static UpdateAccountPrivacyResponse? _defaultInstance; @$pb.TagNumber(1) - $29.AccountInfo get accountInfo => $_getN(0); + $32.AccountInfo get accountInfo => $_getN(0); @$pb.TagNumber(1) - set accountInfo($29.AccountInfo v) { setField(1, v); } + set accountInfo($32.AccountInfo v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasAccountInfo() => $_has(0); @$pb.TagNumber(1) void clearAccountInfo() => clearField(1); @$pb.TagNumber(1) - $29.AccountInfo ensureAccountInfo() => $_ensure(0); + $32.AccountInfo ensureAccountInfo() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_update_payment.pb.dart b/frontend/app/lib/pb/rpc_update_payment.pb.dart index bf7012a..92bf18e 100644 --- a/frontend/app/lib/pb/rpc_update_payment.pb.dart +++ b/frontend/app/lib/pb/rpc_update_payment.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'payment.pb.dart' as $31; +import 'payment.pb.dart' as $34; class UpdatePaymentRequest extends $pb.GeneratedMessage { factory UpdatePaymentRequest({ @@ -180,7 +180,7 @@ class UpdatePaymentRequest extends $pb.GeneratedMessage { class UpdatePaymentResponse extends $pb.GeneratedMessage { factory UpdatePaymentResponse({ - $31.Payment? payment, + $34.Payment? payment, }) { final $result = create(); if (payment != null) { @@ -193,7 +193,7 @@ class UpdatePaymentResponse extends $pb.GeneratedMessage { factory UpdatePaymentResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'UpdatePaymentResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$31.Payment>(1, _omitFieldNames ? '' : 'payment', subBuilder: $31.Payment.create) + ..aOM<$34.Payment>(1, _omitFieldNames ? '' : 'payment', subBuilder: $34.Payment.create) ..hasRequiredFields = false ; @@ -219,15 +219,15 @@ class UpdatePaymentResponse extends $pb.GeneratedMessage { static UpdatePaymentResponse? _defaultInstance; @$pb.TagNumber(1) - $31.Payment get payment => $_getN(0); + $34.Payment get payment => $_getN(0); @$pb.TagNumber(1) - set payment($31.Payment v) { setField(1, v); } + set payment($34.Payment v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasPayment() => $_has(0); @$pb.TagNumber(1) void clearPayment() => clearField(1); @$pb.TagNumber(1) - $31.Payment ensurePayment() => $_ensure(0); + $34.Payment ensurePayment() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_update_person.pb.dart b/frontend/app/lib/pb/rpc_update_person.pb.dart index 0daed93..3aeb61d 100644 --- a/frontend/app/lib/pb/rpc_update_person.pb.dart +++ b/frontend/app/lib/pb/rpc_update_person.pb.dart @@ -14,8 +14,8 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; -import 'person.pb.dart' as $32; +import 'google/protobuf/timestamp.pb.dart' as $30; +import 'person.pb.dart' as $35; class UpdatePersonRequest extends $pb.GeneratedMessage { factory UpdatePersonRequest({ @@ -26,7 +26,8 @@ class UpdatePersonRequest extends $pb.GeneratedMessage { $core.String? city, $core.String? zip, $core.String? country, - $28.Timestamp? birthday, + $core.String? relationship, + $30.Timestamp? birthday, }) { final $result = create(); if (id != null) { @@ -50,6 +51,9 @@ class UpdatePersonRequest extends $pb.GeneratedMessage { if (country != null) { $result.country = country; } + if (relationship != null) { + $result.relationship = relationship; + } if (birthday != null) { $result.birthday = birthday; } @@ -67,7 +71,8 @@ class UpdatePersonRequest extends $pb.GeneratedMessage { ..aOS(5, _omitFieldNames ? '' : 'city') ..aOS(6, _omitFieldNames ? '' : 'zip') ..aOS(7, _omitFieldNames ? '' : 'country') - ..aOM<$28.Timestamp>(8, _omitFieldNames ? '' : 'birthday', subBuilder: $28.Timestamp.create) + ..aOS(8, _omitFieldNames ? '' : 'relationship') + ..aOM<$30.Timestamp>(9, _omitFieldNames ? '' : 'birthday', subBuilder: $30.Timestamp.create) ..hasRequiredFields = false ; @@ -156,20 +161,29 @@ class UpdatePersonRequest extends $pb.GeneratedMessage { void clearCountry() => clearField(7); @$pb.TagNumber(8) - $28.Timestamp get birthday => $_getN(7); + $core.String get relationship => $_getSZ(7); @$pb.TagNumber(8) - set birthday($28.Timestamp v) { setField(8, v); } + set relationship($core.String v) { $_setString(7, v); } @$pb.TagNumber(8) - $core.bool hasBirthday() => $_has(7); + $core.bool hasRelationship() => $_has(7); @$pb.TagNumber(8) - void clearBirthday() => clearField(8); - @$pb.TagNumber(8) - $28.Timestamp ensureBirthday() => $_ensure(7); + void clearRelationship() => clearField(8); + + @$pb.TagNumber(9) + $30.Timestamp get birthday => $_getN(8); + @$pb.TagNumber(9) + set birthday($30.Timestamp v) { setField(9, v); } + @$pb.TagNumber(9) + $core.bool hasBirthday() => $_has(8); + @$pb.TagNumber(9) + void clearBirthday() => clearField(9); + @$pb.TagNumber(9) + $30.Timestamp ensureBirthday() => $_ensure(8); } class UpdatePersonResponse extends $pb.GeneratedMessage { factory UpdatePersonResponse({ - $32.Person? person, + $35.Person? person, }) { final $result = create(); if (person != null) { @@ -182,7 +196,7 @@ class UpdatePersonResponse extends $pb.GeneratedMessage { factory UpdatePersonResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'UpdatePersonResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$32.Person>(1, _omitFieldNames ? '' : 'person', subBuilder: $32.Person.create) + ..aOM<$35.Person>(1, _omitFieldNames ? '' : 'person', subBuilder: $35.Person.create) ..hasRequiredFields = false ; @@ -208,15 +222,15 @@ class UpdatePersonResponse extends $pb.GeneratedMessage { static UpdatePersonResponse? _defaultInstance; @$pb.TagNumber(1) - $32.Person get person => $_getN(0); + $35.Person get person => $_getN(0); @$pb.TagNumber(1) - set person($32.Person v) { setField(1, v); } + set person($35.Person v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasPerson() => $_has(0); @$pb.TagNumber(1) void clearPerson() => clearField(1); @$pb.TagNumber(1) - $32.Person ensurePerson() => $_ensure(0); + $35.Person ensurePerson() => $_ensure(0); } diff --git a/frontend/app/lib/pb/rpc_update_person.pbjson.dart b/frontend/app/lib/pb/rpc_update_person.pbjson.dart index 5df2656..eb875ed 100644 --- a/frontend/app/lib/pb/rpc_update_person.pbjson.dart +++ b/frontend/app/lib/pb/rpc_update_person.pbjson.dart @@ -24,7 +24,8 @@ const UpdatePersonRequest$json = { {'1': 'city', '3': 5, '4': 1, '5': 9, '9': 3, '10': 'city', '17': true}, {'1': 'zip', '3': 6, '4': 1, '5': 9, '9': 4, '10': 'zip', '17': true}, {'1': 'country', '3': 7, '4': 1, '5': 9, '9': 5, '10': 'country', '17': true}, - {'1': 'birthday', '3': 8, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '8': {}, '9': 6, '10': 'birthday', '17': true}, + {'1': 'relationship', '3': 8, '4': 1, '5': 9, '9': 6, '10': 'relationship', '17': true}, + {'1': 'birthday', '3': 9, '4': 1, '5': 11, '6': '.google.protobuf.Timestamp', '8': {}, '9': 7, '10': 'birthday', '17': true}, ], '7': {}, '8': [ @@ -34,6 +35,7 @@ const UpdatePersonRequest$json = { {'1': '_city'}, {'1': '_zip'}, {'1': '_country'}, + {'1': '_relationship'}, {'1': '_birthday'}, ], }; @@ -43,15 +45,16 @@ final $typed_data.Uint8List updatePersonRequestDescriptor = $convert.base64Decod 'ChNVcGRhdGVQZXJzb25SZXF1ZXN0Eg4KAmlkGAEgASgEUgJpZBIhCglmaXJzdG5hbWUYAiABKA' 'lIAFIJZmlyc3RuYW1liAEBEh8KCGxhc3RuYW1lGAMgASgJSAFSCGxhc3RuYW1liAEBEhsKBnN0' 'cmVldBgEIAEoCUgCUgZzdHJlZXSIAQESFwoEY2l0eRgFIAEoCUgDUgRjaXR5iAEBEhUKA3ppcB' - 'gGIAEoCUgEUgN6aXCIAQESHQoHY291bnRyeRgHIAEoCUgFUgdjb3VudHJ5iAEBElgKCGJpcnRo' - 'ZGF5GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIbkkEYShYiMTk5MC0xMC0wNV' - 'QwMDowMDowMFoiSAZSCGJpcnRoZGF5iAEBOuUBkkHhAQomKg1VcGRhdGUgUGVyc29uMhBVcGRh' - 'dGUgYW4gUGVyc29u0gECaWQytgF7ImlkIjogIjEiLCAiZmlyc3RuYW1lIjogIkpvaG4iLCAibG' - 'FzdG5hbWUiOiAiRG9lIiwgInBob25lIjogIiIsICJzdHJlZXQiOiAiRGVhdGggU3RhciAzIiwg' - 'InppcCI6ICIwODE2IiwgImNpdHkiOiAiTW9udGFuYSIsICJjb3VudHJ5IjogIkNhbmFkYSIsIC' - 'JiaXJ0aGRheSI6ICIxOTkyLTEwLTA1VDAwOjAwOjAwWiIgfUIMCgpfZmlyc3RuYW1lQgsKCV9s' - 'YXN0bmFtZUIJCgdfc3RyZWV0QgcKBV9jaXR5QgYKBF96aXBCCgoIX2NvdW50cnlCCwoJX2Jpcn' - 'RoZGF5'); + 'gGIAEoCUgEUgN6aXCIAQESHQoHY291bnRyeRgHIAEoCUgFUgdjb3VudHJ5iAEBEicKDHJlbGF0' + 'aW9uc2hpcBgIIAEoCUgGUgxyZWxhdGlvbnNoaXCIAQESWAoIYmlydGhkYXkYCSABKAsyGi5nb2' + '9nbGUucHJvdG9idWYuVGltZXN0YW1wQhuSQRhKFiIxOTkwLTEwLTA1VDAwOjAwOjAwWiJIB1II' + 'YmlydGhkYXmIAQE65QGSQeEBCiYqDVVwZGF0ZSBQZXJzb24yEFVwZGF0ZSBhbiBQZXJzb27SAQ' + 'JpZDK2AXsiaWQiOiAiMSIsICJmaXJzdG5hbWUiOiAiSm9obiIsICJsYXN0bmFtZSI6ICJEb2Ui' + 'LCAicGhvbmUiOiAiIiwgInN0cmVldCI6ICJEZWF0aCBTdGFyIDMiLCAiemlwIjogIjA4MTYiLC' + 'AiY2l0eSI6ICJNb250YW5hIiwgImNvdW50cnkiOiAiQ2FuYWRhIiwgImJpcnRoZGF5IjogIjE5' + 'OTItMTAtMDVUMDA6MDA6MDBaIiB9QgwKCl9maXJzdG5hbWVCCwoJX2xhc3RuYW1lQgkKB19zdH' + 'JlZXRCBwoFX2NpdHlCBgoEX3ppcEIKCghfY291bnRyeUIPCg1fcmVsYXRpb25zaGlwQgsKCV9i' + 'aXJ0aGRheQ=='); @$core.Deprecated('Use updatePersonResponseDescriptor instead') const UpdatePersonResponse$json = { diff --git a/frontend/app/lib/pb/rpc_upload_document.pb.dart b/frontend/app/lib/pb/rpc_upload_document.pb.dart index f914827..d4483e3 100644 --- a/frontend/app/lib/pb/rpc_upload_document.pb.dart +++ b/frontend/app/lib/pb/rpc_upload_document.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'document.pb.dart' as $35; +import 'document.pb.dart' as $38; class UploadDocumentRequest extends $pb.GeneratedMessage { factory UploadDocumentRequest({ @@ -96,7 +96,7 @@ class UploadDocumentRequest extends $pb.GeneratedMessage { class UploadDocumentResponse extends $pb.GeneratedMessage { factory UploadDocumentResponse({ - $35.Document? document, + $38.Document? document, }) { final $result = create(); if (document != null) { @@ -109,7 +109,7 @@ class UploadDocumentResponse extends $pb.GeneratedMessage { factory UploadDocumentResponse.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'UploadDocumentResponse', package: const $pb.PackageName(_omitMessageNames ? '' : 'pb'), createEmptyInstance: create) - ..aOM<$35.Document>(1, _omitFieldNames ? '' : 'document', subBuilder: $35.Document.create) + ..aOM<$38.Document>(1, _omitFieldNames ? '' : 'document', subBuilder: $38.Document.create) ..hasRequiredFields = false ; @@ -135,15 +135,15 @@ class UploadDocumentResponse extends $pb.GeneratedMessage { static UploadDocumentResponse? _defaultInstance; @$pb.TagNumber(1) - $35.Document get document => $_getN(0); + $38.Document get document => $_getN(0); @$pb.TagNumber(1) - set document($35.Document v) { setField(1, v); } + set document($38.Document v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasDocument() => $_has(0); @$pb.TagNumber(1) void clearDocument() => clearField(1); @$pb.TagNumber(1) - $35.Document ensureDocument() => $_ensure(0); + $38.Document ensureDocument() => $_ensure(0); } diff --git a/frontend/app/lib/pb/service_df.pbgrpc.dart b/frontend/app/lib/pb/service_df.pbgrpc.dart index 80be41f..4205bff 100644 --- a/frontend/app/lib/pb/service_df.pbgrpc.dart +++ b/frontend/app/lib/pb/service_df.pbgrpc.dart @@ -15,34 +15,36 @@ import 'dart:core' as $core; import 'package:grpc/service_api.dart' as $grpc; import 'package:protobuf/protobuf.dart' as $pb; +import 'rpc_add_email.pb.dart' as $13; +import 'rpc_add_emails.pb.dart' as $14; import 'rpc_block_session.pb.dart' as $3; import 'rpc_create_account.pb.dart' as $6; import 'rpc_create_account_info.pb.dart' as $10; -import 'rpc_create_payment.pb.dart' as $18; -import 'rpc_create_person.pb.dart' as $13; -import 'rpc_delete_document.pb.dart' as $25; -import 'rpc_delete_payment.pb.dart' as $20; -import 'rpc_delete_person.pb.dart' as $16; +import 'rpc_create_payment.pb.dart' as $20; +import 'rpc_create_person.pb.dart' as $15; +import 'rpc_delete_document.pb.dart' as $27; +import 'rpc_delete_payment.pb.dart' as $22; +import 'rpc_delete_person.pb.dart' as $18; import 'rpc_get_account.pb.dart' as $4; import 'rpc_get_account_info.pb.dart' as $8; -import 'rpc_get_payment.pb.dart' as $19; -import 'rpc_get_person.pb.dart' as $15; +import 'rpc_get_payment.pb.dart' as $21; +import 'rpc_get_person.pb.dart' as $17; import 'rpc_list_account_info.pb.dart' as $9; import 'rpc_list_accounts.pb.dart' as $5; -import 'rpc_list_payments.pb.dart' as $21; -import 'rpc_list_persons.pb.dart' as $17; -import 'rpc_list_returns_log_by_person_id.pb.dart' as $23; +import 'rpc_list_payments.pb.dart' as $23; +import 'rpc_list_persons.pb.dart' as $19; +import 'rpc_list_returns_log_by_person_id.pb.dart' as $25; import 'rpc_list_sessions.pb.dart' as $2; import 'rpc_login.pb.dart' as $0; import 'rpc_refresh_token.pb.dart' as $1; -import 'rpc_resend_verification.pb.dart' as $26; +import 'rpc_resend_verification.pb.dart' as $28; import 'rpc_update_account.pb.dart' as $7; import 'rpc_update_account_info.pb.dart' as $11; import 'rpc_update_account_privacy.pb.dart' as $12; -import 'rpc_update_payment.pb.dart' as $22; -import 'rpc_update_person.pb.dart' as $14; -import 'rpc_upload_document.pb.dart' as $24; -import 'rpc_verify_email.pb.dart' as $27; +import 'rpc_update_payment.pb.dart' as $24; +import 'rpc_update_person.pb.dart' as $16; +import 'rpc_upload_document.pb.dart' as $26; +import 'rpc_verify_email.pb.dart' as $29; export 'service_df.pb.dart'; @@ -100,66 +102,74 @@ class dfClient extends $grpc.Client { '/pb.df/UpdateAccountPrivacy', ($12.UpdateAccountPrivacyRequest value) => value.writeToBuffer(), ($core.List<$core.int> value) => $12.UpdateAccountPrivacyResponse.fromBuffer(value)); - static final _$createPerson = $grpc.ClientMethod<$13.CreatePersonRequest, $13.CreatePersonResponse>( + static final _$addEmailAddress = $grpc.ClientMethod<$13.AddEmailAddressRequest, $13.AddEmailAddressResponse>( + '/pb.df/AddEmailAddress', + ($13.AddEmailAddressRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $13.AddEmailAddressResponse.fromBuffer(value)); + static final _$addEmailAddresses = $grpc.ClientMethod<$14.AddEmailAddressesRequest, $14.AddEmailAddressesResponse>( + '/pb.df/AddEmailAddresses', + ($14.AddEmailAddressesRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $14.AddEmailAddressesResponse.fromBuffer(value)); + static final _$createPerson = $grpc.ClientMethod<$15.CreatePersonRequest, $15.CreatePersonResponse>( '/pb.df/CreatePerson', - ($13.CreatePersonRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $13.CreatePersonResponse.fromBuffer(value)); - static final _$updatePerson = $grpc.ClientMethod<$14.UpdatePersonRequest, $14.UpdatePersonResponse>( + ($15.CreatePersonRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $15.CreatePersonResponse.fromBuffer(value)); + static final _$updatePerson = $grpc.ClientMethod<$16.UpdatePersonRequest, $16.UpdatePersonResponse>( '/pb.df/UpdatePerson', - ($14.UpdatePersonRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $14.UpdatePersonResponse.fromBuffer(value)); - static final _$getPerson = $grpc.ClientMethod<$15.GetPersonRequest, $15.GetPersonResponse>( + ($16.UpdatePersonRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $16.UpdatePersonResponse.fromBuffer(value)); + static final _$getPerson = $grpc.ClientMethod<$17.GetPersonRequest, $17.GetPersonResponse>( '/pb.df/GetPerson', - ($15.GetPersonRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $15.GetPersonResponse.fromBuffer(value)); - static final _$deletePerson = $grpc.ClientMethod<$16.DeletePersonRequest, $16.DeletePersonResponse>( + ($17.GetPersonRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $17.GetPersonResponse.fromBuffer(value)); + static final _$deletePerson = $grpc.ClientMethod<$18.DeletePersonRequest, $18.DeletePersonResponse>( '/pb.df/DeletePerson', - ($16.DeletePersonRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $16.DeletePersonResponse.fromBuffer(value)); - static final _$listPersons = $grpc.ClientMethod<$17.ListPersonsRequest, $17.ListPersonsResponse>( + ($18.DeletePersonRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $18.DeletePersonResponse.fromBuffer(value)); + static final _$listPersons = $grpc.ClientMethod<$19.ListPersonsRequest, $19.ListPersonsResponse>( '/pb.df/ListPersons', - ($17.ListPersonsRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $17.ListPersonsResponse.fromBuffer(value)); - static final _$createPayment = $grpc.ClientMethod<$18.CreatePaymentRequest, $18.CreatePaymentResponse>( + ($19.ListPersonsRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $19.ListPersonsResponse.fromBuffer(value)); + static final _$createPayment = $grpc.ClientMethod<$20.CreatePaymentRequest, $20.CreatePaymentResponse>( '/pb.df/CreatePayment', - ($18.CreatePaymentRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $18.CreatePaymentResponse.fromBuffer(value)); - static final _$getPayment = $grpc.ClientMethod<$19.GetPaymentRequest, $19.GetPaymentResponse>( + ($20.CreatePaymentRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $20.CreatePaymentResponse.fromBuffer(value)); + static final _$getPayment = $grpc.ClientMethod<$21.GetPaymentRequest, $21.GetPaymentResponse>( '/pb.df/GetPayment', - ($19.GetPaymentRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $19.GetPaymentResponse.fromBuffer(value)); - static final _$deletePayment = $grpc.ClientMethod<$20.DeletePaymentRequest, $20.DeletePaymentResponse>( + ($21.GetPaymentRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $21.GetPaymentResponse.fromBuffer(value)); + static final _$deletePayment = $grpc.ClientMethod<$22.DeletePaymentRequest, $22.DeletePaymentResponse>( '/pb.df/DeletePayment', - ($20.DeletePaymentRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $20.DeletePaymentResponse.fromBuffer(value)); - static final _$listPayments = $grpc.ClientMethod<$21.ListPaymentsRequest, $21.ListPaymentsResponse>( + ($22.DeletePaymentRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $22.DeletePaymentResponse.fromBuffer(value)); + static final _$listPayments = $grpc.ClientMethod<$23.ListPaymentsRequest, $23.ListPaymentsResponse>( '/pb.df/ListPayments', - ($21.ListPaymentsRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $21.ListPaymentsResponse.fromBuffer(value)); - static final _$updatePayment = $grpc.ClientMethod<$22.UpdatePaymentRequest, $22.UpdatePaymentResponse>( + ($23.ListPaymentsRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $23.ListPaymentsResponse.fromBuffer(value)); + static final _$updatePayment = $grpc.ClientMethod<$24.UpdatePaymentRequest, $24.UpdatePaymentResponse>( '/pb.df/UpdatePayment', - ($22.UpdatePaymentRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $22.UpdatePaymentResponse.fromBuffer(value)); - static final _$listReturnsLog = $grpc.ClientMethod<$23.ListReturnsLogRequest, $23.ListReturnsLogResponse>( + ($24.UpdatePaymentRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $24.UpdatePaymentResponse.fromBuffer(value)); + static final _$listReturnsLog = $grpc.ClientMethod<$25.ListReturnsLogRequest, $25.ListReturnsLogResponse>( '/pb.df/ListReturnsLog', - ($23.ListReturnsLogRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $23.ListReturnsLogResponse.fromBuffer(value)); - static final _$uploadDocument = $grpc.ClientMethod<$24.UploadDocumentRequest, $24.UploadDocumentResponse>( + ($25.ListReturnsLogRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $25.ListReturnsLogResponse.fromBuffer(value)); + static final _$uploadDocument = $grpc.ClientMethod<$26.UploadDocumentRequest, $26.UploadDocumentResponse>( '/pb.df/UploadDocument', - ($24.UploadDocumentRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $24.UploadDocumentResponse.fromBuffer(value)); - static final _$deleteDocument = $grpc.ClientMethod<$25.DeleteDocumentRequest, $25.DeleteDocumentResponse>( + ($26.UploadDocumentRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $26.UploadDocumentResponse.fromBuffer(value)); + static final _$deleteDocument = $grpc.ClientMethod<$27.DeleteDocumentRequest, $27.DeleteDocumentResponse>( '/pb.df/DeleteDocument', - ($25.DeleteDocumentRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $25.DeleteDocumentResponse.fromBuffer(value)); - static final _$resendVerification = $grpc.ClientMethod<$26.ResendVerificationRequest, $26.ResendVerificationResponse>( + ($27.DeleteDocumentRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $27.DeleteDocumentResponse.fromBuffer(value)); + static final _$resendVerification = $grpc.ClientMethod<$28.ResendVerificationRequest, $28.ResendVerificationResponse>( '/pb.df/ResendVerification', - ($26.ResendVerificationRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $26.ResendVerificationResponse.fromBuffer(value)); - static final _$verifyEmail = $grpc.ClientMethod<$27.VerifyEmailRequest, $27.VerifyEmailResponse>( + ($28.ResendVerificationRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $28.ResendVerificationResponse.fromBuffer(value)); + static final _$verifyEmail = $grpc.ClientMethod<$29.VerifyEmailRequest, $29.VerifyEmailResponse>( '/pb.df/VerifyEmail', - ($27.VerifyEmailRequest value) => value.writeToBuffer(), - ($core.List<$core.int> value) => $27.VerifyEmailResponse.fromBuffer(value)); + ($29.VerifyEmailRequest value) => value.writeToBuffer(), + ($core.List<$core.int> value) => $29.VerifyEmailResponse.fromBuffer(value)); dfClient($grpc.ClientChannel channel, {$grpc.CallOptions? options, @@ -219,63 +229,71 @@ class dfClient extends $grpc.Client { return $createUnaryCall(_$updateAccountPrivacy, request, options: options); } - $grpc.ResponseFuture<$13.CreatePersonResponse> createPerson($13.CreatePersonRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$13.AddEmailAddressResponse> addEmailAddress($13.AddEmailAddressRequest request, {$grpc.CallOptions? options}) { + return $createUnaryCall(_$addEmailAddress, request, options: options); + } + + $grpc.ResponseFuture<$14.AddEmailAddressesResponse> addEmailAddresses($14.AddEmailAddressesRequest request, {$grpc.CallOptions? options}) { + return $createUnaryCall(_$addEmailAddresses, request, options: options); + } + + $grpc.ResponseFuture<$15.CreatePersonResponse> createPerson($15.CreatePersonRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$createPerson, request, options: options); } - $grpc.ResponseFuture<$14.UpdatePersonResponse> updatePerson($14.UpdatePersonRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$16.UpdatePersonResponse> updatePerson($16.UpdatePersonRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$updatePerson, request, options: options); } - $grpc.ResponseFuture<$15.GetPersonResponse> getPerson($15.GetPersonRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$17.GetPersonResponse> getPerson($17.GetPersonRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$getPerson, request, options: options); } - $grpc.ResponseFuture<$16.DeletePersonResponse> deletePerson($16.DeletePersonRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$18.DeletePersonResponse> deletePerson($18.DeletePersonRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$deletePerson, request, options: options); } - $grpc.ResponseFuture<$17.ListPersonsResponse> listPersons($17.ListPersonsRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$19.ListPersonsResponse> listPersons($19.ListPersonsRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$listPersons, request, options: options); } - $grpc.ResponseFuture<$18.CreatePaymentResponse> createPayment($18.CreatePaymentRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$20.CreatePaymentResponse> createPayment($20.CreatePaymentRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$createPayment, request, options: options); } - $grpc.ResponseFuture<$19.GetPaymentResponse> getPayment($19.GetPaymentRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$21.GetPaymentResponse> getPayment($21.GetPaymentRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$getPayment, request, options: options); } - $grpc.ResponseFuture<$20.DeletePaymentResponse> deletePayment($20.DeletePaymentRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$22.DeletePaymentResponse> deletePayment($22.DeletePaymentRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$deletePayment, request, options: options); } - $grpc.ResponseFuture<$21.ListPaymentsResponse> listPayments($21.ListPaymentsRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$23.ListPaymentsResponse> listPayments($23.ListPaymentsRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$listPayments, request, options: options); } - $grpc.ResponseFuture<$22.UpdatePaymentResponse> updatePayment($22.UpdatePaymentRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$24.UpdatePaymentResponse> updatePayment($24.UpdatePaymentRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$updatePayment, request, options: options); } - $grpc.ResponseFuture<$23.ListReturnsLogResponse> listReturnsLog($23.ListReturnsLogRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$25.ListReturnsLogResponse> listReturnsLog($25.ListReturnsLogRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$listReturnsLog, request, options: options); } - $grpc.ResponseFuture<$24.UploadDocumentResponse> uploadDocument($24.UploadDocumentRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$26.UploadDocumentResponse> uploadDocument($26.UploadDocumentRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$uploadDocument, request, options: options); } - $grpc.ResponseFuture<$25.DeleteDocumentResponse> deleteDocument($25.DeleteDocumentRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$27.DeleteDocumentResponse> deleteDocument($27.DeleteDocumentRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$deleteDocument, request, options: options); } - $grpc.ResponseFuture<$26.ResendVerificationResponse> resendVerification($26.ResendVerificationRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$28.ResendVerificationResponse> resendVerification($28.ResendVerificationRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$resendVerification, request, options: options); } - $grpc.ResponseFuture<$27.VerifyEmailResponse> verifyEmail($27.VerifyEmailRequest request, {$grpc.CallOptions? options}) { + $grpc.ResponseFuture<$29.VerifyEmailResponse> verifyEmail($29.VerifyEmailRequest request, {$grpc.CallOptions? options}) { return $createUnaryCall(_$verifyEmail, request, options: options); } } @@ -376,111 +394,125 @@ abstract class dfServiceBase extends $grpc.Service { false, ($core.List<$core.int> value) => $12.UpdateAccountPrivacyRequest.fromBuffer(value), ($12.UpdateAccountPrivacyResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$13.CreatePersonRequest, $13.CreatePersonResponse>( + $addMethod($grpc.ServiceMethod<$13.AddEmailAddressRequest, $13.AddEmailAddressResponse>( + 'AddEmailAddress', + addEmailAddress_Pre, + false, + false, + ($core.List<$core.int> value) => $13.AddEmailAddressRequest.fromBuffer(value), + ($13.AddEmailAddressResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$14.AddEmailAddressesRequest, $14.AddEmailAddressesResponse>( + 'AddEmailAddresses', + addEmailAddresses_Pre, + false, + false, + ($core.List<$core.int> value) => $14.AddEmailAddressesRequest.fromBuffer(value), + ($14.AddEmailAddressesResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$15.CreatePersonRequest, $15.CreatePersonResponse>( 'CreatePerson', createPerson_Pre, false, false, - ($core.List<$core.int> value) => $13.CreatePersonRequest.fromBuffer(value), - ($13.CreatePersonResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$14.UpdatePersonRequest, $14.UpdatePersonResponse>( + ($core.List<$core.int> value) => $15.CreatePersonRequest.fromBuffer(value), + ($15.CreatePersonResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$16.UpdatePersonRequest, $16.UpdatePersonResponse>( 'UpdatePerson', updatePerson_Pre, false, false, - ($core.List<$core.int> value) => $14.UpdatePersonRequest.fromBuffer(value), - ($14.UpdatePersonResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$15.GetPersonRequest, $15.GetPersonResponse>( + ($core.List<$core.int> value) => $16.UpdatePersonRequest.fromBuffer(value), + ($16.UpdatePersonResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$17.GetPersonRequest, $17.GetPersonResponse>( 'GetPerson', getPerson_Pre, false, false, - ($core.List<$core.int> value) => $15.GetPersonRequest.fromBuffer(value), - ($15.GetPersonResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$16.DeletePersonRequest, $16.DeletePersonResponse>( + ($core.List<$core.int> value) => $17.GetPersonRequest.fromBuffer(value), + ($17.GetPersonResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$18.DeletePersonRequest, $18.DeletePersonResponse>( 'DeletePerson', deletePerson_Pre, false, false, - ($core.List<$core.int> value) => $16.DeletePersonRequest.fromBuffer(value), - ($16.DeletePersonResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$17.ListPersonsRequest, $17.ListPersonsResponse>( + ($core.List<$core.int> value) => $18.DeletePersonRequest.fromBuffer(value), + ($18.DeletePersonResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$19.ListPersonsRequest, $19.ListPersonsResponse>( 'ListPersons', listPersons_Pre, false, false, - ($core.List<$core.int> value) => $17.ListPersonsRequest.fromBuffer(value), - ($17.ListPersonsResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$18.CreatePaymentRequest, $18.CreatePaymentResponse>( + ($core.List<$core.int> value) => $19.ListPersonsRequest.fromBuffer(value), + ($19.ListPersonsResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$20.CreatePaymentRequest, $20.CreatePaymentResponse>( 'CreatePayment', createPayment_Pre, false, false, - ($core.List<$core.int> value) => $18.CreatePaymentRequest.fromBuffer(value), - ($18.CreatePaymentResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$19.GetPaymentRequest, $19.GetPaymentResponse>( + ($core.List<$core.int> value) => $20.CreatePaymentRequest.fromBuffer(value), + ($20.CreatePaymentResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$21.GetPaymentRequest, $21.GetPaymentResponse>( 'GetPayment', getPayment_Pre, false, false, - ($core.List<$core.int> value) => $19.GetPaymentRequest.fromBuffer(value), - ($19.GetPaymentResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$20.DeletePaymentRequest, $20.DeletePaymentResponse>( + ($core.List<$core.int> value) => $21.GetPaymentRequest.fromBuffer(value), + ($21.GetPaymentResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$22.DeletePaymentRequest, $22.DeletePaymentResponse>( 'DeletePayment', deletePayment_Pre, false, false, - ($core.List<$core.int> value) => $20.DeletePaymentRequest.fromBuffer(value), - ($20.DeletePaymentResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$21.ListPaymentsRequest, $21.ListPaymentsResponse>( + ($core.List<$core.int> value) => $22.DeletePaymentRequest.fromBuffer(value), + ($22.DeletePaymentResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$23.ListPaymentsRequest, $23.ListPaymentsResponse>( 'ListPayments', listPayments_Pre, false, false, - ($core.List<$core.int> value) => $21.ListPaymentsRequest.fromBuffer(value), - ($21.ListPaymentsResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$22.UpdatePaymentRequest, $22.UpdatePaymentResponse>( + ($core.List<$core.int> value) => $23.ListPaymentsRequest.fromBuffer(value), + ($23.ListPaymentsResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$24.UpdatePaymentRequest, $24.UpdatePaymentResponse>( 'UpdatePayment', updatePayment_Pre, false, false, - ($core.List<$core.int> value) => $22.UpdatePaymentRequest.fromBuffer(value), - ($22.UpdatePaymentResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$23.ListReturnsLogRequest, $23.ListReturnsLogResponse>( + ($core.List<$core.int> value) => $24.UpdatePaymentRequest.fromBuffer(value), + ($24.UpdatePaymentResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$25.ListReturnsLogRequest, $25.ListReturnsLogResponse>( 'ListReturnsLog', listReturnsLog_Pre, false, false, - ($core.List<$core.int> value) => $23.ListReturnsLogRequest.fromBuffer(value), - ($23.ListReturnsLogResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$24.UploadDocumentRequest, $24.UploadDocumentResponse>( + ($core.List<$core.int> value) => $25.ListReturnsLogRequest.fromBuffer(value), + ($25.ListReturnsLogResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$26.UploadDocumentRequest, $26.UploadDocumentResponse>( 'UploadDocument', uploadDocument_Pre, false, false, - ($core.List<$core.int> value) => $24.UploadDocumentRequest.fromBuffer(value), - ($24.UploadDocumentResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$25.DeleteDocumentRequest, $25.DeleteDocumentResponse>( + ($core.List<$core.int> value) => $26.UploadDocumentRequest.fromBuffer(value), + ($26.UploadDocumentResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$27.DeleteDocumentRequest, $27.DeleteDocumentResponse>( 'DeleteDocument', deleteDocument_Pre, false, false, - ($core.List<$core.int> value) => $25.DeleteDocumentRequest.fromBuffer(value), - ($25.DeleteDocumentResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$26.ResendVerificationRequest, $26.ResendVerificationResponse>( + ($core.List<$core.int> value) => $27.DeleteDocumentRequest.fromBuffer(value), + ($27.DeleteDocumentResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$28.ResendVerificationRequest, $28.ResendVerificationResponse>( 'ResendVerification', resendVerification_Pre, false, false, - ($core.List<$core.int> value) => $26.ResendVerificationRequest.fromBuffer(value), - ($26.ResendVerificationResponse value) => value.writeToBuffer())); - $addMethod($grpc.ServiceMethod<$27.VerifyEmailRequest, $27.VerifyEmailResponse>( + ($core.List<$core.int> value) => $28.ResendVerificationRequest.fromBuffer(value), + ($28.ResendVerificationResponse value) => value.writeToBuffer())); + $addMethod($grpc.ServiceMethod<$29.VerifyEmailRequest, $29.VerifyEmailResponse>( 'VerifyEmail', verifyEmail_Pre, false, false, - ($core.List<$core.int> value) => $27.VerifyEmailRequest.fromBuffer(value), - ($27.VerifyEmailResponse value) => value.writeToBuffer())); + ($core.List<$core.int> value) => $29.VerifyEmailRequest.fromBuffer(value), + ($29.VerifyEmailResponse value) => value.writeToBuffer())); } $async.Future<$0.LoginResponse> login_Pre($grpc.ServiceCall call, $async.Future<$0.LoginRequest> request) async { @@ -535,63 +567,71 @@ abstract class dfServiceBase extends $grpc.Service { return updateAccountPrivacy(call, await request); } - $async.Future<$13.CreatePersonResponse> createPerson_Pre($grpc.ServiceCall call, $async.Future<$13.CreatePersonRequest> request) async { + $async.Future<$13.AddEmailAddressResponse> addEmailAddress_Pre($grpc.ServiceCall call, $async.Future<$13.AddEmailAddressRequest> request) async { + return addEmailAddress(call, await request); + } + + $async.Future<$14.AddEmailAddressesResponse> addEmailAddresses_Pre($grpc.ServiceCall call, $async.Future<$14.AddEmailAddressesRequest> request) async { + return addEmailAddresses(call, await request); + } + + $async.Future<$15.CreatePersonResponse> createPerson_Pre($grpc.ServiceCall call, $async.Future<$15.CreatePersonRequest> request) async { return createPerson(call, await request); } - $async.Future<$14.UpdatePersonResponse> updatePerson_Pre($grpc.ServiceCall call, $async.Future<$14.UpdatePersonRequest> request) async { + $async.Future<$16.UpdatePersonResponse> updatePerson_Pre($grpc.ServiceCall call, $async.Future<$16.UpdatePersonRequest> request) async { return updatePerson(call, await request); } - $async.Future<$15.GetPersonResponse> getPerson_Pre($grpc.ServiceCall call, $async.Future<$15.GetPersonRequest> request) async { + $async.Future<$17.GetPersonResponse> getPerson_Pre($grpc.ServiceCall call, $async.Future<$17.GetPersonRequest> request) async { return getPerson(call, await request); } - $async.Future<$16.DeletePersonResponse> deletePerson_Pre($grpc.ServiceCall call, $async.Future<$16.DeletePersonRequest> request) async { + $async.Future<$18.DeletePersonResponse> deletePerson_Pre($grpc.ServiceCall call, $async.Future<$18.DeletePersonRequest> request) async { return deletePerson(call, await request); } - $async.Future<$17.ListPersonsResponse> listPersons_Pre($grpc.ServiceCall call, $async.Future<$17.ListPersonsRequest> request) async { + $async.Future<$19.ListPersonsResponse> listPersons_Pre($grpc.ServiceCall call, $async.Future<$19.ListPersonsRequest> request) async { return listPersons(call, await request); } - $async.Future<$18.CreatePaymentResponse> createPayment_Pre($grpc.ServiceCall call, $async.Future<$18.CreatePaymentRequest> request) async { + $async.Future<$20.CreatePaymentResponse> createPayment_Pre($grpc.ServiceCall call, $async.Future<$20.CreatePaymentRequest> request) async { return createPayment(call, await request); } - $async.Future<$19.GetPaymentResponse> getPayment_Pre($grpc.ServiceCall call, $async.Future<$19.GetPaymentRequest> request) async { + $async.Future<$21.GetPaymentResponse> getPayment_Pre($grpc.ServiceCall call, $async.Future<$21.GetPaymentRequest> request) async { return getPayment(call, await request); } - $async.Future<$20.DeletePaymentResponse> deletePayment_Pre($grpc.ServiceCall call, $async.Future<$20.DeletePaymentRequest> request) async { + $async.Future<$22.DeletePaymentResponse> deletePayment_Pre($grpc.ServiceCall call, $async.Future<$22.DeletePaymentRequest> request) async { return deletePayment(call, await request); } - $async.Future<$21.ListPaymentsResponse> listPayments_Pre($grpc.ServiceCall call, $async.Future<$21.ListPaymentsRequest> request) async { + $async.Future<$23.ListPaymentsResponse> listPayments_Pre($grpc.ServiceCall call, $async.Future<$23.ListPaymentsRequest> request) async { return listPayments(call, await request); } - $async.Future<$22.UpdatePaymentResponse> updatePayment_Pre($grpc.ServiceCall call, $async.Future<$22.UpdatePaymentRequest> request) async { + $async.Future<$24.UpdatePaymentResponse> updatePayment_Pre($grpc.ServiceCall call, $async.Future<$24.UpdatePaymentRequest> request) async { return updatePayment(call, await request); } - $async.Future<$23.ListReturnsLogResponse> listReturnsLog_Pre($grpc.ServiceCall call, $async.Future<$23.ListReturnsLogRequest> request) async { + $async.Future<$25.ListReturnsLogResponse> listReturnsLog_Pre($grpc.ServiceCall call, $async.Future<$25.ListReturnsLogRequest> request) async { return listReturnsLog(call, await request); } - $async.Future<$24.UploadDocumentResponse> uploadDocument_Pre($grpc.ServiceCall call, $async.Future<$24.UploadDocumentRequest> request) async { + $async.Future<$26.UploadDocumentResponse> uploadDocument_Pre($grpc.ServiceCall call, $async.Future<$26.UploadDocumentRequest> request) async { return uploadDocument(call, await request); } - $async.Future<$25.DeleteDocumentResponse> deleteDocument_Pre($grpc.ServiceCall call, $async.Future<$25.DeleteDocumentRequest> request) async { + $async.Future<$27.DeleteDocumentResponse> deleteDocument_Pre($grpc.ServiceCall call, $async.Future<$27.DeleteDocumentRequest> request) async { return deleteDocument(call, await request); } - $async.Future<$26.ResendVerificationResponse> resendVerification_Pre($grpc.ServiceCall call, $async.Future<$26.ResendVerificationRequest> request) async { + $async.Future<$28.ResendVerificationResponse> resendVerification_Pre($grpc.ServiceCall call, $async.Future<$28.ResendVerificationRequest> request) async { return resendVerification(call, await request); } - $async.Future<$27.VerifyEmailResponse> verifyEmail_Pre($grpc.ServiceCall call, $async.Future<$27.VerifyEmailRequest> request) async { + $async.Future<$29.VerifyEmailResponse> verifyEmail_Pre($grpc.ServiceCall call, $async.Future<$29.VerifyEmailRequest> request) async { return verifyEmail(call, await request); } @@ -608,19 +648,21 @@ abstract class dfServiceBase extends $grpc.Service { $async.Future<$10.CreateAccountInfoResponse> createAccountInfo($grpc.ServiceCall call, $10.CreateAccountInfoRequest request); $async.Future<$11.UpdateAccountInfoResponse> updateAccountInfo($grpc.ServiceCall call, $11.UpdateAccountInfoRequest request); $async.Future<$12.UpdateAccountPrivacyResponse> updateAccountPrivacy($grpc.ServiceCall call, $12.UpdateAccountPrivacyRequest request); - $async.Future<$13.CreatePersonResponse> createPerson($grpc.ServiceCall call, $13.CreatePersonRequest request); - $async.Future<$14.UpdatePersonResponse> updatePerson($grpc.ServiceCall call, $14.UpdatePersonRequest request); - $async.Future<$15.GetPersonResponse> getPerson($grpc.ServiceCall call, $15.GetPersonRequest request); - $async.Future<$16.DeletePersonResponse> deletePerson($grpc.ServiceCall call, $16.DeletePersonRequest request); - $async.Future<$17.ListPersonsResponse> listPersons($grpc.ServiceCall call, $17.ListPersonsRequest request); - $async.Future<$18.CreatePaymentResponse> createPayment($grpc.ServiceCall call, $18.CreatePaymentRequest request); - $async.Future<$19.GetPaymentResponse> getPayment($grpc.ServiceCall call, $19.GetPaymentRequest request); - $async.Future<$20.DeletePaymentResponse> deletePayment($grpc.ServiceCall call, $20.DeletePaymentRequest request); - $async.Future<$21.ListPaymentsResponse> listPayments($grpc.ServiceCall call, $21.ListPaymentsRequest request); - $async.Future<$22.UpdatePaymentResponse> updatePayment($grpc.ServiceCall call, $22.UpdatePaymentRequest request); - $async.Future<$23.ListReturnsLogResponse> listReturnsLog($grpc.ServiceCall call, $23.ListReturnsLogRequest request); - $async.Future<$24.UploadDocumentResponse> uploadDocument($grpc.ServiceCall call, $24.UploadDocumentRequest request); - $async.Future<$25.DeleteDocumentResponse> deleteDocument($grpc.ServiceCall call, $25.DeleteDocumentRequest request); - $async.Future<$26.ResendVerificationResponse> resendVerification($grpc.ServiceCall call, $26.ResendVerificationRequest request); - $async.Future<$27.VerifyEmailResponse> verifyEmail($grpc.ServiceCall call, $27.VerifyEmailRequest request); + $async.Future<$13.AddEmailAddressResponse> addEmailAddress($grpc.ServiceCall call, $13.AddEmailAddressRequest request); + $async.Future<$14.AddEmailAddressesResponse> addEmailAddresses($grpc.ServiceCall call, $14.AddEmailAddressesRequest request); + $async.Future<$15.CreatePersonResponse> createPerson($grpc.ServiceCall call, $15.CreatePersonRequest request); + $async.Future<$16.UpdatePersonResponse> updatePerson($grpc.ServiceCall call, $16.UpdatePersonRequest request); + $async.Future<$17.GetPersonResponse> getPerson($grpc.ServiceCall call, $17.GetPersonRequest request); + $async.Future<$18.DeletePersonResponse> deletePerson($grpc.ServiceCall call, $18.DeletePersonRequest request); + $async.Future<$19.ListPersonsResponse> listPersons($grpc.ServiceCall call, $19.ListPersonsRequest request); + $async.Future<$20.CreatePaymentResponse> createPayment($grpc.ServiceCall call, $20.CreatePaymentRequest request); + $async.Future<$21.GetPaymentResponse> getPayment($grpc.ServiceCall call, $21.GetPaymentRequest request); + $async.Future<$22.DeletePaymentResponse> deletePayment($grpc.ServiceCall call, $22.DeletePaymentRequest request); + $async.Future<$23.ListPaymentsResponse> listPayments($grpc.ServiceCall call, $23.ListPaymentsRequest request); + $async.Future<$24.UpdatePaymentResponse> updatePayment($grpc.ServiceCall call, $24.UpdatePaymentRequest request); + $async.Future<$25.ListReturnsLogResponse> listReturnsLog($grpc.ServiceCall call, $25.ListReturnsLogRequest request); + $async.Future<$26.UploadDocumentResponse> uploadDocument($grpc.ServiceCall call, $26.UploadDocumentRequest request); + $async.Future<$27.DeleteDocumentResponse> deleteDocument($grpc.ServiceCall call, $27.DeleteDocumentRequest request); + $async.Future<$28.ResendVerificationResponse> resendVerification($grpc.ServiceCall call, $28.ResendVerificationRequest request); + $async.Future<$29.VerifyEmailResponse> verifyEmail($grpc.ServiceCall call, $29.VerifyEmailRequest request); } diff --git a/frontend/app/lib/pb/session.pb.dart b/frontend/app/lib/pb/session.pb.dart index bf78977..0994d75 100644 --- a/frontend/app/lib/pb/session.pb.dart +++ b/frontend/app/lib/pb/session.pb.dart @@ -14,7 +14,7 @@ import 'dart:core' as $core; import 'package:fixnum/fixnum.dart' as $fixnum; import 'package:protobuf/protobuf.dart' as $pb; -import 'google/protobuf/timestamp.pb.dart' as $28; +import 'google/protobuf/timestamp.pb.dart' as $30; class Session extends $pb.GeneratedMessage { factory Session({ @@ -23,9 +23,9 @@ class Session extends $pb.GeneratedMessage { $core.String? userAgent, $core.String? clientIp, $core.bool? isBlocked, - $28.Timestamp? expiresAt, + $30.Timestamp? expiresAt, $core.String? refreshToken, - $28.Timestamp? createdAt, + $30.Timestamp? createdAt, }) { final $result = create(); if (id != null) { @@ -64,9 +64,9 @@ class Session extends $pb.GeneratedMessage { ..aOS(3, _omitFieldNames ? '' : 'userAgent') ..aOS(4, _omitFieldNames ? '' : 'clientIp') ..aOB(5, _omitFieldNames ? '' : 'isBlocked') - ..aOM<$28.Timestamp>(6, _omitFieldNames ? '' : 'expiresAt', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(6, _omitFieldNames ? '' : 'expiresAt', subBuilder: $30.Timestamp.create) ..aOS(7, _omitFieldNames ? '' : 'refreshToken') - ..aOM<$28.Timestamp>(8, _omitFieldNames ? '' : 'createdAt', subBuilder: $28.Timestamp.create) + ..aOM<$30.Timestamp>(8, _omitFieldNames ? '' : 'createdAt', subBuilder: $30.Timestamp.create) ..hasRequiredFields = false ; @@ -137,15 +137,15 @@ class Session extends $pb.GeneratedMessage { void clearIsBlocked() => clearField(5); @$pb.TagNumber(6) - $28.Timestamp get expiresAt => $_getN(5); + $30.Timestamp get expiresAt => $_getN(5); @$pb.TagNumber(6) - set expiresAt($28.Timestamp v) { setField(6, v); } + set expiresAt($30.Timestamp v) { setField(6, v); } @$pb.TagNumber(6) $core.bool hasExpiresAt() => $_has(5); @$pb.TagNumber(6) void clearExpiresAt() => clearField(6); @$pb.TagNumber(6) - $28.Timestamp ensureExpiresAt() => $_ensure(5); + $30.Timestamp ensureExpiresAt() => $_ensure(5); @$pb.TagNumber(7) $core.String get refreshToken => $_getSZ(6); @@ -157,15 +157,15 @@ class Session extends $pb.GeneratedMessage { void clearRefreshToken() => clearField(7); @$pb.TagNumber(8) - $28.Timestamp get createdAt => $_getN(7); + $30.Timestamp get createdAt => $_getN(7); @$pb.TagNumber(8) - set createdAt($28.Timestamp v) { setField(8, v); } + set createdAt($30.Timestamp v) { setField(8, v); } @$pb.TagNumber(8) $core.bool hasCreatedAt() => $_has(7); @$pb.TagNumber(8) void clearCreatedAt() => clearField(8); @$pb.TagNumber(8) - $28.Timestamp ensureCreatedAt() => $_ensure(7); + $30.Timestamp ensureCreatedAt() => $_ensure(7); } diff --git a/frontend/app/lib/util/validation.dart b/frontend/app/lib/util/validation.dart index 10f779c..33bd309 100644 --- a/frontend/app/lib/util/validation.dart +++ b/frontend/app/lib/util/validation.dart @@ -1,8 +1,12 @@ final emailRegExp = RegExp(r"^[a-zA-Z0-9.]+@[a-zA-Z0-9]+\.[a-zA-Z]+"); -final nameRegExp = - RegExp(r"^\s*([A-Za-z]{1,}([\.,] |[-']| ))+[A-Za-z]+\.?\s*$"); -final phoneRegExp = RegExp(r"^\+?0[0-9]{10}$"); -final passwordRegExp = RegExp(r'^[0-9a-zA-Z\-\_\.\,\*\+\=?!]{12,64}$'); +final nameRegExp = RegExp(r"^[a-zA-ZäöüÄÖÜß]+(?:[-\s][a-zA-ZäöüÄÖÜß]+)?$"); +final phoneRegExp = RegExp(r"^(?:\+49|0)[1-9][0-9\s\-\/]*$"); +final streetRegExp = RegExp(r"^[a-zA-ZäöüÄÖÜß\s\-\d]+$"); +final houseNumberRegExp = RegExp(r"^[0-9]+$"); +final zipRegExp = RegExp(r"^\d{5}$"); +final cityRegExp = RegExp(r"^[a-zA-ZäöüÄÖÜß\s\-\.,]+$"); +final passwordRegExp = RegExp( + r'^(?=.*[a-zäöü])(?=.*[A-ZÄÖÜ])(?=.*\d)(?=.*[@$!%*?&])[A-Za-zäöüÄÖÜ\d@$!%*?&]{8,}$'); extension valString on String { bool get isValidEmail { @@ -13,6 +17,22 @@ extension valString on String { return nameRegExp.hasMatch(this); } + bool get isValidStreetAddress { + return streetRegExp.hasMatch(this); + } + + bool get isValidHouseNumber { + return houseNumberRegExp.hasMatch(this); + } + + bool get isValidZip { + return zipRegExp.hasMatch(this); + } + + bool get isValidCity { + return cityRegExp.hasMatch(this); + } + bool get isValidPassword { return passwordRegExp.hasMatch(this); } diff --git a/frontend/app/lib/widgets/custom_scaffold.dart b/frontend/app/lib/widgets/custom_scaffold.dart new file mode 100644 index 0000000..b4bd3d6 --- /dev/null +++ b/frontend/app/lib/widgets/custom_scaffold.dart @@ -0,0 +1,33 @@ +import 'package:app/util/colors.dart'; +import 'package:flutter/material.dart'; + +class CustomScaffold extends StatelessWidget { + const CustomScaffold({ + super.key, + required this.children, + this.backButton, + }); + + final List children; + final Widget? backButton; + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + resizeToAvoidBottomInset: false, + appBar: AppBar( + automaticallyImplyLeading: false, + leading: backButton, + iconTheme: IconThemeData(color: CustomColors.primary), + ), + body: Padding( + padding: const EdgeInsets.symmetric(horizontal: 45, vertical: 40), + child: Column( + children: children, + ), + ), + ), + ); + } +} diff --git a/frontend/app/pubspec.lock b/frontend/app/pubspec.lock index e313442..61d87c4 100644 --- a/frontend/app/pubspec.lock +++ b/frontend/app/pubspec.lock @@ -230,7 +230,7 @@ packages: source: hosted version: "4.0.2" intl: - dependency: "direct main" + dependency: transitive description: name: intl sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" diff --git a/frontend/app/pubspec.yaml b/frontend/app/pubspec.yaml index 7b5cda3..a246fe6 100644 --- a/frontend/app/pubspec.yaml +++ b/frontend/app/pubspec.yaml @@ -46,7 +46,6 @@ dependencies: path: ^1.8.3 fixnum: ^1.1.0 provider: ^6.0.5 - intl: ^0.18.1 flutter_secure_storage: ^9.0.0 dev_dependencies: @@ -75,6 +74,7 @@ flutter: # To add assets to your application, add an assets section, like this: assets: - assets/chat_bubbles.png + - assets/icons/icon.jpg - assets/JPEG.jpg - lib/assets/logo_300x200.png - lib/assets/hero-pattern-300x200.png