Merge pull request #10 from itsscb:itsscb/issue3

Itsscb/issue3
This commit is contained in:
itsscb 2023-09-19 21:06:30 +02:00 committed by GitHub
commit 313d539248
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 349 additions and 56 deletions

View File

@ -1,8 +1,8 @@
DROP TABLE IF EXISTS "returnsLog";
DROP TABLE IF EXISTS "returns";
DROP TABLE IF EXISTS "payments";
DROP TABLE IF EXISTS "mails";
DROP TABLE IF EXISTS "documents";
DROP TABLE IF EXISTS "mails";
DROP TABLE IF EXISTS "persons";
DROP TABLE IF EXISTS "providers";
DROP TABLE IF EXISTS "customers";

View File

@ -6,7 +6,11 @@ CREATE TABLE "mails" (
"timestamp" timestamptz NOT NULL DEFAULT (now()),
"subject" varchar NOT NULL,
"body" text NOT NULL,
"attachments" bigserial
"creator" varchar NOT NULL,
"created" timestamptz NOT NULL DEFAULT (now()),
"changer" varchar NOT NULL,
"changed" timestamptz NOT NULL DEFAULT (now())
);
CREATE TABLE "customers" (
@ -35,7 +39,7 @@ CREATE TABLE "customers" (
CREATE TABLE "persons" (
"ID" bigserial UNIQUE PRIMARY KEY NOT NULL,
"customerID" bigserial NOT NULL,
"customerID" bigint NOT NULL,
"firstname" varchar NOT NULL,
"lastname" varchar NOT NULL,
"birthday" timestamptz NOT NULL,
@ -51,7 +55,7 @@ CREATE TABLE "persons" (
CREATE TABLE "documents" (
"ID" bigserial UNIQUE PRIMARY KEY NOT NULL,
"personID" bigserial NOT NULL,
"personID" bigint,
"name" varchar NOT NULL,
"type" varchar NOT NULL,
"path" varchar NOT NULL,
@ -59,6 +63,7 @@ CREATE TABLE "documents" (
"valid" boolean NOT NULL DEFAULT false,
"validDate" timestamptz,
"validatedBy" varchar,
"mailID" bigint,
"creator" varchar NOT NULL,
"created" timestamptz NOT NULL DEFAULT (now()),
"changer" varchar NOT NULL,
@ -67,7 +72,7 @@ CREATE TABLE "documents" (
CREATE TABLE "payments" (
"ID" bigserial UNIQUE PRIMARY KEY NOT NULL,
"customerID" bigserial NOT NULL,
"customerID" bigint NOT NULL,
"paymentCategory" varchar NOT NULL,
"bankname" varchar,
"IBAN" varchar,
@ -96,8 +101,8 @@ CREATE TABLE "providers" (
CREATE TABLE "returns" (
"ID" bigserial UNIQUE PRIMARY KEY NOT NULL,
"personID" bigserial NOT NULL,
"providerID" bigserial NOT NULL,
"personID" bigint NOT NULL,
"providerID" bigint NOT NULL,
"name" varchar NOT NULL,
"description" text NOT NULL,
"category" varchar NOT NULL,
@ -111,8 +116,8 @@ CREATE TABLE "returns" (
CREATE TABLE "returnsLog" (
"ID" bigserial UNIQUE PRIMARY KEY NOT NULL,
"returnsID" bigserial,
"mailID" bigserial,
"returnsID" bigint,
"mailID" bigint,
"status" varchar,
"creator" varchar NOT NULL,
"created" timestamptz NOT NULL DEFAULT (now()),
@ -120,12 +125,12 @@ CREATE TABLE "returnsLog" (
"changed" timestamptz NOT NULL DEFAULT (now())
);
ALTER TABLE "mails" ADD FOREIGN KEY ("attachments") REFERENCES "documents" ("ID");
ALTER TABLE "persons" ADD FOREIGN KEY ("customerID") REFERENCES "customers" ("ID");
ALTER TABLE "documents" ADD FOREIGN KEY ("personID") REFERENCES "persons" ("ID");
ALTER TABLE "documents" ADD FOREIGN KEY ("mailID") REFERENCES "mails" ("ID");
ALTER TABLE "payments" ADD FOREIGN KEY ("customerID") REFERENCES "customers" ("ID");
ALTER TABLE "returns" ADD FOREIGN KEY ("personID") REFERENCES "persons" ("ID");

View File

@ -2,7 +2,7 @@
SELECT * FROM documents
WHERE "ID" = $1 LIMIT 1;
-- name: CreateDocument :one
-- name: CreateDocumentUpload :one
INSERT INTO documents (
"personID",
name,
@ -15,6 +15,19 @@ INSERT INTO documents (
$1, $2, $3, $4, $5, $6, $7
) RETURNING *;
-- name: CreateDocumentMail :one
INSERT INTO documents (
"mailID",
name,
type,
path,
url,
creator,
changer
) VALUES (
$1, $2, $3, $4, $5, $6, $7
) RETURNING *;
-- name: ListDocuments :many
SELECT * FROM documents
ORDER BY valid, type, name

43
db/query/mail.sql Normal file
View File

@ -0,0 +1,43 @@
-- name: GetMail :one
SELECT * FROM mails
WHERE "ID" = $1 LIMIT 1;
-- name: CreateMail :one
INSERT INTO mails (
"from",
"to",
cc,
"subject",
body,
"timestamp",
creator,
changer
)
VALUES (
$1, $2, $3, $4, $5, $6, $7, $8
)
RETURNING *;
-- name: ListMails :many
SELECT * FROM mails
ORDER BY "timestamp", "from"
LIMIT $1
OFFSET $2;
-- -- name: UpdateMail :one
-- UPDATE mails
-- SET
-- "from" = COALESCE(sqlc.narg(from), "from"),
-- "to" = COALESCE(sqlc.narg(to), "to"),
-- cc = COALESCE(sqlc.narg(cc), cc),
-- "subject" = COALESCE(sqlc.narg(subject), "subject"),
-- body = COALESCE(sqlc.narg(body), body),
-- "timestamp" = COALESCE(sqlc.narg(timestamp), "timestamp"),
-- changer = $2,
-- changed = now()
-- WHERE "ID" = $1
-- RETURNING *;
-- name: DeleteMail :exec
DELETE FROM mails
WHERE "ID" = $1;

View File

@ -10,7 +10,61 @@ import (
"database/sql"
)
const createDocument = `-- name: CreateDocument :one
const createDocumentMail = `-- name: CreateDocumentMail :one
INSERT INTO documents (
"mailID",
name,
type,
path,
url,
creator,
changer
) VALUES (
$1, $2, $3, $4, $5, $6, $7
) RETURNING "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", "mailID", creator, created, changer, changed
`
type CreateDocumentMailParams struct {
MailID sql.NullInt64 `json:"mailID"`
Name string `json:"name"`
Type string `json:"type"`
Path string `json:"path"`
Url string `json:"url"`
Creator string `json:"creator"`
Changer string `json:"changer"`
}
func (q *Queries) CreateDocumentMail(ctx context.Context, arg CreateDocumentMailParams) (Document, error) {
row := q.db.QueryRowContext(ctx, createDocumentMail,
arg.MailID,
arg.Name,
arg.Type,
arg.Path,
arg.Url,
arg.Creator,
arg.Changer,
)
var i Document
err := row.Scan(
&i.ID,
&i.PersonID,
&i.Name,
&i.Type,
&i.Path,
&i.Url,
&i.Valid,
&i.ValidDate,
&i.ValidatedBy,
&i.MailID,
&i.Creator,
&i.Created,
&i.Changer,
&i.Changed,
)
return i, err
}
const createDocumentUpload = `-- name: CreateDocumentUpload :one
INSERT INTO documents (
"personID",
name,
@ -21,21 +75,21 @@ INSERT INTO documents (
changer
) VALUES (
$1, $2, $3, $4, $5, $6, $7
) RETURNING "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", creator, created, changer, changed
) RETURNING "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", "mailID", creator, created, changer, changed
`
type CreateDocumentParams struct {
PersonID int64 `json:"personID"`
Name string `json:"name"`
Type string `json:"type"`
Path string `json:"path"`
Url string `json:"url"`
Creator string `json:"creator"`
Changer string `json:"changer"`
type CreateDocumentUploadParams struct {
PersonID sql.NullInt64 `json:"personID"`
Name string `json:"name"`
Type string `json:"type"`
Path string `json:"path"`
Url string `json:"url"`
Creator string `json:"creator"`
Changer string `json:"changer"`
}
func (q *Queries) CreateDocument(ctx context.Context, arg CreateDocumentParams) (Document, error) {
row := q.db.QueryRowContext(ctx, createDocument,
func (q *Queries) CreateDocumentUpload(ctx context.Context, arg CreateDocumentUploadParams) (Document, error) {
row := q.db.QueryRowContext(ctx, createDocumentUpload,
arg.PersonID,
arg.Name,
arg.Type,
@ -55,6 +109,7 @@ func (q *Queries) CreateDocument(ctx context.Context, arg CreateDocumentParams)
&i.Valid,
&i.ValidDate,
&i.ValidatedBy,
&i.MailID,
&i.Creator,
&i.Created,
&i.Changer,
@ -74,7 +129,7 @@ func (q *Queries) DeleteDocument(ctx context.Context, id int64) error {
}
const getDocument = `-- name: GetDocument :one
SELECT "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", creator, created, changer, changed FROM documents
SELECT "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", "mailID", creator, created, changer, changed FROM documents
WHERE "ID" = $1 LIMIT 1
`
@ -91,6 +146,7 @@ func (q *Queries) GetDocument(ctx context.Context, id int64) (Document, error) {
&i.Valid,
&i.ValidDate,
&i.ValidatedBy,
&i.MailID,
&i.Creator,
&i.Created,
&i.Changer,
@ -108,7 +164,7 @@ SET
changer = $2,
changed = now()
WHERE "ID" = $1
RETURNING "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", creator, created, changer, changed
RETURNING "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", "mailID", creator, created, changer, changed
`
type InvalidateDocumentParams struct {
@ -129,6 +185,7 @@ func (q *Queries) InvalidateDocument(ctx context.Context, arg InvalidateDocument
&i.Valid,
&i.ValidDate,
&i.ValidatedBy,
&i.MailID,
&i.Creator,
&i.Created,
&i.Changer,
@ -138,7 +195,7 @@ func (q *Queries) InvalidateDocument(ctx context.Context, arg InvalidateDocument
}
const listDocuments = `-- name: ListDocuments :many
SELECT "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", creator, created, changer, changed FROM documents
SELECT "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", "mailID", creator, created, changer, changed FROM documents
ORDER BY valid, type, name
LIMIT $1
OFFSET $2
@ -168,6 +225,7 @@ func (q *Queries) ListDocuments(ctx context.Context, arg ListDocumentsParams) ([
&i.Valid,
&i.ValidDate,
&i.ValidatedBy,
&i.MailID,
&i.Creator,
&i.Created,
&i.Changer,
@ -197,7 +255,7 @@ SET
changer = $2,
changed = now()
WHERE "ID" = $1
RETURNING "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", creator, created, changer, changed
RETURNING "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", "mailID", creator, created, changer, changed
`
type UpdateDocumentParams struct {
@ -231,6 +289,7 @@ func (q *Queries) UpdateDocument(ctx context.Context, arg UpdateDocumentParams)
&i.Valid,
&i.ValidDate,
&i.ValidatedBy,
&i.MailID,
&i.Creator,
&i.Created,
&i.Changer,
@ -248,7 +307,7 @@ SET
changer = $2,
changed = now()
WHERE "ID" = $1
RETURNING "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", creator, created, changer, changed
RETURNING "ID", "personID", name, type, path, url, valid, "validDate", "validatedBy", "mailID", creator, created, changer, changed
`
type ValidateDocumentParams struct {
@ -269,6 +328,7 @@ func (q *Queries) ValidateDocument(ctx context.Context, arg ValidateDocumentPara
&i.Valid,
&i.ValidDate,
&i.ValidatedBy,
&i.MailID,
&i.Creator,
&i.Created,
&i.Changer,

View File

@ -10,21 +10,24 @@ import (
"github.com/stretchr/testify/require"
)
func createRandomDocument(t *testing.T) Document {
func createRandomDocumentUpload(t *testing.T) Document {
person := createRandomPerson(t)
require.NotEmpty(t, person)
arg := CreateDocumentParams{
PersonID: person.ID,
Name: util.RandomUser(),
Type: util.RandomUser(),
Path: util.RandomString(50),
Url: util.RandomString(60),
Creator: util.RandomUser(),
Changer: util.RandomUser(),
arg := CreateDocumentUploadParams{
PersonID: sql.NullInt64{
Valid: true,
Int64: person.ID,
},
Name: util.RandomUser(),
Type: util.RandomUser(),
Path: util.RandomString(50),
Url: util.RandomString(60),
Creator: util.RandomUser(),
Changer: util.RandomUser(),
}
document, err := testQueries.CreateDocument(context.Background(), arg)
document, err := testQueries.CreateDocumentUpload(context.Background(), arg)
require.NoError(t, err)
require.NotEmpty(t, document)
@ -45,12 +48,12 @@ func createRandomDocument(t *testing.T) Document {
return document
}
func TestCreateDocument(t *testing.T) {
createRandomDocument(t)
func TestCreateDocumentUpload(t *testing.T) {
createRandomDocumentUpload(t)
}
func TestGetDocument(t *testing.T) {
newdocument := createRandomDocument(t)
newdocument := createRandomDocumentUpload(t)
require.NotEmpty(t, newdocument)
document, err := testQueries.GetDocument(context.Background(), newdocument.ID)
@ -72,7 +75,7 @@ func TestGetDocument(t *testing.T) {
}
func TestDeleteDocument(t *testing.T) {
document1 := createRandomDocument(t)
document1 := createRandomDocumentUpload(t)
err := testQueries.DeleteDocument(context.Background(), document1.ID)
require.NoError(t, err)
@ -83,7 +86,7 @@ func TestDeleteDocument(t *testing.T) {
}
func TestUpdateDocument(t *testing.T) {
document1 := createRandomDocument(t)
document1 := createRandomDocumentUpload(t)
require.NotEmpty(t, document1)
arg := UpdateDocumentParams{
@ -105,7 +108,7 @@ func TestUpdateDocument(t *testing.T) {
func TestListDocuments(t *testing.T) {
for i := 0; i < 10; i++ {
createRandomDocument(t)
createRandomDocumentUpload(t)
}
arg := ListDocumentsParams{
@ -123,7 +126,7 @@ func TestListDocuments(t *testing.T) {
}
func TestValidateDocument(t *testing.T) {
document1 := createRandomDocument(t)
document1 := createRandomDocumentUpload(t)
validator := util.RandomUser()
@ -148,7 +151,7 @@ func TestValidateDocument(t *testing.T) {
}
func TestInvalidateDocument(t *testing.T) {
document1 := createRandomDocument(t)
document1 := createRandomDocumentUpload(t)
validator := util.RandomUser()

165
db/sqlc/mail.sql.go Normal file
View File

@ -0,0 +1,165 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.21.0
// source: mail.sql
package db
import (
"context"
"database/sql"
"time"
)
const createMail = `-- name: CreateMail :one
INSERT INTO mails (
"from",
"to",
cc,
"subject",
body,
"timestamp",
creator,
changer
)
VALUES (
$1, $2, $3, $4, $5, $6, $7, $8
)
RETURNING "ID", "from", "to", cc, timestamp, subject, body, creator, created, changer, changed
`
type CreateMailParams struct {
From string `json:"from"`
To string `json:"to"`
Cc sql.NullString `json:"cc"`
Subject string `json:"subject"`
Body string `json:"body"`
Timestamp time.Time `json:"timestamp"`
Creator string `json:"creator"`
Changer string `json:"changer"`
}
func (q *Queries) CreateMail(ctx context.Context, arg CreateMailParams) (Mail, error) {
row := q.db.QueryRowContext(ctx, createMail,
arg.From,
arg.To,
arg.Cc,
arg.Subject,
arg.Body,
arg.Timestamp,
arg.Creator,
arg.Changer,
)
var i Mail
err := row.Scan(
&i.ID,
&i.From,
&i.To,
&i.Cc,
&i.Timestamp,
&i.Subject,
&i.Body,
&i.Creator,
&i.Created,
&i.Changer,
&i.Changed,
)
return i, err
}
const deleteMail = `-- name: DeleteMail :exec
DELETE FROM mails
WHERE "ID" = $1
`
// -- name: UpdateMail :one
// UPDATE mails
// SET
//
// "from" = COALESCE(sqlc.narg(from), "from"),
// "to" = COALESCE(sqlc.narg(to), "to"),
// cc = COALESCE(sqlc.narg(cc), cc),
// "subject" = COALESCE(sqlc.narg(subject), "subject"),
// body = COALESCE(sqlc.narg(body), body),
// "timestamp" = COALESCE(sqlc.narg(timestamp), "timestamp"),
// changer = $2,
// changed = now()
//
// WHERE "ID" = $1
// RETURNING *;
func (q *Queries) DeleteMail(ctx context.Context, id int64) error {
_, err := q.db.ExecContext(ctx, deleteMail, id)
return err
}
const getMail = `-- name: GetMail :one
SELECT "ID", "from", "to", cc, timestamp, subject, body, creator, created, changer, changed FROM mails
WHERE "ID" = $1 LIMIT 1
`
func (q *Queries) GetMail(ctx context.Context, id int64) (Mail, error) {
row := q.db.QueryRowContext(ctx, getMail, id)
var i Mail
err := row.Scan(
&i.ID,
&i.From,
&i.To,
&i.Cc,
&i.Timestamp,
&i.Subject,
&i.Body,
&i.Creator,
&i.Created,
&i.Changer,
&i.Changed,
)
return i, err
}
const listMails = `-- name: ListMails :many
SELECT "ID", "from", "to", cc, timestamp, subject, body, creator, created, changer, changed FROM mails
ORDER BY "timestamp", "from"
LIMIT $1
OFFSET $2
`
type ListMailsParams struct {
Limit int32 `json:"limit"`
Offset int32 `json:"offset"`
}
func (q *Queries) ListMails(ctx context.Context, arg ListMailsParams) ([]Mail, error) {
rows, err := q.db.QueryContext(ctx, listMails, arg.Limit, arg.Offset)
if err != nil {
return nil, err
}
defer rows.Close()
items := []Mail{}
for rows.Next() {
var i Mail
if err := rows.Scan(
&i.ID,
&i.From,
&i.To,
&i.Cc,
&i.Timestamp,
&i.Subject,
&i.Body,
&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
}

View File

@ -35,7 +35,7 @@ type Customer struct {
type Document struct {
ID int64 `json:"ID"`
PersonID int64 `json:"personID"`
PersonID sql.NullInt64 `json:"personID"`
Name string `json:"name"`
Type string `json:"type"`
Path string `json:"path"`
@ -43,6 +43,7 @@ type Document struct {
Valid bool `json:"valid"`
ValidDate sql.NullTime `json:"validDate"`
ValidatedBy sql.NullString `json:"validatedBy"`
MailID sql.NullInt64 `json:"mailID"`
Creator string `json:"creator"`
Created time.Time `json:"created"`
Changer string `json:"changer"`
@ -50,14 +51,17 @@ type Document struct {
}
type Mail struct {
ID int64 `json:"ID"`
From string `json:"from"`
To string `json:"to"`
Cc sql.NullString `json:"cc"`
Timestamp time.Time `json:"timestamp"`
Subject string `json:"subject"`
Body string `json:"body"`
Attachments sql.NullInt32 `json:"attachments"`
ID int64 `json:"ID"`
From string `json:"from"`
To string `json:"to"`
Cc sql.NullString `json:"cc"`
Timestamp time.Time `json:"timestamp"`
Subject string `json:"subject"`
Body string `json:"body"`
Creator string `json:"creator"`
Created time.Time `json:"created"`
Changer string `json:"changer"`
Changed time.Time `json:"changed"`
}
type Payment struct {