forked from bleuproton/cofounder
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4802b46
commit c89b58d
Showing
9 changed files
with
290 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,2 @@ | ||
node_modules/ | ||
db/ | ||
dump/ |
Empty file.
Empty file.
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
import utils from "@/utils/index.js"; | ||
import yaml from "yaml"; | ||
|
||
async function dbPostgresGenerate({context,data}) { | ||
/* ;; DB:POSTGRES::GENERATE | ||
make {DRD, db{schemas,seed} } details -> postgres exec commands to {create tables , insert seed examples} | ||
out : ["db"] | ||
*/ | ||
const { pm , db } = data | ||
const { drd } = pm | ||
// const {text , attachments} = details | ||
const messages = [ | ||
{ | ||
"role": "system", | ||
"content": `- you are a genius Postgresql expert | ||
- your role is to write the POSTGRESQL commands that create the DB tables and seed the DB with a good amount of example seed entries, according to the provided details | ||
- your answer should be in this format : | ||
\`\`\`postgresql | ||
[... POSTGRESQL COMMANDS TO CREATE TABLES ...] | ||
[... POSTGRESQL COMMANDS TO SEED THE DB ...] | ||
\`\`\` | ||
ask yourself: | ||
* am i creating all the tables in the required formats ? | ||
* am i seeding the database with enough data ? | ||
give a final, super comprehensive answer in valid, extend POSTGRESQL command to execute | ||
which will be perfectly ready for production and pushed to prod to thousands of users instantly (in a nodejs + POSTGRES ) and work flawlessly | ||
--- | ||
important: | ||
> when making seed data , if some field is meant to store an image url, use a https://picsum.photos/ url with a random seed | ||
> important : for seed data, if some entry needs to store an image url, use a https://picsum.photos/ url instead of example.com !! | ||
--- | ||
use snake_case for any naming you do | ||
--- | ||
very important : | ||
> avoid any postgres-hardcoded methods ie. for generating UIDs etc... ; logic for that stuff will come from nodejs functions ! | ||
> do not generate UUIDs or similar inside postgres ! logic for that stuff will come from nodejs functions ! | ||
> in case of UUIds or similar, make them normal strings ! | ||
your reply should start with : "\`\`\`postgresql" and end with "\`\`\`" | ||
you will be tipped $99999 + major company shares for nailing it perfectly off the bat | ||
you are a genius` | ||
}, | ||
{ | ||
"role": "user", | ||
"content": `\`\`\`DRD:database-requirements-document | ||
${drd} | ||
\`\`\`` | ||
}, | ||
{ | ||
"role": "user", | ||
"content": `\`\`\`DB:schemas | ||
${yaml.stringify({ schemas: db.schemas })} | ||
\`\`\`` | ||
}, | ||
/*db.seed && { | ||
"role": "user", | ||
"content": `\`\`\`DB:seed | ||
${yaml.stringify({ schemas: db.seed })} | ||
\`\`\`` | ||
},*/ | ||
{ | ||
"role": "user", | ||
"content": `Generate the POSTGRES command in one single comprehensive answer | ||
it is expected to be very comprehensive and detailed and cover all the provided details | ||
--- | ||
very important : | ||
> avoid any postgres-hardcoded methods ie. for generating UIDs etc... or similar ; logic for that stuff will come from nodejs functions ! | ||
> do not generate UUIDs or similar inside postgres ! that stuff will come from nodejs functions ! | ||
> in case of UUIDs, make them normal strings and not generated inside postgres by postgres methods ! | ||
> aim for it to work on any default light postgres without any extra configs or plugins ! | ||
> only use basic primitives like numbers, strings, json, etc ... no uuid types or special types etc | ||
> very important : only use basic primitives like numbers, strings, json, etc ... no uuid types or any special types etc ! very basic primitives only ! | ||
reply in \`\`\`postgresql\`\`\` | ||
you're a genius` | ||
}, | ||
] | ||
|
||
const postgres = ( | ||
await context.run({ | ||
id: "op:LLM::GEN", | ||
context, | ||
data: { | ||
model: `chatgpt-4o-latest`,//`gpt-4o`, | ||
messages, | ||
preparser: `backticks`, | ||
parser: false, | ||
} | ||
}) | ||
).generated | ||
|
||
await context.run({ | ||
id: "op:PROJECT::STATE:UPDATE", | ||
context, | ||
data: { | ||
operation: { | ||
id: "db:postgres", | ||
}, | ||
type: `end`, | ||
content: { | ||
key: "db.postgres", | ||
data: postgres, | ||
}, | ||
} | ||
}) | ||
|
||
return { db: { ...db, postgres } } | ||
} | ||
|
||
|
||
export default { | ||
//"DB:POSTGRES::TABLES": dbPostgresTables, | ||
"DB:POSTGRES::GENERATE": dbPostgresGenerate, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
import utils from "@/utils/index.js"; | ||
import yaml from "yaml"; | ||
|
||
async function dbSchemasGenerate({context,data}) { | ||
/* ;; DB:SCHEMAS::GENERATE | ||
make {DRD} -> db {schemas} ;; specify that for auth tables, password not hashed ! for mockup | ||
out : ["db"] | ||
*/ | ||
|
||
|
||
const { pm } = data | ||
const { prd, frd, fjmd, drd } = pm | ||
// const {text , attachments} = details | ||
const messages = [ | ||
{ | ||
"role": "system", | ||
"content": `- you are a genius Product Manager and DB designer | ||
- your role is to make the database schemas for the provided app in development's MVP | ||
- your DB schemas should be comprehensive and cover EVERYTHING required by the app MVP, and nothing more - no shiny secondary features, but nothing less than 100% comprehensive for every single expected functionality in production | ||
- your answer should be in ~SQL-like format meant for Postgres, in this format : | ||
\`\`\`yaml | ||
[TableName]: | ||
- name: [columnName] | ||
type: [ js-parseable types like String, Number, Boolean ...] | ||
unique: [true || false] | ||
nullable: [true || false] | ||
default?: [...] | ||
primaryKey?: [...] | ||
foreignKey?: [{table : [...] , column : []}] | ||
- [...] | ||
[...] | ||
\`\`\` | ||
- use a \`uid\` approach whenever possible rather than incremented Ids ; and make them normal strings ! | ||
very important : | ||
> avoid any postgres-hardcoded methods ie. for generating UIDs etc... ; logic for that stuff will come from nodejs functions ! | ||
> do not generate UUIDs inside postgres ! that stuff will come from nodejs functions ! | ||
- your current role is to make use of the provided task and analysis in order to design a perfect DB schemas for the app's MVP | ||
try to outdo yourself by thinking of what might be omitted, | ||
and design super critically in order to make a comprehensive work for this app's MVP DB schemas | ||
--- | ||
> note : if auth functionalities are present, use an architecture that will be compatible with a simple jwt auth system, which is very simply user and/or email strings(s) and password hash string ! | ||
> very important : for the current purpose of the DB Schemas design, the environment will be a mock prototype environment | ||
do not bother with security details etc, have the DB schema requirements for the mock prototype | ||
> if some ie. media entry types requires some path (ie. images, media, ...), assume usage of urls not local | ||
> aim for it to work on any default light postgres without any extra configs or plugins ! | ||
--- | ||
use snake_case for any naming you do | ||
--- | ||
give a final, super comprehensive answer in strict, parseable YAML format, | ||
which will be perfectly ready for production and pushed to prod to thousands of users instantly and work flawlessly | ||
your reply should start with : "\`\`\`yaml" and end with "\`\`\`" | ||
you will be tipped $99999 + major company shares for nailing it perfectly off the bat | ||
you are a genius` | ||
}, | ||
{ | ||
"role": "user", | ||
"content": `\`\`\`PRD:product-requirements-document | ||
${prd} | ||
\`\`\`` | ||
}, | ||
/*{ | ||
"role": "user", | ||
"content": `\`\`\`FRD:features-requirements-document | ||
${yaml.stringify(frd)} | ||
\`\`\`` | ||
}, | ||
{ | ||
"role": "user", | ||
"content": `\`\`\`FJMD:features-journeys-map-document | ||
${yaml.stringify(fjmd)} | ||
\`\`\`` | ||
},*/ | ||
{ | ||
"role": "user", | ||
"content": `\`\`\`DRD:database-requirements-document | ||
${drd} | ||
\`\`\`` | ||
}, | ||
{ | ||
"role": "user", | ||
"content": `Design the DB schemas in a comprehensive answer | ||
it is expected to be very comprehensive and detailed ; in a VALID PARSEABLE YAML format | ||
very important : | ||
- avoid any postgres-hardcoded methods ie. for generating UIDs etc... make them normal strings | ||
- logic for that stuff will come from nodejs functions ! | ||
- only use basic primitives like numbers, strings, json, etc ... no uuid types or special types etc | ||
- very important : only use basic primitives like numbers, strings, json, etc ... no uuid types or any special types etc ! very basic primitives only ! | ||
you're a genius` | ||
}, | ||
] | ||
|
||
const schemas = ( | ||
await context.run({ | ||
id: "op:LLM::GEN", | ||
context, | ||
data: { | ||
model: `chatgpt-4o-latest`,//`gpt-4o`, | ||
messages, | ||
preparser: `backticks`, | ||
parser: `yaml`, | ||
} | ||
}) | ||
).generated | ||
|
||
await context.run({ | ||
id: "op:PROJECT::STATE:UPDATE", | ||
context, | ||
data: { | ||
operation: { | ||
id: "db:schemas", | ||
}, | ||
type: `end`, | ||
content: { | ||
key: "db.schemas", | ||
data: schemas, | ||
}, | ||
} | ||
}) | ||
|
||
return { db : { schemas } } | ||
} | ||
|
||
|
||
export default { | ||
"DB:SCHEMAS::GENERATE": dbSchemasGenerate, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
nodes: | ||
DB:POSTGRES::GENERATE: | ||
desc: make {DRB, db{schemas,seed} } details -> postgres exec commands to {create | ||
tables , insert seed examples} | ||
out: | ||
- db |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
nodes: | ||
DB:SCHEMAS::GENERATE: | ||
desc: make {DRB} -> db {schemas} ;; specify that for auth tables, password not | ||
hashed ! for mockup | ||
out: | ||
- db |