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:
@@ -0,0 +1,30 @@
|
||||
-- Migration: 002 - Criar tabela de presets de carretel e inserir presets do sistema
|
||||
|
||||
CREATE TABLE spool_presets (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
name TEXT NOT NULL,
|
||||
spool_weight_g INTEGER NOT NULL CHECK (spool_weight_g > 0),
|
||||
is_system BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
user_id UUID REFERENCES users (id) ON DELETE CASCADE,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
-- Presets do sistema não têm user_id; presets customizados têm
|
||||
CONSTRAINT chk_preset_ownership CHECK (
|
||||
(is_system = TRUE AND user_id IS NULL) OR
|
||||
(is_system = FALSE AND user_id IS NOT NULL)
|
||||
)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_spool_presets_user_id ON spool_presets (user_id) WHERE user_id IS NOT NULL;
|
||||
CREATE INDEX idx_spool_presets_is_system ON spool_presets (is_system);
|
||||
|
||||
-- Presets built-in do sistema (somente leitura para usuários)
|
||||
INSERT INTO spool_presets (name, spool_weight_g, is_system) VALUES
|
||||
('Bambu Lab (Plástico)', 250, TRUE),
|
||||
('Elegoo (Papelão)', 200, TRUE),
|
||||
('Creality (Plástico)', 230, TRUE),
|
||||
('Prusament (Plástico)', 201, TRUE),
|
||||
('Sunlu (Papelão)', 200, TRUE),
|
||||
('Polymaker (Plástico)', 220, TRUE),
|
||||
('Genérico Papelão 1kg', 200, TRUE),
|
||||
('Genérico Plástico 1kg', 250, TRUE);
|
||||
Reference in New Issue
Block a user