Introduce initial project scaffold: Express webhook server (server.js) for Immich uploads, DB pool (modules/database.js) using pg, immich repository (repositories/immichRepo.js) with get/update functions, image processing via sharp (modules/image_processor.js), a small execution helper (modules/execution_helper.js), and package.json + package-lock. Server validates a bearer token, filters non-image assets, waits briefly, compresses the image and updates DB path. Requires env vars: DB_HOST, DB_USER, DB_PORT, DB_NAME, DB_PASS, PASS_CODE, IMMICH_DATA_PATH, IMG_COMPRESSION_OUTPUT_FORMAT, IMG_COMPRESSION_OUTPUT_QUALITY, PORT.
37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
import "dotenv/config"
|
|
import express from "express"
|
|
import database from "./modules/database.js"
|
|
import immichDb from "./repositories/immichRepo.js"
|
|
import execHelper from "./modules/execution_helper.js"
|
|
import imageProcessor from "./modules/image_processor.js"
|
|
|
|
await database.connect()
|
|
const app = express()
|
|
|
|
app.use(express.json())
|
|
app.use(express.urlencoded({ extended: true }))
|
|
|
|
app.post("/", async (req, res) => {
|
|
const authorization = req.headers.authorization
|
|
if (authorization != `Bearer ${process.env.PASS_CODE}`) {
|
|
res.status(401).send()
|
|
}
|
|
const assetType = req.body.data.asset.type
|
|
if (assetType != "IMAGE") {
|
|
res.end()
|
|
}
|
|
const assetFilePath = req.body.data.asset.originalPath
|
|
if (imageProcessor.getMediaType(assetFilePath) != "IMAGE") {
|
|
res.end()
|
|
}
|
|
const assetId = req.body.data.asset.id
|
|
await execHelper.sleep(550)
|
|
const asset = await immichDb.getMediaInDatabase(assetId)
|
|
await imageProcessor.processCompression(asset[0].originalPath)
|
|
immichDb.updateMediaPathInDatabase(assetId, imageProcessor.changeExtension(asset[0].originalPath, process.env.IMG_COMPRESSION_OUTPUT_FORMAT))
|
|
return res.status(200).send()
|
|
})
|
|
|
|
app.listen(process.env.PORT, () => {
|
|
return console.log(`Server listening at port : ${process.env.PORT}`)
|
|
}) |