From 688108fc4f1155f46da860238f6c91e80bca7557 Mon Sep 17 00:00:00 2001 From: itsscb Date: Fri, 6 Oct 2023 00:54:14 +0200 Subject: [PATCH] Add api.person endpoint Fixes #65 --- bff/db/query/person.sql | 6 ++++- bff/db/query/return.sql | 26 ++++++++++++++++++++- bff/db/sqlc/person.sql.go | 41 +++++++++++++++++++++++++++++++++ bff/db/sqlc/querier.go | 2 ++ bff/db/sqlc/return.sql.go | 35 ++++++++++++++++++++++++++++ bff/db/sqlc/tx_create_person.go | 7 ++++++ 6 files changed, 115 insertions(+), 2 deletions(-) diff --git a/bff/db/query/person.sql b/bff/db/query/person.sql index 25098e5..e9c7436 100644 --- a/bff/db/query/person.sql +++ b/bff/db/query/person.sql @@ -42,4 +42,8 @@ RETURNING *; -- name: DeletePerson :exec DELETE FROM persons -WHERE "id" = $1; \ No newline at end of file +WHERE "id" = $1; + +-- name: GetReturns :many +SELECT * FROM returns +WHERE "person_id" = sqlc.arg(id); \ No newline at end of file diff --git a/bff/db/query/return.sql b/bff/db/query/return.sql index b341645..9abcc77 100644 --- a/bff/db/query/return.sql +++ b/bff/db/query/return.sql @@ -48,4 +48,28 @@ RETURNING *; -- name: DeleteReturn :exec DELETE FROM returns -WHERE "id" = sqlc.arg(id); \ No newline at end of file +WHERE "id" = sqlc.arg(id); + +-- name: CloneProviders :exec +INSERT INTO returns ( + "provider_id", + "name", + "description", + "category", + "email", + "status", + "creator", + "changer", + "person_id" +) +SELECT + "id", + "name", + "description", + "category", + "email", + 'new', + sqlc.arg(creator), + sqlc.arg(creator), + sqlc.arg(person_id) +FROM providers; \ No newline at end of file diff --git a/bff/db/sqlc/person.sql.go b/bff/db/sqlc/person.sql.go index eef7211..565e8df 100644 --- a/bff/db/sqlc/person.sql.go +++ b/bff/db/sqlc/person.sql.go @@ -109,6 +109,47 @@ func (q *Queries) GetPerson(ctx context.Context, id int64) (Person, error) { return i, err } +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 +` + +func (q *Queries) GetReturns(ctx context.Context, id int64) ([]Return, error) { + rows, err := q.db.QueryContext(ctx, getReturns, id) + if err != nil { + return nil, err + } + defer rows.Close() + items := []Return{} + for rows.Next() { + var i Return + if err := rows.Scan( + &i.ID, + &i.PersonID, + &i.ProviderID, + &i.Name, + &i.Description, + &i.Category, + &i.Email, + &i.Status, + &i.Creator, + &i.Created, + &i.Changer, + &i.Changed, + ); 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 listPersons = `-- name: ListPersons :many SELECT id, account_id, firstname, lastname, birthday, city, zip, street, country, creator, created, changer, changed FROM persons ORDER BY "lastname", "firstname" diff --git a/bff/db/sqlc/querier.go b/bff/db/sqlc/querier.go index 714b78b..346a1a3 100644 --- a/bff/db/sqlc/querier.go +++ b/bff/db/sqlc/querier.go @@ -12,6 +12,7 @@ import ( type Querier interface { BlockSession(ctx context.Context, id uuid.UUID) error + CloneProviders(ctx context.Context, arg CloneProvidersParams) error CreateAccount(ctx context.Context, arg CreateAccountParams) (Account, error) CreateDocumentMail(ctx context.Context, arg CreateDocumentMailParams) (Document, error) CreateDocumentUpload(ctx context.Context, arg CreateDocumentUploadParams) (Document, error) @@ -52,6 +53,7 @@ type Querier interface { GetPerson(ctx context.Context, id int64) (Person, error) GetProvider(ctx context.Context, id int64) (Provider, error) GetReturn(ctx context.Context, id int64) (Return, error) + GetReturns(ctx context.Context, id int64) ([]Return, error) GetReturnsLog(ctx context.Context, id int64) (ReturnsLog, error) GetSession(ctx context.Context, id uuid.UUID) (Session, error) InvalidateDocument(ctx context.Context, arg InvalidateDocumentParams) (Document, error) diff --git a/bff/db/sqlc/return.sql.go b/bff/db/sqlc/return.sql.go index e6173e5..b7caaa1 100644 --- a/bff/db/sqlc/return.sql.go +++ b/bff/db/sqlc/return.sql.go @@ -10,6 +10,41 @@ import ( "database/sql" ) +const cloneProviders = `-- name: CloneProviders :exec +INSERT INTO returns ( + "provider_id", + "name", + "description", + "category", + "email", + "status", + "creator", + "changer", + "person_id" +) +SELECT + "id", + "name", + "description", + "category", + "email", + 'new', + $1, + $1, + $2 +FROM providers +` + +type CloneProvidersParams struct { + Creator string `json:"creator"` + PersonID int64 `json:"person_id"` +} + +func (q *Queries) CloneProviders(ctx context.Context, arg CloneProvidersParams) error { + _, err := q.db.ExecContext(ctx, cloneProviders, arg.Creator, arg.PersonID) + return err +} + const createReturn = `-- name: CreateReturn :one INSERT INTO returns ( "person_id", diff --git a/bff/db/sqlc/tx_create_person.go b/bff/db/sqlc/tx_create_person.go index a5afe83..6fabfa5 100644 --- a/bff/db/sqlc/tx_create_person.go +++ b/bff/db/sqlc/tx_create_person.go @@ -29,7 +29,14 @@ func (store *SQLStore) CreatePersonTx(ctx context.Context, arg CreatePersonTxPar var err error result.Person, err = q.CreatePerson(ctx, CreatePersonParams(arg)) + if err != nil { + return err + } + err = q.CloneProviders(ctx, CloneProvidersParams{ + Creator: arg.Creator, + PersonID: result.Person.ID, + }) return err })