Database/xyz/Functions/fn_GetBiggestFile.sqladded
--liquibase formatted sql
--changeset agentneo:fn_GetBiggestFile runOnChange:true stripComments:false endDelimiter:/
--comment: Create or replace xyz.fn_GetBiggestFile

----------------------------------------------------------------------------------------------------
-- Created by:  AgentNeo
-- Created on:  17/06/2026
-- Description: Returns the metadata for the largest non-soft-deleted file (by FileSizeBytes) in a
--              project. NULL sizes rank lowest; ties broken by earliest InsertedOn then
--              FileReferenceId. Returns zero rows when no eligible file exists.
----------------------------------------------------------------------------------------------------

DROP FUNCTION IF EXISTS xyz."fn_GetBiggestFile";
CREATE OR REPLACE FUNCTION xyz."fn_GetBiggestFile"(_projectId UUID)
RETURNS TABLE (
    "fileReferenceId"  UUID,
    "projectId"        UUID,
    "fileName"         TEXT,
    "fileExtension"    TEXT,
    "xyzDisplayName"   TEXT,
    "description"      TEXT,
    "cloudStoragePath" TEXT,
    "insertedOn"       TIMESTAMP WITH TIME ZONE,
    "createdBy"        TEXT,
    "lastModifiedBy"   TEXT,
    "lastModifiedOn"   TIMESTAMP WITH TIME ZONE,
    "fileSizeBytes"    BIGINT,
    "fileHash"         TEXT,
    "importedFromCDE"  BOOLEAN,
    "thirdPartyFileId" TEXT
)
AS $$
DECLARE
    _projectShardId INT;
BEGIN
    SELECT xyz."fn_GetProjectShardId"(_projectId) INTO _projectShardId;

    RETURN QUERY
    SELECT
        ref."FileReferenceId",
        _projectId,
        ref."FileName",
        ref."FileExtension",
        ref."XyzDisplayName",
        ref."Description",
        ref."CloudStoragePath",
        ref."InsertedOn",
        ref."CreatedBy",
        ref."LastModifiedBy",
        ref."LastModifiedOn",
        ref."FileSizeBytes",
        ref."FileHash",
        ref."ImportedFromCDE",
        ref."ThirdPartyFileId"
    FROM xyz."FileReference" ref
    WHERE ref."ProjectShardId" = _projectShardId
        AND ref."DeletedOn" IS NULL
    ORDER BY
        ref."FileSizeBytes" DESC NULLS LAST,
        ref."InsertedOn" ASC,
        ref."FileReferenceId" ASC
    LIMIT 1;
END
$$ LANGUAGE plpgsql;
/