| 372 |
372 |
|
let row: (i64, i64, i64, i64, i64, i64, i64) = sqlx::query_as(
|
| 373 |
373 |
|
r#"
|
| 374 |
374 |
|
WITH audio_bytes AS (
|
| 375 |
|
- |
SELECT COALESCE(SUM(i.audio_file_size_bytes)::BIGINT, 0) AS total
|
|
375 |
+ |
SELECT COALESCE(GREATEST(0, LEAST(SUM(i.audio_file_size_bytes), 9223372036854775807))::BIGINT, 0) AS total
|
| 376 |
376 |
|
FROM items i JOIN projects p ON i.project_id = p.id
|
| 377 |
377 |
|
WHERE p.user_id = $1 AND i.audio_file_size_bytes IS NOT NULL
|
| 378 |
378 |
|
),
|
| 379 |
379 |
|
cover_bytes AS (
|
| 380 |
|
- |
SELECT COALESCE(SUM(i.cover_file_size_bytes)::BIGINT, 0)
|
|
380 |
+ |
SELECT COALESCE(GREATEST(0, LEAST(SUM(i.cover_file_size_bytes), 9223372036854775807))::BIGINT, 0)
|
| 381 |
381 |
|
+ COALESCE((
|
| 382 |
|
- |
SELECT SUM(p.cover_image_size_bytes)::BIGINT
|
|
382 |
+ |
SELECT GREATEST(0, LEAST(SUM(p.cover_image_size_bytes), 9223372036854775807))::BIGINT
|
| 383 |
383 |
|
FROM projects p
|
| 384 |
384 |
|
WHERE p.user_id = $1 AND p.cover_image_size_bytes IS NOT NULL
|
| 385 |
385 |
|
), 0) AS total
|
| 387 |
387 |
|
WHERE p.user_id = $1 AND i.cover_file_size_bytes IS NOT NULL
|
| 388 |
388 |
|
),
|
| 389 |
389 |
|
version_bytes AS (
|
| 390 |
|
- |
SELECT COALESCE(SUM(v.file_size_bytes)::BIGINT, 0) AS total
|
|
390 |
+ |
SELECT COALESCE(GREATEST(0, LEAST(SUM(v.file_size_bytes), 9223372036854775807))::BIGINT, 0) AS total
|
| 391 |
391 |
|
FROM versions v
|
| 392 |
392 |
|
JOIN items i ON v.item_id = i.id
|
| 393 |
393 |
|
JOIN projects p ON i.project_id = p.id
|
| 394 |
394 |
|
WHERE p.user_id = $1 AND v.file_size_bytes IS NOT NULL
|
| 395 |
395 |
|
),
|
| 396 |
396 |
|
insertion_bytes AS (
|
| 397 |
|
- |
SELECT COALESCE(SUM(file_size)::BIGINT, 0) AS total
|
|
397 |
+ |
SELECT COALESCE(GREATEST(0, LEAST(SUM(file_size), 9223372036854775807))::BIGINT, 0) AS total
|
| 398 |
398 |
|
FROM content_insertions WHERE user_id = $1
|
| 399 |
399 |
|
),
|
| 400 |
400 |
|
video_bytes AS (
|
| 401 |
|
- |
SELECT COALESCE(SUM(i.video_file_size_bytes)::BIGINT, 0) AS total
|
|
401 |
+ |
SELECT COALESCE(GREATEST(0, LEAST(SUM(i.video_file_size_bytes), 9223372036854775807))::BIGINT, 0) AS total
|
| 402 |
402 |
|
FROM items i JOIN projects p ON i.project_id = p.id
|
| 403 |
403 |
|
WHERE p.user_id = $1 AND i.video_file_size_bytes IS NOT NULL
|
| 404 |
404 |
|
),
|
| 405 |
405 |
|
media_bytes AS (
|
| 406 |
|
- |
SELECT COALESCE(SUM(file_size_bytes)::BIGINT, 0) AS total
|
|
406 |
+ |
SELECT COALESCE(GREATEST(0, LEAST(SUM(file_size_bytes), 9223372036854775807))::BIGINT, 0) AS total
|
| 407 |
407 |
|
FROM media_files WHERE user_id = $1
|
| 408 |
408 |
|
),
|
| 409 |
409 |
|
gallery_bytes AS (
|
| 410 |
410 |
|
SELECT COALESCE((
|
| 411 |
|
- |
SELECT SUM(ii.file_size_bytes)::BIGINT
|
|
411 |
+ |
SELECT GREATEST(0, LEAST(SUM(ii.file_size_bytes), 9223372036854775807))::BIGINT
|
| 412 |
412 |
|
FROM item_images ii JOIN items i ON ii.item_id = i.id JOIN projects p ON i.project_id = p.id
|
| 413 |
413 |
|
WHERE p.user_id = $1
|
| 414 |
414 |
|
), 0)
|
| 415 |
415 |
|
+ COALESCE((
|
| 416 |
|
- |
SELECT SUM(pi.file_size_bytes)::BIGINT
|
|
416 |
+ |
SELECT GREATEST(0, LEAST(SUM(pi.file_size_bytes), 9223372036854775807))::BIGINT
|
| 417 |
417 |
|
FROM project_images pi JOIN projects p ON pi.project_id = p.id
|
| 418 |
418 |
|
WHERE p.user_id = $1
|
| 419 |
419 |
|
), 0) AS total
|
| 571 |
571 |
|
+ COALESCE(project_gallery.total, 0) AS total
|
| 572 |
572 |
|
FROM users u
|
| 573 |
573 |
|
LEFT JOIN LATERAL (
|
| 574 |
|
- |
SELECT SUM(i.audio_file_size_bytes)::BIGINT AS total
|
|
574 |
+ |
SELECT GREATEST(0, LEAST(SUM(i.audio_file_size_bytes), 9223372036854775807))::BIGINT AS total
|
| 575 |
575 |
|
FROM items i JOIN projects p ON i.project_id = p.id
|
| 576 |
576 |
|
WHERE p.user_id = u.id AND i.audio_file_size_bytes IS NOT NULL
|
| 577 |
577 |
|
) audio ON true
|
| 578 |
578 |
|
LEFT JOIN LATERAL (
|
| 579 |
|
- |
SELECT SUM(i.cover_file_size_bytes)::BIGINT AS total
|
|
579 |
+ |
SELECT GREATEST(0, LEAST(SUM(i.cover_file_size_bytes), 9223372036854775807))::BIGINT AS total
|
| 580 |
580 |
|
FROM items i JOIN projects p ON i.project_id = p.id
|
| 581 |
581 |
|
WHERE p.user_id = u.id AND i.cover_file_size_bytes IS NOT NULL
|
| 582 |
582 |
|
) cover ON true
|
| 583 |
583 |
|
LEFT JOIN LATERAL (
|
| 584 |
|
- |
SELECT SUM(i.video_file_size_bytes)::BIGINT AS total
|
|
584 |
+ |
SELECT GREATEST(0, LEAST(SUM(i.video_file_size_bytes), 9223372036854775807))::BIGINT AS total
|
| 585 |
585 |
|
FROM items i JOIN projects p ON i.project_id = p.id
|
| 586 |
586 |
|
WHERE p.user_id = u.id AND i.video_file_size_bytes IS NOT NULL
|
| 587 |
587 |
|
) video ON true
|
| 588 |
588 |
|
LEFT JOIN LATERAL (
|
| 589 |
|
- |
SELECT SUM(v.file_size_bytes)::BIGINT AS total
|
|
589 |
+ |
SELECT GREATEST(0, LEAST(SUM(v.file_size_bytes), 9223372036854775807))::BIGINT AS total
|
| 590 |
590 |
|
FROM versions v JOIN items i ON v.item_id = i.id JOIN projects p ON i.project_id = p.id
|
| 591 |
591 |
|
WHERE p.user_id = u.id AND v.file_size_bytes IS NOT NULL
|
| 592 |
592 |
|
) versions ON true
|
| 593 |
593 |
|
LEFT JOIN LATERAL (
|
| 594 |
|
- |
SELECT SUM(ci.file_size)::BIGINT AS total
|
|
594 |
+ |
SELECT GREATEST(0, LEAST(SUM(ci.file_size), 9223372036854775807))::BIGINT AS total
|
| 595 |
595 |
|
FROM content_insertions ci WHERE ci.user_id = u.id
|
| 596 |
596 |
|
) insertions ON true
|
| 597 |
597 |
|
LEFT JOIN LATERAL (
|
| 598 |
|
- |
SELECT SUM(mf.file_size_bytes)::BIGINT AS total
|
|
598 |
+ |
SELECT GREATEST(0, LEAST(SUM(mf.file_size_bytes), 9223372036854775807))::BIGINT AS total
|
| 599 |
599 |
|
FROM media_files mf WHERE mf.user_id = u.id
|
| 600 |
600 |
|
) media ON true
|
| 601 |
601 |
|
-- Project cover images charge storage at confirm but live in their own
|
| 606 |
606 |
|
-- gallery/project-cover charge and the counter oscillated week to week
|
| 607 |
607 |
|
-- (Run #18 Storage B1). Reconcile them from the same rows the charge writes.
|
| 608 |
608 |
|
LEFT JOIN LATERAL (
|
| 609 |
|
- |
SELECT SUM(p.cover_image_size_bytes)::BIGINT AS total
|
|
609 |
+ |
SELECT GREATEST(0, LEAST(SUM(p.cover_image_size_bytes), 9223372036854775807))::BIGINT AS total
|
| 610 |
610 |
|
FROM projects p
|
| 611 |
611 |
|
WHERE p.user_id = u.id AND p.cover_image_size_bytes IS NOT NULL
|
| 612 |
612 |
|
) project_cover ON true
|
| 613 |
613 |
|
LEFT JOIN LATERAL (
|
| 614 |
|
- |
SELECT SUM(ii.file_size_bytes)::BIGINT AS total
|
|
614 |
+ |
SELECT GREATEST(0, LEAST(SUM(ii.file_size_bytes), 9223372036854775807))::BIGINT AS total
|
| 615 |
615 |
|
FROM item_images ii JOIN items i ON ii.item_id = i.id JOIN projects p ON i.project_id = p.id
|
| 616 |
616 |
|
WHERE p.user_id = u.id
|
| 617 |
617 |
|
) item_gallery ON true
|
| 618 |
618 |
|
LEFT JOIN LATERAL (
|
| 619 |
|
- |
SELECT SUM(pi.file_size_bytes)::BIGINT AS total
|
|
619 |
+ |
SELECT GREATEST(0, LEAST(SUM(pi.file_size_bytes), 9223372036854775807))::BIGINT AS total
|
| 620 |
620 |
|
FROM project_images pi JOIN projects p ON pi.project_id = p.id
|
| 621 |
621 |
|
WHERE p.user_id = u.id
|
| 622 |
622 |
|
) project_gallery ON true
|
| 840 |
840 |
|
pub async fn get_user_content_size(pool: &PgPool, user_id: UserId) -> Result<i64> {
|
| 841 |
841 |
|
let version_size: i64 = sqlx::query_scalar(
|
| 842 |
842 |
|
r#"
|
| 843 |
|
- |
SELECT COALESCE(SUM(v.file_size_bytes)::BIGINT, 0)
|
|
843 |
+ |
SELECT COALESCE(GREATEST(0, LEAST(SUM(v.file_size_bytes), 9223372036854775807))::BIGINT, 0)
|
| 844 |
844 |
|
FROM versions v
|
| 845 |
845 |
|
JOIN items i ON v.item_id = i.id
|
| 846 |
846 |
|
JOIN projects p ON i.project_id = p.id
|
| 852 |
852 |
|
.await?;
|
| 853 |
853 |
|
|
| 854 |
854 |
|
let insertion_size: i64 = sqlx::query_scalar(
|
| 855 |
|
- |
"SELECT COALESCE(SUM(file_size)::BIGINT, 0) FROM content_insertions WHERE user_id = $1",
|
|
855 |
+ |
"SELECT COALESCE(GREATEST(0, LEAST(SUM(file_size), 9223372036854775807))::BIGINT, 0) FROM content_insertions WHERE user_id = $1",
|
| 856 |
856 |
|
)
|
| 857 |
857 |
|
.bind(user_id)
|
| 858 |
858 |
|
.fetch_one(pool)
|