43 lines
960 B
Plaintext
43 lines
960 B
Plaintext
---
|
|
globs: services/*.ts
|
|
---
|
|
|
|
# Services Rules
|
|
|
|
1. Services MUST contain ALL PostgreSQL queries
|
|
2. Services are the ONLY layer allowed to communicate with the database
|
|
3. Each service MUST:
|
|
- Use the pool from [services/database.ts](mdc:services/database.ts)
|
|
- Implement proper transaction management
|
|
- Handle errors and logging
|
|
- Validate data before insertion
|
|
- Have a clear interface
|
|
|
|
Example of correct service implementation:
|
|
|
|
```typescript
|
|
export class MyService {
|
|
constructor(private pool: Pool) {}
|
|
|
|
async myMethod(): Promise<Result> {
|
|
const client = await this.pool.connect();
|
|
try {
|
|
await client.query("BEGIN");
|
|
// ... queries
|
|
await client.query("COMMIT");
|
|
} catch (error) {
|
|
await client.query("ROLLBACK");
|
|
throw error;
|
|
} finally {
|
|
client.release();
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
❌ FORBIDDEN:
|
|
|
|
- Direct database queries outside services
|
|
- Raw SQL in API routes
|
|
- Database logic in components
|