Using document version to get latest quotes

This commit is contained in:
Finley Ghosh 2025-12-07 17:18:04 +11:00
parent b62d7fdb17
commit d8526f12b6
3 changed files with 92 additions and 15 deletions

View file

@ -63,7 +63,7 @@ type Querier interface {
GetEnquiriesByUser(ctx context.Context, arg GetEnquiriesByUserParams) ([]GetEnquiriesByUserRow, error)
GetEnquiry(ctx context.Context, id int32) (GetEnquiryRow, error)
GetExpiringSoonQuotes(ctx context.Context, dateADD interface{}) ([]GetExpiringSoonQuotesRow, error)
GetExpiringSoonQuotesOnDay(ctx context.Context, dateADD interface{}) ([]GetExpiringSoonQuotesOnDayRow, error)
GetExpiringSoonQuotesOnDay(ctx context.Context, arg GetExpiringSoonQuotesOnDayParams) ([]GetExpiringSoonQuotesOnDayRow, error)
GetLineItem(ctx context.Context, id int32) (LineItem, error)
GetLineItemsByProduct(ctx context.Context, productID sql.NullInt32) ([]LineItem, error)
GetLineItemsTable(ctx context.Context, documentID int32) ([]GetLineItemsTableRow, error)

View file

@ -41,7 +41,15 @@ func (q *Queries) EnableQuoteReminders(ctx context.Context, id int32) (sql.Resul
}
const getExpiringSoonQuotes = `-- name: GetExpiringSoonQuotes :many
WITH ranked_reminders AS (
WITH latest_revision AS (
SELECT
q.enquiry_id,
MAX(d.revision) AS max_revision
FROM quotes q
JOIN documents d ON d.id = q.document_id
GROUP BY q.enquiry_id
),
ranked_reminders AS (
SELECT
id,
quote_id,
@ -64,7 +72,6 @@ latest_quote_reminder AS (
FROM ranked_reminders
WHERE rn = 1
)
SELECT
d.id AS document_id,
u.username,
@ -84,6 +91,7 @@ JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN latest_revision lr ON q.enquiry_id = lr.enquiry_id AND d.revision = lr.max_revision
LEFT JOIN latest_quote_reminder lqr on d.id = lqr.quote_id
@ -148,7 +156,15 @@ func (q *Queries) GetExpiringSoonQuotes(ctx context.Context, dateADD interface{}
}
const getExpiringSoonQuotesOnDay = `-- name: GetExpiringSoonQuotesOnDay :many
WITH ranked_reminders AS (
WITH latest_revision AS (
SELECT
q.enquiry_id,
MAX(d.revision) AS max_revision
FROM quotes q
JOIN documents d ON d.id = q.document_id
GROUP BY q.enquiry_id
),
ranked_reminders AS (
SELECT
id,
quote_id,
@ -190,18 +206,25 @@ JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN latest_revision lr ON q.enquiry_id = lr.enquiry_id AND d.revision = lr.max_revision
LEFT JOIN latest_quote_reminder lqr on d.id = lqr.quote_id
WHERE
q.valid_until >= CURRENT_DATE
AND q.valid_until = DATE_ADD(CURRENT_DATE, INTERVAL ? DAY)
AND q.valid_until <= DATE_ADD(CURRENT_DATE, INTERVAL ? DAY)
AND e.status_id = 5
AND (q.reminders_disabled IS NULL OR q.reminders_disabled = FALSE)
ORDER BY q.valid_until
`
type GetExpiringSoonQuotesOnDayParams struct {
DATEADD interface{} `json:"DATE_ADD"`
DATEADD_2 interface{} `json:"DATE_ADD_2"`
}
type GetExpiringSoonQuotesOnDayRow struct {
DocumentID int32 `json:"document_id"`
Username string `json:"username"`
@ -216,8 +239,8 @@ type GetExpiringSoonQuotesOnDayRow struct {
LatestReminderSentTime time.Time `json:"latest_reminder_sent_time"`
}
func (q *Queries) GetExpiringSoonQuotesOnDay(ctx context.Context, dateADD interface{}) ([]GetExpiringSoonQuotesOnDayRow, error) {
rows, err := q.db.QueryContext(ctx, getExpiringSoonQuotesOnDay, dateADD)
func (q *Queries) GetExpiringSoonQuotesOnDay(ctx context.Context, arg GetExpiringSoonQuotesOnDayParams) ([]GetExpiringSoonQuotesOnDayRow, error) {
rows, err := q.db.QueryContext(ctx, getExpiringSoonQuotesOnDay, arg.DATEADD, arg.DATEADD_2)
if err != nil {
return nil, err
}
@ -312,7 +335,15 @@ func (q *Queries) GetQuoteRemindersDisabled(ctx context.Context, id int32) (GetQ
}
const getRecentlyExpiredQuotes = `-- name: GetRecentlyExpiredQuotes :many
WITH ranked_reminders AS (
WITH latest_revision AS (
SELECT
q.enquiry_id,
MAX(d.revision) AS max_revision
FROM quotes q
JOIN documents d ON d.id = q.document_id
GROUP BY q.enquiry_id
),
ranked_reminders AS (
SELECT
id,
quote_id,
@ -354,6 +385,7 @@ JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN latest_revision lr ON q.enquiry_id = lr.enquiry_id AND d.revision = lr.max_revision
LEFT JOIN latest_quote_reminder lqr on d.id = lqr.quote_id
@ -416,7 +448,15 @@ func (q *Queries) GetRecentlyExpiredQuotes(ctx context.Context, dateSUB interfac
}
const getRecentlyExpiredQuotesOnDay = `-- name: GetRecentlyExpiredQuotesOnDay :many
WITH ranked_reminders AS (
WITH latest_revision AS (
SELECT
q.enquiry_id,
MAX(d.revision) AS max_revision
FROM quotes q
JOIN documents d ON d.id = q.document_id
GROUP BY q.enquiry_id
),
ranked_reminders AS (
SELECT
id,
quote_id,
@ -457,7 +497,8 @@ FROM quotes q
JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN latest_revision lr ON q.enquiry_id = lr.enquiry_id AND d.revision = lr.max_revision
LEFT JOIN latest_quote_reminder lqr on d.id = lqr.quote_id

View file

@ -1,5 +1,13 @@
-- name: GetExpiringSoonQuotes :many
WITH ranked_reminders AS (
WITH latest_revision AS (
SELECT
q.enquiry_id,
MAX(d.revision) AS max_revision
FROM quotes q
JOIN documents d ON d.id = q.document_id
GROUP BY q.enquiry_id
),
ranked_reminders AS (
SELECT
id,
quote_id,
@ -22,7 +30,6 @@ latest_quote_reminder AS (
FROM ranked_reminders
WHERE rn = 1
)
SELECT
d.id AS document_id,
u.username,
@ -42,6 +49,7 @@ JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN latest_revision lr ON q.enquiry_id = lr.enquiry_id AND d.revision = lr.max_revision
LEFT JOIN latest_quote_reminder lqr on d.id = lqr.quote_id
@ -54,7 +62,15 @@ WHERE
ORDER BY q.valid_until;
-- name: GetExpiringSoonQuotesOnDay :many
WITH ranked_reminders AS (
WITH latest_revision AS (
SELECT
q.enquiry_id,
MAX(d.revision) AS max_revision
FROM quotes q
JOIN documents d ON d.id = q.document_id
GROUP BY q.enquiry_id
),
ranked_reminders AS (
SELECT
id,
quote_id,
@ -96,19 +112,29 @@ JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN latest_revision lr ON q.enquiry_id = lr.enquiry_id AND d.revision = lr.max_revision
LEFT JOIN latest_quote_reminder lqr on d.id = lqr.quote_id
WHERE
q.valid_until >= CURRENT_DATE
AND q.valid_until = DATE_ADD(CURRENT_DATE, INTERVAL ? DAY)
AND q.valid_until <= DATE_ADD(CURRENT_DATE, INTERVAL ? DAY)
AND e.status_id = 5
AND (q.reminders_disabled IS NULL OR q.reminders_disabled = FALSE)
ORDER BY q.valid_until;
-- name: GetRecentlyExpiredQuotes :many
WITH ranked_reminders AS (
WITH latest_revision AS (
SELECT
q.enquiry_id,
MAX(d.revision) AS max_revision
FROM quotes q
JOIN documents d ON d.id = q.document_id
GROUP BY q.enquiry_id
),
ranked_reminders AS (
SELECT
id,
quote_id,
@ -150,6 +176,7 @@ JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN latest_revision lr ON q.enquiry_id = lr.enquiry_id AND d.revision = lr.max_revision
LEFT JOIN latest_quote_reminder lqr on d.id = lqr.quote_id
@ -162,7 +189,15 @@ WHERE
ORDER BY q.valid_until DESC;
-- name: GetRecentlyExpiredQuotesOnDay :many
WITH ranked_reminders AS (
WITH latest_revision AS (
SELECT
q.enquiry_id,
MAX(d.revision) AS max_revision
FROM quotes q
JOIN documents d ON d.id = q.document_id
GROUP BY q.enquiry_id
),
ranked_reminders AS (
SELECT
id,
quote_id,
@ -203,7 +238,8 @@ FROM quotes q
JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN users uu ON uu.id = e.contact_user_id
JOIN latest_revision lr ON q.enquiry_id = lr.enquiry_id AND d.revision = lr.max_revision
LEFT JOIN latest_quote_reminder lqr on d.id = lqr.quote_id