fix(import): publish season spielplan json after import
This commit is contained in:
42
server/utils/spielplan-publish.js
Normal file
42
server/utils/spielplan-publish.js
Normal file
@@ -0,0 +1,42 @@
|
||||
import { promises as fs } from 'fs'
|
||||
import { convertImportedSpielplanToJson, validateImportedSpielplan } from './spielplan-data.js'
|
||||
import { getProjectPath, getServerDataPath } from './paths.js'
|
||||
|
||||
const DEFAULT_INPUT_PATH = getServerDataPath('spielplan-import', 'harheimer_tc_spielplan.json')
|
||||
|
||||
async function writeJsonAtomic(filePath, data) {
|
||||
await fs.mkdir(filePath.substring(0, filePath.lastIndexOf('/')), { recursive: true })
|
||||
const tmpPath = `${filePath}.tmp-${process.pid}-${Date.now()}`
|
||||
const content = `${JSON.stringify(data, null, 2)}\n`
|
||||
|
||||
await fs.writeFile(tmpPath, content, 'utf8')
|
||||
await fs.rename(tmpPath, filePath)
|
||||
}
|
||||
|
||||
export async function publishImportedSpielplan(options = {}) {
|
||||
const inputPath = options.inputPath || DEFAULT_INPUT_PATH
|
||||
const raw = await fs.readFile(inputPath, 'utf8')
|
||||
const imported = JSON.parse(raw)
|
||||
|
||||
validateImportedSpielplan(imported)
|
||||
|
||||
const spielplan = convertImportedSpielplanToJson(imported)
|
||||
const seasonSlug = imported.source?.season?.seasonSlug
|
||||
if (!seasonSlug) {
|
||||
throw new Error('Saison-Slug fehlt in der Import-Datei')
|
||||
}
|
||||
|
||||
const internalSeasonPath = getServerDataPath('public-data', 'spielplaene', `spielplan-${seasonSlug}.json`)
|
||||
const publicSeasonPath = getProjectPath('public', 'data', 'spielplaene', `spielplan-${seasonSlug}.json`)
|
||||
|
||||
await writeJsonAtomic(internalSeasonPath, spielplan)
|
||||
await writeJsonAtomic(publicSeasonPath, spielplan)
|
||||
|
||||
return {
|
||||
seasonSlug,
|
||||
matchCount: imported.matchCount,
|
||||
inputPath,
|
||||
internalSeasonPath,
|
||||
publicSeasonPath
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user