feat: manage files via manifestattachment with auth and cascade trigger, format API.md method signatures

This commit is contained in:
seb
2026-09-16 16:49:59 +02:00
parent 8b97948a75
commit 8f23dd8c75
14 changed files with 2058 additions and 1362 deletions

View File

@@ -765,6 +765,52 @@ BEGIN
END
`;
export const INIT_FILE = `
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'file')
BEGIN
CREATE TABLE [file] (
id INT IDENTITY(1,1) PRIMARY KEY,
mimetype NVARCHAR(255) NOT NULL,
name NVARCHAR(255) NOT NULL,
content VARBINARY(MAX) NOT NULL
);
END
`;
export const INIT_MANIFESTATTACHMENT = `
IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'manifestattachment')
BEGIN
CREATE TABLE manifestattachment (
id INT IDENTITY(1,1) PRIMARY KEY,
manifest_id INT NOT NULL,
file_id INT NOT NULL,
CONSTRAINT FK_manifestattachment_manifest FOREIGN KEY (manifest_id) REFERENCES manifest(id) ON DELETE CASCADE,
CONSTRAINT FK_manifestattachment_file FOREIGN KEY (file_id) REFERENCES [file](id) ON DELETE CASCADE
);
END
`;
export const INIT_MANIFESTATTACHMENT_TRIGGER = `
IF OBJECT_ID(N'dbo.TR_manifestattachment_delete_file', N'TR') IS NOT NULL
DROP TRIGGER dbo.TR_manifestattachment_delete_file;
EXEC('
CREATE TRIGGER dbo.TR_manifestattachment_delete_file
ON manifestattachment
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
DELETE f
FROM [file] f
INNER JOIN deleted d ON f.id = d.file_id
WHERE NOT EXISTS (
SELECT 1 FROM manifestattachment ma WHERE ma.file_id = f.id
);
END
');
`;
/** DDL scripts in dependency order for schema init. */
export const SCHEMA_SCRIPTS = [
INIT_META,
@@ -810,4 +856,8 @@ export const SCHEMA_SCRIPTS = [
INIT_COMPANYSETTING,
INIT_POSTERMINAL,
INIT_POSTERMINALCATEGORY,
INIT_FILE,
INIT_MANIFESTATTACHMENT,
INIT_MANIFESTATTACHMENT_TRIGGER,
];