fix: remove all SQLite references (migrate.ts, migration script, package.json)
This commit is contained in:
parent
28725caaa8
commit
2481fda68c
14 changed files with 1523 additions and 524 deletions
142
.agents/skills/code-reviewer/references/common-issues.md
Normal file
142
.agents/skills/code-reviewer/references/common-issues.md
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
# Common Issues
|
||||
|
||||
## N+1 Query Problem
|
||||
|
||||
```typescript
|
||||
// N+1 queries - BAD
|
||||
const posts = await Post.findAll();
|
||||
for (const post of posts) {
|
||||
post.author = await User.findById(post.authorId); // N queries!
|
||||
}
|
||||
|
||||
// Single query with join - GOOD
|
||||
const posts = await Post.findAll({ include: [User] });
|
||||
|
||||
// Or batch load
|
||||
const posts = await Post.findAll();
|
||||
const authorIds = posts.map(p => p.authorId);
|
||||
const authors = await User.findByIds(authorIds);
|
||||
```
|
||||
|
||||
## Missing Error Handling
|
||||
|
||||
```typescript
|
||||
// Unhandled rejection - BAD
|
||||
const data = await fetch('/api/data').then(r => r.json());
|
||||
|
||||
// Proper error handling - GOOD
|
||||
try {
|
||||
const response = await fetch('/api/data');
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP ${response.status}`);
|
||||
}
|
||||
const data = await response.json();
|
||||
} catch (error) {
|
||||
logger.error('Failed to fetch data', { error });
|
||||
throw new DataFetchError('Could not load data');
|
||||
}
|
||||
```
|
||||
|
||||
## Magic Numbers/Strings
|
||||
|
||||
```typescript
|
||||
// Magic number - BAD
|
||||
if (user.age >= 18) { ... }
|
||||
setTimeout(fn, 86400000);
|
||||
|
||||
// Named constant - GOOD
|
||||
const MINIMUM_AGE = 18;
|
||||
const ONE_DAY_MS = 24 * 60 * 60 * 1000;
|
||||
|
||||
if (user.age >= MINIMUM_AGE) { ... }
|
||||
setTimeout(fn, ONE_DAY_MS);
|
||||
```
|
||||
|
||||
## Deep Nesting
|
||||
|
||||
```typescript
|
||||
// Deep nesting - BAD
|
||||
if (user) {
|
||||
if (user.isActive) {
|
||||
if (user.hasPermission) {
|
||||
doSomething();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Early returns - GOOD
|
||||
if (!user || !user.isActive || !user.hasPermission) {
|
||||
return;
|
||||
}
|
||||
doSomething();
|
||||
```
|
||||
|
||||
## God Functions
|
||||
|
||||
```typescript
|
||||
// Does too much - BAD
|
||||
async function processOrder(order) {
|
||||
// validate
|
||||
// check inventory
|
||||
// process payment
|
||||
// send email
|
||||
// update database
|
||||
// log analytics
|
||||
}
|
||||
|
||||
// Single responsibility - GOOD
|
||||
async function processOrder(order) {
|
||||
await validateOrder(order);
|
||||
await reserveInventory(order);
|
||||
await chargePayment(order);
|
||||
await sendConfirmation(order);
|
||||
}
|
||||
```
|
||||
|
||||
## Mutable Shared State
|
||||
|
||||
```typescript
|
||||
// Shared mutable - BAD
|
||||
const config = { debug: false };
|
||||
function enableDebug() {
|
||||
config.debug = true;
|
||||
}
|
||||
|
||||
// Immutable pattern - GOOD
|
||||
function createConfig(overrides = {}) {
|
||||
return Object.freeze({ debug: false, ...overrides });
|
||||
}
|
||||
```
|
||||
|
||||
## Missing Null Checks
|
||||
|
||||
```typescript
|
||||
// Unsafe access - BAD
|
||||
const name = user.profile.name;
|
||||
|
||||
// Safe access - GOOD
|
||||
const name = user?.profile?.name ?? 'Unknown';
|
||||
```
|
||||
|
||||
## Synchronous File Operations
|
||||
|
||||
```typescript
|
||||
// Blocks event loop - BAD
|
||||
const data = fs.readFileSync('file.txt');
|
||||
|
||||
// Non-blocking - GOOD
|
||||
const data = await fs.promises.readFile('file.txt');
|
||||
```
|
||||
|
||||
## Quick Reference
|
||||
|
||||
| Issue | Impact | Fix |
|
||||
|-------|--------|-----|
|
||||
| N+1 queries | Performance | Eager load or batch |
|
||||
| Missing error handling | Reliability | Try/catch + logging |
|
||||
| Magic numbers | Maintainability | Named constants |
|
||||
| Deep nesting | Readability | Early returns |
|
||||
| God functions | Testability | Single responsibility |
|
||||
| Mutable shared state | Bugs | Immutable patterns |
|
||||
| Missing null checks | Crashes | Optional chaining |
|
||||
| Sync file operations | Performance | Async operations |
|
||||
Loading…
Add table
Add a link
Reference in a new issue