feat: enhance consumer and partner middleware with Redis caching

- Added Redis caching to ConsumerMiddleware and PartnerMiddleware to improve performance by reducing database calls for consumer and partner data.
- Implemented logic to check for cached data before querying the database.
- Updated the InvoicesService to include settlement_type in the selected fields.
- Removed unnecessary console logs from CustomersService.
- Modified SalesInvoicesService to optimize query logic and improve performance.
- Updated StatisticsService to streamline data retrieval and processing.
- Created a new migration to add last_attempt_no and last_tsp_status columns to sales_invoices for better tracking of TSP attempts.
This commit is contained in:
2026-06-09 13:31:58 +03:30
parent f61100bf25
commit 47a27fb54f
19 changed files with 482 additions and 134 deletions
+37 -34
View File
@@ -1,63 +1,66 @@
model SalesInvoice {
id String @id @default(uuid())
code String @unique @db.VarChar(100)
total_amount Decimal @db.Decimal(15, 2)
id String @id @default(uuid())
code String @unique @db.VarChar(100)
total_amount Decimal @db.Decimal(15, 2)
invoice_number Int
invoice_date DateTime @default(now()) @db.Timestamp(0)
invoice_date DateTime @default(now()) @db.Timestamp(0)
type TspProviderRequestType
tax_id String? @unique @db.VarChar(32)
notes String? @db.Text
tax_id String? @unique @db.VarChar(32)
notes String? @db.Text
unknown_customer Json?
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt @db.Timestamp(0)
main_id String? @db.VarChar(50)
ref_id String? @unique @db.VarChar(50)
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @updatedAt @db.Timestamp(0)
main_id String? @db.VarChar(50)
ref_id String? @unique @db.VarChar(50)
customer_id String?
consumer_account_id String
pos_id String
settlement_type InvoiceSettlementType
discount_amount Decimal? @db.Decimal(15, 2)
tax_amount Decimal? @db.Decimal(15, 2)
discount_amount Decimal? @db.Decimal(15, 2)
tax_amount Decimal? @db.Decimal(15, 2)
last_tsp_status TspProviderResponseStatus?
last_attempt_no Int?
tsp_attempts SaleInvoiceTspAttempts[]
items SalesInvoiceItem[]
payments SalesInvoicePayment[]
consumer_account ConsumerAccount @relation(fields: [consumer_account_id], references: [id])
customer Customer? @relation(fields: [customer_id], references: [id])
pos Pos @relation(fields: [pos_id], references: [id])
reference_invoice SalesInvoice? @relation("SalesInvoiceReference", fields: [ref_id], references: [id])
referenced_by SalesInvoice? @relation("SalesInvoiceReference")
consumer_account ConsumerAccount @relation(fields: [consumer_account_id], references: [id])
customer Customer? @relation(fields: [customer_id], references: [id])
pos Pos @relation(fields: [pos_id], references: [id])
reference_invoice SalesInvoice? @relation("SalesInvoiceReference", fields: [ref_id], references: [id])
referenced_by SalesInvoice? @relation("SalesInvoiceReference")
@@unique([invoice_number, pos_id])
@@index([pos_id, invoice_date])
@@index([ref_id])
@@index([tax_id])
@@index([consumer_account_id], map: "sales_invoices_consumer_account_id_fkey")
@@index([customer_id], map: "sales_invoices_customer_id_fkey")
@@index([pos_id], map: "sales_invoices_pos_id_fkey")
@@map("sales_invoices")
}
model SalesInvoiceItem {
id String @id @default(ulid())
quantity Decimal @db.Decimal(10, 0)
measure_unit_text String @db.VarChar(50)
measure_unit_code String @db.VarChar(50)
sku_code String @db.VarChar(50)
sku_vat Decimal @default(0.00) @db.Decimal(15, 2)
unit_price Decimal @default(0.00) @db.Decimal(15, 2)
total_amount Decimal @default(0.00) @db.Decimal(15, 2)
created_at DateTime @default(now()) @db.Timestamp(0)
discount Decimal @default(0.00) @db.Decimal(15, 2)
notes String? @db.Text
id String @id @default(ulid())
quantity Decimal @db.Decimal(10, 0)
measure_unit_text String @db.VarChar(50)
measure_unit_code String @db.VarChar(50)
sku_code String @db.VarChar(50)
sku_vat Decimal @default(0.00) @db.Decimal(15, 2)
unit_price Decimal @default(0.00) @db.Decimal(15, 2)
total_amount Decimal @default(0.00) @db.Decimal(15, 2)
created_at DateTime @default(now()) @db.Timestamp(0)
discount Decimal @default(0.00) @db.Decimal(15, 2)
notes String? @db.Text
payload Json?
good_snapshot Json
invoice_id String
good_id String
service_id String?
discount_amount Decimal? @db.Decimal(15, 2)
tax_amount Decimal? @db.Decimal(15, 2)
good Good @relation(fields: [good_id], references: [id])
invoice SalesInvoice @relation(fields: [invoice_id], references: [id])
service Service? @relation(fields: [service_id], references: [id])
discount_amount Decimal? @db.Decimal(15, 2)
tax_amount Decimal? @db.Decimal(15, 2)
good Good @relation(fields: [good_id], references: [id])
invoice SalesInvoice @relation(fields: [invoice_id], references: [id])
service Service? @relation(fields: [service_id], references: [id])
@@index([invoice_id, good_id])
@@index([good_id], map: "sales_invoice_items_good_id_fkey")