super-memory-pro 0.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +86 -6
- package/dist/db/connection.js.map +1 -1
- package/dist/hooks/event-handler.d.ts.map +1 -1
- package/dist/hooks/event-handler.js +9 -0
- package/dist/hooks/event-handler.js.map +1 -1
- package/dist/hooks/message-handler.d.ts.map +1 -1
- package/dist/hooks/message-handler.js +3 -0
- package/dist/hooks/message-handler.js.map +1 -1
- package/dist/hooks/system-transform.d.ts +5 -12
- package/dist/hooks/system-transform.d.ts.map +1 -1
- package/dist/hooks/system-transform.js +43 -24
- package/dist/hooks/system-transform.js.map +1 -1
- package/dist/memory/embeddings.d.ts +22 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +139 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/extractor.d.ts.map +1 -1
- package/dist/memory/extractor.js +5 -1
- package/dist/memory/extractor.js.map +1 -1
- package/dist/memory/index.d.ts +13 -1
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +7 -1
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/llm-extractor.d.ts +22 -0
- package/dist/memory/llm-extractor.d.ts.map +1 -0
- package/dist/memory/llm-extractor.js +117 -0
- package/dist/memory/llm-extractor.js.map +1 -0
- package/dist/memory/pattern-detector.d.ts +28 -0
- package/dist/memory/pattern-detector.d.ts.map +1 -0
- package/dist/memory/pattern-detector.js +221 -0
- package/dist/memory/pattern-detector.js.map +1 -0
- package/dist/memory/processor.d.ts +7 -1
- package/dist/memory/processor.d.ts.map +1 -1
- package/dist/memory/processor.js +112 -15
- package/dist/memory/processor.js.map +1 -1
- package/dist/memory/project-context.d.ts +24 -0
- package/dist/memory/project-context.d.ts.map +1 -0
- package/dist/memory/project-context.js +186 -0
- package/dist/memory/project-context.js.map +1 -0
- package/dist/memory/suggestions.d.ts +21 -0
- package/dist/memory/suggestions.d.ts.map +1 -0
- package/dist/memory/suggestions.js +205 -0
- package/dist/memory/suggestions.js.map +1 -0
- package/dist/memory/user-profile.d.ts +24 -0
- package/dist/memory/user-profile.d.ts.map +1 -0
- package/dist/memory/user-profile.js +220 -0
- package/dist/memory/user-profile.js.map +1 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/db/migrations/migrations/001_initial.sql +0 -102
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// ─── User Profile Module ──────────────────────────────────────────────────
|
|
2
|
+
// Evolving user profile that learns from each session.
|
|
3
|
+
// Tracks preferred languages, coding style, frameworks, patterns, etc.
|
|
4
|
+
import { getPool } from '../db/connection.js';
|
|
5
|
+
// ─── Profile Building ────────────────────────────────────────────────────
|
|
6
|
+
/**
|
|
7
|
+
* Build or update user profile from stored memories.
|
|
8
|
+
*/
|
|
9
|
+
export async function buildUserProfile(projectId) {
|
|
10
|
+
try {
|
|
11
|
+
const pool = getPool();
|
|
12
|
+
// Fetch relevant memories for profile building
|
|
13
|
+
const result = await pool.query(`SELECT * FROM memories
|
|
14
|
+
WHERE ($1::text IS NULL OR project_id = $1)
|
|
15
|
+
AND memory_type IN ('user_profile', 'tech_stack', 'pattern', 'decision')
|
|
16
|
+
ORDER BY created_at DESC
|
|
17
|
+
LIMIT 200`, [projectId ?? null]);
|
|
18
|
+
const memories = result.rows;
|
|
19
|
+
// Analyze memories to build profile
|
|
20
|
+
const profile = {
|
|
21
|
+
preferredLanguages: extractLanguages(memories),
|
|
22
|
+
codingStyle: detectCodingStyle(memories),
|
|
23
|
+
frameworks: extractFrameworks(memories),
|
|
24
|
+
patterns: extractPatterns(memories),
|
|
25
|
+
avoidPatterns: extractAvoidPatterns(memories),
|
|
26
|
+
experienceLevel: detectExperienceLevel(memories),
|
|
27
|
+
lastUpdated: new Date().toISOString(),
|
|
28
|
+
};
|
|
29
|
+
return profile;
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
console.error('[UltraMemory] Failed to build user profile:', err);
|
|
33
|
+
return getDefaultProfile();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get profile insights with confidence scores.
|
|
38
|
+
*/
|
|
39
|
+
export async function getProfileInsights(projectId) {
|
|
40
|
+
try {
|
|
41
|
+
const pool = getPool();
|
|
42
|
+
const result = await pool.query(`SELECT * FROM memories
|
|
43
|
+
WHERE ($1::text IS NULL OR project_id = $1)
|
|
44
|
+
AND memory_type IN ('user_profile', 'tech_stack', 'pattern')
|
|
45
|
+
ORDER BY importance DESC, created_at DESC
|
|
46
|
+
LIMIT 100`, [projectId ?? null]);
|
|
47
|
+
const memories = result.rows;
|
|
48
|
+
const insights = [];
|
|
49
|
+
// Language preferences
|
|
50
|
+
const languages = extractLanguages(memories);
|
|
51
|
+
if (languages.length > 0) {
|
|
52
|
+
insights.push({
|
|
53
|
+
category: 'languages',
|
|
54
|
+
insight: `Prefers: ${languages.join(', ')}`,
|
|
55
|
+
confidence: Math.min(1, languages.length / 3),
|
|
56
|
+
evidence: memories
|
|
57
|
+
.filter((m) => m.memory_type === 'tech_stack' && languages.some((l) => m.content.includes(l)))
|
|
58
|
+
.map((m) => m.content)
|
|
59
|
+
.slice(0, 3),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Coding style
|
|
63
|
+
const style = detectCodingStyle(memories);
|
|
64
|
+
insights.push({
|
|
65
|
+
category: 'coding_style',
|
|
66
|
+
insight: `Coding style: ${style}`,
|
|
67
|
+
confidence: style === 'mixed' ? 0.5 : 0.7,
|
|
68
|
+
evidence: [],
|
|
69
|
+
});
|
|
70
|
+
// Frameworks
|
|
71
|
+
const frameworks = extractFrameworks(memories);
|
|
72
|
+
if (frameworks.length > 0) {
|
|
73
|
+
insights.push({
|
|
74
|
+
category: 'frameworks',
|
|
75
|
+
insight: `Uses: ${frameworks.join(', ')}`,
|
|
76
|
+
confidence: Math.min(1, frameworks.length / 2),
|
|
77
|
+
evidence: memories
|
|
78
|
+
.filter((m) => m.memory_type === 'tech_stack' && frameworks.some((f) => m.content.includes(f)))
|
|
79
|
+
.map((m) => m.content)
|
|
80
|
+
.slice(0, 3),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
// Experience level
|
|
84
|
+
const experience = detectExperienceLevel(memories);
|
|
85
|
+
insights.push({
|
|
86
|
+
category: 'experience',
|
|
87
|
+
insight: `Experience level: ${experience}`,
|
|
88
|
+
confidence: 0.6,
|
|
89
|
+
evidence: [],
|
|
90
|
+
});
|
|
91
|
+
return insights;
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
console.error('[UltraMemory] Failed to get profile insights:', err);
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// ─── Extraction Helpers ──────────────────────────────────────────────────
|
|
99
|
+
function extractLanguages(memories) {
|
|
100
|
+
const languageCounts = new Map();
|
|
101
|
+
const commonLanguages = [
|
|
102
|
+
'TypeScript', 'JavaScript', 'Python', 'Rust', 'Go', 'Java', 'C#',
|
|
103
|
+
'Ruby', 'PHP', 'Swift', 'Kotlin', 'Dart', 'Elixir', 'Zig',
|
|
104
|
+
];
|
|
105
|
+
for (const mem of memories) {
|
|
106
|
+
if (mem.memory_type !== 'tech_stack')
|
|
107
|
+
continue;
|
|
108
|
+
for (const lang of commonLanguages) {
|
|
109
|
+
if (mem.content.includes(lang) || mem.metadata?.technology === lang) {
|
|
110
|
+
languageCounts.set(lang, (languageCounts.get(lang) || 0) + 1);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return [...languageCounts.entries()]
|
|
115
|
+
.filter(([_, count]) => count >= 2)
|
|
116
|
+
.sort((a, b) => b[1] - a[1])
|
|
117
|
+
.map(([lang]) => lang)
|
|
118
|
+
.slice(0, 5);
|
|
119
|
+
}
|
|
120
|
+
function extractFrameworks(memories) {
|
|
121
|
+
const frameworkCounts = new Map();
|
|
122
|
+
const commonFrameworks = [
|
|
123
|
+
'React', 'Vue', 'Angular', 'Next.js', 'Nuxt', 'Svelte', 'Express',
|
|
124
|
+
'Fastify', 'Django', 'Flask', 'FastAPI', 'Rails', 'Laravel',
|
|
125
|
+
'Tailwind CSS', 'Prisma', 'Drizzle',
|
|
126
|
+
];
|
|
127
|
+
for (const mem of memories) {
|
|
128
|
+
if (mem.memory_type !== 'tech_stack')
|
|
129
|
+
continue;
|
|
130
|
+
for (const fw of commonFrameworks) {
|
|
131
|
+
if (mem.content.includes(fw) || mem.metadata?.technology === fw) {
|
|
132
|
+
frameworkCounts.set(fw, (frameworkCounts.get(fw) || 0) + 1);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return [...frameworkCounts.entries()]
|
|
137
|
+
.filter(([_, count]) => count >= 2)
|
|
138
|
+
.sort((a, b) => b[1] - a[1])
|
|
139
|
+
.map(([fw]) => fw)
|
|
140
|
+
.slice(0, 5);
|
|
141
|
+
}
|
|
142
|
+
function extractPatterns(memories) {
|
|
143
|
+
return memories
|
|
144
|
+
.filter((m) => m.memory_type === 'pattern')
|
|
145
|
+
.map((m) => m.content)
|
|
146
|
+
.slice(0, 10);
|
|
147
|
+
}
|
|
148
|
+
function extractAvoidPatterns(memories) {
|
|
149
|
+
const avoidIndicators = [
|
|
150
|
+
/\b(?:don'?t|avoid|hate|dislike|never|no\s+more)\b/i,
|
|
151
|
+
/\b(?:no\s+(?:more|longer)|stop\s+using)\b/i,
|
|
152
|
+
];
|
|
153
|
+
return memories
|
|
154
|
+
.filter((m) => {
|
|
155
|
+
const content = m.content.toLowerCase();
|
|
156
|
+
return avoidIndicators.some((p) => p.test(content));
|
|
157
|
+
})
|
|
158
|
+
.map((m) => m.content)
|
|
159
|
+
.slice(0, 5);
|
|
160
|
+
}
|
|
161
|
+
function detectCodingStyle(memories) {
|
|
162
|
+
const styleIndicators = {
|
|
163
|
+
functional: [/\b(?:pure\s+function|immutable|lodash|ramda|map|filter|reduce)\b/i, /\bfunctional\b/i],
|
|
164
|
+
oop: [/\b(?:class|extends|implements|interface|polymorphism|encapsulation)\b/i, /\bobject[- ]oriented\b/i],
|
|
165
|
+
procedural: [/\b(?:function|procedure|imperative|step[- ]by[- ]step)\b/i],
|
|
166
|
+
};
|
|
167
|
+
const scores = { functional: 0, oop: 0, procedural: 0 };
|
|
168
|
+
for (const mem of memories) {
|
|
169
|
+
const content = mem.content;
|
|
170
|
+
for (const [style, patterns] of Object.entries(styleIndicators)) {
|
|
171
|
+
if (patterns.some((p) => p.test(content))) {
|
|
172
|
+
scores[style]++;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const maxScore = Math.max(scores.functional, scores.oop, scores.procedural);
|
|
177
|
+
if (maxScore === 0)
|
|
178
|
+
return 'mixed';
|
|
179
|
+
if (scores.functional === maxScore)
|
|
180
|
+
return 'functional';
|
|
181
|
+
if (scores.oop === maxScore)
|
|
182
|
+
return 'oop';
|
|
183
|
+
return 'procedural';
|
|
184
|
+
}
|
|
185
|
+
function detectExperienceLevel(memories) {
|
|
186
|
+
const advancedIndicators = [
|
|
187
|
+
/\b(?:architecture|scalability|microservices|distributed|kubernetes|terraform)\b/i,
|
|
188
|
+
/\b(?:performance|optimization|benchmark|profiling)\b/i,
|
|
189
|
+
/\b(?:security|authentication|authorization|encryption)\b/i,
|
|
190
|
+
];
|
|
191
|
+
const beginnerIndicators = [
|
|
192
|
+
/\b(?:learning|new\s+to|beginner|getting\s+started|tutorial)\b/i,
|
|
193
|
+
/\b(?:how\s+to|what\s+is|can\s+someone|help\s+me)\b/i,
|
|
194
|
+
];
|
|
195
|
+
let advancedCount = 0;
|
|
196
|
+
let beginnerCount = 0;
|
|
197
|
+
for (const mem of memories) {
|
|
198
|
+
if (advancedIndicators.some((p) => p.test(mem.content)))
|
|
199
|
+
advancedCount++;
|
|
200
|
+
if (beginnerIndicators.some((p) => p.test(mem.content)))
|
|
201
|
+
beginnerCount++;
|
|
202
|
+
}
|
|
203
|
+
if (advancedCount > 5)
|
|
204
|
+
return 'expert';
|
|
205
|
+
if (beginnerCount > 5)
|
|
206
|
+
return 'beginner';
|
|
207
|
+
return 'intermediate';
|
|
208
|
+
}
|
|
209
|
+
function getDefaultProfile() {
|
|
210
|
+
return {
|
|
211
|
+
preferredLanguages: [],
|
|
212
|
+
codingStyle: 'mixed',
|
|
213
|
+
frameworks: [],
|
|
214
|
+
patterns: [],
|
|
215
|
+
avoidPatterns: [],
|
|
216
|
+
experienceLevel: 'intermediate',
|
|
217
|
+
lastUpdated: new Date().toISOString(),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=user-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-profile.js","sourceRoot":"","sources":["../../src/memory/user-profile.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -90,6 +90,14 @@ export interface PluginConfig {
|
|
|
90
90
|
minImportance: number;
|
|
91
91
|
autoExtract: boolean;
|
|
92
92
|
};
|
|
93
|
+
/** LLM settings for AI extraction */
|
|
94
|
+
llm: {
|
|
95
|
+
enabled: boolean;
|
|
96
|
+
model: string;
|
|
97
|
+
apiKey: string;
|
|
98
|
+
baseUrl: string;
|
|
99
|
+
summarizeSessions: boolean;
|
|
100
|
+
};
|
|
93
101
|
}
|
|
94
102
|
/** Search result with relevance */
|
|
95
103
|
export interface MemorySearchResult {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "super-memory-pro",
|
|
4
|
-
"version": "0.
|
|
5
|
-
"description": "Ultra-persistent memory plugin for OpenCode —
|
|
4
|
+
"version": "2.0.0",
|
|
5
|
+
"description": "Ultra-persistent memory plugin for OpenCode — AI-powered extraction, semantic search, and cross-session learning",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"opencode",
|
|
8
8
|
"opencode-plugin",
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"zod": "^4.1.8"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@types/express": "^5.0.
|
|
54
|
-
"@types/node": "^22.
|
|
55
|
-
"@types/pg": "^8.
|
|
53
|
+
"@types/express": "^5.0.6",
|
|
54
|
+
"@types/node": "^22.19.21",
|
|
55
|
+
"@types/pg": "^8.20.0",
|
|
56
56
|
"@types/uuid": "^10.0.0",
|
|
57
57
|
"tsx": "^4.19.4",
|
|
58
58
|
"typescript": "^5.8.3",
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
-- Ultra Memory: Initial Schema
|
|
2
|
-
-- Creates core tables for persistent memory storage
|
|
3
|
-
|
|
4
|
-
-- Migration tracking table
|
|
5
|
-
CREATE TABLE IF NOT EXISTS _migrations (
|
|
6
|
-
id SERIAL PRIMARY KEY,
|
|
7
|
-
name TEXT NOT NULL UNIQUE,
|
|
8
|
-
applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
9
|
-
);
|
|
10
|
-
|
|
11
|
-
-- Projects table
|
|
12
|
-
CREATE TABLE IF NOT EXISTS projects (
|
|
13
|
-
id TEXT PRIMARY KEY,
|
|
14
|
-
name TEXT NOT NULL,
|
|
15
|
-
path TEXT,
|
|
16
|
-
description TEXT,
|
|
17
|
-
tech_stack JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
18
|
-
conventions JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
19
|
-
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
20
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
21
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
-- Sessions table
|
|
25
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
26
|
-
id TEXT PRIMARY KEY,
|
|
27
|
-
project_id TEXT REFERENCES projects(id) ON DELETE SET NULL,
|
|
28
|
-
summary TEXT,
|
|
29
|
-
message_count INTEGER NOT NULL DEFAULT 0,
|
|
30
|
-
tokens_used INTEGER NOT NULL DEFAULT 0,
|
|
31
|
-
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
32
|
-
ended_at TIMESTAMPTZ,
|
|
33
|
-
metadata JSONB NOT NULL DEFAULT '{}'::jsonb
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
-- Core memories table
|
|
37
|
-
CREATE TABLE IF NOT EXISTS memories (
|
|
38
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
39
|
-
memory_type TEXT NOT NULL CHECK (memory_type IN (
|
|
40
|
-
'user_profile',
|
|
41
|
-
'tech_stack',
|
|
42
|
-
'project_context',
|
|
43
|
-
'session',
|
|
44
|
-
'pattern',
|
|
45
|
-
'decision',
|
|
46
|
-
'explicit'
|
|
47
|
-
)),
|
|
48
|
-
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
49
|
-
session_id TEXT REFERENCES sessions(id) ON DELETE SET NULL,
|
|
50
|
-
key TEXT NOT NULL,
|
|
51
|
-
value JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
52
|
-
content TEXT NOT NULL,
|
|
53
|
-
importance INTEGER NOT NULL DEFAULT 1 CHECK (importance BETWEEN 1 AND 5),
|
|
54
|
-
source TEXT NOT NULL DEFAULT 'auto',
|
|
55
|
-
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
56
|
-
access_count INTEGER NOT NULL DEFAULT 0,
|
|
57
|
-
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
58
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
59
|
-
last_accessed_at TIMESTAMPTZ,
|
|
60
|
-
-- Full-text search vector
|
|
61
|
-
search_vector TSVECTOR GENERATED ALWAYS AS (
|
|
62
|
-
to_tsvector('english', coalesce(content, ''))
|
|
63
|
-
) STORED,
|
|
64
|
-
-- Unique constraint: one key per type per project
|
|
65
|
-
UNIQUE (memory_type, project_id, key)
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
-- Indexes
|
|
69
|
-
CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(memory_type);
|
|
70
|
-
CREATE INDEX IF NOT EXISTS idx_memories_project ON memories(project_id);
|
|
71
|
-
CREATE INDEX IF NOT EXISTS idx_memories_key ON memories(key);
|
|
72
|
-
CREATE INDEX IF NOT EXISTS idx_memories_importance ON memories(importance DESC);
|
|
73
|
-
CREATE INDEX IF NOT EXISTS idx_memories_fts ON memories USING GIN(search_vector);
|
|
74
|
-
CREATE INDEX IF NOT EXISTS idx_memories_created ON memories(created_at DESC);
|
|
75
|
-
CREATE INDEX IF NOT EXISTS idx_memories_last_access ON memories(last_accessed_at DESC NULLS LAST);
|
|
76
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_project ON sessions(project_id);
|
|
77
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_started ON sessions(started_at DESC);
|
|
78
|
-
|
|
79
|
-
-- Updated_at trigger function
|
|
80
|
-
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
|
81
|
-
RETURNS TRIGGER AS $$
|
|
82
|
-
BEGIN
|
|
83
|
-
NEW.updated_at = NOW();
|
|
84
|
-
RETURN NEW;
|
|
85
|
-
END;
|
|
86
|
-
$$ LANGUAGE plpgsql;
|
|
87
|
-
|
|
88
|
-
-- Apply trigger to tables
|
|
89
|
-
DO $$
|
|
90
|
-
BEGIN
|
|
91
|
-
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_projects_updated_at') THEN
|
|
92
|
-
CREATE TRIGGER update_projects_updated_at
|
|
93
|
-
BEFORE UPDATE ON projects
|
|
94
|
-
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
95
|
-
END IF;
|
|
96
|
-
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'update_memories_updated_at') THEN
|
|
97
|
-
CREATE TRIGGER update_memories_updated_at
|
|
98
|
-
BEFORE UPDATE ON memories
|
|
99
|
-
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
100
|
-
END IF;
|
|
101
|
-
END;
|
|
102
|
-
$$;
|