diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..01b247e --- /dev/null +++ b/compose.yml @@ -0,0 +1,15 @@ +version: "3.9" +services: + postgres: + image: postgres:17.0 + environment: + POSTGRES_DB: "ruprod" + POSTGRES_USER: "ruprod_user" + POSTGRES_PASSWORD: "ruprod_password" + ports: + - "5433:5432" + volumes: + - ruprod-data:/etc/data + +volumes: + ruprod-data: diff --git a/go.mod b/go.mod index 244c9b2..06894a4 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,11 @@ module t0xa/pdf_to_txt go 1.22.5 -require github.com/rudolfoborges/pdf2go v0.1.1 // indirect +require ( + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect + github.com/jackc/pgx/v5 v5.7.1 // indirect + github.com/rudolfoborges/pdf2go v0.1.1 // indirect + golang.org/x/crypto v0.27.0 // indirect + golang.org/x/text v0.18.0 // indirect +) diff --git a/go.sum b/go.sum index b020dd3..a9dbf87 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,19 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs= +github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rudolfoborges/pdf2go v0.1.1 h1:cAEi53YeticMNnuts30UD11W6AAcB+Xe3odLVrI9XIE= github.com/rudolfoborges/pdf2go v0.1.1/go.mod h1:l+ur9AjixJEV8ZEapV1ggOLAkSiBj+jSSXcWKRJp3TY= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index 7c1e89d..d2bc17a 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,13 @@ package main import ( - "fmt" - "regexp" - "strings" + "context" + // "fmt" + // "regexp" + // "strings" + // "t0xa/pdf_to_txt/internal/parser" - "t0xa/pdf_to_txt/internal/parser" + "github.com/jackc/pgx/v5" ) type CheckEntry struct { @@ -14,28 +16,36 @@ type CheckEntry struct { } func main() { - // TODO: Redo format of file passing to function - text := parser.ParseX5Check("./internal/parser/testfiles/test3.pdf") + // TODO: Redo format of file passing to function + // text := parser.ParseX5Check("./internal/parser/testfiles/test3.pdf") + // + // split := strings.Split(text, "\n") + // stringsToFilter := "https://mail|Gmail - Электронный чек|Сумма|НДС" + // re := regexp.MustCompile(stringsToFilter) + // filtered := []string{} + // for _, element := range split { + // if re.MatchString(element) { + // continue + // } + // if len(element) < 1 { + // continue + // } + // filtered = append(filtered, element) + // + // } + // for index, element := range filtered { + // if element == "Цена*Кол" { + // fmt.Println("Товар: ", filtered[index-1]) + // fmt.Println("Цена: ", filtered[index+1]) + // fmt.Println("------") + // } + // } - split := strings.Split(text, "\n") - stringsToFilter := "https://mail|Gmail - Электронный чек|Сумма|НДС" - re := regexp.MustCompile(stringsToFilter) - filtered := []string{} - for _, element := range split { - if re.MatchString(element) { - continue - } - if len(element) < 1 { - continue - } - filtered = append(filtered, element) + ctx := context.Background() + conn, err := pgx.Connect(ctx, "postgres://ruprod_user:ruprod_password@localhost:5433") + if err != nil { + panic(err) } - for index, element := range filtered { - if element == "Цена*Кол" { - fmt.Println("Товар: ", filtered[index-1]) - fmt.Println("Цена: ", filtered[index+1]) - fmt.Println("------") - } - } + defer conn.Close(ctx) } diff --git a/query.sql b/query.sql new file mode 100644 index 0000000..1755e0f --- /dev/null +++ b/query.sql @@ -0,0 +1,7 @@ +-- name: CreateProduct :one +INSERT INTO product ( + name, price, purchase_date +) VALUES ( + $1, $2, $3 +) +RETURNING *; diff --git a/rupdrod/db.go b/rupdrod/db.go new file mode 100644 index 0000000..afc0dfe --- /dev/null +++ b/rupdrod/db.go @@ -0,0 +1,32 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package ruprod + +import ( + "context" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgconn" +) + +type DBTX interface { + Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error) + Query(context.Context, string, ...interface{}) (pgx.Rows, error) + QueryRow(context.Context, string, ...interface{}) pgx.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx pgx.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/rupdrod/models.go b/rupdrod/models.go new file mode 100644 index 0000000..13543f6 --- /dev/null +++ b/rupdrod/models.go @@ -0,0 +1,16 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package ruprod + +import ( + "github.com/jackc/pgx/v5/pgtype" +) + +type Product struct { + ID int64 + Name string + Price pgtype.Float8 + PurchaseDate pgtype.Timestamp +} diff --git a/rupdrod/query.sql.go b/rupdrod/query.sql.go new file mode 100644 index 0000000..fe3b440 --- /dev/null +++ b/rupdrod/query.sql.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: query.sql + +package ruprod + +import ( + "context" + + "github.com/jackc/pgx/v5/pgtype" +) + +const createProduct = `-- name: CreateProduct :one +INSERT INTO product ( + name, price, purchase_date +) VALUES ( + $1, $2, $3 +) +RETURNING id, name, price, purchase_date +` + +type CreateProductParams struct { + Name string + Price pgtype.Float8 + PurchaseDate pgtype.Timestamp +} + +func (q *Queries) CreateProduct(ctx context.Context, arg CreateProductParams) (Product, error) { + row := q.db.QueryRow(ctx, createProduct, arg.Name, arg.Price, arg.PurchaseDate) + var i Product + err := row.Scan( + &i.ID, + &i.Name, + &i.Price, + &i.PurchaseDate, + ) + return i, err +} diff --git a/schema.sql b/schema.sql new file mode 100644 index 0000000..7b6da1c --- /dev/null +++ b/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE product ( + id BIGSERIAL PRIMARY KEY, + name text NOT NULL, + price float, + purchase_date timestamp +); diff --git a/sqlc.yaml b/sqlc.yaml new file mode 100644 index 0000000..673f0cd --- /dev/null +++ b/sqlc.yaml @@ -0,0 +1,10 @@ +version: "2" +sql: + - engine: "postgresql" + queries: "query.sql" + schema: "schema.sql" + gen: + go: + package: "ruprod" + out: "rupdrod" + sql_package: "pgx/v5"