Compare commits
30 Commits
develop/io
...
develop/cm
Author | SHA1 | Date | |
---|---|---|---|
![]() |
01a8d2ca02 | ||
![]() |
e5b136b8b5 | ||
![]() |
031dbed6a9 | ||
![]() |
f20dfa00c2 | ||
![]() |
24c91cb6f0 | ||
![]() |
abca91c26a | ||
![]() |
3321eafffa | ||
![]() |
adc9275d3f | ||
![]() |
60eed00cb2 | ||
![]() |
c29ab4b920 | ||
![]() |
9d46de56c3 | ||
![]() |
3f9d88e733 | ||
![]() |
6e576919ab | ||
![]() |
9739583f43 | ||
![]() |
bc1ec72df1 | ||
![]() |
e62dc5f597 | ||
![]() |
b5e9c8ba34 | ||
![]() |
9a8fd1c073 | ||
![]() |
25c1d3c917 | ||
![]() |
f435300740 | ||
![]() |
299567dd7c | ||
![]() |
fe1740d76f | ||
![]() |
f840f02daf | ||
![]() |
5640d4d4f6 | ||
![]() |
7105bc85e3 | ||
![]() |
61c10821b6 | ||
![]() |
ea3f99654d | ||
![]() |
30f494fc35 | ||
![]() |
367e58a8cf | ||
![]() |
99274b9c73 |
9
.editorconfig
Normal file
9
.editorconfig
Normal file
@@ -0,0 +1,9 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
* text=lf
|
5
.gitignore
vendored
5
.gitignore
vendored
@@ -2,8 +2,13 @@
|
||||
node_modules
|
||||
005_references/
|
||||
_archive/
|
||||
|
||||
_del
|
||||
*.bak
|
||||
*.log
|
||||
*.del
|
||||
**/_del
|
||||
|
||||
**/volumes/**
|
||||
006_lab
|
||||
**/*.draft
|
||||
|
12
.vscode/extensions.json
vendored
Normal file
12
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"aflalo.dbml-formatter",
|
||||
"bierner.markdown-mermaid",
|
||||
"christian-kohler.path-intellisense",
|
||||
"esbenp.prettier-vscode",
|
||||
"humao.rest-client",
|
||||
"matt-meyers.vscode-dbml",
|
||||
"nicolas-liger.dbml-viewer",
|
||||
"yzhang.markdown-all-in-one"
|
||||
]
|
||||
}
|
21
.vscode/settings.json
vendored
Normal file
21
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[javascriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[jsonc]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"workbench.iconTheme": "material-icon-theme",
|
||||
"workbench.colorTheme": "Default Dark Modern",
|
||||
"editor.formatOnSave": true,
|
||||
"git.ignoreLimitWarning": true
|
||||
}
|
25
000_AI_WORKSPACE/software-engineer/_examples/001_clone.md
Normal file
25
000_AI_WORKSPACE/software-engineer/_examples/001_clone.md
Normal file
@@ -0,0 +1,25 @@
|
||||
this `tsx` file is clone from elsewhere, please understand, modify and update the content of `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/app/dashboard/teachers/view/[id]/page.tsx.draft` to handle `Teacher` record thanks, modify comments/variables/paths/functions name please
|
||||
|
||||
---
|
||||
|
||||
please review and update all tsx files in folder `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/Users` to make it handle `user` record thanks
|
||||
|
||||
---
|
||||
|
||||
<!-- read and understand @/_AI_WORKSPACE/greetings/001_greetings.md -->
|
||||
## clone source code from one type to another
|
||||
|
||||
please understand, modify and update the content of `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/teacher/_GUIDELINES.md` to handle `Teacher` record thanks,
|
||||
modify comments/variables/paths/functions name please
|
||||
|
||||
---
|
||||
|
||||
please help to update the tsx files inside folder `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/student` to handle the `student` record
|
||||
|
||||
## steps
|
||||
|
||||
- list all `tsx` files inside directory, remember the list
|
||||
- clone the original `<original>.tsx` files to `<original>.tsx.draft`
|
||||
- do all your modification within `<original>.tsx.draft` files, leave `original.tsx` unchange
|
||||
|
||||
---
|
@@ -12,10 +12,15 @@ and i want to update it to my current `dbml` file (one way process for documenta
|
||||
- one collection from `json` file mapped with one table in `dbml` file
|
||||
- the `presentable` field from `json` file should be ignored.
|
||||
- the `id` of collection in `json` file should be jod down in the comment of `dbml` file as an reference.
|
||||
- you can find the comments in `schema.dbml` contains `pb_xxx` and that is the reference to the table in `schema.json` file.
|
||||
|
||||
## steps
|
||||
|
||||
- list the collection
|
||||
|
||||
## information
|
||||
|
||||
json file: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/schema.json`
|
||||
json file: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006/schema.json`
|
||||
dbml file: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006/schema.dbml`
|
||||
|
||||
## FAQ
|
||||
@@ -23,5 +28,6 @@ dbml file: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/letter
|
||||
1. 对于json中有但dbml中没有的表,应该如何处理? 添加为新表
|
||||
1. 是否需要保留dbml文件中现有的注释和关系定义? 完全保留
|
||||
1. 字段类型映射是否有特殊规则? 沒有
|
||||
1. please keep the existing comment
|
||||
|
||||
thanks
|
@@ -0,0 +1,11 @@
|
||||
# Greetings
|
||||
|
||||
Hi,
|
||||
Imaging you are a software engineer and i will send you the guideline.
|
||||
plesae read it, prepare yourself and i will tell you the task afterwards
|
||||
|
||||
please read and understand the markdown files in directory
|
||||
`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/000_AI_WORKSPACE/software_engineer/greetings`,
|
||||
it provides background information of project i want you to help.
|
||||
|
||||
thanks
|
@@ -0,0 +1,32 @@
|
||||
# guideline
|
||||
|
||||
## principles
|
||||
|
||||
- at any time, please keep your answer, solution, explaination simple and short (K.I.S.S. or 大道至簡)
|
||||
- please divide the problem into small parts
|
||||
- if you found youself cannot understand the problem, please stop and ask how to do
|
||||
- if you found youself cannot solve the problem, plesae stop and ask how to do
|
||||
- review the whole solution before you reply to user
|
||||
- if code syntax is already there, do follow (e.g. naming convention, syntax) the existing code
|
||||
- no need to explain the reason until you are told to do so
|
||||
- no need to show me the code change, at the end just simple summary in point form is ok
|
||||
|
||||
## highlighted project directories and their meanings
|
||||
|
||||
- `_ignore_this_directory` please ignore this directory and any files inside it
|
||||
|
||||
- `001_documentation` documentation of this project
|
||||
- `002_source` source code of this project
|
||||
- `002_source/cms` home of Context management system of this project
|
||||
- use singular form for `src/components/dashboard` (e.g. `src/components/dashboard/student`)
|
||||
- use plural form for `src/app/dashboard` (e.g. `src/app/dashboard/students`)
|
||||
- `002_source/ionic_mobile` home of mobile client of this project
|
||||
- `002_source/pocketbase` home of pocketbase home directory this project
|
||||
- `003_test` e2e test of this project (not yet implemented)
|
||||
- `004_marketing` marketing page of this project (not yet implemented)
|
||||
- `005_references` opensource refence of this project
|
||||
- `006_lab` my test (POC) of this project
|
||||
- `README.md` Readme of this project
|
||||
- `TODO.md` todo list of this project
|
||||
|
||||
- if the directory contains `_GUIDELINES.md`, please read it before operation
|
@@ -0,0 +1,12 @@
|
||||
# Knowledgebase
|
||||
|
||||
you can answer the question with below knowledge:
|
||||
|
||||
## frameworks and stacks
|
||||
|
||||
- if code syntax is already there, do follow (e.g. naming convention, syntax) the existing code
|
||||
- make use of MCP `Context7` when you troubleshoot the problem with below topics:
|
||||
- [pocketbase javascript SDK](https://context7.com/pocketbase/js-sdk/llms.txt)
|
||||
- [DBML](https://context7.com/holistics/dbml/llms.txt)
|
||||
- [ionic framework](https://context7.com/ionic-team/ionic-framework/llms.txt)
|
||||
- [nextjs 14 app router](https://context7.com/nextjsargentina/next.js-docs/llms.txt)
|
22
000_AI_WORKSPACE/software-engineer/greetings/010_FAQ.md
Normal file
22
000_AI_WORKSPACE/software-engineer/greetings/010_FAQ.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# FAQ
|
||||
|
||||
Q: where is `dbml` file ?
|
||||
A: dbml file located in `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006/schema.dbml`
|
||||
|
||||
Q: when file not found, do i need to search it in `_ignore_this_directory` ?
|
||||
A: No, you just stop there and voice out.
|
||||
|
||||
Q: Shall I assume the component is already exist ?
|
||||
A: yes, you can assume that
|
||||
|
||||
Q: Is `COL_USER_METAS` the collection for User related (e.g. `Teacher`, `Student`) collections?
|
||||
A: yes
|
||||
|
||||
Q: Shall I verify `import` or `types` when do modification job ?
|
||||
A: No, you just replace the name of the function, variables etc is ok. no need to check for dependencies thanks.
|
||||
|
||||
Q: how to list files with `.tsx.draft` extensions in `src/db/UserMetas` folder?
|
||||
A: using command like `find src/db/UserMetas -name "*.tsx.draft" -type f -ls` to list the files with `.tsx.draft` extendions only exist in `src/db/UserMetas`
|
||||
|
||||
Q: when user want to modify `.tsx.draft` file, do i need to take care the `.tsx` file as well?
|
||||
A: No, no don't need to, user will handle the remaining modifications. please restrict your modification in the mentioned file or directory only.
|
@@ -1,4 +1,4 @@
|
||||
# AI GUIDELINE
|
||||
# database and schemas
|
||||
|
||||
## getting started
|
||||
|
||||
@@ -16,29 +16,24 @@ they will:
|
||||
|
||||
## project background and initial setup
|
||||
|
||||
- No need to reply me what you are going on and your digest in this phase.
|
||||
- **IMPORTANT**: No need to reply me what you are going on and your digest in this phase.
|
||||
No need to show me your code plan
|
||||
Just reply me "OK" when done
|
||||
|
||||
- base_dir=`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project`
|
||||
|
||||
- `schema.dbml`
|
||||
|
||||
- read `<base_dir>/001_documentation/Requirements/REQ0006/schema.dbml`
|
||||
this is file in `dbml` format stating the main database structure
|
||||
|
||||
- `schema.json`
|
||||
|
||||
- read `<base_dir>/002_source/cms/src/db/schema.json`
|
||||
this is the file of current pocketbase schema
|
||||
|
||||
- read `<base_dir>/002_source/cms/src/constants.ts`
|
||||
this is the content of `@/constants`
|
||||
|
||||
- look into the md files in folder `<base_dir>/002_source/cms/_AI_WORKSPACE/001_guideline`
|
||||
|
||||
- directory may contain `repomix-output.xml` file, that is a simple summary of all files inside the directory
|
||||
- look into the md files in folder `<base_dir>/002_source/ionic_mobile/_AI_WORKSPACE/001_guideline`
|
||||
|
||||
- if the directory user provided contins `_GUIDELINES.md`, please read the file
|
||||
|
||||
- read the files, remember and link up the ideas in file stated above,
|
||||
i will tell them the task afterwards
|
||||
- read the files, remember and link up the ideas in file stated above, i will tell them the task afterwards
|
||||
|
||||
- please review at least 3 times after you modified the code
|
21
000_AI_WORKSPACE/testing-engineer/_examples/001_clone.md
Normal file
21
000_AI_WORKSPACE/testing-engineer/_examples/001_clone.md
Normal file
@@ -0,0 +1,21 @@
|
||||
please review and update all tsx files in folder `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/Users` to make it handle `user` record thanks
|
||||
|
||||
---
|
||||
|
||||
<!-- read and understand @/_AI_WORKSPACE/greetings/001_greetings.md -->
|
||||
## clone source code from one type to another
|
||||
|
||||
please understand, modify and update the content of `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/teacher/_GUIDELINES.md` to handle `Teacher` record thanks,
|
||||
modify comments/variables/paths/functions name please
|
||||
|
||||
---
|
||||
|
||||
please help to update the tsx files inside folder `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/student` to handle the `student` record
|
||||
|
||||
## steps
|
||||
|
||||
- list all `tsx` files inside directory, remember the list
|
||||
- clone the original `<original>.tsx` files to `<original>.tsx.draft`
|
||||
- do all your modification within `<original>.tsx.draft` files, leave `original.tsx` unchange
|
||||
|
||||
---
|
@@ -0,0 +1,33 @@
|
||||
Hi, i need your help.
|
||||
|
||||
## task
|
||||
|
||||
i am working on a `dbml` file
|
||||
i got a `schema.json` which is exported from pocketbase
|
||||
and i want to update it to my current `dbml` file (one way process for documentation usage)
|
||||
|
||||
## Rules
|
||||
|
||||
- the collection from `json` file started with `_` can be ignored. they are system collection and should not appear in `dbml`
|
||||
- one collection from `json` file mapped with one table in `dbml` file
|
||||
- the `presentable` field from `json` file should be ignored.
|
||||
- the `id` of collection in `json` file should be jod down in the comment of `dbml` file as an reference.
|
||||
- you can find the comments in `schema.dbml` contains `pb_xxx` and that is the reference to the table in `schema.json` file.
|
||||
|
||||
## steps
|
||||
|
||||
- list the collection
|
||||
|
||||
## information
|
||||
|
||||
json file: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006/schema.json`
|
||||
dbml file: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006/schema.dbml`
|
||||
|
||||
## FAQ
|
||||
|
||||
1. 对于json中有但dbml中没有的表,应该如何处理? 添加为新表
|
||||
1. 是否需要保留dbml文件中现有的注释和关系定义? 完全保留
|
||||
1. 字段类型映射是否有特殊规则? 沒有
|
||||
1. please keep the existing comment
|
||||
|
||||
thanks
|
@@ -0,0 +1,8 @@
|
||||
Hi, i will send you the guideline,
|
||||
plesae read it, prepare yourself and i will tell you the task afterwards
|
||||
|
||||
please read and understand the markdown files in directory
|
||||
`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/000_AI_WORKSPACE/_AI_WORKSPACE/greetings`,
|
||||
it provides background information of project i want you to help.
|
||||
|
||||
thanks
|
28
000_AI_WORKSPACE/testing-engineer/greetings/002_guideline.md
Normal file
28
000_AI_WORKSPACE/testing-engineer/greetings/002_guideline.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# guideline
|
||||
|
||||
## principles
|
||||
|
||||
- at any time, please keep your answer, solution, explaination simple and short (K.I.S.S. or 大道至簡)
|
||||
- please divide the problem into small parts
|
||||
- if you found youself cannot understand the problem, please stop and ask how to do
|
||||
- if you found youself cannot solve the problem, plesae stop and ask how to do
|
||||
- review the whole solution before you reply to user
|
||||
- if code syntax is already there, do follow (e.g. naming convention, syntax) the existing code
|
||||
- no need to explain the reason until you are told to do so
|
||||
- no need to show me the code change, at the end just simple summary in point form is ok
|
||||
|
||||
## highlighted project directories and their meanings
|
||||
|
||||
- `_ignore_this_directory` please ignore this directory and any files inside it
|
||||
|
||||
- `001_documentation` documentation of this project
|
||||
- `002_source` source code of this project
|
||||
- `002_source/cms` home of Context management system of this project
|
||||
- `002_source/ionic_mobile` home of mobile client of this project
|
||||
- `002_source/pocketbase` home of pocketbase home directory this project
|
||||
- `003_test` e2e test of this project (not yet implemented)
|
||||
- `004_marketing` marketing page of this project (not yet implemented)
|
||||
- `005_references` opensource refence of this project
|
||||
- `006_lab` my test (POC) of this project
|
||||
- `README.md` Readme of this project
|
||||
- `TODO.md` todo list of this project
|
@@ -0,0 +1,12 @@
|
||||
# Knowledgebase
|
||||
|
||||
you can answer the question with below knowledge:
|
||||
|
||||
## frameworks and stacks
|
||||
|
||||
- if code syntax is already there, do follow (e.g. naming convention, syntax) the existing code
|
||||
- make use of MCP `Context7` when you troubleshoot the problem with below topics:
|
||||
- [pocketbase javascript SDK](https://context7.com/pocketbase/js-sdk/llms.txt)
|
||||
- [DBML](https://context7.com/holistics/dbml/llms.txt)
|
||||
- [ionic framework](https://context7.com/ionic-team/ionic-framework/llms.txt)
|
||||
- [nextjs 14 app router](https://context7.com/nextjsargentina/next.js-docs/llms.txt)
|
7
000_AI_WORKSPACE/testing-engineer/greetings/010_FAQ.md
Normal file
7
000_AI_WORKSPACE/testing-engineer/greetings/010_FAQ.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# FAQ
|
||||
|
||||
Q: where is `dbml` file ?
|
||||
A: dbml file located in `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006/schema.dbml`
|
||||
|
||||
Q: when file not found, do i need to search it in `_ignore_this_directory` ?
|
||||
A: No, you just stop there and voice out.
|
@@ -1,4 +1,4 @@
|
||||
# AI GUIDELINE
|
||||
# database and schemas
|
||||
|
||||
## getting started
|
||||
|
||||
@@ -23,19 +23,14 @@ they will:
|
||||
- base_dir=`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project`
|
||||
|
||||
- `schema.dbml`
|
||||
|
||||
- read `<base_dir>/001_documentation/Requirements/REQ0006/schema.dbml`
|
||||
this is file in `dbml` format stating the main database structure
|
||||
|
||||
- `schema.json`
|
||||
|
||||
- read `<base_dir>/002_source/cms/src/db/schema.json`
|
||||
this is the file of current pocketbase schema
|
||||
|
||||
- read `<base_dir>/002_source/cms/src/constants.ts`
|
||||
this is the content of `@/constants`
|
||||
|
||||
- look into the md files in folder `<base_dir>/002_source/cms/_AI_WORKSPACE/001_guideline`
|
||||
- look into the md files in folder `<base_dir>/002_source/ionic_mobile/_AI_WORKSPACE/001_guideline`
|
||||
|
||||
- if the directory user provided contins `_GUIDELINES.md`, please read the file
|
||||
|
||||
@@ -45,5 +40,9 @@ they will:
|
||||
|
||||
## frameworks documentation and samples
|
||||
|
||||
- `MUI`
|
||||
- `<base_dir>/002_source/cms/src/components/widgets/forms` contains sample forms,
|
||||
- react
|
||||
- ionic and capacitor
|
||||
- pocketbase
|
||||
- tanstack/react-query
|
||||
- vite
|
||||
- typescript
|
2
001_documentation/.vscode/extensions.json
vendored
2
001_documentation/.vscode/extensions.json
vendored
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"redhat.vscode-yaml",
|
||||
"yzhang.markdown-all-in-one",
|
||||
"esbenp.prettier-vscode",
|
||||
"ms-python.python",
|
||||
@@ -8,7 +7,6 @@
|
||||
"ms-python.debugpy",
|
||||
"ms-python.black-formatter",
|
||||
"ms-python.isort",
|
||||
"ms-python.pylint",
|
||||
"bierner.markdown-mermaid",
|
||||
"shd101wyy.markdown-preview-enhanced",
|
||||
"yzhang.markdown-all-in-one",
|
||||
|
@@ -24,5 +24,4 @@ mindmap
|
||||
Tools
|
||||
Pen and paper
|
||||
Mermaid
|
||||
|
||||
```
|
||||
|
@@ -1,9 +1,27 @@
|
||||
---
|
||||
tags: mobile, lesson
|
||||
tags: time
|
||||
---
|
||||
|
||||
# lesson page documentation
|
||||
# time tracking
|
||||
|
||||
it should have a lesson page
|
||||
T.B.A.
|
||||
|
||||

|
||||
```mermaid
|
||||
gantt
|
||||
title A Gantt Diagram
|
||||
dateFormat YYYY-MM-DD
|
||||
section Section
|
||||
A task :a1, 2014-01-01, 30d
|
||||
Another task :after a1, 20d
|
||||
section Another
|
||||
Task in Another :2014-01-12, 12d
|
||||
another task :24d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## TODOs of the project
|
||||
|
||||
- [cms TODO](../../../002_source/cms/TODO.md)
|
||||
- [ionic TODO](../../../002_source/ionic_mobile/TODO.md)
|
||||
- [pocketbase TODO](../../../002_source/pocketbase/TODO.md)
|
||||
|
@@ -1,10 +1,12 @@
|
||||
# task
|
||||
|
||||
update `dbml` from `schema.json`
|
||||
update `dbml` from `schema.json`, for collection `billingAddress`
|
||||
|
||||
## things to note
|
||||
## Background information
|
||||
|
||||
1. please skip `presentable` properties from `schema.json`
|
||||
1. please ignore `presentable` properties from `schema.json`, this is for pocketbase internal usage
|
||||
1. please ignore collections with `_` as its first character, this is for pocketbase internal usage
|
||||
1. just return the collection with `billingAddress` is ok, please ignore other collections
|
||||
|
||||
## steps
|
||||
|
||||
@@ -13,6 +15,6 @@ update `dbml` from `schema.json`
|
||||
1. currently the collection in `schama.json` is mapped to table in `schema.dbml`
|
||||
1. compare the `schema.json` and `schema.dbml`, remember the differences
|
||||
1. you may found some comment already exist in `schema.dbml`, please keep them
|
||||
1. while keeping `schema.json` content unchanged. write file to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006/schema.dbml` content based on `schema.json`.
|
||||
1. while keeping `schema.json` content unchanged. write file to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006/schema_ai_draft.dbml` content based on `schema.json`.
|
||||
|
||||
thanks.
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# LessonCategories / LessonCategory
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listLessonCategories.ts to cover `LessonCategories`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistLessonCategories,`
|
||||
- `getListByFilterLessonCategories,`
|
||||
- `getFirstListItemLessonCategories,`
|
||||
- `getOneLessonCategory,`
|
||||
- `getListLessonCategoryById`
|
||||
|
||||
thanks
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# LessonTypes / LessonType
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listLessonTypes.ts to cover `LessonTypes`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistLessonTypes,`
|
||||
- `getListByFilterLessonTypes,`
|
||||
- `getFirstListItemLessonTypes,`
|
||||
- `getOneLessonType,`
|
||||
- `getListLessonTypeById`
|
||||
|
||||
thanks
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# QuizCategories / QuizCategory
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listQuizCategories.ts to cover `QuizCategories`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistQuizCategories,`
|
||||
- `getListByFilterQuizCategories,`
|
||||
- `getFirstListItemQuizCategories,`
|
||||
- `getOneQuizCategory,`
|
||||
- `getListQuizCategoryById`
|
||||
|
||||
thanks
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# QuizConnectives / QuizConnective
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listQuizConnectives.ts to cover `QuizConnectives`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistQuizConnectives,`
|
||||
- `getListByFilterQuizConnectives,`
|
||||
- `getFirstListItemQuizConnectives,`
|
||||
- `getOneQuizConnective,`
|
||||
- `getListQuizConnectiveById`
|
||||
|
||||
thanks
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# QuizConnectivesCategories / QuizConnectivesCategory
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listQuizConnectivesCategories.ts to cover `QuizConnectivesCategories`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistQuizConnectivesCategories,`
|
||||
- `getListByFilterQuizConnectivesCategories,`
|
||||
- `getFirstListItemQuizConnectivesCategories,`
|
||||
- `getOneQuizConnectivesCategory,`
|
||||
- `getListQuizConnectivesCategoryById`
|
||||
|
||||
thanks
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# QuizListenings / QuizListening
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listQuizListenings.ts to cover `QuizListenings`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistQuizListenings,`
|
||||
- `getListByFilterQuizListenings,`
|
||||
- `getFirstListItemQuizListenings,`
|
||||
- `getOneQuizListening,`
|
||||
- `getListQuizListeningById`
|
||||
|
||||
thanks
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# QuizMatchings / QuizMatching
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listQuizMatchings.ts to cover `QuizMatchings`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistQuizMatchings,`
|
||||
- `getListByFilterQuizMatchings,`
|
||||
- `getFirstListItemQuizMatchings,`
|
||||
- `getOneQuizMatching,`
|
||||
- `getListQuizMatchingById`
|
||||
|
||||
thanks
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# UserMetas / UserMeta
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listUserMetas.ts to cover `UserMetas`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistUserMetas,`
|
||||
- `getListByFilterUserMetas,`
|
||||
- `getFirstListItemUserMetas,`
|
||||
- `getOneUserMeta,`
|
||||
- `getListUserMetaById`
|
||||
|
||||
thanks
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# Users / User
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listUsers.ts to cover `Users`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistUsers,`
|
||||
- `getListByFilterUsers,`
|
||||
- `getFirstListItemUsers,`
|
||||
- `getOneUser,`
|
||||
- `getListUserById`
|
||||
|
||||
thanks
|
@@ -1,20 +0,0 @@
|
||||
|
||||
# Vocabularies / Vocabulary
|
||||
|
||||
Hi, using information from
|
||||
|
||||
- @schema.dbml for schemas, fields and table names,
|
||||
- @listHelloworld.ts for skeleton for ts script
|
||||
- @listVocabularies.ts, @listUserMetas.ts, @listQuizListening.ts, @listQuisMatching.ts, @listQuizConnectivesCategories for reference
|
||||
|
||||
extend @listVocabularies.ts to cover `Vocabularies`,
|
||||
draft `ts` code
|
||||
|
||||
- `CRUD`
|
||||
- `getFulllistVocabularies,`
|
||||
- `getListByFilterVocabularies,`
|
||||
- `getFirstListItemVocabularies,`
|
||||
- `getOneVocabulary,`
|
||||
- `getListVocabularyById`
|
||||
|
||||
thanks
|
6
001_documentation/Requirements/REQ0006/_GUIDELINE.md
Normal file
6
001_documentation/Requirements/REQ0006/_GUIDELINE.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# GUIDELINES
|
||||
|
||||
- `schema.dbml` means DB schema in `dbml` format
|
||||
- `schema.json` contains the exported DB schema from pocketbase
|
||||
- the `Collection ID: xxx` in `dbml` file contains the collection `id` mapping from `schema.json`
|
||||
- the `presentable` field from `json` file should be ignored.
|
86
001_documentation/Requirements/REQ0006/convert.js
Normal file
86
001_documentation/Requirements/REQ0006/convert.js
Normal file
@@ -0,0 +1,86 @@
|
||||
//
|
||||
// # REQ0015:
|
||||
// ## PURPOSE:
|
||||
//
|
||||
// This is a script to convert `schema.json` exported from pocketbase to dbml formatted file `schema.dbml`
|
||||
//
|
||||
//
|
||||
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
// Load schema.json
|
||||
const schemaPath = path.join(process.cwd(), "schema.json");
|
||||
const schema = JSON.parse(fs.readFileSync(schemaPath, "utf8"));
|
||||
|
||||
// Type mapping from PocketBase to DBML/SQL
|
||||
const typeMapping = {
|
||||
text: "text",
|
||||
number: "integer",
|
||||
bool: "boolean",
|
||||
email: "text",
|
||||
url: "varchar",
|
||||
date: "datetime",
|
||||
select: "varchar",
|
||||
json: "text",
|
||||
file: "file",
|
||||
password: "varchar",
|
||||
relation: "integer", // Assuming relations are stored as integer IDs
|
||||
autodate: "datetime",
|
||||
};
|
||||
|
||||
function convertToDBML(schema) {
|
||||
let dbml = "";
|
||||
dbml = "// Generated at: " + new Date().toISOString();
|
||||
dbml = dbml + "\n\n\n";
|
||||
|
||||
let collectionIdToTableMapping = {};
|
||||
for (const [idx, tableDef] of Object.entries(schema)) {
|
||||
collectionIdToTableMapping[tableDef.id] = tableDef.name;
|
||||
}
|
||||
|
||||
for (const [idx, tableDef] of Object.entries(schema)) {
|
||||
console.log({ idx });
|
||||
dbml += `// \n`;
|
||||
dbml += `// collection id: ${tableDef.id} \n`;
|
||||
dbml += `// collection name: ${tableDef.name} \n`;
|
||||
dbml += `// collection type: ${tableDef.type} \n`;
|
||||
dbml += `Table ${tableDef.name} {\n`;
|
||||
|
||||
for (const field of tableDef.fields) {
|
||||
// Get field type
|
||||
let fieldType = typeMapping[field.type] || "text";
|
||||
|
||||
// Handle special cases
|
||||
if (field.type === "number" && field.options?.max === 1) {
|
||||
fieldType = "boolean";
|
||||
}
|
||||
|
||||
// Build field definition
|
||||
let line = ` ${field.name} ${fieldType}`;
|
||||
|
||||
// Add constraints
|
||||
const constraints = [];
|
||||
if (field.name === "id" || field.primary) constraints.push("pk");
|
||||
if (field.required) constraints.push("not null");
|
||||
if (constraints.length > 0) line += ` [${constraints.join(", ")}]`;
|
||||
|
||||
if (field.collectionId) {
|
||||
line += ` [ref: > ${
|
||||
collectionIdToTableMapping[field.collectionId]
|
||||
}.id] // ${field.id}`;
|
||||
}
|
||||
|
||||
dbml += `${line}\n`;
|
||||
console.log({ line });
|
||||
}
|
||||
|
||||
dbml += "}\n\n";
|
||||
}
|
||||
|
||||
return dbml;
|
||||
}
|
||||
|
||||
// Convert and save
|
||||
const dbmlOutput = convertToDBML(schema);
|
||||
fs.writeFileSync("schema.dbml", dbmlOutput);
|
||||
console.log("DBML file generated successfully!");
|
@@ -0,0 +1,31 @@
|
||||
import { faker } from "@faker-js/faker";
|
||||
|
||||
const getId = (id) => id.padStart(15, "0");
|
||||
|
||||
const row_array = Array.from({ length: 10 }, (_, i) => [
|
||||
getId(String(i + 1)),
|
||||
faker.person.firstName(),
|
||||
"",
|
||||
faker.internet.email(),
|
||||
faker.phone.number(),
|
||||
faker.company.name(),
|
||||
{
|
||||
country: faker.location.country(),
|
||||
state: faker.location.state(),
|
||||
city: faker.location.city(),
|
||||
zipCode: faker.location.zipCode(),
|
||||
line1: faker.location.streetAddress(),
|
||||
line2: faker.location.secondaryAddress(),
|
||||
},
|
||||
Math.floor(Math.random() * (100 - 0 + 1)) + 0,
|
||||
faker.location.timeZone(),
|
||||
["en", "de", "es", "fr", "ja", "ko", "zh-CN"].sort(
|
||||
() => Math.random() - 0.5
|
||||
)[0],
|
||||
faker.finance.currencyCode(),
|
||||
]);
|
||||
|
||||
import fs from "fs";
|
||||
const filePath = "output.json";
|
||||
fs.writeFileSync(filePath, JSON.stringify(row_array, null, 2));
|
||||
console.log(`Wrote ${row_array.length} records to ${filePath}`);
|
202
001_documentation/Requirements/REQ0006/gen_customer/output.json
Normal file
202
001_documentation/Requirements/REQ0006/gen_customer/output.json
Normal file
@@ -0,0 +1,202 @@
|
||||
[
|
||||
[
|
||||
"000000000000001",
|
||||
"May",
|
||||
"",
|
||||
"June_Wintheiser33@hotmail.com",
|
||||
"281-378-5900 x822",
|
||||
"Green, Rempel and Hoeger",
|
||||
{
|
||||
"country": "Central African Republic",
|
||||
"state": "Arizona",
|
||||
"city": "Winfieldburgh",
|
||||
"zipCode": "92017-8004",
|
||||
"line1": "1838 Willa Freeway",
|
||||
"line2": "Suite 307"
|
||||
},
|
||||
98,
|
||||
"Asia/Urumqi",
|
||||
"de",
|
||||
"MUR"
|
||||
],
|
||||
[
|
||||
"000000000000002",
|
||||
"Marilyne",
|
||||
"",
|
||||
"Carol_Blick@yahoo.com",
|
||||
"(893) 919-2445 x193",
|
||||
"White - Hessel",
|
||||
{
|
||||
"country": "Iraq",
|
||||
"state": "Nevada",
|
||||
"city": "Casa Grande",
|
||||
"zipCode": "83831-3843",
|
||||
"line1": "6984 Alberto Radial",
|
||||
"line2": "Suite 154"
|
||||
},
|
||||
49,
|
||||
"Africa/Tunis",
|
||||
"zh-CN",
|
||||
"CHF"
|
||||
],
|
||||
[
|
||||
"000000000000003",
|
||||
"Jacklyn",
|
||||
"",
|
||||
"Tamara_Lynch11@yahoo.com",
|
||||
"597-593-0144 x168",
|
||||
"Rolfson LLC",
|
||||
{
|
||||
"country": "Grenada",
|
||||
"state": "Georgia",
|
||||
"city": "New Brodyfort",
|
||||
"zipCode": "18887-7075",
|
||||
"line1": "493 Pfannerstill Meadow",
|
||||
"line2": "Apt. 358"
|
||||
},
|
||||
44,
|
||||
"Asia/Manila",
|
||||
"zh-CN",
|
||||
"CDF"
|
||||
],
|
||||
[
|
||||
"000000000000004",
|
||||
"Alana",
|
||||
"",
|
||||
"Ahmed_Willms@hotmail.com",
|
||||
"401.212.0386 x31125",
|
||||
"Friesen, Langworth and Thompson",
|
||||
{
|
||||
"country": "Australia",
|
||||
"state": "North Carolina",
|
||||
"city": "Fort Jerrell",
|
||||
"zipCode": "14211",
|
||||
"line1": "1763 West Street",
|
||||
"line2": "Suite 699"
|
||||
},
|
||||
34,
|
||||
"America/Boa_Vista",
|
||||
"ja",
|
||||
"KES"
|
||||
],
|
||||
[
|
||||
"000000000000005",
|
||||
"Rocky",
|
||||
"",
|
||||
"Angela_Kuhic@gmail.com",
|
||||
"653.964.0412",
|
||||
"Hayes - Morar",
|
||||
{
|
||||
"country": "Reunion",
|
||||
"state": "New York",
|
||||
"city": "Kayton",
|
||||
"zipCode": "82048-0645",
|
||||
"line1": "636 Angel Junction",
|
||||
"line2": "Apt. 361"
|
||||
},
|
||||
70,
|
||||
"America/Grand_Turk",
|
||||
"fr",
|
||||
"PGK"
|
||||
],
|
||||
[
|
||||
"000000000000006",
|
||||
"Carmela",
|
||||
"",
|
||||
"Larry94@hotmail.com",
|
||||
"1-508-980-1889 x134",
|
||||
"Goodwin - Brown",
|
||||
{
|
||||
"country": "Heard Island and McDonald Islands",
|
||||
"state": "Wisconsin",
|
||||
"city": "Jalenbury",
|
||||
"zipCode": "75732-7013",
|
||||
"line1": "669 Sven Trail",
|
||||
"line2": "Suite 409"
|
||||
},
|
||||
48,
|
||||
"Asia/Karachi",
|
||||
"fr",
|
||||
"AMD"
|
||||
],
|
||||
[
|
||||
"000000000000007",
|
||||
"Lucious",
|
||||
"",
|
||||
"Lera67@yahoo.com",
|
||||
"(684) 748-3653 x8745",
|
||||
"Harvey - Kilback",
|
||||
{
|
||||
"country": "Israel",
|
||||
"state": "Maryland",
|
||||
"city": "East Allenmouth",
|
||||
"zipCode": "21779",
|
||||
"line1": "6070 W Grand Avenue",
|
||||
"line2": "Suite 448"
|
||||
},
|
||||
83,
|
||||
"America/St_Barthelemy",
|
||||
"en",
|
||||
"SBD"
|
||||
],
|
||||
[
|
||||
"000000000000008",
|
||||
"Anika",
|
||||
"",
|
||||
"Shane.Moore@gmail.com",
|
||||
"(996) 909-3575 x614",
|
||||
"Donnelly, Larson and Stamm",
|
||||
{
|
||||
"country": "Canada",
|
||||
"state": "Michigan",
|
||||
"city": "Lafayette",
|
||||
"zipCode": "90430-8775",
|
||||
"line1": "430 Orland Place",
|
||||
"line2": "Suite 891"
|
||||
},
|
||||
64,
|
||||
"America/Toronto",
|
||||
"fr",
|
||||
"PKR"
|
||||
],
|
||||
[
|
||||
"000000000000009",
|
||||
"Otto",
|
||||
"",
|
||||
"Emery_Wisozk@yahoo.com",
|
||||
"1-602-251-7035 x9461",
|
||||
"Kreiger - Boehm",
|
||||
{
|
||||
"country": "South Georgia and the South Sandwich Islands",
|
||||
"state": "Colorado",
|
||||
"city": "Lake Isaias",
|
||||
"zipCode": "26025-5909",
|
||||
"line1": "143 Kautzer Unions",
|
||||
"line2": "Apt. 752"
|
||||
},
|
||||
98,
|
||||
"Africa/Ndjamena",
|
||||
"fr",
|
||||
"JOD"
|
||||
],
|
||||
[
|
||||
"000000000000010",
|
||||
"Cortez",
|
||||
"",
|
||||
"Jameson13@hotmail.com",
|
||||
"1-660-472-1494",
|
||||
"Parisian LLC",
|
||||
{
|
||||
"country": "Mali",
|
||||
"state": "Illinois",
|
||||
"city": "Stammburgh",
|
||||
"zipCode": "92318",
|
||||
"line1": "7669 Jude Drive",
|
||||
"line2": "Apt. 594"
|
||||
},
|
||||
59,
|
||||
"Africa/Lubumbashi",
|
||||
"en",
|
||||
"VND"
|
||||
]
|
||||
]
|
33
001_documentation/Requirements/REQ0006/gen_customer/package-lock.json
generated
Normal file
33
001_documentation/Requirements/REQ0006/gen_customer/package-lock.json
generated
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "gen_customer",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "gen_customer",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@faker-js/faker": "^9.7.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@faker-js/faker": {
|
||||
"version": "9.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.7.0.tgz",
|
||||
"integrity": "sha512-aozo5vqjCmDoXLNUJarFZx2IN/GgGaogY4TMJ6so/WLZOWpSV7fvj2dmrV6sEAnUm1O7aCrhTibjpzeDFgNqbg==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/fakerjs"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18.0.0",
|
||||
"npm": ">=9.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "gen_customer",
|
||||
"version": "1.0.0",
|
||||
"main": "gen_customer.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"description": "",
|
||||
"devDependencies": {
|
||||
"@faker-js/faker": "^9.7.0"
|
||||
}
|
||||
}
|
23
001_documentation/Requirements/REQ0006/gen_customer/pnpm-lock.yaml
generated
Normal file
23
001_documentation/Requirements/REQ0006/gen_customer/pnpm-lock.yaml
generated
Normal file
@@ -0,0 +1,23 @@
|
||||
lockfileVersion: '9.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
importers:
|
||||
|
||||
.:
|
||||
devDependencies:
|
||||
'@faker-js/faker':
|
||||
specifier: ^9.7.0
|
||||
version: 9.7.0
|
||||
|
||||
packages:
|
||||
|
||||
'@faker-js/faker@9.7.0':
|
||||
resolution: {integrity: sha512-aozo5vqjCmDoXLNUJarFZx2IN/GgGaogY4TMJ6so/WLZOWpSV7fvj2dmrV6sEAnUm1O7aCrhTibjpzeDFgNqbg==}
|
||||
engines: {node: '>=18.0.0', npm: '>=9.0.0'}
|
||||
|
||||
snapshots:
|
||||
|
||||
'@faker-js/faker@9.7.0': {}
|
@@ -1,266 +1,465 @@
|
||||
// Users table with auth fields
|
||||
Table Users {
|
||||
// system field
|
||||
id text [pk]
|
||||
tokenKey text [not null]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
password text [not null]
|
||||
// Generated at: 2025-05-08T05:00:49.862Z
|
||||
|
||||
// value field
|
||||
|
||||
//
|
||||
// collection id: pbc_3142635823
|
||||
// collection name: _superusers
|
||||
// collection type: auth
|
||||
Table _superusers {
|
||||
id text [pk, not null]
|
||||
password varchar [not null]
|
||||
tokenKey text [not null]
|
||||
email text [not null]
|
||||
emailVisibility boolean
|
||||
verified boolean
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: _pb_users_auth_
|
||||
// collection name: users
|
||||
// collection type: auth
|
||||
Table users {
|
||||
id text [pk, not null]
|
||||
password varchar [not null]
|
||||
tokenKey text [not null]
|
||||
email text [not null]
|
||||
emailVisibility boolean
|
||||
verified boolean
|
||||
name text
|
||||
avatar file
|
||||
created datetime
|
||||
updated datetime
|
||||
visible text
|
||||
}
|
||||
|
||||
// LessonTypes stores different types of lessons
|
||||
// lesson_types, lesson_type
|
||||
Table LessonTypes {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`] // timestamp when the lesson type was created
|
||||
updated datetime // timestamp when the lesson type was last updated
|
||||
// value field
|
||||
name text // changed from varchar to text
|
||||
type text // changed from varchar to text
|
||||
//
|
||||
// collection id: pbc_1430376151
|
||||
// collection name: Categories
|
||||
// collection type: base
|
||||
Table Categories {
|
||||
id text [pk, not null]
|
||||
cat_name text
|
||||
cat_image_url text
|
||||
cat_image file
|
||||
pos integer
|
||||
lesson_id integer [ref: > LessonsTypes.id] // relation3455582614
|
||||
remarks text
|
||||
visible text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_108570809
|
||||
// collection name: Customers
|
||||
// collection type: base
|
||||
Table Customers {
|
||||
id text [pk, not null]
|
||||
name text
|
||||
email text
|
||||
phone text
|
||||
quota integer
|
||||
status text
|
||||
avatar_file file
|
||||
user_id integer [ref: > users.id] // relation2809058197
|
||||
billingAddress text
|
||||
timezone text
|
||||
language text
|
||||
currency text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_1196309394
|
||||
// collection name: LessonsCategories
|
||||
// collection type: base
|
||||
Table LessonsCategories {
|
||||
id text [pk, not null]
|
||||
cat_name text
|
||||
cat_image_url text
|
||||
cat_image file
|
||||
pos integer
|
||||
lesson_id integer [ref: > LessonsTypes.id] // relation3455582614
|
||||
description text
|
||||
remarks text
|
||||
visible text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_2328411368
|
||||
// collection name: LessonsTypes
|
||||
// collection type: base
|
||||
Table LessonsTypes {
|
||||
id text [pk, not null]
|
||||
name text
|
||||
type text
|
||||
pos integer
|
||||
visible text
|
||||
field date
|
||||
}
|
||||
|
||||
|
||||
// LessonCategories stores categories of lessons
|
||||
// lesson_categories, lesson_category
|
||||
Table LessonCategories {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`] // timestamp when the category was created
|
||||
updated datetime // timestamp when the category was last updated
|
||||
// value field
|
||||
cat_name text // changed from varchar to text
|
||||
cat_image_url text // new field
|
||||
cat_image file // changed from varchar to file
|
||||
pos integer
|
||||
lesson_id integer [ref: > LessonTypes.id] // foreign key referencing LessonTypes.id
|
||||
description text // new field
|
||||
remarks text // changed from varchar to text
|
||||
visible text // new field
|
||||
}
|
||||
|
||||
Table Helloworlds {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
hello text // new field
|
||||
}
|
||||
|
||||
Table UserMetas {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`]
|
||||
created datetime
|
||||
updated datetime
|
||||
|
||||
// value field
|
||||
helloworld text // changed from varchar to text
|
||||
meta json // new field
|
||||
user_id text [ref: > Users.id] // changed type and reference
|
||||
state text // new field
|
||||
avatar file // changed from blob to file
|
||||
role text // new field
|
||||
field datetime
|
||||
}
|
||||
|
||||
Table QuizCategories {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`]
|
||||
//
|
||||
// collection id: pbc_977978967
|
||||
// collection name: Notifications
|
||||
// collection type: base
|
||||
Table Notifications {
|
||||
id text [pk, not null]
|
||||
read boolean
|
||||
type text
|
||||
author text
|
||||
job text
|
||||
description text
|
||||
NOTI_ID text
|
||||
created datetime
|
||||
updated datetime
|
||||
|
||||
// value field
|
||||
cat_name text // changed from varchar to text
|
||||
cat_image text // changed from varchar to text
|
||||
init_answer json // new field
|
||||
}
|
||||
|
||||
|
||||
// stores all questions of matching frenzy
|
||||
Table QuizMatchings {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
|
||||
// value field
|
||||
word text // changed from varchar to text
|
||||
word_c text // changed from varchar to text
|
||||
cat_id text [ref: > QuizCategories.id] // changed type and reference
|
||||
}
|
||||
|
||||
// QuizListening stores all listening quiz data
|
||||
Table QuizListenings {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
|
||||
// value field
|
||||
sound file // changed from varchar to file
|
||||
word text // changed from varchar to text
|
||||
cat_id text [ref: > QuizCategories.id] // changed type and reference
|
||||
}
|
||||
|
||||
|
||||
// stores all categories of connectives revision quiz
|
||||
Table QuizConnectivesCategories {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
|
||||
// value field
|
||||
cat_name text // changed from varchar to text
|
||||
cat_image file // changed from varchar to file
|
||||
}
|
||||
|
||||
// stores all questions of connectives revision quiz
|
||||
Table QuizConnectives {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
|
||||
// value field
|
||||
question_fh text // changed from varchar to text
|
||||
question_sh text // changed from varchar to text
|
||||
modal_ans text // changed from varchar to text
|
||||
cat_id text [ref: > QuizConnectivesCategories.id] // changed type and reference
|
||||
}
|
||||
|
||||
// Lessons stores all lessons in the database
|
||||
Table Vocabularies {
|
||||
// system field
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`] // timestamp when the lesson was created
|
||||
updated datetime // timestamp when the lesson was last updated
|
||||
|
||||
// value field
|
||||
image file // changed from varchar to file
|
||||
sound file // changed from varchar to file
|
||||
word text // changed from varchar to text
|
||||
word_c text // changed from varchar to text
|
||||
sample_e text // changed from varchar to text
|
||||
sample_c text // changed from varchar to text
|
||||
cat_id text [ref: > LessonCategories.id] // changed type and reference
|
||||
category text // changed from varchar to text
|
||||
lesson_type_id text [ref: > LessonTypes.id] // changed type and reference
|
||||
}
|
||||
|
||||
// Listening Practice Quiz Categories
|
||||
// store listening practice category, (LpCategories, LpCategory)
|
||||
Table QuizLPCategories {
|
||||
// system fields
|
||||
id text [pk]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
|
||||
// value fields
|
||||
//
|
||||
// collection id: pbc_4061499106
|
||||
// collection name: QuizCRCategories
|
||||
// collection type: base
|
||||
Table QuizCRCategories {
|
||||
id text [pk, not null]
|
||||
cat_name text
|
||||
cat_image file
|
||||
pos number
|
||||
init_answer json
|
||||
pos integer
|
||||
init_answer text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_3141885671
|
||||
// collection name: QuizCRQuestions
|
||||
// collection type: base
|
||||
Table QuizCRQuestions {
|
||||
id text [pk, not null]
|
||||
question_fh text
|
||||
question_sh text
|
||||
modal_ans text
|
||||
cat_id integer [ref: > QuizCRCategories.id] // relation1827623476
|
||||
options text
|
||||
created datetime
|
||||
updated datetime
|
||||
init_answer text
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_3571292172
|
||||
// collection name: QuizCategories
|
||||
// collection type: base
|
||||
Table QuizCategories {
|
||||
id text [pk, not null]
|
||||
cat_name text
|
||||
cat_image text
|
||||
init_answer text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_96745150
|
||||
// collection name: QuizConnectives
|
||||
// collection type: base
|
||||
Table QuizConnectives {
|
||||
id text [pk, not null]
|
||||
question_fh text
|
||||
question_sh text
|
||||
modal_ans text
|
||||
cat_id integer [ref: > QuizConnectivesCategories.id] // relation3870140739
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_342761728
|
||||
// collection name: QuizConnectivesCategories
|
||||
// collection type: base
|
||||
Table QuizConnectivesCategories {
|
||||
id text [pk, not null]
|
||||
cat_name text
|
||||
cat_image file
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_3639453778
|
||||
// collection name: QuizLPCategories
|
||||
// collection type: base
|
||||
Table QuizLPCategories {
|
||||
id text [pk, not null]
|
||||
cat_name text
|
||||
cat_image file
|
||||
pos integer
|
||||
init_answer text
|
||||
created datetime
|
||||
updated datetime
|
||||
visible text
|
||||
slug text
|
||||
remarks text
|
||||
description text
|
||||
}
|
||||
|
||||
// Listening Practice Quiz Questions
|
||||
//
|
||||
// collection id: pbc_742947356
|
||||
// collection name: QuizLPQuestions
|
||||
// collection type: base
|
||||
Table QuizLPQuestions {
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`]
|
||||
id text [pk, not null]
|
||||
word text
|
||||
sound file
|
||||
cat_id integer [ref: > QuizLPCategories.id] // relation3870140739
|
||||
created datetime
|
||||
updated datetime
|
||||
word text // changed from varchar to text
|
||||
sound file // changed from blob to file
|
||||
cat_id text [ref: > QuizLPCategories.id] // changed type and reference
|
||||
cat_name text // new field
|
||||
cat_image file // new field
|
||||
pos number // new field
|
||||
init_answer json // new field
|
||||
visible text // new field
|
||||
slug text // new field
|
||||
remarks text // new field
|
||||
description text // new field
|
||||
}
|
||||
|
||||
// Matching Frenzy Quiz Categories
|
||||
Table QuizMFCategories {
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
cat_name text // changed from varchar to text
|
||||
cat_image file // changed from blob to file
|
||||
pos number // changed from integer to number
|
||||
init_answer json
|
||||
visible text // new field
|
||||
}
|
||||
|
||||
// Matching Frenzy Quiz Questions
|
||||
Table QuizMFQuestions {
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
word text // changed from varchar to text
|
||||
word_c text // changed from varchar to text
|
||||
cat_id text [ref: > QuizMFCategories.id] // changed type and reference
|
||||
visible text // new field
|
||||
sound file // new field
|
||||
cat_image file // new field
|
||||
}
|
||||
|
||||
// Connectives Revision Quiz Categories
|
||||
Table QuizCRCategories {
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
cat_name text // changed from varchar to text
|
||||
cat_image file // changed from blob to file
|
||||
cat_name text
|
||||
cat_image file
|
||||
pos integer
|
||||
init_answer json
|
||||
init_answer text
|
||||
visible text
|
||||
slug text
|
||||
remarks text
|
||||
description text
|
||||
}
|
||||
|
||||
// Connectives Revision Quiz Questions
|
||||
Table QuizCRQuestions {
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`]
|
||||
//
|
||||
// collection id: pbc_2511066072
|
||||
// collection name: QuizListenings
|
||||
// collection type: base
|
||||
Table QuizListenings {
|
||||
id text [pk, not null]
|
||||
sound file
|
||||
word text
|
||||
cat_id integer [ref: > QuizCategories.id] // relation3870140739
|
||||
created datetime
|
||||
updated datetime
|
||||
question_fh text // changed from varchar to text
|
||||
question_sh text // changed from varchar to text
|
||||
modal_ans text // changed from varchar to text
|
||||
cat_id text [ref: > QuizCRCategories.id] // changed type and reference
|
||||
options json // new field
|
||||
}
|
||||
|
||||
// Test table
|
||||
Table t1 {
|
||||
id text [pk] // changed from int to text
|
||||
created datetime [default: `now()`]
|
||||
//
|
||||
// collection id: pbc_84667061
|
||||
// collection name: QuizMFCategories
|
||||
// collection type: base
|
||||
Table QuizMFCategories {
|
||||
id text [pk, not null]
|
||||
cat_name text
|
||||
cat_image file
|
||||
pos integer
|
||||
init_answer text
|
||||
created datetime
|
||||
updated datetime
|
||||
hello text // changed from name to hello
|
||||
test_file file // new field
|
||||
visible text
|
||||
}
|
||||
|
||||
// Customers table
|
||||
Table Customers {
|
||||
id text [pk] // new table
|
||||
created datetime [default: `now()`]
|
||||
//
|
||||
// collection id: pbc_3346420851
|
||||
// collection name: QuizMFQuestions
|
||||
// collection type: base
|
||||
Table QuizMFQuestions {
|
||||
id text [pk, not null]
|
||||
word text
|
||||
word_c text
|
||||
cat_id integer [ref: > QuizMFCategories.id] // relation3870140739
|
||||
created datetime
|
||||
updated datetime
|
||||
visible text
|
||||
sound file
|
||||
cat_image file
|
||||
init_answer text
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_2936646783
|
||||
// collection name: QuizMatchings
|
||||
// collection type: base
|
||||
Table QuizMatchings {
|
||||
id text [pk, not null]
|
||||
word text
|
||||
word_c text
|
||||
cat_id integer [ref: > QuizCategories.id] // relation3870140739
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_491894781
|
||||
// collection name: Students
|
||||
// collection type: base
|
||||
Table Students {
|
||||
id text [pk, not null]
|
||||
name text
|
||||
email text
|
||||
phone text
|
||||
quota number
|
||||
quota integer
|
||||
status text
|
||||
avatar_file file
|
||||
cat_id text [ref: > QuizMFCategories.id] // refer to a single user in `Users` table
|
||||
user_id integer [ref: > users.id] // relation2809058197
|
||||
billingAddress text
|
||||
timezone text
|
||||
language text
|
||||
currency text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_1413424569
|
||||
// collection name: Teachers
|
||||
// collection type: base
|
||||
Table Teachers {
|
||||
id text [pk, not null]
|
||||
name text
|
||||
email text
|
||||
phone text
|
||||
quota integer
|
||||
status text
|
||||
avatar_file file
|
||||
user_id integer [ref: > users.id] // relation2809058197
|
||||
billingAddress text
|
||||
timezone text
|
||||
language text
|
||||
currency text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_1305841361
|
||||
// collection name: UserMetas
|
||||
// collection type: base
|
||||
Table UserMetas {
|
||||
id text [pk, not null]
|
||||
helloworld text
|
||||
meta text
|
||||
user_id integer [ref: > users.id] // relation2809058197
|
||||
created datetime
|
||||
updated datetime
|
||||
status text
|
||||
avatar file
|
||||
role text
|
||||
name text
|
||||
email text
|
||||
phone text
|
||||
avatar_file file
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_1638686383
|
||||
// collection name: Vocabularies
|
||||
// collection type: base
|
||||
Table Vocabularies {
|
||||
id text [pk, not null]
|
||||
image file
|
||||
sound file
|
||||
word text
|
||||
word_c text
|
||||
sample_e text
|
||||
sample_c text
|
||||
cat_id integer [ref: > Categories.id] // relation3870140739
|
||||
category text
|
||||
lesson_type_id integer [ref: > LessonsTypes.id] // relation808508980
|
||||
created datetime
|
||||
updated datetime
|
||||
visible text
|
||||
type text
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_4275539003
|
||||
// collection name: _authOrigins
|
||||
// collection type: base
|
||||
Table _authOrigins {
|
||||
id text [pk, not null]
|
||||
collectionRef text [not null]
|
||||
recordRef text [not null]
|
||||
fingerprint text [not null]
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_2281828961
|
||||
// collection name: _externalAuths
|
||||
// collection type: base
|
||||
Table _externalAuths {
|
||||
id text [pk, not null]
|
||||
collectionRef text [not null]
|
||||
recordRef text [not null]
|
||||
provider text [not null]
|
||||
providerId text [not null]
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_2279338944
|
||||
// collection name: _mfas
|
||||
// collection type: base
|
||||
Table _mfas {
|
||||
id text [pk, not null]
|
||||
collectionRef text [not null]
|
||||
recordRef text [not null]
|
||||
method text [not null]
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_1638494021
|
||||
// collection name: _otps
|
||||
// collection type: base
|
||||
Table _otps {
|
||||
id text [pk, not null]
|
||||
collectionRef text [not null]
|
||||
recordRef text [not null]
|
||||
password varchar [not null]
|
||||
sentTo text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_1509025625
|
||||
// collection name: billingAddress
|
||||
// collection type: base
|
||||
Table billingAddress {
|
||||
id text [pk, not null]
|
||||
country text
|
||||
state text
|
||||
city text
|
||||
zipCode text
|
||||
line1 text
|
||||
line2 text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_123408445
|
||||
// collection name: helloworlds
|
||||
// collection type: base
|
||||
Table helloworlds {
|
||||
id text [pk, not null]
|
||||
hello text
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
||||
//
|
||||
// collection id: pbc_2109205374
|
||||
// collection name: t1
|
||||
// collection type: base
|
||||
Table t1 {
|
||||
id text [pk, not null]
|
||||
hello text
|
||||
created datetime
|
||||
updated datetime
|
||||
test_file file
|
||||
}
|
||||
|
||||
|
@@ -1,215 +0,0 @@
|
||||
// LessonTypes stores different types of lessons
|
||||
// lesson_types, lesson_type
|
||||
Table LessonTypes {
|
||||
// system field
|
||||
id int [pk, increment] // unique identifier for the lesson type
|
||||
created datetime [default: `now()`] // timestamp when the lesson type was created
|
||||
updated datetime // timestamp when the lesson type was last updated
|
||||
// value field
|
||||
name varchar // name of the lesson type
|
||||
type varchar // type category
|
||||
}
|
||||
|
||||
// LessonCategories stores categories of lessons
|
||||
// lesson_categories, lesson_category
|
||||
Table LessonCategories {
|
||||
// system field
|
||||
id int [pk, increment] // unique identifier for the lesson category
|
||||
created datetime [default: `now()`] // timestamp when the category was created
|
||||
updated datetime // timestamp when the category was last updated
|
||||
// value field
|
||||
cat_name varchar // image file name
|
||||
cat_image varchar // image representing the category
|
||||
lesson_type_id integer [ref: > LessonTypes.id] // foreign key referencing LessonTypes.id
|
||||
}
|
||||
|
||||
Table Helloworlds {
|
||||
// system field
|
||||
id int [pk, increment] // id field, increment
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
}
|
||||
|
||||
Table Users {
|
||||
// system field
|
||||
id int [pk, increment]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
|
||||
// value field
|
||||
email varchar
|
||||
emailVisibility boolean
|
||||
verified boolean
|
||||
name varchar
|
||||
avatar blob
|
||||
}
|
||||
|
||||
Table UserMetas {
|
||||
// system field
|
||||
id int [pk, increment]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
|
||||
// value field
|
||||
helloworld varchar
|
||||
app_on_time_s integer
|
||||
user_id integer [ref: > Users.id]
|
||||
}
|
||||
|
||||
Table QuizCategories {
|
||||
// system field
|
||||
id int [pk, increment]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
|
||||
// value field
|
||||
cat_name varchar // category name
|
||||
cat_image varchar // category image
|
||||
}
|
||||
|
||||
// stores all questions of matching frenzy
|
||||
Table QuizMatchings {
|
||||
// system field
|
||||
id int [pk, increment] // id field, increment
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
|
||||
// value field
|
||||
word varchar // modal answer
|
||||
word_c varchar // question
|
||||
cat_id integer [ref: > QuizCategories.id] // foreign key to QuizCategories.id
|
||||
}
|
||||
|
||||
// QuizListening stores all listening quiz data
|
||||
Table QuizListenings {
|
||||
// system field
|
||||
id int [pk, increment] // id field, increment
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
|
||||
// value field
|
||||
sound varchar // URL to the sound file
|
||||
word varchar // The word in the quiz
|
||||
cat_id integer [ref: > QuizCategories.id]
|
||||
}
|
||||
|
||||
// stores all categories of connectives revision quiz
|
||||
Table QuizConnectivesCategories {
|
||||
// system field
|
||||
id int [pk, increment] // id field, increment
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
|
||||
// value field
|
||||
cat_name varchar // category name
|
||||
cat_image varchar // category image
|
||||
}
|
||||
|
||||
// stores all questions of connectives revision quiz
|
||||
Table QuizConnectives {
|
||||
// system field
|
||||
id int [pk, increment] // id field, increment
|
||||
created datetime [default: `now()`] // record create time
|
||||
updated datetime // record update time
|
||||
|
||||
// value field
|
||||
question_fh varchar // first half
|
||||
question_sh varchar // second half
|
||||
modal_ans varchar // modal ans
|
||||
cat_id integer [ref: > QuizConnectivesCategories.id] // foreign key to QuizConnectivesCategories.id
|
||||
}
|
||||
|
||||
// Lessons stores all lessons in the database
|
||||
Table Vocabularies {
|
||||
// system field
|
||||
id int [pk, increment] // unique identifier for the lesson
|
||||
created datetime [default: `now()`] // timestamp when the lesson was created
|
||||
updated datetime // timestamp when the lesson was last updated
|
||||
|
||||
// value field
|
||||
image varchar // URL to the image associated with the lesson
|
||||
sound varchar // URL to the sound file associated with the lesson
|
||||
word varchar // The word in English
|
||||
word_c varchar // The word in Chinese
|
||||
sample_e varchar // Sample sentence in English using the word
|
||||
sample_c varchar // Sample sentence in Chinese using the word
|
||||
cat_id integer [ref: > LessonCategories.id] // foreign key referring to LessonCategories.id
|
||||
category varchar // The category to which the lesson belongs
|
||||
lesson_type_id integer [ref: > LessonTypes.id] // foreign key referring to LessonTypes.id
|
||||
}
|
||||
|
||||
// Listening Practice Quiz Categories
|
||||
// store listening practice category, (LpCategories, LpCategory)
|
||||
Table QuizLPCategories {
|
||||
// system fields
|
||||
id text [pk] // changed from int to text to match PocketBase
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
|
||||
// value fields
|
||||
cat_name varchar [presentable: true] // added presentable flag
|
||||
cat_image file // changed from blob to file type
|
||||
pos number // changed from integer to number
|
||||
init_answer json
|
||||
}
|
||||
|
||||
// Listening Practice Quiz Questions
|
||||
Table QuizLPQuestions {
|
||||
id int [pk, increment]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
word varchar
|
||||
sound blob
|
||||
cat_id integer [ref: > QuizLPCategories.id]
|
||||
}
|
||||
|
||||
// Matching Frenzy Quiz Categories
|
||||
Table QuizMFCategories {
|
||||
id int [pk, increment]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
cat_name varchar
|
||||
cat_image blob
|
||||
pos integer
|
||||
init_answer json
|
||||
}
|
||||
|
||||
// Matching Frenzy Quiz Questions
|
||||
Table QuizMFQuestions {
|
||||
id int [pk, increment]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
word varchar
|
||||
word_c varchar
|
||||
cat_id integer [ref: > QuizMFCategories.id]
|
||||
}
|
||||
|
||||
// Connectives Revision Quiz Categories
|
||||
Table QuizCRCategories {
|
||||
id int [pk, increment]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
cat_name varchar
|
||||
cat_image blob
|
||||
pos integer
|
||||
init_answer json
|
||||
}
|
||||
|
||||
// Connectives Revision Quiz Questions
|
||||
Table QuizCRQuestions {
|
||||
id int [pk, increment]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
question_fh varchar
|
||||
question_sh varchar
|
||||
modal_ans varchar
|
||||
cat_id integer [ref: > QuizCRCategories.id]
|
||||
}
|
||||
|
||||
// Test table
|
||||
Table t1 {
|
||||
id int [pk, increment]
|
||||
created datetime [default: `now()`]
|
||||
updated datetime
|
||||
name varchar
|
||||
}
|
3817
001_documentation/Requirements/REQ0006/schema.json
Normal file
3817
001_documentation/Requirements/REQ0006/schema.json
Normal file
File diff suppressed because it is too large
Load Diff
11
001_documentation/Requirements/REQ0013/index.md
Normal file
11
001_documentation/Requirements/REQ0013/index.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
tags: cms
|
||||
---
|
||||
|
||||
# cms dashboard
|
||||
|
||||
cms
|
||||
|
||||
## files
|
||||
|
||||
T.B.A.
|
11
001_documentation/Requirements/REQ0014/index.md
Normal file
11
001_documentation/Requirements/REQ0014/index.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
tags: mobile
|
||||
---
|
||||
|
||||
# mobile client
|
||||
|
||||
mobile
|
||||
|
||||
## files
|
||||
|
||||
T.B.A.
|
86
001_documentation/Requirements/REQ0015/convert.js
Normal file
86
001_documentation/Requirements/REQ0015/convert.js
Normal file
@@ -0,0 +1,86 @@
|
||||
//
|
||||
// # REQ0015:
|
||||
// ## PURPOSE:
|
||||
//
|
||||
// This is a script to convert `schema.json` exported from pocketbase to dbml formatted file `schema.dbml`
|
||||
//
|
||||
//
|
||||
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
// Load schema.json
|
||||
const schemaPath = path.join(process.cwd(), "schema.json");
|
||||
const schema = JSON.parse(fs.readFileSync(schemaPath, "utf8"));
|
||||
|
||||
// Type mapping from PocketBase to DBML/SQL
|
||||
const typeMapping = {
|
||||
text: "text",
|
||||
number: "integer",
|
||||
bool: "boolean",
|
||||
email: "text",
|
||||
url: "varchar",
|
||||
date: "datetime",
|
||||
select: "varchar",
|
||||
json: "text",
|
||||
file: "file",
|
||||
password: "varchar",
|
||||
relation: "integer", // Assuming relations are stored as integer IDs
|
||||
autodate: "datetime",
|
||||
};
|
||||
|
||||
function convertToDBML(schema) {
|
||||
let dbml = "";
|
||||
dbml = "// Generated at: " + new Date().toISOString();
|
||||
dbml = dbml + "\n\n\n";
|
||||
|
||||
let collectionIdToTableMapping = {};
|
||||
for (const [idx, tableDef] of Object.entries(schema)) {
|
||||
collectionIdToTableMapping[tableDef.id] = tableDef.name;
|
||||
}
|
||||
|
||||
for (const [idx, tableDef] of Object.entries(schema)) {
|
||||
console.log({ idx });
|
||||
dbml += `// \n`;
|
||||
dbml += `// collection id: ${tableDef.id} \n`;
|
||||
dbml += `// collection name: ${tableDef.name} \n`;
|
||||
dbml += `// collection type: ${tableDef.type} \n`;
|
||||
dbml += `Table ${tableDef.name} {\n`;
|
||||
|
||||
for (const field of tableDef.fields) {
|
||||
// Get field type
|
||||
let fieldType = typeMapping[field.type] || "text";
|
||||
|
||||
// Handle special cases
|
||||
if (field.type === "number" && field.options?.max === 1) {
|
||||
fieldType = "boolean";
|
||||
}
|
||||
|
||||
// Build field definition
|
||||
let line = ` ${field.name} ${fieldType}`;
|
||||
|
||||
// Add constraints
|
||||
const constraints = [];
|
||||
if (field.name === "id" || field.primary) constraints.push("pk");
|
||||
if (field.required) constraints.push("not null");
|
||||
if (constraints.length > 0) line += ` [${constraints.join(", ")}]`;
|
||||
|
||||
if (field.collectionId) {
|
||||
line += ` [ref: > ${
|
||||
collectionIdToTableMapping[field.collectionId]
|
||||
}.id] // ${field.id}`;
|
||||
}
|
||||
|
||||
dbml += `${line}\n`;
|
||||
console.log({ line });
|
||||
}
|
||||
|
||||
dbml += "}\n\n";
|
||||
}
|
||||
|
||||
return dbml;
|
||||
}
|
||||
|
||||
// Convert and save
|
||||
const dbmlOutput = convertToDBML(schema);
|
||||
fs.writeFileSync("schema.dbml", dbmlOutput);
|
||||
console.log("DBML file generated successfully!");
|
9
001_documentation/Requirements/REQ0015/index.md
Normal file
9
001_documentation/Requirements/REQ0015/index.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
tags: mobile, cms, db, schema
|
||||
---
|
||||
|
||||
# pocketbase json schema to dbml converter
|
||||
|
||||
## description
|
||||
|
||||
to generate a `schema.dbml` form `schema.json` exported from pocketbase
|
18
001_documentation/Requirements/REQ0015/schema.dbml
Normal file
18
001_documentation/Requirements/REQ0015/schema.dbml
Normal file
@@ -0,0 +1,18 @@
|
||||
// Generated at: 2025-05-06T06:24:44.009Z
|
||||
|
||||
|
||||
//
|
||||
// collection id: pbc_3142635823
|
||||
// collection name: helloworld
|
||||
// collection type: auth
|
||||
Table helloworld {
|
||||
id text [pk, not null]
|
||||
password varchar [not null]
|
||||
tokenKey text [not null]
|
||||
email text [not null]
|
||||
emailVisibility boolean
|
||||
verified boolean
|
||||
created datetime
|
||||
updated datetime
|
||||
}
|
||||
|
174
001_documentation/Requirements/REQ0015/schema.json
Normal file
174
001_documentation/Requirements/REQ0015/schema.json
Normal file
@@ -0,0 +1,174 @@
|
||||
[
|
||||
{
|
||||
"id": "pbc_3142635823",
|
||||
"listRule": null,
|
||||
"viewRule": null,
|
||||
"createRule": null,
|
||||
"updateRule": null,
|
||||
"deleteRule": null,
|
||||
"name": "helloworld",
|
||||
"type": "auth",
|
||||
"fields": [
|
||||
{
|
||||
"autogeneratePattern": "[a-z0-9]{15}",
|
||||
"hidden": false,
|
||||
"id": "text3208210256",
|
||||
"max": 15,
|
||||
"min": 15,
|
||||
"name": "id",
|
||||
"pattern": "^[a-z0-9]+$",
|
||||
"presentable": false,
|
||||
"primaryKey": true,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"cost": 0,
|
||||
"hidden": true,
|
||||
"id": "password901924565",
|
||||
"max": 0,
|
||||
"min": 8,
|
||||
"name": "password",
|
||||
"pattern": "",
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "password"
|
||||
},
|
||||
{
|
||||
"autogeneratePattern": "[a-zA-Z0-9]{50}",
|
||||
"hidden": true,
|
||||
"id": "text2504183744",
|
||||
"max": 60,
|
||||
"min": 30,
|
||||
"name": "tokenKey",
|
||||
"pattern": "",
|
||||
"presentable": false,
|
||||
"primaryKey": false,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"exceptDomains": null,
|
||||
"hidden": false,
|
||||
"id": "email3885137012",
|
||||
"name": "email",
|
||||
"onlyDomains": null,
|
||||
"presentable": false,
|
||||
"required": true,
|
||||
"system": true,
|
||||
"type": "email"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "bool1547992806",
|
||||
"name": "emailVisibility",
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": true,
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "bool256245529",
|
||||
"name": "verified",
|
||||
"presentable": false,
|
||||
"required": false,
|
||||
"system": true,
|
||||
"type": "bool"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate2990389176",
|
||||
"name": "created",
|
||||
"onCreate": true,
|
||||
"onUpdate": false,
|
||||
"presentable": false,
|
||||
"system": true,
|
||||
"type": "autodate"
|
||||
},
|
||||
{
|
||||
"hidden": false,
|
||||
"id": "autodate3332085495",
|
||||
"name": "updated",
|
||||
"onCreate": true,
|
||||
"onUpdate": true,
|
||||
"presentable": false,
|
||||
"system": true,
|
||||
"type": "autodate"
|
||||
}
|
||||
],
|
||||
"indexes": [
|
||||
"CREATE UNIQUE INDEX `idx_tokenKey_pbc_3142635823` ON `_superusers` (`tokenKey`)",
|
||||
"CREATE UNIQUE INDEX `idx_email_pbc_3142635823` ON `_superusers` (`email`) WHERE `email` != ''"
|
||||
],
|
||||
"system": true,
|
||||
"authRule": "",
|
||||
"manageRule": null,
|
||||
"authAlert": {
|
||||
"enabled": true,
|
||||
"emailTemplate": {
|
||||
"subject": "Login from a new location",
|
||||
"body": "<p>Hello,</p>\n<p>We noticed a login to your {APP_NAME} account from a new location.</p>\n<p>If this was you, you may disregard this email.</p>\n<p><strong>If this wasn't you, you should immediately change your {APP_NAME} account password to revoke access from all other locations.</strong></p>\n<p>\n Thanks,<br/>\n {APP_NAME} team\n</p>"
|
||||
}
|
||||
},
|
||||
"oauth2": {
|
||||
"mappedFields": {
|
||||
"id": "",
|
||||
"name": "",
|
||||
"username": "",
|
||||
"avatarURL": ""
|
||||
},
|
||||
"enabled": false
|
||||
},
|
||||
"passwordAuth": {
|
||||
"enabled": true,
|
||||
"identityFields": [
|
||||
"email"
|
||||
]
|
||||
},
|
||||
"mfa": {
|
||||
"enabled": false,
|
||||
"duration": 1800,
|
||||
"rule": ""
|
||||
},
|
||||
"otp": {
|
||||
"enabled": false,
|
||||
"duration": 180,
|
||||
"length": 8,
|
||||
"emailTemplate": {
|
||||
"subject": "OTP for {APP_NAME}",
|
||||
"body": "<p>Hello,</p>\n<p>Your one-time password is: <strong>{OTP}</strong></p>\n<p><i>If you didn't ask for the one-time password, you can ignore this email.</i></p>\n<p>\n Thanks,<br/>\n {APP_NAME} team\n</p>"
|
||||
}
|
||||
},
|
||||
"authToken": {
|
||||
"duration": 86400
|
||||
},
|
||||
"passwordResetToken": {
|
||||
"duration": 1800
|
||||
},
|
||||
"emailChangeToken": {
|
||||
"duration": 1800
|
||||
},
|
||||
"verificationToken": {
|
||||
"duration": 259200
|
||||
},
|
||||
"fileToken": {
|
||||
"duration": 180
|
||||
},
|
||||
"verificationTemplate": {
|
||||
"subject": "Verify your {APP_NAME} email",
|
||||
"body": "<p>Hello,</p>\n<p>Thank you for joining us at {APP_NAME}.</p>\n<p>Click on the button below to verify your email address.</p>\n<p>\n <a class=\"btn\" href=\"{APP_URL}/_/#/auth/confirm-verification/{TOKEN}\" target=\"_blank\" rel=\"noopener\">Verify</a>\n</p>\n<p>\n Thanks,<br/>\n {APP_NAME} team\n</p>"
|
||||
},
|
||||
"resetPasswordTemplate": {
|
||||
"subject": "Reset your {APP_NAME} password",
|
||||
"body": "<p>Hello,</p>\n<p>Click on the button below to reset your password.</p>\n<p>\n <a class=\"btn\" href=\"{APP_URL}/_/#/auth/confirm-password-reset/{TOKEN}\" target=\"_blank\" rel=\"noopener\">Reset password</a>\n</p>\n<p><i>If you didn't ask to reset your password, you can ignore this email.</i></p>\n<p>\n Thanks,<br/>\n {APP_NAME} team\n</p>"
|
||||
},
|
||||
"confirmEmailChangeTemplate": {
|
||||
"subject": "Confirm your {APP_NAME} new email address",
|
||||
"body": "<p>Hello,</p>\n<p>Click on the button below to confirm your new email address.</p>\n<p>\n <a class=\"btn\" href=\"{APP_URL}/_/#/auth/confirm-email-change/{TOKEN}\" target=\"_blank\" rel=\"noopener\">Confirm new email</a>\n</p>\n<p><i>If you didn't ask to change your email address, you can ignore this email.</i></p>\n<p>\n Thanks,<br/>\n {APP_NAME} team\n</p>"
|
||||
}
|
||||
}
|
||||
]
|
33
001_documentation/Requirements/REQ0016/index.md
Normal file
33
001_documentation/Requirements/REQ0016/index.md
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
tags: cms, login-flow
|
||||
---
|
||||
|
||||
# login flow
|
||||
|
||||
## description
|
||||
|
||||
```mermaid
|
||||
graph TD;
|
||||
Start-->A;
|
||||
A-->B;
|
||||
B-->C;
|
||||
B-->D;
|
||||
D-->E;
|
||||
E-->F;
|
||||
C-->G;
|
||||
G-->A
|
||||
|
||||
F-->End;
|
||||
|
||||
A[greeting, asking username and password]
|
||||
B[check if username and password is valid]
|
||||
C[pasword failed]
|
||||
D[pasword ok]
|
||||
E[login success]
|
||||
F[redirect to '/dashboard']
|
||||
|
||||
G[prompt user wrong username and password]
|
||||
|
||||
Start((start));
|
||||
End((end))
|
||||
```
|
Before Width: | Height: | Size: 178 KiB After Width: | Height: | Size: 178 KiB |
9
001_documentation/Requirements/REQ0017/index.md
Normal file
9
001_documentation/Requirements/REQ0017/index.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
tags: mobile, lesson
|
||||
---
|
||||
|
||||
# lesson page documentation
|
||||
|
||||
it should have a lesson page
|
||||
|
||||

