.containerfile
+14
-0
diff --git a/.containerfile b/.containerfile
index e4d9a9c..a2bd728 100644
@@ -23,6 +23,18 @@ RUN dotnet build ./src/Api/Api.csproj --no-restore --configuration Release
RUN dotnet publish ./src/Api/Api.csproj --no-build --configuration Release --output /output
FROM node:26-alpine AS frontend-build
WORKDIR /app
COPY ./src/Frontend/package.json ./src/Frontend/package-lock.json ./
RUN npm ci
COPY ./src/Frontend/ ./
RUN npm run build
FROM mcr.microsoft.com/dotnet/aspnet:11.0.0-preview.2 AS release
WORKDIR /app
@@ -31,4 +43,6 @@ RUN apt-get update && apt-get install ffmpeg -y
COPY --from=build /output ./
COPY --from=frontend-build /app/dist ./wwwroot
ENTRYPOINT ["dotnet", "./Slopper.Api.dll"]
src/Api/Program.cs
+3
-0
diff --git a/src/Api/Program.cs b/src/Api/Program.cs
index 70302f0..52ea166 100644
@@ -29,4 +29,7 @@ app.MapOpenApi();
app.MapApi();
app.UseDefaultFiles();
app.UseStaticFiles();
app.Run();
src/Frontend/openapi.json
+0
-163
diff --git a/src/Frontend/openapi.json b/src/Frontend/openapi.json
deleted file mode 100644
index c829d0b..0000000
@@ -1,163 +0,0 @@
{
"openapi": "3.1.2",
"info": {
"title": "Slopper.Api | v1",
"version": "1.0.0"
},
"servers": [
{
"url": "http://localhost:5055"
}
],
"paths": {
"/api/clips": {
"get": {
"tags": [
"ApiEndpoints"
],
"parameters": [
{
"name": "after",
"in": "query",
"schema": {
"type": "string",
"format": "uuid"
}
},
{
"name": "limit",
"in": "query",
"schema": {
"maximum": 64,
"minimum": 0,
"pattern": "^-?(?:0|[1-9]\\d*)$",
"type": [
"integer",
"string"
],
"format": "int32",
"default": 10
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Clip"
}
}
}
}
}
}
}
},
"/api/clips/{id}/stream": {
"get": {
"tags": [
"ApiEndpoints"
],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"404": {
"description": "Not Found"
}
}
}
},
"/api/jobs": {
"get": {
"tags": [
"ApiEndpoints"
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/JobStatus"
}
}
}
}
}
},
"put": {
"tags": [
"ApiEndpoints"
],
"summary": "Triggers a job generating a new clip.",
"responses": {
"202": {
"description": "Accepted"
}
}
}
}
},
"components": {
"schemas": {
"Clip": {
"required": [
"id",
"duration",
"createdAt"
],
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"duration": {
"pattern": "^-?(\\d+\\.)?\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?$",
"type": "string"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"JobStatus": {
"required": [
"isRunning"
],
"type": "object",
"properties": {
"isRunning": {
"type": "boolean"
},
"nextScheduledRun": {
"type": [
"null",
"string"
],
"format": "date-time"
}
}
}
}
},
"tags": [
{
"name": "ApiEndpoints"
}
]
}
src/Frontend/package-lock.json
+23
-5
diff --git a/src/Frontend/package-lock.json b/src/Frontend/package-lock.json
index 12eeb71..936bd4d 100644
@@ -65,6 +65,29 @@
"node": ">=6.9.0"
}
},
"node_modules/@emnapi/core": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
"integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"@emnapi/wasi-threads": "1.2.1",
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/runtime": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
"integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/wasi-threads": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
@@ -392,7 +415,6 @@
"integrity": "sha512-8oljBDGun9cIsZRJR6fkihn0TSXJI0UDOOhncYaERq6M0JMDoPLxyscwruJcb4GKS6dvK/d8xebYBg27h/duaQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -966,7 +988,6 @@
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@@ -1083,7 +1104,6 @@
"integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==",
"devOptional": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -1105,7 +1125,6 @@
"integrity": "sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"lightningcss": "^1.32.0",
"picomatch": "^4.0.4",
@@ -1190,7 +1209,6 @@
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.34.tgz",
"integrity": "sha512-WdLBG9gm02OgJIG9axd5Hpx0TFLdzVgfG2evFFu8Rur5O/IoGc5cMjnjh3tPL6GnRGsYvUhBSKVPYVcxRKpMCA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.5.34",
"@vue/compiler-sfc": "3.5.34",