feat: implement filament and spool preset services with CRUD operations

- Add `FilamentService` for managing filament inventory, including creation, retrieval, updating, and deletion of filaments.
- Introduce `SpoolPresetService` for handling spool presets, allowing users to create, update, and delete their custom presets.
- Create domain models for `Filament` and `SpoolPreset` with necessary fields and methods.
- Define repository interfaces for filament and spool preset persistence.
- Implement application configuration management from environment variables.
- Set up error handling with a centralized `AppError` type.
- Build the Axum router with public and protected routes for user authentication and resource management.
This commit is contained in:
2026-03-14 09:38:28 -03:00
parent c90d2f920b
commit abdc2fe8ce
67 changed files with 7832 additions and 0 deletions
@@ -0,0 +1,32 @@
info:
name: Create Filament
type: http
seq: 2
http:
method: POST
url: http://0.0.0.0:8080/api/v1/filaments
body:
type: json
data: |-
{
"material": "PLA",
"brand": "Bambu",
"model": "PLA Basic",
"color_hex": "#FF5733",
"spool_preset_id": "{{preset_id}}",
"total_weight_g": 1250,
"temp_hotend_c": 220,
"temp_bed_c": 60,
"flow_factor_pct": 1.0,
"notes": "Filamento de teste"
}
auth:
type: bearer
token: "{{access_token}}"
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
@@ -0,0 +1,17 @@
info:
name: Delete Filament
type: http
seq: 5
http:
method: DELETE
url: http://0.0.0.0:8080/api/v1/filaments/{{filament_id}}
auth:
type: bearer
token: "{{access_token}}"
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
@@ -0,0 +1,24 @@
info:
name: Export Label SVG
type: http
seq: 7
http:
method: GET
url: http://0.0.0.0:8080/api/v1/filaments/{{filament_id}}/label.svg
params:
- name: width_mm
value: "80"
enabled: true
- name: height_mm
value: "30"
enabled: true
auth:
type: bearer
token: "{{access_token}}"
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
@@ -0,0 +1,17 @@
info:
name: Get Filament
type: http
seq: 3
http:
method: GET
url: http://0.0.0.0:8080/api/v1/filaments/{{filament_id}}
auth:
type: bearer
token: "{{access_token}}"
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
@@ -0,0 +1,22 @@
info:
name: Get QR Code
type: http
seq: 6
http:
method: GET
url: http://0.0.0.0:8080/api/v1/filaments/{{filament_id}}/qrcode
auth:
type: bearer
token: "{{access_token}}"
runtime:
variables:
- name: filament_id
value: e1edc611-f020-4234-94e5-db5e1393dbf2
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
@@ -0,0 +1,36 @@
info:
name: List Filaments
type: http
seq: 1
http:
method: GET
url: http://0.0.0.0:8080/api/v1/filaments
params:
- name: page
value: "1"
enabled: true
- name: per_page
value: "20"
enabled: true
- name: material
value: PLA
enabled: false
- name: brand
value: Bambu
enabled: false
- name: search
value: ""
enabled: false
- name: stock_level
value: low
enabled: false
auth:
type: bearer
token: "{{access_token}}"
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
@@ -0,0 +1,32 @@
info:
name: Update Filament
type: http
seq: 4
http:
method: PUT
url: http://0.0.0.0:8080/api/v1/filaments/{{filament_id}}
body:
type: json
data: |-
{
"material": "PETG",
"brand": "Bambu",
"model": "PETG Basic",
"color_hex": "#33A1FF",
"spool_preset_id": "{{preset_id}}",
"total_weight_g": 1000,
"temp_hotend_c": 240,
"temp_bed_c": 70,
"flow_factor_pct": 1.0,
"notes": "Atualizado"
}
auth:
type: bearer
token: "{{access_token}}"
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
@@ -0,0 +1,6 @@
info:
name: Filaments
type: folder
seq: 3
request: {}