agent
This commit is contained in:
@@ -262,6 +262,16 @@ function mapApplicationPackageRow(row) {
|
||||
};
|
||||
}
|
||||
|
||||
function toAbsoluteUrl(baseUrl, filePath) {
|
||||
if (!filePath) return '';
|
||||
if (/^https?:\/\//i.test(filePath)) return filePath;
|
||||
|
||||
const normalizedBaseUrl = String(baseUrl || '').replace(/\/+$/, '');
|
||||
const normalizedPath = String(filePath).startsWith('/') ? filePath : `/${filePath}`;
|
||||
|
||||
return `${normalizedBaseUrl}${normalizedPath}`;
|
||||
}
|
||||
|
||||
async function getUserById(id) {
|
||||
const pool = await getPool();
|
||||
const result = await pool.request()
|
||||
@@ -806,6 +816,88 @@ async function getApplicationById(id) {
|
||||
return application;
|
||||
}
|
||||
|
||||
async function getApplicationManifest(appCode, version, baseUrl) {
|
||||
const pool = await getPool();
|
||||
const appResult = await pool.request()
|
||||
.input('AppCode', sql.NVarChar(100), String(appCode || '').trim())
|
||||
.input('AppVersion', sql.NVarChar(50), String(version || '').trim())
|
||||
.query(`
|
||||
SELECT TOP (1) Id, AppCode, AppName, AppVersion
|
||||
FROM dbo.Applications
|
||||
WHERE AppCode = @AppCode
|
||||
AND AppVersion = @AppVersion
|
||||
AND Status = N'Released';
|
||||
`);
|
||||
|
||||
const appRow = appResult.recordset[0];
|
||||
if (!appRow) return null;
|
||||
|
||||
const componentResult = await pool.request()
|
||||
.input('ApplicationId', sql.UniqueIdentifier, appRow.Id)
|
||||
.query(`
|
||||
SELECT
|
||||
ap.Id,
|
||||
p.PackageCode,
|
||||
p.PackageName,
|
||||
p.PackageType,
|
||||
COALESCE(selected_version.Version, latest_version.Version) AS Version,
|
||||
COALESCE(selected_version.FilePath, latest_version.FilePath) AS FilePath,
|
||||
COALESCE(selected_version.DockerImage, latest_version.DockerImage) AS DockerImage,
|
||||
COALESCE(selected_version.FileChecksumSha256, latest_version.FileChecksumSha256) AS FileChecksumSha256,
|
||||
ROW_NUMBER() OVER (ORDER BY ap.AddedAt ASC, p.PackageCode ASC) * 10 AS InstallOrder
|
||||
FROM dbo.ApplicationPackages AS ap
|
||||
INNER JOIN dbo.Packages AS p
|
||||
ON p.Id = ap.PackageId
|
||||
LEFT JOIN dbo.PackageVersions AS selected_version
|
||||
ON selected_version.Id = ap.SelectedVersionId
|
||||
OUTER APPLY (
|
||||
SELECT TOP (1) latest.*
|
||||
FROM dbo.PackageVersions AS latest
|
||||
WHERE latest.PackageId = p.Id
|
||||
AND latest.IsLatest = 1
|
||||
ORDER BY latest.ReleaseDate DESC, latest.UploadedAt DESC
|
||||
) AS latest_version
|
||||
WHERE ap.ApplicationId = @ApplicationId
|
||||
ORDER BY ap.AddedAt ASC, p.PackageCode ASC;
|
||||
`);
|
||||
|
||||
const components = componentResult.recordset.map((row) => {
|
||||
const installOrder = Number(row.InstallOrder || 10);
|
||||
|
||||
if (row.PackageType === 'docker') {
|
||||
return {
|
||||
componentId: row.PackageCode,
|
||||
type: 'docker',
|
||||
installOrder,
|
||||
required: true,
|
||||
image: row.DockerImage || '',
|
||||
tag: row.Version || 'latest',
|
||||
containerName: row.PackageCode
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
componentId: row.PackageCode,
|
||||
type: 'deb',
|
||||
installOrder,
|
||||
required: true,
|
||||
packageName: row.PackageCode,
|
||||
version: row.Version || '',
|
||||
downloadUrl: toAbsoluteUrl(baseUrl, row.FilePath),
|
||||
sha256: row.FileChecksumSha256 || ''
|
||||
};
|
||||
});
|
||||
|
||||
return {
|
||||
schemaVersion: '1.0',
|
||||
appId: appRow.AppCode,
|
||||
appName: appRow.AppName,
|
||||
version: appRow.AppVersion,
|
||||
architecture: 'amd64',
|
||||
components
|
||||
};
|
||||
}
|
||||
|
||||
async function getStats() {
|
||||
const pool = await getPool();
|
||||
const result = await pool.request().query(`
|
||||
@@ -1216,6 +1308,7 @@ module.exports = {
|
||||
getPageData,
|
||||
listPackages,
|
||||
listApplications,
|
||||
getApplicationManifest,
|
||||
getPackageById,
|
||||
getApplicationById,
|
||||
createPackageWithVersion,
|
||||
|
||||
Reference in New Issue
Block a user