Skip to content

Commit a639525

Browse files
authored
Merge branch 'main-modalsource' into QueraTeam-postal-feature/server-priority-queue
Signed-off-by: Luca Forni <l.forni@modalsource.com>
2 parents 0818faa + f030dcc commit a639525

File tree

22 files changed

+1048
-14
lines changed

22 files changed

+1048
-14
lines changed

.github/copilot-instructions.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Copilot Instructions
2+
3+
## Contesto del progetto
4+
5+
Questo è un progetto Ruby on Rails per un servizio di mail/email con funzionalità avanzate di routing, tracking e webhook.
6+
7+
## Linee guida generali
8+
9+
- Segui le best practice di Ruby on Rails 7.0
10+
- Utilizza ActiveRecord per l'accesso al database
11+
- **NON modificare mai direttamente il file `db/schema.rb`** - usa sempre le migration
12+
- Scrivi test automatici per ogni nuova funzionalità
13+
- Mantieni il codice pulito e ben documentato
14+
- Rispetta le convenzioni di naming Rails per modelli, controller e viste
15+
- Assicurati che tutte le query siano sicure da SQL injection
16+
17+
## Struttura del database
18+
19+
- **Charset**: `utf8mb4` con collation `utf8mb4_general_ci` per tutte le tabelle
20+
- **Primary Keys**: Utilizza `:integer` come tipo per gli ID
21+
- **UUIDs**: Molte entità utilizzano campi `uuid` per identificatori esterni
22+
- **Timestamps**: Usa `precision: nil` per mantenere compatibilità
23+
24+
## Entità principali
25+
26+
- **Organizations**: Organizzazioni con utenti e server
27+
- **Servers**: Server di posta con modalità e limiti di invio
28+
- **Domains**: Domini verificati con controlli DNS/DKIM/SPF
29+
- **Routes**: Routing dei messaggi verso endpoint
30+
- **Endpoints**: HTTP, SMTP e Address endpoints per delivery
31+
- **Messages**: Sistema di code per messaggi (`queued_messages`)
32+
- **Webhooks**: Sistema di notifiche con retry automatico
33+
- **Users**: Autenticazione con Authie sessions
34+
35+
## Best practices specifiche
36+
37+
- Usa sempre indici sui campi `uuid` con lunghezza limitata (es. `length: 8`)
38+
- Per i campi di stato usa enum o stringhe con validazioni
39+
- Implementa soft delete con campi `deleted_at` dove appropriato
40+
- Gestisci retry e locking per sistemi asincroni (`locked_by`, `locked_at`)
41+
- Usa `decimal` per soglie e percentuali con precisione definita
42+
- Includi sempre timestamp per audit trail
43+
- Per servizi esterni (SpamAssassin, ClamAV, Truemail) usa timeout e gestione errori robusta
44+
45+
## Sicurezza
46+
47+
- Non includere mai credenziali in chiaro nel codice
48+
- Usa token hash per autenticazione (`token_hash` vs `token`)
49+
- Implementa rate limiting e soglie spam
50+
- Valida sempre input da webhook e API esterne
51+
52+
## Performance
53+
54+
- Usa indici appropriati per query frequenti
55+
- Implementa paginazione per liste lunghe
56+
- Considera il caching per dati di configurazione
57+
- Monitora query N+1 con includes/joins
58+
59+
## Integrazione Truemail
60+
61+
Prompt: aggiungi la fase di sviluppo per integrare le funzionalità di truemail. L'integrazione deve avvennire come avviene per spamassassin (spamd) e clamav, quindi devi aggiungere la configurazione per abilitarlo e configurarlo. La modalità di integrazione di truemail è tramite API che verranno esposte da truemail-rack deploiato in un container docker a parte, la documentazione dell'endpoint è qui: https://truemail-rb.org/truemail-rack/#/endpoints . Inoltre, in ogni singolo mail server si potrà configurare se abilitare o meno la verifica dell'indirizzo prima dell'invio mail
62+
63+
## Fase di sviluppo per l'integrazione di Truemail
64+
- Configurazione globale: Aggiungere le impostazioni Truemail al sistema di configurazione principale
65+
- Configurazione per server: Estendere il modello Server per permettere l'abilitazione per singolo server
66+
- Client API: Creare un client per comunicare con l'API Truemail
67+
- Integrazione nella pipeline: Aggiungere la validazione prima dell'invio mail
68+
- Interface web: Aggiungere controlli nell'interfaccia di amministrazione

0 commit comments

Comments
 (0)