Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 24ecde4222 | |||
| 239064f088 | |||
| 03de5cd2b4 | |||
| 09fe7cb557 | |||
| 57ff4c7b01 | |||
| 900973063a | |||
| c4450cb4e6 | |||
| 52c756e052 | |||
| aab3b357cf | |||
| aec1d53bcc | |||
| 1de9490540 | |||
| df28bb5dc6 | |||
| 35f80cf249 | |||
| cd2af612a2 | |||
| 088a1c3beb |
@@ -81,4 +81,3 @@ steps:
|
||||
trigger:
|
||||
event:
|
||||
- push
|
||||
- tag
|
||||
|
||||
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.venv
|
||||
.idea
|
||||
21
Dockerfile
21
Dockerfile
@@ -8,13 +8,22 @@ LABEL description="Static documentation host for Aetoskia projects"
|
||||
# Copy custom Nginx configuration
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
# Copy all project docs
|
||||
# Expected folder layout (on build context):
|
||||
# ./_index/
|
||||
# ./mongo-ops/site/
|
||||
# Copy Index
|
||||
COPY ./_index /usr/share/nginx/html/
|
||||
COPY ./mongo-ops/site /usr/share/nginx/html/mongo-ops/
|
||||
COPY ./blog-api/site /usr/share/nginx/html/api/blog/
|
||||
|
||||
# Copy Libs
|
||||
COPY ./libs/doc-forge/site /usr/share/nginx/html/libs/doc-forge/
|
||||
COPY ./libs/mail-intake/site /usr/share/nginx/html/libs/mail-intake/
|
||||
COPY ./libs/mongo-ops/site /usr/share/nginx/html/libs/mongo-ops/
|
||||
COPY ./libs/omniread/site /usr/share/nginx/html/libs/omniread/
|
||||
COPY ./libs/openapi-first/site /usr/share/nginx/html/libs/openapi-first/
|
||||
COPY ./libs/py-jwt/site /usr/share/nginx/html/libs/py-jwt/
|
||||
|
||||
# Copy Apis
|
||||
COPY ./apis/blog/site /usr/share/nginx/html/apis/blog/
|
||||
|
||||
# Copy Tutorials
|
||||
COPY ./tutorials/media-manager/site /usr/share/nginx/html/tutorials/media-manager/
|
||||
|
||||
# Expose HTTP port
|
||||
EXPOSE 80
|
||||
|
||||
@@ -113,6 +113,17 @@
|
||||
<header>
|
||||
<h1>Aetoskia Developer Docs</h1>
|
||||
<p>Central documentation hub for Aetoskia projects</p>
|
||||
<span style="
|
||||
background: #30363d;
|
||||
color: #fff;
|
||||
padding: 3px 8px;
|
||||
border-radius: 6px;
|
||||
font-size: 0.85rem;
|
||||
font-weight: 600;
|
||||
border: 1px solid #484f58;
|
||||
">
|
||||
Build: 0.1.7
|
||||
</span>
|
||||
</header>
|
||||
|
||||
<div class="grid">
|
||||
@@ -122,7 +133,71 @@
|
||||
A modular, async MongoDB operations layer for FastAPI microservices.
|
||||
Simplifies CRUD, transactions, and model management.
|
||||
</p>
|
||||
<a href="/mongo-ops/">View Documentation →</a>
|
||||
<a href="/libs/mongo-ops/" target="_blank">View Documentation →</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Blog API</h2>
|
||||
<p>
|
||||
A modular, async Blog API backend for FastAPI microservices.
|
||||
Provides streamlined CRUD operations for articles and authors, supports nested author details within article endpoints, and enables simple association management between content and contributors.
|
||||
</p>
|
||||
<a href="/apis/blog/" target="_blank">View Documentation →</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Media Manager Tutorial</h2>
|
||||
<p>
|
||||
Step-by-step guide to the Media Manager architecture, ingestion pipeline,
|
||||
automation workflows, and integration with Radarr, Sonarr, and your custom
|
||||
dashboard services.
|
||||
</p>
|
||||
<a href="/tutorials/media-manager/" target="_blank">View Tutorial →</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Doc Forge</h2>
|
||||
<p>
|
||||
Renderer-agnostic Python documentation compiler powering MkDocs and MCP
|
||||
generation across Aetoskia projects.
|
||||
</p>
|
||||
<a href="/libs/doc-forge/" target="_blank">View Documentation →</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Mail Intake</h2>
|
||||
<p>
|
||||
High-performance email ingestion and processing framework with pluggable
|
||||
adapters and automation workflows.
|
||||
</p>
|
||||
<a href="/libs/mail-intake/" target="_blank">View Documentation →</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Omniread</h2>
|
||||
<p>
|
||||
Unified ingestion and normalization layer for structured and unstructured
|
||||
data sources.
|
||||
</p>
|
||||
<a href="/libs/omniread/" target="_blank">View Documentation →</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>OpenAPI First</h2>
|
||||
<p>
|
||||
Design-first API development toolkit enforcing OpenAPI contracts as the
|
||||
single source of truth.
|
||||
</p>
|
||||
<a href="/libs/openapi-first/" target="_blank">View Documentation →</a>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<h2>Py JWT</h2>
|
||||
<p>
|
||||
Lightweight, explicit JWT utilities for Python services with strong
|
||||
validation and minimal magic.
|
||||
</p>
|
||||
<a href="/libs/py-jwt/" target="_blank">View Documentation →</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
File diff suppressed because it is too large
Load Diff
@@ -13,11 +13,11 @@
|
||||
"name": "MIT License",
|
||||
"url": "https://opensource.org/licenses/MIT"
|
||||
},
|
||||
"version": "0.0.4"
|
||||
"version": "0.2.0"
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "https://api.aetoskia.com",
|
||||
"url": "https://api.aetoskia.com/blogs",
|
||||
"description": "Production server"
|
||||
},
|
||||
{
|
||||
@@ -186,17 +186,18 @@
|
||||
"type": "string",
|
||||
"title": "Author Id"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "email",
|
||||
"in": "query",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"title": "Email"
|
||||
}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/Author"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Successful Response",
|
||||
@@ -491,6 +492,131 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/auth/register": {
|
||||
"post": {
|
||||
"tags": [
|
||||
"auth"
|
||||
],
|
||||
"summary": "Create User",
|
||||
"operationId": "create_user_auth_register_post",
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/UserAuth"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": true
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Successful Response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/PublicUser"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"422": {
|
||||
"description": "Validation Error",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/HTTPValidationError"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/auth/login": {
|
||||
"post": {
|
||||
"tags": [
|
||||
"auth"
|
||||
],
|
||||
"summary": "Login",
|
||||
"operationId": "login_auth_login_post",
|
||||
"requestBody": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/UserAuth"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": true
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Successful Response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"422": {
|
||||
"description": "Validation Error",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/HTTPValidationError"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/auth/me": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"auth"
|
||||
],
|
||||
"summary": "Read Users Me",
|
||||
"operationId": "read_users_me_auth_me_get",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Successful Response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"$ref": "#/components/schemas/PublicUser"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"OAuth2PasswordBearer": []
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"/auth/logout": {
|
||||
"post": {
|
||||
"tags": [
|
||||
"auth"
|
||||
],
|
||||
"summary": "Logout",
|
||||
"operationId": "logout_auth_logout_post",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Successful Response",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/health": {
|
||||
"get": {
|
||||
"summary": "Health Check",
|
||||
@@ -573,7 +699,8 @@
|
||||
"tag",
|
||||
"title",
|
||||
"description",
|
||||
"content"
|
||||
"content",
|
||||
"authors"
|
||||
],
|
||||
"title": "Article",
|
||||
"example": {
|
||||
@@ -683,7 +810,15 @@
|
||||
"title": "Username"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"format": "email"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Email"
|
||||
},
|
||||
"is_active": {
|
||||
@@ -692,20 +827,31 @@
|
||||
"default": true
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Name"
|
||||
},
|
||||
"avatar": {
|
||||
"type": "string",
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Avatar"
|
||||
}
|
||||
},
|
||||
"type": "object",
|
||||
"required": [
|
||||
"username",
|
||||
"email",
|
||||
"name",
|
||||
"avatar"
|
||||
"username"
|
||||
],
|
||||
"title": "Author",
|
||||
"example": {
|
||||
@@ -726,6 +872,132 @@
|
||||
"type": "object",
|
||||
"title": "HTTPValidationError"
|
||||
},
|
||||
"PublicUser": {
|
||||
"properties": {
|
||||
"_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"examples": [
|
||||
"507f1f77bcf86cd799439011"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Id"
|
||||
},
|
||||
"created_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"title": "Created At"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"title": "Updated At"
|
||||
},
|
||||
"username": {
|
||||
"type": "string",
|
||||
"maxLength": 50,
|
||||
"minLength": 3,
|
||||
"title": "Username"
|
||||
},
|
||||
"email": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"format": "email"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Email"
|
||||
},
|
||||
"is_active": {
|
||||
"type": "boolean",
|
||||
"title": "Is Active",
|
||||
"default": true
|
||||
}
|
||||
},
|
||||
"type": "object",
|
||||
"required": [
|
||||
"username"
|
||||
],
|
||||
"title": "PublicUser",
|
||||
"example": {
|
||||
"created_at": "2024-01-01T00:00:00",
|
||||
"updated_at": "2024-01-01T00:00:00"
|
||||
}
|
||||
},
|
||||
"UserAuth": {
|
||||
"properties": {
|
||||
"_id": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"examples": [
|
||||
"507f1f77bcf86cd799439011"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Id"
|
||||
},
|
||||
"created_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"title": "Created At"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"title": "Updated At"
|
||||
},
|
||||
"username": {
|
||||
"type": "string",
|
||||
"maxLength": 50,
|
||||
"minLength": 3,
|
||||
"title": "Username"
|
||||
},
|
||||
"email": {
|
||||
"anyOf": [
|
||||
{
|
||||
"type": "string",
|
||||
"format": "email"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
],
|
||||
"title": "Email"
|
||||
},
|
||||
"is_active": {
|
||||
"type": "boolean",
|
||||
"title": "Is Active",
|
||||
"default": true
|
||||
},
|
||||
"password": {
|
||||
"type": "string",
|
||||
"minLength": 6,
|
||||
"title": "Password"
|
||||
}
|
||||
},
|
||||
"type": "object",
|
||||
"required": [
|
||||
"username",
|
||||
"password"
|
||||
],
|
||||
"title": "UserAuth",
|
||||
"example": {
|
||||
"created_at": "2024-01-01T00:00:00",
|
||||
"updated_at": "2024-01-01T00:00:00"
|
||||
}
|
||||
},
|
||||
"ValidationError": {
|
||||
"properties": {
|
||||
"loc": {
|
||||
@@ -759,6 +1031,17 @@
|
||||
],
|
||||
"title": "ValidationError"
|
||||
}
|
||||
},
|
||||
"securitySchemes": {
|
||||
"OAuth2PasswordBearer": {
|
||||
"type": "oauth2",
|
||||
"flows": {
|
||||
"password": {
|
||||
"scopes": {},
|
||||
"tokenUrl": "/auth/login"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
1
apis/blog/site/search/search_index.json
Normal file
1
apis/blog/site/search/search_index.json
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
1120
libs/doc-forge/site/404.html
Normal file
1120
libs/doc-forge/site/404.html
Normal file
File diff suppressed because it is too large
Load Diff
119
libs/doc-forge/site/assets/_mkdocstrings.css
Normal file
119
libs/doc-forge/site/assets/_mkdocstrings.css
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
/* Avoid breaking parameter names, etc. in table cells. */
|
||||
.doc-contents td code {
|
||||
word-break: normal !important;
|
||||
}
|
||||
|
||||
/* No line break before first paragraph of descriptions. */
|
||||
.doc-md-description,
|
||||
.doc-md-description>p:first-child {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
/* Max width for docstring sections tables. */
|
||||
.doc .md-typeset__table,
|
||||
.doc .md-typeset__table table {
|
||||
display: table !important;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.doc .md-typeset__table tr {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
/* Defaults in Spacy table style. */
|
||||
.doc-param-default {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* Backward-compatibility: docstring section titles in bold. */
|
||||
.doc-section-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Symbols in Navigation and ToC. */
|
||||
:root,
|
||||
[data-md-color-scheme="default"] {
|
||||
--doc-symbol-attribute-fg-color: #953800;
|
||||
--doc-symbol-function-fg-color: #8250df;
|
||||
--doc-symbol-method-fg-color: #8250df;
|
||||
--doc-symbol-class-fg-color: #0550ae;
|
||||
--doc-symbol-module-fg-color: #5cad0f;
|
||||
|
||||
--doc-symbol-attribute-bg-color: #9538001a;
|
||||
--doc-symbol-function-bg-color: #8250df1a;
|
||||
--doc-symbol-method-bg-color: #8250df1a;
|
||||
--doc-symbol-class-bg-color: #0550ae1a;
|
||||
--doc-symbol-module-bg-color: #5cad0f1a;
|
||||
}
|
||||
|
||||
[data-md-color-scheme="slate"] {
|
||||
--doc-symbol-attribute-fg-color: #ffa657;
|
||||
--doc-symbol-function-fg-color: #d2a8ff;
|
||||
--doc-symbol-method-fg-color: #d2a8ff;
|
||||
--doc-symbol-class-fg-color: #79c0ff;
|
||||
--doc-symbol-module-fg-color: #baff79;
|
||||
|
||||
--doc-symbol-attribute-bg-color: #ffa6571a;
|
||||
--doc-symbol-function-bg-color: #d2a8ff1a;
|
||||
--doc-symbol-method-bg-color: #d2a8ff1a;
|
||||
--doc-symbol-class-bg-color: #79c0ff1a;
|
||||
--doc-symbol-module-bg-color: #baff791a;
|
||||
}
|
||||
|
||||
code.doc-symbol {
|
||||
border-radius: .1rem;
|
||||
font-size: .85em;
|
||||
padding: 0 .3em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
code.doc-symbol-attribute {
|
||||
color: var(--doc-symbol-attribute-fg-color);
|
||||
background-color: var(--doc-symbol-attribute-bg-color);
|
||||
}
|
||||
|
||||
code.doc-symbol-attribute::after {
|
||||
content: "attr";
|
||||
}
|
||||
|
||||
code.doc-symbol-function {
|
||||
color: var(--doc-symbol-function-fg-color);
|
||||
background-color: var(--doc-symbol-function-bg-color);
|
||||
}
|
||||
|
||||
code.doc-symbol-function::after {
|
||||
content: "func";
|
||||
}
|
||||
|
||||
code.doc-symbol-method {
|
||||
color: var(--doc-symbol-method-fg-color);
|
||||
background-color: var(--doc-symbol-method-bg-color);
|
||||
}
|
||||
|
||||
code.doc-symbol-method::after {
|
||||
content: "meth";
|
||||
}
|
||||
|
||||
code.doc-symbol-class {
|
||||
color: var(--doc-symbol-class-fg-color);
|
||||
background-color: var(--doc-symbol-class-bg-color);
|
||||
}
|
||||
|
||||
code.doc-symbol-class::after {
|
||||
content: "class";
|
||||
}
|
||||
|
||||
code.doc-symbol-module {
|
||||
color: var(--doc-symbol-module-fg-color);
|
||||
background-color: var(--doc-symbol-module-bg-color);
|
||||
}
|
||||
|
||||
code.doc-symbol-module::after {
|
||||
content: "mod";
|
||||
}
|
||||
|
||||
.doc-signature .autorefs {
|
||||
color: inherit;
|
||||
border-bottom: 1px dotted currentcolor;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user