refactor: explicit status item type for gql

This commit is contained in:
Pujit Mehrotra
2025-09-09 10:28:58 -04:00
parent 20986b217b
commit 4fa89b95dc
4 changed files with 31 additions and 16 deletions

View File

@@ -4,22 +4,13 @@ import { readFile } from 'fs/promises';
import { z } from 'zod';
import { phpLoader } from '@app/core/utils/plugins/php-loader.js';
import {
ExplicitStatusItem,
UpdateStatus,
} from '@app/unraid-api/graph/resolvers/docker/docker-update-status.model.js';
type StatusItem = { name: string; updateStatus: 0 | 1 | 2 | 3 };
/** Note that these values propogate down to api consumers, so be aware of breaking changes. */
enum UpdateStatus {
UP_TO_DATE = 'UP_TO_DATE',
UPDATE_AVAILABLE = 'UPDATE_AVAILABLE',
REBUILD_READY = 'REBUILD_READY',
UNKNOWN = 'UNKNOWN',
}
type ExplicitStatusItem = {
name: string;
updateStatus: UpdateStatus;
};
/**
* These types reflect the structure of the /var/lib/docker/unraid-update-status.json file,
* which is not controlled by the Unraid API.

View File

@@ -0,0 +1,25 @@
import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
/**
* Note that these values propagate down to API consumers, so be aware of breaking changes.
*/
export enum UpdateStatus {
UP_TO_DATE = 'UP_TO_DATE',
UPDATE_AVAILABLE = 'UPDATE_AVAILABLE',
REBUILD_READY = 'REBUILD_READY',
UNKNOWN = 'UNKNOWN',
}
registerEnumType(UpdateStatus, {
name: 'UpdateStatus',
description: 'Update status of a container.',
});
@ObjectType()
export class ExplicitStatusItem {
@Field(() => String)
name!: string;
@Field(() => UpdateStatus)
updateStatus!: UpdateStatus;
}

View File

@@ -1,4 +1,3 @@
import { ConfigModule } from '@nestjs/config';
import { Test, TestingModule } from '@nestjs/testing';
import { describe, expect, it, vi } from 'vitest';

View File

@@ -2,10 +2,10 @@ import { Args, Mutation, Query, ResolveField, Resolver } from '@nestjs/graphql';
import { AuthAction, Resource } from '@unraid/shared/graphql.model.js';
import { UsePermissions } from '@unraid/shared/use-permissions.directive.js';
import { GraphQLJSON } from 'graphql-scalars';
import { UseFeatureFlag } from '@app/unraid-api/decorators/use-feature-flag.decorator.js';
import { DockerPhpService } from '@app/unraid-api/graph/resolvers/docker/docker-php.service.js';
import { ExplicitStatusItem } from '@app/unraid-api/graph/resolvers/docker/docker-update-status.model.js';
import {
Docker,
DockerContainer,
@@ -138,7 +138,7 @@ export class DockerResolver {
action: AuthAction.READ_ANY,
resource: Resource.DOCKER,
})
@ResolveField(() => GraphQLJSON)
@ResolveField(() => [ExplicitStatusItem])
public async containerUpdateStatuses() {
return this.dockerPhpService.getContainerUpdateStatuses();
}