Add api.person endpoint

Fixes #65
This commit is contained in:
itsscb 2023-10-06 00:54:14 +02:00
parent 273b011923
commit 688108fc4f
6 changed files with 115 additions and 2 deletions

View File

@ -42,4 +42,8 @@ RETURNING *;
-- name: DeletePerson :exec
DELETE FROM persons
WHERE "id" = $1;
WHERE "id" = $1;
-- name: GetReturns :many
SELECT * FROM returns
WHERE "person_id" = sqlc.arg(id);

View File

@ -48,4 +48,28 @@ RETURNING *;
-- name: DeleteReturn :exec
DELETE FROM returns
WHERE "id" = sqlc.arg(id);
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;

View File

@ -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"

View File

@ -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)

View File

@ -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",

View File

@ -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
})