|
7
001_documentation/Requirements/REQ0018/index.md
Normal file
7
001_documentation/Requirements/REQ0018/index.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
tags: mobile, cms, db
|
||||
---
|
||||
|
||||
# family photo of frameworks
|
||||
|
||||
it should have a family photo of used framework
|
@@ -1,50 +1,21 @@
|
||||
# Requirements Index
|
||||
|
||||
## REQ0001: project overview
|
||||
|
||||
[View Requirement](./REQ0001/index.md)
|
||||
|
||||
## REQ0002: lesson page documentation
|
||||
|
||||
[View Requirement](./REQ0002/index.md)
|
||||
|
||||
## REQ0003: quiz page documentation
|
||||
|
||||
[View Requirement](./REQ0003/index.md)
|
||||
|
||||
## REQ0004: record page documentation
|
||||
|
||||
[View Requirement](./REQ0004/index.md)
|
||||
|
||||
## REQ0005: settings page documentation
|
||||
|
||||
[View Requirement](./REQ0005/index.md)
|
||||
|
||||
## REQ0006: db schema design
|
||||
|
||||
[View Requirement](./REQ0006/index.md)
|
||||
|
||||
## REQ0007: testing of mobile app home
|
||||
|
||||
[View Requirement](./REQ0007/index.md)
|
||||
|
||||
## REQ0008: schema design
|
||||
|
||||
[View Requirement](./REQ0008/index.md)
|
||||
|
||||
## REQ0009: loading screen
|
||||
|
||||
[View Requirement](./REQ0009/index.md)
|
||||
|
||||
## REQ0010: user friendly error messages
|
||||
|
||||
[View Requirement](./REQ0010/index.md)
|
||||
|
||||
## REQ0011: developer friendly error messages
|
||||
|
||||
[View Requirement](./REQ0011/index.md)
|
||||
|
||||
## REQ0012: cms navigation system
|
||||
|
||||
[View Requirement](./REQ0012/index.md)
|
||||
|
||||
- [REQ0001: project overview](./REQ0001/index.md)
|
||||
- [REQ0002: time tracking](./REQ0002/index.md)
|
||||
- [REQ0003: quiz page documentation](./REQ0003/index.md)
|
||||
- [REQ0004: record page documentation](./REQ0004/index.md)
|
||||
- [REQ0005: settings page documentation](./REQ0005/index.md)
|
||||
- [REQ0006: task](./REQ0006/008_update_dbml_from_json.md)
|
||||
- [REQ0006: GUIDELINES](./REQ0006/_GUIDELINE.md)
|
||||
- [REQ0006: db schema design](./REQ0006/index.md)
|
||||
- [REQ0007: testing of mobile app home](./REQ0007/index.md)
|
||||
- [REQ0008: schema design](./REQ0008/index.md)
|
||||
- [REQ0009: loading screen](./REQ0009/index.md)
|
||||
- [REQ0010: user friendly error messages](./REQ0010/index.md)
|
||||
- [REQ0011: developer friendly error messages](./REQ0011/index.md)
|
||||
- [REQ0012: cms navigation system](./REQ0012/index.md)
|
||||
- [REQ0013: cms dashboard](./REQ0013/index.md)
|
||||
- [REQ0014: mobile client](./REQ0014/index.md)
|
||||
- [REQ0015: pocketbase json schema to dbml converter](./REQ0015/index.md)
|
||||
- [REQ0016: login flow](./REQ0016/index.md)
|
||||
- [REQ0017: lesson page documentation](./REQ0017/index.md)
|
||||
|
5
001_documentation/Requirements/update.sh
Executable file
5
001_documentation/Requirements/update.sh
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -ex
|
||||
|
||||
npx nodemon --delay 0.1 --ext md,js --ignore ./index.md --exec "node ./update_req_index.js"
|
@@ -36,8 +36,8 @@ async function updateIndex() {
|
||||
const heading = extractH1(content);
|
||||
|
||||
if (heading) {
|
||||
indexContent += `## ${dir}: ${heading}\n\n`;
|
||||
indexContent += `[View Requirement](./${dir}/${file})\n\n`;
|
||||
indexContent += `- [${dir}: ${heading}](./${dir}/${file})\n`;
|
||||
// indexContent += `[View Requirement](./${dir}/${file})\n\n`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
14
002_source/.env
Normal file
14
002_source/.env
Normal file
@@ -0,0 +1,14 @@
|
||||
# THIS IS env file for use with docker-compose.yml
|
||||
|
||||
# cms
|
||||
|
||||
# doc
|
||||
|
||||
# ionic_mobile
|
||||
|
||||
# api_ts
|
||||
|
||||
# pocketbase
|
||||
PB_HOSTNAME=pocketbase
|
||||
PB_USERNAME=admin@123.com
|
||||
PB_PASSWORD=Aa12345678
|
4
002_source/.gitignore
vendored
Normal file
4
002_source/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
**/*.del
|
||||
**/*.log
|
||||
**/_archive
|
||||
**/_del
|
74
002_source/README.md
Normal file
74
002_source/README.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# README
|
||||
|
||||
## to start production
|
||||
|
||||
```bash
|
||||
# start docker before hand
|
||||
$ ./dc_build.sh
|
||||
|
||||
$ ./dc_up.sh
|
||||
```
|
||||
|
||||
## to start develop
|
||||
|
||||
```bash
|
||||
#
|
||||
$ ./dc_build.sh
|
||||
$ ./dc_dev.sh
|
||||
$ docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d pocketbase api_ts --remove-orphans
|
||||
$ docker compose logs -f pocketbase api_ts
|
||||
```
|
||||
|
||||
## test api endpoint
|
||||
|
||||
```bash
|
||||
# browse to http://localhost:3000/helloworld
|
||||
```
|
||||
|
||||
```bash
|
||||
# start docker before hand
|
||||
|
||||
$ cd 002_source
|
||||
$ ./dev.sh
|
||||
|
||||
# docker containers up
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## deprecated
|
||||
|
||||
```bash
|
||||
# mobile
|
||||
$ cd 002_source/mobile
|
||||
$ pnpm run dev
|
||||
|
||||
# cms
|
||||
$ cd 002_source/cms
|
||||
$ npm run dev
|
||||
```
|
||||
|
||||
ideation
|
||||
prototyping
|
||||
testing
|
||||
production deployment
|
||||
evaluation
|
||||
monitoring
|
||||
|
||||
## addresses
|
||||
|
||||
```
|
||||
mobile:
|
||||
http://localhost:5173
|
||||
|
||||
pocketbase:
|
||||
http://localhost:8090/_
|
||||
|
||||
cms:
|
||||
http://localhost:3000
|
||||
|
||||
documentation
|
||||
http://localhost:3001
|
||||
```
|
||||
|
||||
extend to vocabularies
|
5
002_source/cms/.gitignore
vendored
5
002_source/cms/.gitignore
vendored
@@ -1,3 +1,8 @@
|
||||
**/*del
|
||||
**/*bak
|
||||
**/*log
|
||||
**/*tmp
|
||||
|
||||
.env
|
||||
.env.production
|
||||
|
||||
|
@@ -1,9 +1,12 @@
|
||||
# TODO
|
||||
|
||||
need to fix local storage error
|
||||
|
||||
page right (next page) button is not working
|
||||
in the middle of clone lesson type to lesson category
|
||||
- [ ] listing page
|
||||
- [ ] delete button on each row
|
||||
- [ ] create page
|
||||
- [ ] edit
|
||||
- [ ] delete
|
||||
|
||||
- [ ] listing page
|
||||
- [ ] delete button on each row
|
||||
- [ ] create page
|
||||
- [ ] edit
|
||||
- [ ] delete
|
||||
|
@@ -1,15 +0,0 @@
|
||||
# guideline
|
||||
|
||||
- please divide the problem into small parts
|
||||
- if you found youself cannot understand the problem, please stop and ask how to do
|
||||
- if you found youself cannot solve the problem, plesae stop and ask how to do
|
||||
- review the whole solution before you reply to user
|
||||
- if code syntax is already there, do follow (e.g. naming convention, syntax) the existing code
|
||||
|
||||
- example for page can be found in `./src/app/_helloworld/page.tsx`
|
||||
- example for component can be found in `./src/components/_helloworld/index.tsx`
|
||||
|
||||
- no need to explain the reason until you are told to do so
|
||||
- no need to show me the code change, at the end just simple summary in point form is ok
|
||||
|
||||
Thanks
|
@@ -1,52 +0,0 @@
|
||||
---
|
||||
description: Next.js with TypeScript and Tailwind UI best practices
|
||||
globs: **/*.tsx, **/*.ts, src/**/*.ts, src/**/*.tsx
|
||||
---
|
||||
|
||||
# Next.js Best Practices
|
||||
|
||||
## Project Structure
|
||||
- Use the App Router directory structure
|
||||
- Place components in `app` directory for route-specific components
|
||||
- Place shared components in `components` directory
|
||||
- Place utilities and helpers in `lib` directory
|
||||
- Use lowercase with dashes for directories (e.g., `components/auth-wizard`)
|
||||
|
||||
## Components
|
||||
- Use Server Components by default
|
||||
- Mark client components explicitly with 'use client'
|
||||
- Wrap client components in Suspense with fallback
|
||||
- Use dynamic loading for non-critical components
|
||||
- Implement proper error boundaries
|
||||
- Place static content and interfaces at file end
|
||||
|
||||
## Performance
|
||||
- Optimize images: Use WebP format, size data, lazy loading
|
||||
- Minimize use of 'useEffect' and 'setState'
|
||||
- Favor Server Components (RSC) where possible
|
||||
- Use dynamic loading for non-critical components
|
||||
- Implement proper caching strategies
|
||||
|
||||
## Data Fetching
|
||||
- Use Server Components for data fetching when possible
|
||||
- Implement proper error handling for data fetching
|
||||
- Use appropriate caching strategies
|
||||
- Handle loading and error states appropriately
|
||||
|
||||
## Routing
|
||||
- Use the App Router conventions
|
||||
- Implement proper loading and error states for routes
|
||||
- Use dynamic routes appropriately
|
||||
- Handle parallel routes when needed
|
||||
|
||||
## Forms and Validation
|
||||
- Use Zod for form validation
|
||||
- Implement proper server-side validation
|
||||
- Handle form errors appropriately
|
||||
- Show loading states during form submission
|
||||
|
||||
## State Management
|
||||
- Minimize client-side state
|
||||
- Use React Context sparingly
|
||||
- Prefer server state when possible
|
||||
- Implement proper loading states
|
@@ -1,20 +0,0 @@
|
||||
# task
|
||||
|
||||
update app page to cover `vocabulary`
|
||||
|
||||
## steps
|
||||
|
||||
1. read `tsx` from folder: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/app/dashboard/vocabularies.draft`
|
||||
1. fix the paths, variable, function names, class etc from `lesson-categories` to `vocabularies`.
|
||||
|
||||
thanks
|
||||
|
||||
## FAQ
|
||||
|
||||
1. 在 `constants.ts` 中是否已定义 `COL_VOCABULARIES` 常量?没有,需要先定义它。
|
||||
2. Vocabulary 相关的类型定义在哪里?是在现有文件中还是需要新建? 需要新建
|
||||
3. 是否需要保留原始 `lessonCategories` 驱动文件? 不需要
|
||||
|
||||
- `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/app/dashboard/vocabularies.draft`
|
||||
|
||||
- `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/vocabulary.draft`
|
@@ -1,57 +0,0 @@
|
||||
---
|
||||
description: TypeScript coding standards and best practices for modern web development
|
||||
globs: **/*.ts, **/*.tsx, **/*.d.ts
|
||||
---
|
||||
|
||||
# TypeScript Best Practices
|
||||
|
||||
## Type System
|
||||
- Prefer interfaces over types for object definitions
|
||||
- Use type for unions, intersections, and mapped types
|
||||
- Avoid using `any`, prefer `unknown` for unknown types
|
||||
- Use strict TypeScript configuration
|
||||
- Leverage TypeScript's built-in utility types
|
||||
- Use generics for reusable type patterns
|
||||
|
||||
## Naming Conventions
|
||||
- Use PascalCase for type names and interfaces
|
||||
- Use camelCase for variables and functions
|
||||
- Use UPPER_CASE for constants
|
||||
- Use descriptive names with auxiliary verbs (e.g., isLoading, hasError)
|
||||
- Prefix interfaces for React props with 'Props' (e.g., ButtonProps)
|
||||
|
||||
## Code Organization
|
||||
- Keep type definitions close to where they're used
|
||||
- Export types and interfaces from dedicated type files when shared
|
||||
- Use barrel exports (index.ts) for organizing exports
|
||||
- Place shared types in a `types` directory
|
||||
- Co-locate component props with their components
|
||||
|
||||
## Functions
|
||||
- Use explicit return types for public functions
|
||||
- Use arrow functions for callbacks and methods
|
||||
- Implement proper error handling with custom error types
|
||||
- Use function overloads for complex type scenarios
|
||||
- Prefer async/await over Promises
|
||||
|
||||
## Best Practices
|
||||
- Enable strict mode in tsconfig.json
|
||||
- Use readonly for immutable properties
|
||||
- Leverage discriminated unions for type safety
|
||||
- Use type guards for runtime type checking
|
||||
- Implement proper null checking
|
||||
- Avoid type assertions unless necessary
|
||||
|
||||
## Error Handling
|
||||
- Create custom error types for domain-specific errors
|
||||
- Use Result types for operations that can fail
|
||||
- Implement proper error boundaries
|
||||
- Use try-catch blocks with typed catch clauses
|
||||
- Handle Promise rejections properly
|
||||
|
||||
## Patterns
|
||||
- Use the Builder pattern for complex object creation
|
||||
- Implement the Repository pattern for data access
|
||||
- Use the Factory pattern for object creation
|
||||
- Leverage dependency injection
|
||||
- Use the Module pattern for encapsulation
|
@@ -1,13 +0,0 @@
|
||||
---
|
||||
tags: update-constants-file
|
||||
---
|
||||
|
||||
# task
|
||||
|
||||
update constants file
|
||||
|
||||
## steps
|
||||
|
||||
- have a look to `_constants.ts` files in slibing directory
|
||||
- get the convention
|
||||
- update `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/vocabulary/_constants.ts` according to dbml thanks
|
@@ -1,13 +0,0 @@
|
||||
---
|
||||
tags: review-function-names
|
||||
---
|
||||
|
||||
# task
|
||||
|
||||
review function names
|
||||
|
||||
## steps
|
||||
|
||||
- have a look to `tsx` files in slibing directory `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/Vocabularies`
|
||||
- get the convention
|
||||
- update the function name of `tsx` file in `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/Vocabularies`
|
@@ -1,22 +0,0 @@
|
||||
Hi, i need your help.
|
||||
|
||||
i am working on a nextjs react typescript project
|
||||
|
||||
please read the code in directory `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/QuizLPQuestions` (denoted `QuizLPQuestions`)
|
||||
|
||||
i want you to:
|
||||
|
||||
- list files from directory `QuizLPQuestions` and use them as template
|
||||
- understand the relations (e.g. `lp` -> `lp_categories`, `lp` -> `COL_QUIZ_LP_CATEGORIES`)
|
||||
- review if any remaining `lp` or `mf` exist in `cr` directory and please help to do replace it to `cr`. (e.g. `COL_QUIZ_LP_CATEGORIES` -> `COL_QUIZ_CR_CATEGORIES` )
|
||||
- please create if you find any missing files/codes/constants
|
||||
- using template, create the similar code for `cr` named `QuizCRCategories`
|
||||
|
||||
thank you
|
||||
|
||||
---
|
||||
|
||||
- I proofed the code is working already, what you need to do is refactoring of the `variables`, `functions`, `classes`, `constants` (`lp` -> `cr`)
|
||||
- compare the difference between `lp` and `mf`,
|
||||
- remember the differences and
|
||||
- draft the new type `cr` (e.g. modify the `import` locations, variables, functions, classes, constants name etc.)
|
@@ -1,22 +0,0 @@
|
||||
Hi, i need your help.
|
||||
|
||||
i am working on a nextjs react typescript project
|
||||
|
||||
please read the code in directory `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/QuizLPCategories` (denoted `QuizLPCategories`)
|
||||
|
||||
i want you to:
|
||||
|
||||
- list files from directory `QuizLPCategories` and use them as template
|
||||
- understand the relations (e.g. `lp` -> `lp_categories`, `lp` -> `COL_QUIZ_LP_CATEGORIES`)
|
||||
- review if any remaining `lp` or `mf` exist in `cr` directory and please help to do replace it to `cr`. (e.g. `COL_QUIZ_LP_CATEGORIES` -> `COL_QUIZ_CR_CATEGORIES` )
|
||||
- please create if you find any missing files/codes/constants
|
||||
- using template, create the similar code for `cr` named `QuizCRCategories`
|
||||
|
||||
thank you
|
||||
|
||||
---
|
||||
|
||||
- I proofed the code is working already, what you need to do is refactoring of the `variables`, `functions`, `classes`, `constants` (`lp` -> `cr`)
|
||||
- compare the difference between `lp` and `mf`,
|
||||
- remember the differences and
|
||||
- draft the new type `cr` (e.g. modify the `import` locations, variables, functions, classes, constants name etc.)
|
@@ -1,22 +0,0 @@
|
||||
Hi, i need your help.
|
||||
|
||||
i am working on a nextjs react typescript project
|
||||
|
||||
please read the code in directory `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/QuizLPQuestions` (denoted `QuizLPQuestions`)
|
||||
|
||||
i want you to:
|
||||
|
||||
- list files from directory `QuizLPQuestions` and use them as template
|
||||
- understand the relations (e.g. `lp` -> `lp_Questions`, `lp` -> `COL_QUIZ_LP_QUESTIONS`)
|
||||
- review if any remaining `lp` or `mf` exist in `cr` directory and please help to do replace it to `cr`. (e.g. `COL_QUIZ_LP_QUESTIONS` -> `COL_QUIZ_CR_Questions` )
|
||||
- please create if you find any missing files/codes/constants
|
||||
- using template, create the similar code for `customer` named `Customers`
|
||||
|
||||
thank you
|
||||
|
||||
---
|
||||
|
||||
- I proofed the code is working already, what you need to do is refactoring of the `variables`, `functions`, `classes`, `constants` (`lp` -> `cr`)
|
||||
- compare the difference between `lp` and `mf`,
|
||||
- remember the differences and
|
||||
- draft the new type `cr` (e.g. modify the `import` locations, variables, functions, classes, constants name etc.)
|
@@ -1,37 +0,0 @@
|
||||
---
|
||||
tags: db, driver
|
||||
---
|
||||
|
||||
# clone db driver
|
||||
|
||||
please understand the tsx files in folder
|
||||
`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/vocabularies.draft`
|
||||
|
||||
change all occurrence of `lessonCategories` to `vocabularies` thanks.
|
||||
|
||||
## FAQ
|
||||
|
||||
1. 在 `constants.ts` 中是否已定义 `COL_VOCABULARIES` 常量?没有,需要先定义它。
|
||||
2. Vocabulary 相关的类型定义在哪里?是在现有文件中还是需要新建? 需要新建
|
||||
3. 是否需要保留原始 `lessonCategories` 驱动文件? 不需要
|
||||
|
||||
请确认这些信息,以便我制定完整的修改方案。
|
||||
|
||||
当前已确认需要修改的内容包括:
|
||||
|
||||
函数名中的customer → notification
|
||||
COL_CUSTOMERS → COL_NOTIFICATIONS
|
||||
相关类型引用
|
||||
注释中的customer → notification
|
||||
|
||||
---
|
||||
|
||||
<!-- updat type.d -->
|
||||
|
||||
`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/Notifications/type.d.ts` the fields is currently wrong, please help to update thanks.
|
||||
|
||||
update the `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/Notifications/EmptyNotification.ts` as well thanks.
|
||||
|
||||
---
|
||||
|
||||
please draft `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/Notifications/GetNotificationByUserId.tsx` by reference `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/Notifications/GetById.tsx`
|
@@ -1,10 +0,0 @@
|
||||
# task
|
||||
|
||||
extend function by clone and updating exist code
|
||||
|
||||
## steps
|
||||
|
||||
please read file
|
||||
`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/QuizListenings/GetAllCount.tsx`
|
||||
|
||||
duplicate it to cover `GetActiveCount`, `GetPendingCount` and `GetBlockedCount`. create them in `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/Customers` directory thanks.
|
Binary file not shown.
@@ -1,108 +0,0 @@
|
||||
# AI GUIDELINE
|
||||
|
||||
## getting started
|
||||
|
||||
Imagine there is a software developer and a QA engineer to solve the problems together
|
||||
|
||||
They will:
|
||||
|
||||
no need to reply me what you are going on and your digest in this phase.
|
||||
just reply me "OK" when done
|
||||
|
||||
base_dir=`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project`
|
||||
|
||||
- read `<base_dir>/001_documentation/Requirements/REQ0006/schema.dbml`
|
||||
this is file in dbml syntax state the main database
|
||||
|
||||
- read `<base_dir>/002_source/cms/src/db/schema.json`
|
||||
this is the file of live pocketbase schema output
|
||||
|
||||
- read `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/constants.ts`
|
||||
this is the content of `@/constants`
|
||||
|
||||
- look into the md files in folder `<base_dir>/002_source/cms/_AI_GUIDELINE`
|
||||
|
||||
- read, remember and link up the ideas in file stated above,
|
||||
i will tell them the task afterwards
|
||||
|
||||
---
|
||||
|
||||
The software engineer will provide solutions,
|
||||
while QA engineer will feedback the opinion.
|
||||
|
||||
this is now not in debug phase,
|
||||
so, no need to reply me what they are going on or their insight throught the prompt.
|
||||
just reply me "OK" when done
|
||||
|
||||
---
|
||||
|
||||
clone `GetVisibleCount.tsx` and `GetHiddenCount.tsx` from `LessonTypes` to `LessonCategories` and update it
|
||||
|
||||
please draft `GetHiddenCount.tsx` for COL_LESSON_TYPES and `status = hidden`
|
||||
|
||||
well done !, please proceed to another request
|
||||
|
||||
working directory: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db`
|
||||
|
||||
according information from `schema.json`, get the collection of `Students`
|
||||
|
||||
pleaes clone the `tsx` files from `LessonTypes` and `LessonCategories` to `Students` and update the content
|
||||
|
||||
when you draft coding, review file and append with `.tsx.draft`
|
||||
|
||||
---
|
||||
|
||||
- this is part of react typescript project, with pocketbase
|
||||
- `schema.dbml`, describe the collections(tables)
|
||||
- folder `LessonCategories`, the correct references
|
||||
- folder `LessonTypes`, the correct references
|
||||
- you can find the `schema.dbml` and schema information from `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006`
|
||||
- do not read root directory, assume it is a fresh copy of nextjs project is ok
|
||||
|
||||
## instruction
|
||||
|
||||
- break the questions into smaller parts
|
||||
- review file append with `.draft`, see if the content aligned with the correct references
|
||||
- read and understand `dbml` file
|
||||
- lookup the every folder
|
||||
|
||||
## tasks
|
||||
|
||||
Thanks
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
please take a look in `schema.dbml` and `schema.json`,
|
||||
associate the collection from json file to the table in dbml file
|
||||
|
||||
please modify the `schema.dbml` to align with `schema.json`
|
||||
|
||||
to the collection `QuizLPCategories` align the dbml file in the previous prompt
|
||||
|
||||
|
||||
---
|
||||
|
||||
please revise
|
||||
|
||||
please revise
|
||||
`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/types/LpCategory.tsx` `interface LpCategory`
|
||||
|
||||
to the collection `QuizLPCategories` align the dbml file in the previous prompt
|
||||
|
||||
|
||||
please modify `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/lp_categories/_constants.tsx`
|
||||
|
||||
to follow the type definition in `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/types/LpCategory.tsx`, the constant `defaultLpCategory`
|
||||
|
||||
---
|
||||
|
||||
the constants file (`@/constants`) was `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/constants.ts`
|
||||
|
||||
please help to fix the `tsx` files in folder `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/QuizMFCategories`,
|
||||
the `COL` constants is wrongly used, it should refer to `COL_QUIZ_MF_CATEGORIES`. thanks
|
||||
|
||||
|
||||
please update the `COL_XXXX` TO COL_MF_CATEGORIES
|
@@ -1,66 +0,0 @@
|
||||
The software engineer will provide solutions,
|
||||
while QA engineer will feedback the opinion.
|
||||
|
||||
this is now not in debug phase,
|
||||
so, no need to reply me what they are going on or their insight throught the prompt.
|
||||
just reply me "OK" when done
|
||||
|
||||
---
|
||||
|
||||
clone `GetVisibleCount.tsx` and `GetHiddenCount.tsx` from `LessonTypes` to `LessonCategories` and update it
|
||||
|
||||
please draft `GetHiddenCount.tsx` for COL_LESSON_TYPES and `status = hidden`
|
||||
|
||||
well done !, please proceed to another request
|
||||
|
||||
working directory: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db`
|
||||
|
||||
according information from `schema.json`, get the collection of `Students`
|
||||
|
||||
pleaes clone the `tsx` files from `LessonTypes` and `LessonCategories` to `Students` and update the content
|
||||
|
||||
when you draft coding, review file and append with `.tsx.draft`
|
||||
|
||||
---
|
||||
|
||||
- this is part of react typescript project, with pocketbase
|
||||
- `schema.dbml`, describe the collections(tables)
|
||||
- folder `LessonCategories`, the correct references
|
||||
- folder `LessonTypes`, the correct references
|
||||
- you can find the `schema.dbml` and schema information from `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006`
|
||||
- do not read root directory, assume it is a fresh copy of nextjs project is ok
|
||||
|
||||
## instruction
|
||||
|
||||
- break the questions into smaller parts
|
||||
- review file append with `.draft`, see if the content aligned with the correct references
|
||||
- read and understand `dbml` file
|
||||
- lookup the every folder
|
||||
|
||||
## tasks
|
||||
|
||||
Thanks
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
please revise
|
||||
|
||||
please revise
|
||||
`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/types/LpCategory.tsx` `interface LpCategory`
|
||||
|
||||
to the collection `QuizLPCategories` align the dbml file in the previous prompt
|
||||
|
||||
please modify `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/lp_categories/_constants.tsx`
|
||||
|
||||
to follow the type definition in `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/types/LpCategory.tsx`, the constant `defaultLpCategory`
|
||||
|
||||
---
|
||||
|
||||
the constants file (`@/constants`) was `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/constants.ts`
|
||||
|
||||
please help to fix the `tsx` files in folder `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/QuizMFCategories`,
|
||||
the `COL` constants is wrongly used, it should refer to `COL_QUIZ_MF_CATEGORIES`. thanks
|
||||
|
||||
please update the `COL_XXXX` TO COL_MF_CATEGORIES
|
@@ -1,38 +0,0 @@
|
||||
# AI GUIDELINE
|
||||
|
||||
## getting started
|
||||
|
||||
Imagine there is a
|
||||
|
||||
1. software developer and a
|
||||
2. QA engineer
|
||||
3. technical writer
|
||||
|
||||
to solve the problems together
|
||||
|
||||
They will:
|
||||
|
||||
no need to reply me what you are going on and your digest in this phase.
|
||||
just reply me "OK" when done
|
||||
|
||||
base_dir=`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project`
|
||||
|
||||
- `schema.dbml`
|
||||
|
||||
- read `<base_dir>/001_documentation/Requirements/REQ0006/schema.dbml`
|
||||
this is file in `dbml` format stating the main database structure
|
||||
|
||||
- `schema.json`
|
||||
|
||||
- read `<base_dir>/002_source/cms/src/db/schema.json`
|
||||
this is the file of current pocketbase schema
|
||||
|
||||
- read `<base_dir>/002_source/cms/src/constants.ts`
|
||||
this is the content of `@/constants`
|
||||
|
||||
- look into the md files in folder `<base_dir>/002_source/cms/_AI_WORKSPACE/001_guideline`
|
||||
|
||||
- directory may contain `repomix-output.xml` file, that is a simple summary of all files inside the directory
|
||||
|
||||
- read, remember and link up the ideas in file stated above,
|
||||
i will tell them the task afterwards
|
@@ -1,15 +0,0 @@
|
||||
Hi, i need your help.
|
||||
|
||||
## background
|
||||
|
||||
i am working on a nextjs react typescript project
|
||||
|
||||
## task
|
||||
|
||||
i want you to summarize the code, write it to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/cr/categories/_PROMPT.md`
|
||||
|
||||
## steps
|
||||
|
||||
1. list all `tsx` files from directory `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/cr/categories`
|
||||
2. take a look to the `tsx` file listed. try to understand what's going on (e.g. it is a component for `cr-categories`, it is a table)
|
||||
3. write your result to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/cr/categories/_PROMPT.md`
|
@@ -1,17 +0,0 @@
|
||||
Hi, i need your help.
|
||||
|
||||
## background
|
||||
|
||||
i am working on a nextjs react typescript project
|
||||
|
||||
## task
|
||||
|
||||
i want you to summarize the code, write it to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/lp/questions/_SUMMARY.md`
|
||||
|
||||
## steps
|
||||
|
||||
1. list all `tsx` files from directory `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/lp/questions`
|
||||
2. read every `tsx` files listed. try to understand what's going on (e.g. it is a component for `cr-questions`, it is a table)
|
||||
3. read file `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/cr/questions/_SUMMARY.md`.
|
||||
4. make use of `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/cr/questions/_SUMMARY.md` as template, update the content and create a new summary
|
||||
5. write your new summary to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/lp/questions/_SUMMARY.md`
|
@@ -1,17 +0,0 @@
|
||||
Hi, i need your help.
|
||||
|
||||
## background
|
||||
|
||||
i am working on a nextjs react typescript project
|
||||
|
||||
## task
|
||||
|
||||
i want you to summarize the code, write it to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/lp/categories/_SUMMARY.md`
|
||||
|
||||
## steps
|
||||
|
||||
1. list all `tsx` files from directory `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/lp/categories`
|
||||
2. read every `tsx` files listed. try to understand what's going on (e.g. it is a component for `cr-categories`, it is a table)
|
||||
3. read file `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/cr/categories/_SUMMARY.md`.
|
||||
4. make use of `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/cr/categories/_SUMMARY.md` as template, update the content and create a new summary
|
||||
5. write your new summary to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/lp/categories/_SUMMARY.md`
|
@@ -1,66 +0,0 @@
|
||||
The software engineer will provide solutions,
|
||||
while QA engineer will feedback the opinion.
|
||||
|
||||
this is now not in debug phase,
|
||||
so, no need to reply me what they are going on or their insight throught the prompt.
|
||||
just reply me "OK" when done
|
||||
|
||||
---
|
||||
|
||||
clone `GetVisibleCount.tsx` and `GetHiddenCount.tsx` from `LessonTypes` to `LessonCategories` and update it
|
||||
|
||||
please draft `GetHiddenCount.tsx` for COL_LESSON_TYPES and `status = hidden`
|
||||
|
||||
well done !, please proceed to another request
|
||||
|
||||
working directory: `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db`
|
||||
|
||||
according information from `schema.json`, get the collection of `Students`
|
||||
|
||||
pleaes clone the `tsx` files from `LessonTypes` and `LessonCategories` to `Students` and update the content
|
||||
|
||||
when you draft coding, review file and append with `.tsx.draft`
|
||||
|
||||
---
|
||||
|
||||
- this is part of react typescript project, with pocketbase
|
||||
- `schema.dbml`, describe the collections(tables)
|
||||
- folder `LessonCategories`, the correct references
|
||||
- folder `LessonTypes`, the correct references
|
||||
- you can find the `schema.dbml` and schema information from `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/001_documentation/Requirements/REQ0006`
|
||||
- do not read root directory, assume it is a fresh copy of nextjs project is ok
|
||||
|
||||
## instruction
|
||||
|
||||
- break the questions into smaller parts
|
||||
- review file append with `.draft`, see if the content aligned with the correct references
|
||||
- read and understand `dbml` file
|
||||
- lookup the every folder
|
||||
|
||||
## tasks
|
||||
|
||||
Thanks
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
please revise
|
||||
|
||||
please revise
|
||||
`/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/types/LpCategory.tsx` `interface LpCategory`
|
||||
|
||||
to the collection `QuizLPCategories` align the dbml file in the previous prompt
|
||||
|
||||
please modify `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/components/dashboard/lp_categories/_constants.tsx`
|
||||
|
||||
to follow the type definition in `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/types/LpCategory.tsx`, the constant `defaultLpCategory`
|
||||
|
||||
---
|
||||
|
||||
the constants file (`@/constants`) was `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/constants.ts`
|
||||
|
||||
please help to fix the `tsx` files in folder `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/db/QuizMFCategories`,
|
||||
the `COL` constants is wrongly used, it should refer to `COL_QUIZ_MF_CATEGORIES`. thanks
|
||||
|
||||
please update the `COL_XXXX` TO COL_MF_CATEGORIES
|
@@ -1 +0,0 @@
|
||||
please read, understand and remember `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/_AI_WORKSPACE/code`
|
14
002_source/cms/default.code-workspace
Normal file
14
002_source/cms/default.code-workspace
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "."
|
||||
},
|
||||
{
|
||||
"path": "./../../001_documentation"
|
||||
},
|
||||
{
|
||||
"path": "../../000_AI_WORKSPACE"
|
||||
}
|
||||
],
|
||||
"settings": {}
|
||||
}
|
@@ -4,7 +4,7 @@
|
||||
"version": "7.0.0",
|
||||
"private": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
"node": "==22"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
3
002_source/cms/public/locales/de/teachers.json
Normal file
3
002_source/cms/public/locales/de/teachers.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"back-to-list": "Teachers"
|
||||
}
|
@@ -1,3 +1,6 @@
|
||||
{
|
||||
"languageChanged": "Sprache geändert"
|
||||
"languageChanged": "Sprache geändert",
|
||||
"teachers": {
|
||||
"back-to-list": "Lehrer"
|
||||
}
|
||||
}
|
||||
|
@@ -1 +1,4 @@
|
||||
{}
|
||||
{
|
||||
"hello": "world",
|
||||
"teachers": "teachers"
|
||||
}
|
||||
|
3
002_source/cms/public/locales/dev/teachers.json
Normal file
3
002_source/cms/public/locales/dev/teachers.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"back-to-list": "Teachers"
|
||||
}
|
3
002_source/cms/public/locales/en/teachers.json
Normal file
3
002_source/cms/public/locales/en/teachers.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"back-to-list": "Teachers"
|
||||
}
|
@@ -1,3 +1,7 @@
|
||||
{
|
||||
"languageChanged": "Language changed"
|
||||
"languageChanged": "Language changed",
|
||||
"teachers": {
|
||||
"nav-title": "teachers",
|
||||
"back-to-list": "Teachers"
|
||||
}
|
||||
}
|
||||
|
3
002_source/cms/public/locales/es/teachers.json
Normal file
3
002_source/cms/public/locales/es/teachers.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"back-to-list": "Teachers"
|
||||
}
|
@@ -1,3 +1,6 @@
|
||||
{
|
||||
"languageChanged": "Idioma cambiado"
|
||||
"languageChanged": "Idioma cambiado",
|
||||
"teachers": {
|
||||
"back-to-list": "Profesores"
|
||||
}
|
||||
}
|
||||
|
@@ -2,5 +2,4 @@
|
||||
|
||||
set -ex
|
||||
|
||||
rm -rf .next
|
||||
pnpm run dev
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@
|
||||
import * as React from 'react';
|
||||
import GetAllLessonCategoriesCount from '@/db/LessonCategories/GetAllCount';
|
||||
import GetAllLessonTypesCount from '@/db/LessonTypes/GetAllCount';
|
||||
import GetAllUsersCount from '@/db/Users/GetAllCount';
|
||||
import { GetAllUsersCount } from '@/db/Users/GetAllCount';
|
||||
import Box from '@mui/material/Box';
|
||||
import Button from '@mui/material/Button';
|
||||
import Stack from '@mui/material/Stack';
|
||||
@@ -59,21 +59,37 @@ export default function Page(): React.JSX.Element {
|
||||
}}
|
||||
>
|
||||
<Stack spacing={4}>
|
||||
<Stack direction={{ xs: 'column', sm: 'row' }} spacing={3} sx={{ alignItems: 'flex-start' }}>
|
||||
<Stack
|
||||
direction={{ xs: 'column', sm: 'row' }}
|
||||
spacing={3}
|
||||
sx={{ alignItems: 'flex-start' }}
|
||||
>
|
||||
<Box sx={{ flex: '1 1 auto' }}>
|
||||
<Typography variant="h4">{t('Overview')}</Typography>
|
||||
</Box>
|
||||
<div>
|
||||
<Button startIcon={<PlusIcon />} variant="contained">
|
||||
<Button
|
||||
startIcon={<PlusIcon />}
|
||||
variant="contained"
|
||||
>
|
||||
{t('Dashboard')}
|
||||
</Button>
|
||||
</div>
|
||||
</Stack>
|
||||
<Grid container spacing={4}>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
container
|
||||
spacing={4}
|
||||
>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<ActiveUserCount />
|
||||
</Grid>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<Summary
|
||||
amount={lessonCategoriesCount}
|
||||
diff={15}
|
||||
@@ -82,7 +98,10 @@ export default function Page(): React.JSX.Element {
|
||||
trend="up"
|
||||
/>
|
||||
</Grid>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<Summary
|
||||
amount={lessonTypesCount}
|
||||
diff={15}
|
||||
@@ -91,7 +110,10 @@ export default function Page(): React.JSX.Element {
|
||||
trend="up"
|
||||
/>
|
||||
</Grid>
|
||||
<Grid md={8} xs={12}>
|
||||
<Grid
|
||||
md={8}
|
||||
xs={12}
|
||||
>
|
||||
<AppUsage
|
||||
data={[
|
||||
{ name: 'Jan', v1: 36, v2: 19 },
|
||||
@@ -109,22 +131,41 @@ export default function Page(): React.JSX.Element {
|
||||
]}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<Subscriptions subscriptions={SamplesubScriptions} />
|
||||
</Grid>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<AppChat messages={SampleMessages} />
|
||||
</Grid>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<Events events={SampleEvents} />
|
||||
</Grid>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<AppLimits usage={80} />
|
||||
</Grid>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<HelperWidget
|
||||
action={
|
||||
<Button color="secondary" endIcon={<ArrowRightIcon />} size="small">
|
||||
<Button
|
||||
color="secondary"
|
||||
endIcon={<ArrowRightIcon />}
|
||||
size="small"
|
||||
>
|
||||
{t('Search jobs')}
|
||||
</Button>
|
||||
}
|
||||
@@ -134,10 +175,17 @@ export default function Page(): React.JSX.Element {
|
||||
title={t('Find your dream job')}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<HelperWidget
|
||||
action={
|
||||
<Button color="secondary" endIcon={<ArrowRightIcon />} size="small">
|
||||
<Button
|
||||
color="secondary"
|
||||
endIcon={<ArrowRightIcon />}
|
||||
size="small"
|
||||
>
|
||||
{t('Help center')}
|
||||
</Button>
|
||||
}
|
||||
@@ -147,10 +195,17 @@ export default function Page(): React.JSX.Element {
|
||||
title={t('Need help figuring things out?')}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid md={4} xs={12}>
|
||||
<Grid
|
||||
md={4}
|
||||
xs={12}
|
||||
>
|
||||
<HelperWidget
|
||||
action={
|
||||
<Button color="secondary" endIcon={<ArrowRightIcon />} size="small">
|
||||
<Button
|
||||
color="secondary"
|
||||
endIcon={<ArrowRightIcon />}
|
||||
size="small"
|
||||
>
|
||||
{t('Documentation')}
|
||||
</Button>
|
||||
}
|
||||
|
57
002_source/cms/src/app/dashboard/students/SampleStudents.tsx
Normal file
57
002_source/cms/src/app/dashboard/students/SampleStudents.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// src/app/dashboard/students/page.tsx
|
||||
'use client';
|
||||
import type { Student } from '@/db/Students/type.d';
|
||||
import { dayjs } from '@/lib/dayjs';
|
||||
|
||||
export const SampleStudents = [
|
||||
{
|
||||
id: 'STU-005',
|
||||
name: 'Fran Perez',
|
||||
avatar: '/assets/avatar-5.png',
|
||||
email: 'fran.perez@domain.com',
|
||||
phone: '(815) 704-0045',
|
||||
quota: 50,
|
||||
status: 'active',
|
||||
createdAt: dayjs().subtract(1, 'hour').toDate(),
|
||||
},
|
||||
{
|
||||
id: 'STU-004',
|
||||
name: 'Penjani Inyene',
|
||||
avatar: '/assets/avatar-4.png',
|
||||
email: 'penjani.inyene@domain.com',
|
||||
phone: '(803) 937-8925',
|
||||
quota: 100,
|
||||
status: 'active',
|
||||
createdAt: dayjs().subtract(3, 'hour').toDate(),
|
||||
},
|
||||
{
|
||||
id: 'STU-003',
|
||||
name: 'Carson Darrin',
|
||||
avatar: '/assets/avatar-3.png',
|
||||
email: 'carson.darrin@domain.com',
|
||||
phone: '(715) 278-5041',
|
||||
quota: 10,
|
||||
status: 'blocked',
|
||||
createdAt: dayjs().subtract(1, 'hour').subtract(1, 'day').toDate(),
|
||||
},
|
||||
{
|
||||
id: 'STU-002',
|
||||
name: 'Siegbert Gottfried',
|
||||
avatar: '/assets/avatar-2.png',
|
||||
email: 'siegbert.gottfried@domain.com',
|
||||
phone: '(603) 766-0431',
|
||||
quota: 0,
|
||||
status: 'pending',
|
||||
createdAt: dayjs().subtract(7, 'hour').subtract(1, 'day').toDate(),
|
||||
},
|
||||
{
|
||||
id: 'STU-001',
|
||||
name: 'Miron Vitold',
|
||||
avatar: '/assets/avatar-1.png',
|
||||
email: 'miron.vitold@domain.com',
|
||||
phone: '(425) 434-5535',
|
||||
quota: 50,
|
||||
status: 'active',
|
||||
createdAt: dayjs().subtract(2, 'hour').subtract(2, 'day').toDate(),
|
||||
},
|
||||
] satisfies Student[];
|
@@ -1,11 +1,11 @@
|
||||
# GUIDELINES
|
||||
|
||||
this folder is part of nextjs typescript project and containing page definition for `Customer` / `Customers` record:
|
||||
this folder is part of nextjs typescript project and containing page definition for `Student` / `Students` record:
|
||||
|
||||
- list (./page.tsx)
|
||||
- view (./[customerId]/page.tsx)
|
||||
- view (./[studentId]/page.tsx)
|
||||
- create (./create/page.tsx)
|
||||
- edit (./[customerId]/page.tsx)
|
||||
- edit (./[studentId]/page.tsx)
|
||||
- translation provided by react-i18next
|
||||
|
||||
the `@` sign refer to `<base_dir>/002_source/002_source/cms/src`
|
||||
@@ -13,17 +13,17 @@ the `@` sign refer to `<base_dir>/002_source/002_source/cms/src`
|
||||
## Assumption and Requirements
|
||||
|
||||
- let one file contains one component only.
|
||||
- type information defined in `<base_dir>/002_source/cms/src/db/Customers/type.d.tsx`
|
||||
- it mainly consume the db drivers `Customres` in `<base_dir>/002_source/cms/src/db/Customers`
|
||||
- type information defined in `<base_dir>/002_source/cms/src/db/Students/type.d.tsx`
|
||||
- it mainly consume the db drivers `Students` in `<base_dir>/002_source/cms/src/db/Students`
|
||||
|
||||
simple template:
|
||||
|
||||
```typescript
|
||||
// src/app/dashboard/customers/page.tsx
|
||||
// src/app/dashboard/students/page.tsx
|
||||
'use client';
|
||||
|
||||
// RULES:
|
||||
// contains list page for customers (Customers)
|
||||
// contains list page for students (Students)
|
||||
// contain definition to collection only
|
||||
//
|
||||
import statements here ...
|
||||
@@ -46,4 +46,3 @@ export default function Page({ searchParams }: PageProps): React.JSX.Element {
|
||||
interface PageProps {
|
||||
searchParams: { email?: string; phone?: string; sortDir?: 'asc' | 'desc'; status?: string };
|
||||
}
|
||||
```
|
||||
|
@@ -0,0 +1,3 @@
|
||||
this `tsx` file is clone from elsewhere, please understand, modify and update the content of `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/app/dashboard/students/create/page.tsx.draft` to handle `Student` record thanks, modify comments/variables/paths/functions name please
|
||||
|
||||
e.g. why `lessonCategories` still exist ?
|
@@ -1,11 +1 @@
|
||||
# task
|
||||
|
||||
## instruction
|
||||
|
||||
with reference to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/app/_helloworld/page.tsx`
|
||||
|
||||
with reference to `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/app/dashboard/lesson_types/edit/[typeId]/page.tsx`
|
||||
|
||||
please modify `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/app/dashboard/lesson_categories/edit/page.tsx`
|
||||
|
||||
please draft a tsx for showing error to user thanks,
|
||||
this `tsx` file is clone from elsewhere, please understand, modify and update the content of `/home/logic/_wsl_workspace/001_github_ws/lettersoup-online-ws/lettersoup-online/project/002_source/cms/src/app/dashboard/students/edit/[customerId]/page.tsx.draft` to handle `Student` record thanks, modify comments/variables/paths/functions name please
|
@@ -1,4 +1,5 @@
|
||||
'use client';
|
||||
// src/app/dashboard/students/edit/[customerId]/page.tsx
|
||||
|
||||
import * as React from 'react';
|
||||
import RouterLink from 'next/link';
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user