38 lines
1.8 KiB
TypeScript
38 lines
1.8 KiB
TypeScript
import { BaseSchema } from '@adonisjs/lucid/schema'
|
|
import { SERVICE_NAMES } from '../../constants/service_names.js'
|
|
|
|
export default class extends BaseSchema {
|
|
protected tableName = 'services'
|
|
|
|
async up() {
|
|
// Sunset the Meshtastic Daemon catalog entry. It was removed from the seeder's DEFAULT_SERVICES
|
|
// because it can't work without hands-on setup (the user's radio MAC address, etc.), so leaving
|
|
// the card in the catalog only offers a broken install. The seeder is additive + sync-existing
|
|
// and never deletes, so every deployment seeded while it was in the catalog (all early-access
|
|
// boxes) keeps an orphaned `nomad_meshtasticd` row and still shows the non-functional card.
|
|
// Mirror the legacy-Kolibri sunset; the `is_deprecated` column already exists from that migration.
|
|
this.defer(async (db) => {
|
|
// Never installed → just an orphaned catalog row; drop it outright so the card disappears.
|
|
await db
|
|
.from(this.tableName)
|
|
.where('service_name', SERVICE_NAMES.MESHTASTICD)
|
|
.where('installed', false)
|
|
.delete()
|
|
|
|
// Currently installed (rare) → keep the row so it stays Nomad's handle to stop/uninstall the
|
|
// container, but flag it deprecated: it drops out of the catalog (see SystemService.getServices)
|
|
// and shows a "Legacy" badge. Honors the "we don't remove pre-installed apps" policy.
|
|
await db
|
|
.from(this.tableName)
|
|
.where('service_name', SERVICE_NAMES.MESHTASTICD)
|
|
.where('installed', true)
|
|
.update({ is_deprecated: true })
|
|
})
|
|
}
|
|
|
|
async down() {
|
|
// The orphaned-row deletion is a one-way data change and is not restored here. The is_deprecated
|
|
// column is owned by the legacy-Kolibri migration, so there is nothing schema-level to revert.
|
|
}
|
|
}
|