diff --git a/backend/cmd/api/main.go b/backend/cmd/api/main.go index 5236404..1bcc76d 100644 --- a/backend/cmd/api/main.go +++ b/backend/cmd/api/main.go @@ -35,6 +35,7 @@ func main() { r.GET("/api/deliveries", h.GetDeliveries) r.GET("/api/deliveries/:id", h.GetDeliveryByID) + r.GET("/api/deliveries/count", h.GetDeliveryCount) r.POST("/api/deliveries", h.CreateDelivery) r.PATCH("/api/deliveries/:id", h.UpdateDelivery) r.DELETE("/api/deliveries/:id", h.DeleteDelivery) diff --git a/backend/internal/db/queries/query.sql b/backend/internal/db/queries/query.sql index fb42e5f..184c9e6 100644 --- a/backend/internal/db/queries/query.sql +++ b/backend/internal/db/queries/query.sql @@ -13,4 +13,7 @@ SELECT * FROM deliveries WHERE id = $1; DELETE FROM deliveries WHERE id = $1; -- name: UpdateDelivery :exec -UPDATE deliveries SET date = $1, pickup_location = $2, product_name = $3, address = $4, phone = $5, additional_phone = $6, has_elevator = $7, comment = $8, updated_at = NOW() WHERE id = $9; \ No newline at end of file +UPDATE deliveries SET date = $1, pickup_location = $2, product_name = $3, address = $4, phone = $5, additional_phone = $6, has_elevator = $7, comment = $8, updated_at = NOW() WHERE id = $9; + +-- name: GetDeliveryCount :many +SELECT COUNT(*) as count, date FROM deliveries WHERE date >= DATE_TRUNC('month', CURRENT_DATE) GROUP BY date; \ No newline at end of file diff --git a/backend/internal/db/sqlc/querier.go b/backend/internal/db/sqlc/querier.go index ff9900d..953320e 100644 --- a/backend/internal/db/sqlc/querier.go +++ b/backend/internal/db/sqlc/querier.go @@ -15,6 +15,7 @@ type Querier interface { DeleteDelivery(ctx context.Context, id pgtype.UUID) error GetDeliveriesByDate(ctx context.Context, date pgtype.Date) ([]Delivery, error) GetDeliveryByID(ctx context.Context, id pgtype.UUID) (Delivery, error) + GetDeliveryCount(ctx context.Context) ([]GetDeliveryCountRow, error) UpdateDelivery(ctx context.Context, arg UpdateDeliveryParams) error } diff --git a/backend/internal/db/sqlc/query.sql.go b/backend/internal/db/sqlc/query.sql.go index e385b14..17e6135 100644 --- a/backend/internal/db/sqlc/query.sql.go +++ b/backend/internal/db/sqlc/query.sql.go @@ -127,6 +127,35 @@ func (q *Queries) GetDeliveryByID(ctx context.Context, id pgtype.UUID) (Delivery return i, err } +const getDeliveryCount = `-- name: GetDeliveryCount :many +SELECT COUNT(*) as count, date FROM deliveries WHERE date >= DATE_TRUNC('month', CURRENT_DATE) GROUP BY date +` + +type GetDeliveryCountRow struct { + Count int64 `db:"count" json:"count"` + Date pgtype.Date `db:"date" json:"date"` +} + +func (q *Queries) GetDeliveryCount(ctx context.Context) ([]GetDeliveryCountRow, error) { + rows, err := q.db.Query(ctx, getDeliveryCount) + if err != nil { + return nil, err + } + defer rows.Close() + items := []GetDeliveryCountRow{} + for rows.Next() { + var i GetDeliveryCountRow + if err := rows.Scan(&i.Count, &i.Date); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const updateDelivery = `-- name: UpdateDelivery :exec UPDATE deliveries SET date = $1, pickup_location = $2, product_name = $3, address = $4, phone = $5, additional_phone = $6, has_elevator = $7, comment = $8, updated_at = NOW() WHERE id = $9 ` diff --git a/backend/internal/delivery/handler.go b/backend/internal/delivery/handler.go index 0355d87..7eb6a1d 100644 --- a/backend/internal/delivery/handler.go +++ b/backend/internal/delivery/handler.go @@ -69,6 +69,17 @@ func (h *Handler) GetDeliveries(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"deliveries": deliveries}) } +// GET /api/deliveries/count +func (h *Handler) GetDeliveryCount(c *gin.Context) { + counts, err := h.queries.GetDeliveryCount(c.Request.Context()) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to get delivery count", "details": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"counts": counts}) +} + // POST /api/deliveries func (h *Handler) CreateDelivery(c *gin.Context) { var req DeliveryRequest = DeliveryRequest{}