Merge branch 'dev-0.2.1' into dev-0.2

# Conflicts:
#	generated/prisma/internal/class.ts
#	generated/prisma/internal/prismaNamespace.ts
#	generated/prisma/internal/prismaNamespaceBrowser.ts
#	generated/prisma/models/BoardColumn.ts
#	generated/prisma/models/Project.ts
#	generated/prisma/models/ProjectMember.ts
#	generated/prisma/models/Task.ts
#	generated/prisma/models/TaskMember.ts
#	generated/prisma/models/TaskTag.ts
#	generated/prisma/models/User.ts
#	server/routes/projects.js
#	server/routes/tasks.js
#	src/api/task.js
This commit is contained in:
jif2.zhang
2026-10-26 20:46:25 +08:00
95 changed files with 8694 additions and 1609 deletions
+1
View File
@@ -9,3 +9,4 @@ src-tauri
docs
*.log
readme
deploy
+4
View File
@@ -50,3 +50,7 @@ server/mihome/.cache/
# 本地 pnpm 安装产物 (项目使用 package-lock.json)
/.pnpm-store
# 0.2.1 验证部署: 服务器本地数据卷与密钥 (绝不入库)
deploy/0.2.1/data/
deploy/0.2.1/.env
+4 -4
View File
@@ -50,9 +50,9 @@ WORKDIR /app
# 阿里源加速
RUN npm config set registry https://registry.npmmirror.com
# 只装运行时依赖
# 只装运行时依赖 (better-sqlite3 是 @powersync/node 的 devOptional peer, 需同时 omit optional 才能跳过)
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm npm ci --omit=dev
RUN --mount=type=cache,target=/root/.npm npm ci --omit=dev --omit=optional
# 拷贝构建产物
COPY --from=builder /app/dist ./dist
@@ -72,9 +72,9 @@ ENV OTA_PACKAGE_DIR=/app/ota-package
# 生产为 http 明文 (无 https), 客户端 tauri.conf.json 的 hotswap.require_https 已设为 false 放行 http
ENV OTA_PUBLIC_BASE=http://bh.vps.honor3.com:3001
# 健康检查
# 健康检查 (端口跟随 PORT 环境变量, 0.2.1 部署为 13001)
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget -qO- http://127.0.0.1:3001/api/health || exit 1
CMD wget -qO- http://127.0.0.1:${PORT:-3001}/api/health || exit 1
EXPOSE 3001
+11
View File
@@ -0,0 +1,11 @@
# 复制为 .env (服务器上 chmod 600, 已 gitignore)。
# POWERSYNC_JWT_KEY_B64 = base64url(POWERSYNC_JWT_SECRET 的 UTF-8 字节)
# 生成: printf %s "$POWERSYNC_JWT_SECRET" | openssl base64 -A | tr '+/' '-_' | tr -d '='
PG_PASSWORD=change-me
PS_STORAGE_PASSWORD=change-me
JWT_SECRET_021=change-me
POWERSYNC_JWT_SECRET=change-me
POWERSYNC_JWT_KEY_B64=change-me
POWERSYNC_URL=https://bh.vps.honor3.com:13443
OTA_PUBLIC_BASE=http://bh.vps.honor3.com:13001
+61
View File
@@ -0,0 +1,61 @@
# 0.2.1 独立验证部署 (baihu /app/iboard-0.2.1)
与现网 `/app/iboard`(3001/宿主 MySQL) 完全隔离:本栈使用独立 PG 容器、端口 13443/13001/13002,不写原库。
**浏览器入口: `https://bh.vps.honor3.com:13443`**(自签证书,首次访问需在浏览器"高级→继续访问"接受一次;PowerSync 网页端必须运行在安全上下文,http://13001 入口仅供接口调试,任务模块会报 Navigator locks 错误)。
正式启用需替换受信证书:把 `bh.pem/bh.key` 换成受信证书后 `docker compose restart tls-front`(例如 Let's Encrypt DNS-01,80/443 已被 gateway 占用无法 HTTP-01)。
## 栈
| 服务 | 说明 |
| --- | --- |
| `pg` | postgres:16-alpine,`wal_level=logical`(供 PowerSync 逻辑复制),数据在 `./data/pg`,**不对外暴露端口** |
| `app` | 本仓库 Dockerfile 构建,13001 对外;启动时先 `prisma migrate deploy`;`DISABLE_CRON=1` 关闭定时任务 |
| `powersync` | journeyapps/powersync-service,13002 对外;源库=pg,bucket storage=同实例 PG 的 powersync schema |
## 首次部署
```bash
# 服务器上 (源码已上传到 /app/iboard-0.2.1)
cd /app/iboard-0.2.1/deploy/0.2.1
# 1. 生成 .env (参照 .env.example; POWERSYNC_JWT_KEY_B64 由 secret 派生)
umask 077
PG_PASSWORD=$(openssl rand -hex 16)
PS_STORAGE_PASSWORD=$(openssl rand -hex 16)
JWT_SECRET_021=$(openssl rand -hex 32)
POWERSYNC_JWT_SECRET=$(openssl rand -hex 32)
POWERSYNC_JWT_KEY_B64=$(printf %s "$POWERSYNC_JWT_SECRET" | openssl base64 -A | tr '+/' '-_' | tr -d '=')
cat > .env <<EOF
PG_PASSWORD=$PG_PASSWORD
PS_STORAGE_PASSWORD=$PS_STORAGE_PASSWORD
JWT_SECRET_021=$JWT_SECRET_021
POWERSYNC_JWT_SECRET=$POWERSYNC_JWT_SECRET
POWERSYNC_JWT_KEY_B64=$POWERSYNC_JWT_KEY_B64
POWERSYNC_URL=http://bh.vps.honor3.com:13002
OTA_PUBLIC_BASE=http://bh.vps.honor3.com:13001
EOF
# 2. 构建并启动
docker compose build app
docker compose up -d
# 3. 验证
docker compose ps
curl -s http://127.0.0.1:13001/api/health
docker compose logs powersync --tail 50 # 应看到连接源库/建 publication/sync config 部署成功
```
## 日常更新
```bash
cd /app/iboard-0.2.1
git archive 方式重新上传源码 tar 后解包覆盖 (data/.env 不受影响)
cd deploy/0.2.1 && docker compose build app && docker compose up -d app
```
## 注意
- `./data/pg` 为 0.2.1 独立数据卷;`./.env` 为密钥,两者均已 gitignore,更新源码时不会覆盖 `.env`(tar 解包不产生它)。
- PowerSync 的 publication / replication slot 由 service 自动管理(账号 iboard021 为容器内 superuser)。
- 同步规则改动:编辑 `powersync/sync-config.yaml` 后 `docker compose restart powersync`。
+84
View File
@@ -0,0 +1,84 @@
name: iboard-021
# 0.2.1 独立验证栈: PG (逻辑复制) + PowerSync + App, 与现网 /app/iboard 完全隔离
# 见 docs/V0.2/离线编辑模块/0.2.1实施方案.md; 端口 13001 (app) / 13002 (powersync), PG 不对外
services:
pg:
image: postgres:16-alpine
restart: unless-stopped
command: ["postgres", "-c", "wal_level=logical"]
environment:
POSTGRES_USER: iboard021
POSTGRES_PASSWORD: ${PG_PASSWORD:?PG_PASSWORD missing}
POSTGRES_DB: iboard021
# initdb 脚本用: 创建 powersync bucket storage 用户
PS_STORAGE_PASSWORD: ${PS_STORAGE_PASSWORD:?PS_STORAGE_PASSWORD missing}
volumes:
- ./data/pg:/var/lib/postgresql/data
- ./initdb:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U iboard021 -d iboard021"]
interval: 5s
timeout: 5s
retries: 12
app:
build:
context: ../..
dockerfile: Dockerfile
restart: unless-stopped
depends_on:
pg:
condition: service_healthy
environment:
DATABASE_URL: postgresql://iboard021:${PG_PASSWORD}@pg:5432/iboard021
PORT: "13001"
JWT_SECRET: ${JWT_SECRET_021:?JWT_SECRET_021 missing}
POWERSYNC_JWT_SECRET: ${POWERSYNC_JWT_SECRET:?POWERSYNC_JWT_SECRET missing}
POWERSYNC_URL: ${POWERSYNC_URL:-http://bh.vps.honor3.com:13002}
OTA_PUBLIC_BASE: ${OTA_PUBLIC_BASE:-http://bh.vps.honor3.com:13001}
# 0.2.1 验证部署关闭定时任务 (新闻/油价/米家等), 避免重复外呼
DISABLE_CRON: "1"
command: ["sh", "-c", "npx prisma migrate deploy && node --experimental-strip-types --no-warnings server/index.js"]
ports:
- "13001:13001"
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:13001/api/health || exit 1"]
interval: 30s
timeout: 5s
retries: 5
start_period: 20s
# TLS 前置 (自签证书): PowerSync 网页端必须在安全上下文运行 (navigator.locks),
# 因此浏览器入口统一走 https://bh.vps.honor3.com:13443 (证书接受一次即可, app+sync 同源同证书)
tls-front:
image: nginx:alpine
restart: unless-stopped
depends_on:
- app
- powersync
volumes:
- ./tls/nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./data/tls:/etc/nginx/certs:ro
ports:
- "13443:443"
powersync:
image: journeyapps/powersync-service:latest
restart: unless-stopped
depends_on:
pg:
condition: service_healthy
command: ["start", "-r", "unified"]
volumes:
- ./powersync/service.yaml:/config/service.yaml:ro
- ./powersync/sync-config.yaml:/config/sync-config.yaml:ro
environment:
POWERSYNC_CONFIG_PATH: /config/service.yaml
# service.yaml 内 !env PS_* 引用 (整值替换; URI 在此组装)
PS_SOURCE_URI: postgresql://iboard021:${PG_PASSWORD}@pg:5432/iboard021?sslmode=disable
PS_STORAGE_URI: postgresql://powersync_storage:${PS_STORAGE_PASSWORD}@pg:5432/iboard021?sslmode=disable
PS_JWT_KEY_B64: ${POWERSYNC_JWT_KEY_B64:?POWERSYNC_JWT_KEY_B64 missing}
ports:
- "13002:8080"
+13
View File
@@ -0,0 +1,13 @@
#!/bin/bash
# 一次性 ETL: 清空 0.2.1 库 -> 从现网 MariaDB 只读快照导入
# 现网连接串从 iboard 容器环境变量读取 (不回显), 源库仅 SELECT
set -e
cd /app/iboard-0.2.1/deploy/0.2.1
SRC=$(docker inspect iboard --format '{{range .Config.Env}}{{println .}}{{end}}' | grep '^DATABASE_URL=' | cut -d= -f2-)
[ -n "$SRC" ] || { echo '未取到现网 DATABASE_URL'; exit 1; }
echo '--- truncate 0.2.1 库 ---'
docker compose exec -T pg psql -U iboard021 -d iboard021 -c "TRUNCATE TABLE \"User\",\"Project\",\"ProjectMember\",\"BoardColumn\",\"Task\",\"TaskMember\",\"TaskTag\",\"Habit\",\"CheckIn\",\"CheckList\",\"CheckListItem\",\"CheckListTemplate\",\"Article\",\"Strategy\",\"Indicator\",\"IndicatorPoint\",\"News\",\"Alert\",\"ServerNode\",\"ServerNodeHistory\",\"ServiceCheck\",\"Econ_SowInventory\",\"ScraperCache\",\"OilPriceHistory\",\"MihomeAccount\",\"MihomeHome\",\"MihomeDevice\",\"MihomeEnvSample\",\"MihomeEnvHour\" RESTART IDENTITY CASCADE;"
echo '--- etl run ---'
docker compose exec -T -e SRC_DATABASE_URL="$SRC" app node scripts/etl-mariadb-to-pg.mjs
@@ -0,0 +1,18 @@
#!/bin/bash
# 一次性初始化 (仅首次建库时执行): 创建 powersync bucket storage 专用用户
# PG >= 14 允许源库与 bucket storage 同实例 (powersync schema 由 service 自建)
set -e
: "${PS_STORAGE_PASSWORD:?PS_STORAGE_PASSWORD missing}"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
DO \$\$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'powersync_storage') THEN
CREATE USER powersync_storage WITH PASSWORD '$PS_STORAGE_PASSWORD';
END IF;
END
\$\$;
GRANT CREATE ON DATABASE $POSTGRES_DB TO powersync_storage;
EOSQL
echo "[initdb] powersync_storage user ready."
+10
View File
@@ -0,0 +1,10 @@
-- 一次性初始化: PowerSync 逻辑复制所需 publication (服务不自建, 见 PSYNC_S1141)
-- 仅发布任务域 + User; 新增同步表时需 ALTER PUBLICATION powersync ADD TABLE ...
CREATE PUBLICATION powersync FOR TABLE
"Project",
"ProjectMember",
"BoardColumn",
"Task",
"TaskMember",
"TaskTag",
"User";
+41
View File
@@ -0,0 +1,41 @@
# PowerSync Service 主配置 (0.2.1 验证部署)
# 参考: https://docs.powersync.com/configuration/powersync-service/self-hosted-instances
# 注意: !env 是 YAML 整值标签, 只能整个值替换变量, 不能内嵌在 URI 字符串中;
# 完整连接串由 docker-compose 以 PS_* 环境变量注入。
replication:
connections:
- type: postgresql
# 源库: 本栈 pg 容器 (0.2.1 独立实例), 复制走 iboard021 账号
uri: !env PS_SOURCE_URI
sslmode: disable
# bucket storage: 同实例 PG (16 >= 14 允许同库不同 schema, service 自建 powersync schema)
storage:
type: postgresql
uri: !env PS_STORAGE_URI
sslmode: disable
port: 8080
sync_config:
path: /config/sync-config.yaml
# 客户端鉴权: app 后端 /api/powersync/token 签发 HS256 JWT (aud=powersync)
# oct 密钥 k = base64url(POWERSYNC_JWT_SECRET)
client_auth:
jwks:
keys:
- kty: oct
k: !env PS_JWT_KEY_B64
alg: HS256
audience:
- powersync
telemetry:
disable_telemetry_sharing: true
system:
logging:
level: info
format: text
+25
View File
@@ -0,0 +1,25 @@
# Sync Streams (edition 3): 任务模块 6 表 + User (展示用)
# Sequential ID Mapping (见 docs/V0.2/离线编辑模块/0.2.1实施方案.md §3):
# - 客户端主键 = uuid 列 (离线新建行同步回填后 id 稳定); int 自增 id 不下发
# - 外键输出 uuid 镜像列, 别名回 projectId/columnId/parentId/taskId (客户端字段名不变)
# - 引号保留 PG PascalCase 标识; 可见性按 ProjectMember 过滤
config:
edition: 3
streams:
iboard_users:
auto_subscribe: true
query: SELECT CAST("id" AS TEXT) AS "id", "name", "email" FROM "User"
iboard_task_data:
auto_subscribe: true
with:
my_projects: SELECT "projectId" FROM "ProjectMember" WHERE CAST("userId" AS TEXT) = auth.user_id()
queries:
- SELECT "uuid" AS "id", "uuid", "code", "name", CAST("ownerId" AS TEXT) AS "ownerId", "isPersonal", "archived", "notes", "taskKinds", "icon", "autoArchive", "createdAt", "updatedAt" FROM "Project" WHERE "id" IN my_projects
- SELECT "uuid" AS "id", "uuid", "projectUuid" AS "projectId", CAST("userId" AS TEXT) AS "userId", "permission", "createdAt" FROM "ProjectMember" WHERE "projectId" IN my_projects
- SELECT "uuid" AS "id", "uuid", "projectUuid" AS "projectId", "name", "sortOrder", "boundStatus", "retention", "createdAt", "updatedAt" FROM "BoardColumn" WHERE "projectId" IN my_projects
- SELECT "uuid" AS "id", "uuid", "projectUuid" AS "projectId", "columnUuid" AS "columnId", "parentUuid" AS "parentId", "title", "description", "kind", "markDate", "status", "doneAt", CAST("assigneeId" AS TEXT) AS "assigneeId", CAST("creatorId" AS TEXT) AS "creatorId", "extras", "sortOrder", "number", "archived", "archivedAt", "archiveSource", "createdAt", "updatedAt" FROM "Task" WHERE "projectId" IN my_projects
- SELECT "uuid" AS "id", "uuid", "taskUuid" AS "taskId", CAST("userId" AS TEXT) AS "userId" FROM "TaskMember" WHERE "taskId" IN (SELECT "id" FROM "Task" WHERE "projectId" IN my_projects)
- SELECT "uuid" AS "id", "uuid", "taskUuid" AS "taskId", "name" FROM "TaskTag" WHERE "taskId" IN (SELECT "id" FROM "Task" WHERE "projectId" IN my_projects)
+37
View File
@@ -0,0 +1,37 @@
# 0.2.1 TLS 前置: 单端口 13443, 按路径分流 (自签证书, 见 README)
# PowerSync 页面必须在安全上下文运行 (navigator.locks 仅 HTTPS/localhost), 故 app 与 sync 统一走 TLS
server {
listen 443 ssl;
server_name bh.vps.honor3.com;
ssl_certificate /etc/nginx/certs/bh.pem;
ssl_certificate_key /etc/nginx/certs/bh.key;
# PowerSync (HTTP 流式 + WebSocket 兜底)
location /sync/ {
proxy_pass http://powersync:8080;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_buffering off;
proxy_read_timeout 3600s;
}
location /socket/ {
proxy_pass http://powersync:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
}
location /health {
proxy_pass http://powersync:8080;
}
# 应用 (静态前端 + API)
location / {
proxy_pass http://app:13001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
@@ -0,0 +1,103 @@
# 0.2.1 实施方案:PostgreSQL 迁移 + 任务模块离线编辑 (PowerSync)
| 项 | 内容 |
| --- | --- |
| 分支 | `dev-0.2.1`(worktree `iboard-dev-0.2.1`,独立临时分支,与 master / dev-0.2 隔离) |
| 日期 | 2026-10-25 |
| 依据 | [PowerSync可行性研究报告](./PowerSync可行性研究报告.md),按其 5.2.2 路线执行 |
| 目标 | 在现网应用与数据不受影响的前提下,验证任务模块离线编辑 + 联网后自动双向同步;数据库由 MariaDB 迁移至 PostgreSQL |
## 1. 已确认决策(2026-10-25 与需求方对齐)
| 决策点 | 结论 |
| --- | --- |
| 技术路线 | PowerSync 全链路(自部署 powersync-service) |
| 离线范围 | 仅任务模块(Project / ProjectMember / BoardColumn / Task / TaskMember / TaskTag);打卡、清单本阶段不纳入;新闻/指标/监控等时序域仅做普通缓存 |
| 客户端 | 先 Web / Windows 外壳(WebView2)跑通全链路;Android 真机后续验证 |
| 编号 | 项目短前缀由用户自拟(2~8 位,全局唯一);任务号 = 项目内自增整数,展示 `前缀-序号`;编号由服务端统一分配,离线创建的任务在同步定号前显示临时标识 |
| 初始数据 | 从现网 MariaDB 只读快照导出并转换导入新 PG;0.2.1 期间产生的新数据不回写现网 |
| 端口 | Web/API 13001、PowerSync WebSocket 13002、PG 仅容器内网(调试绑 127.0.0.1:15432) |
| 部署 | 源码上传 baihu `/app/iboard-0.2.1`,服务器上 `docker compose build`;不使用原 CI/CD |
| 现网保护 | `/app/iboard`、宿主 3306 MySQL、3001 端口、原 CI/CD 一律不使用(快照导出仅 SELECT) |
| 磁盘 | 允许在 baihu 执行 docker 悬空镜像/构建缓存的安全清理(磁盘仅剩 9.9G) |
## 2. 目标架构
```
[Web / Tauri WebView2]
React + @powersync/react
本地 WASM SQLite (OPFS 持久化)
│ 离线: 直接读写本地库; 写操作进入 upload queue
│ 联网: 批量 POST 上行到 Express API (按 uuid 幂等 upsert)
▼
[iboard-0.2.1 Express :13001] ── Prisma (adapter-pg) ──┐
+ /api/powersync/token (为登录用户签发同步 JWT) ▼
[PostgreSQL 容器] (wal_level=logical)
▲ 逻辑复制 (publication + replication slot)
[powersync-service :13002] ── Sync Rules: 任务域 6 表 + User 只读引用, 按 ProjectMember 过滤
```
- 写路径:客户端本地写 → upload queue → 上行 API → Prisma 写 PG → 逻辑复制捕获 → 广播各端;
- 读路径:任务模块页面全部改读本地 SQLite(@powersync/react 响应式查询),其余页面维持 axios REST;
- 认证:复用现有 jsonwebtoken 体系,新增 `/api/powersync/token` 签发 PowerSync 校验的 JWT。
## 3. 数据模型改造(原则:只增不改)
采用报告 3.2 中的「新增 uuid 列 + 应用层幂等 upsert」选项,不做全表主键 UUID 化:外键关系全部保留,存量数据迁移风险最小。
- 任务域 6 表各加 `uuid varchar(36) unique`(客户端创建时生成;存量行导入时回填);
- `Project` 加 `code varchar(8) unique`(用户自拟短前缀;存量项目导入时回填自动码,后续可改);
- `Task` 加 `number int`,`@@unique([projectId, number])`(服务端按项目 max+1 分配;离线创建的任务上行时定号,本地未定号行显示临时标识);
- 主键仍为自增 Int,业务外键不动;客户端上行一律以 uuid 引用父子行,服务端解析为内部 id;
- Prisma datasource: `mysql` → `postgresql`;本分支重建基线迁移(旧 MySQL 迁移文件移除,历史保留在 git)。
### 3.1 Sequential ID Mapping(落地时按官方模式补充)
按 PowerSync 官方 [Sequential ID Mapping](https://docs.powersync.com/client-sdks/advanced/sequential-id-mapping) 模式实施,解决"离线新建行同步回填后本地 id 变化"问题:
- 任务域 6 表再加**外键 uuid 镜像列**(`Task.projectUuid/columnUuid/parentUuid`、`BoardColumn.projectUuid`、`ProjectMember.projectUuid`、`TaskMember/TaskTag.taskUuid`),由 **PG 触发器**在写入时按 int 外键自动回填(迁移 `20261026010000_uuid_fk_mapping`),库级 NOT NULL;
- Sync Streams 以 **`uuid` 作为客户端主键**(`SELECT "uuid" AS "id"`),镜像列别名输出回 `projectId/columnId/parentId/taskId` —— 客户端 schema 与页面代码**零改动**;
- 服务端 upload 处理器按 uuid 解析父行(`findUnique({ where: { uuid } })`),解析后再写 int 外键 → 触发器回填镜像,两侧闭环一致;
- 镜像列在 Prisma 模型中声明为可空(触发器保证库级非空),避免 create 校验拦截。
## 4. 同步与冲突
- Sync Rules 仅下发任务域 6 表 + `User`(展示名称/头像用),按 `ProjectMember.userId = auth.parameters.userId` 过滤项目可见性;时序/监控/米家等表不纳入;
- 上行:`POST /api/powersync/upload` 批处理客户端 CRUD 操作,按 uuid 幂等 upsert,更新时以服务端时间戳做 LWW 仲裁;
- 冲突:字段级 LWW 为主;`BoardColumn.sortOrder` / `Task.sortOrder` 由服务端重排仲裁;并发唯一冲突(项目前缀、看板列名)返回明确错误,客户端提示重试;
- `Task.number` / `Project.code` 由服务端唯一分配,多端并发下天然无冲突。
## 5. 部署拓扑(baihu `/app/iboard-0.2.1`)
docker compose 三服务:
| 服务 | 镜像 | 端口 | 说明 |
| --- | --- | --- | --- |
| `pg-021` | postgres:16-alpine | 仅容器内网 | `wal_level=logical`;数据卷 `./data/pg` |
| `powersync-021` | powersync 官方镜像 | 13002 对外 | 连接 PG 逻辑复制 + WebSocket 下发 |
| `app-021` | 本仓库 Dockerfile 构建 | 13001 对外 | `OTA_PUBLIC_BASE=http://bh.vps.honor3:13001` |
- 环境变量由 compose 注入:`DATABASE_URL`(指向 pg-021)、`JWT_SECRET`(0.2.1 独立新设)、`PORT=13001`;
- 0.2.1 容器内 cron/米家调度预计无凭证或产生重复外呼,部署时以环境开关关闭(实现于 M4)。
## 6. 数据迁移(一次性)
1. 在 baihu 上用仓库自带 `mariadb` 驱动以只读 SQL 从宿主 MySQL(3306) 导出全表 JSON(仅 SELECT);
2. 转换:回填 uuid / `Project.code`(按名称自动生成,可后改)/ `Task.number`(按项目内 createdAt 顺序);时间字段转 PG 时间戳;
3. PG 侧先 `prisma migrate deploy` 建基线表,再执行 ETL 写入;
4. 校验:逐表行数比对 + 抽样字段比对,输出核对报告。
## 7. 里程碑
1. **M1** schema/适配层切 PG(本提交):schema 字段、db.js 适配器、基线迁移重建、本地 `prisma generate` 通过;
2. **M2** 服务端:powersync token 端点、upload 幂等上行端点、任务域路由幂等化与编号分配逻辑;
3. **M3** 前端:任务模块数据层切 PowerSync(本地库 + useQuery + 上传队列),桌面端联调;
4. **M4** compose 编排 + ETL 导数 + baihu 部署,端口/现网隔离验证;
5. **M5** 离线-联网闭环验证(断网编辑 → 恢复自动同步 → 多端一致),Android 真机评估。
## 8. 开放问题 / 风险
- powersync-service 的元数据存储(bucket storage)对 MongoDB 的依赖需在部署阶段核实;若当前版本不支持用 PG 存元数据,则加一个 mongo 容器;
- Android System WebView 的 OPFS/WASM SQLite 兼容性(M5 评估,先桌面);
- 项目前缀全局唯一在多端并发下的冲突提示体验(上行返回结构化错误码);
- 0.2.1 验证期数据与现网彻底隔离,不回迁;若验证后需并回主线,另行决策迁移口径。
+106 -110
View File
@@ -16,8 +16,8 @@ import type * as Prisma from "./internal/prismaNamespace.ts"
export type IntFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
@@ -27,8 +27,8 @@ export type IntFilter<$PrismaModel = never> = {
export type StringFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -36,14 +36,14 @@ export type StringFilter<$PrismaModel = never> = {
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
search?: string
mode?: Prisma.QueryMode
not?: Prisma.NestedStringFilter<$PrismaModel> | string
}
export type DateTimeFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[]
notIn?: Date[] | string[]
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
@@ -53,8 +53,8 @@ export type DateTimeFilter<$PrismaModel = never> = {
export type IntWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
@@ -69,8 +69,8 @@ export type IntWithAggregatesFilter<$PrismaModel = never> = {
export type StringWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -78,7 +78,7 @@ export type StringWithAggregatesFilter<$PrismaModel = never> = {
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
search?: string
mode?: Prisma.QueryMode
not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedStringFilter<$PrismaModel>
@@ -87,8 +87,8 @@ export type StringWithAggregatesFilter<$PrismaModel = never> = {
export type DateTimeWithAggregatesFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[]
notIn?: Date[] | string[]
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
@@ -108,7 +108,7 @@ export type JsonFilter<$PrismaModel = never> =
export type JsonFilterBase<$PrismaModel = never> = {
equals?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
path?: string
path?: string[]
mode?: Prisma.QueryMode | Prisma.EnumQueryModeFieldRefInput<$PrismaModel>
string_contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
string_starts_with?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -116,10 +116,10 @@ export type JsonFilterBase<$PrismaModel = never> = {
array_starts_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_contains?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
lt?: runtime.InputJsonValue
lte?: runtime.InputJsonValue
gt?: runtime.InputJsonValue
gte?: runtime.InputJsonValue
lt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
lte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
}
@@ -132,7 +132,7 @@ export type JsonWithAggregatesFilter<$PrismaModel = never> =
export type JsonWithAggregatesFilterBase<$PrismaModel = never> = {
equals?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
path?: string
path?: string[]
mode?: Prisma.QueryMode | Prisma.EnumQueryModeFieldRefInput<$PrismaModel>
string_contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
string_starts_with?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -140,10 +140,10 @@ export type JsonWithAggregatesFilterBase<$PrismaModel = never> = {
array_starts_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_contains?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
lt?: runtime.InputJsonValue
lte?: runtime.InputJsonValue
gt?: runtime.InputJsonValue
gte?: runtime.InputJsonValue
lt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
lte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedJsonFilter<$PrismaModel>
@@ -165,8 +165,8 @@ export type BoolWithAggregatesFilter<$PrismaModel = never> = {
export type FloatFilter<$PrismaModel = never> = {
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
@@ -176,8 +176,8 @@ export type FloatFilter<$PrismaModel = never> = {
export type FloatWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
@@ -192,8 +192,8 @@ export type FloatWithAggregatesFilter<$PrismaModel = never> = {
export type StringNullableFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -201,7 +201,7 @@ export type StringNullableFilter<$PrismaModel = never> = {
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
search?: string
mode?: Prisma.QueryMode
not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null
}
@@ -212,8 +212,8 @@ export type SortOrderInput = {
export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -221,7 +221,7 @@ export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
search?: string
mode?: Prisma.QueryMode
not?: Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>
_min?: Prisma.NestedStringNullableFilter<$PrismaModel>
@@ -230,8 +230,8 @@ export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {
export type BigIntFilter<$PrismaModel = never> = {
equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
in?: bigint[] | number[]
notIn?: bigint[] | number[]
in?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
notIn?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
@@ -241,8 +241,8 @@ export type BigIntFilter<$PrismaModel = never> = {
export type BigIntWithAggregatesFilter<$PrismaModel = never> = {
equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
in?: bigint[] | number[]
notIn?: bigint[] | number[]
in?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
notIn?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
@@ -264,7 +264,7 @@ export type JsonNullableFilter<$PrismaModel = never> =
export type JsonNullableFilterBase<$PrismaModel = never> = {
equals?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
path?: string
path?: string[]
mode?: Prisma.QueryMode | Prisma.EnumQueryModeFieldRefInput<$PrismaModel>
string_contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
string_starts_with?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -272,10 +272,10 @@ export type JsonNullableFilterBase<$PrismaModel = never> = {
array_starts_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_contains?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
lt?: runtime.InputJsonValue
lte?: runtime.InputJsonValue
gt?: runtime.InputJsonValue
gte?: runtime.InputJsonValue
lt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
lte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
}
@@ -288,7 +288,7 @@ export type JsonNullableWithAggregatesFilter<$PrismaModel = never> =
export type JsonNullableWithAggregatesFilterBase<$PrismaModel = never> = {
equals?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
path?: string
path?: string[]
mode?: Prisma.QueryMode | Prisma.EnumQueryModeFieldRefInput<$PrismaModel>
string_contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
string_starts_with?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -296,10 +296,10 @@ export type JsonNullableWithAggregatesFilterBase<$PrismaModel = never> = {
array_starts_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_contains?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
lt?: runtime.InputJsonValue
lte?: runtime.InputJsonValue
gt?: runtime.InputJsonValue
gte?: runtime.InputJsonValue
lt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
lte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>
_min?: Prisma.NestedJsonNullableFilter<$PrismaModel>
@@ -308,8 +308,8 @@ export type JsonNullableWithAggregatesFilterBase<$PrismaModel = never> = {
export type IntNullableFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
@@ -319,8 +319,8 @@ export type IntNullableFilter<$PrismaModel = never> = {
export type DateTimeNullableFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null
in?: Date[] | string[] | null
notIn?: Date[] | string[] | null
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
@@ -330,8 +330,8 @@ export type DateTimeNullableFilter<$PrismaModel = never> = {
export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
@@ -346,8 +346,8 @@ export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null
in?: Date[] | string[] | null
notIn?: Date[] | string[] | null
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
@@ -360,8 +360,8 @@ export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
export type FloatNullableFilter<$PrismaModel = never> = {
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel> | null
notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel> | null
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
@@ -371,8 +371,8 @@ export type FloatNullableFilter<$PrismaModel = never> = {
export type FloatNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel> | null
notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel> | null
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
@@ -387,8 +387,8 @@ export type FloatNullableWithAggregatesFilter<$PrismaModel = never> = {
export type NestedIntFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
@@ -398,8 +398,8 @@ export type NestedIntFilter<$PrismaModel = never> = {
export type NestedStringFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -407,14 +407,13 @@ export type NestedStringFilter<$PrismaModel = never> = {
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
search?: string
not?: Prisma.NestedStringFilter<$PrismaModel> | string
}
export type NestedDateTimeFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[]
notIn?: Date[] | string[]
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
@@ -424,8 +423,8 @@ export type NestedDateTimeFilter<$PrismaModel = never> = {
export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel>
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
@@ -440,8 +439,8 @@ export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {
export type NestedFloatFilter<$PrismaModel = never> = {
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
@@ -451,8 +450,8 @@ export type NestedFloatFilter<$PrismaModel = never> = {
export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel>
in?: string[]
notIn?: string[]
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel>
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -460,7 +459,6 @@ export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
search?: string
not?: Prisma.NestedStringWithAggregatesFilter<$PrismaModel> | string
_count?: Prisma.NestedIntFilter<$PrismaModel>
_min?: Prisma.NestedStringFilter<$PrismaModel>
@@ -469,8 +467,8 @@ export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {
export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
in?: Date[] | string[]
notIn?: Date[] | string[]
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel>
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
@@ -490,7 +488,7 @@ export type NestedJsonFilter<$PrismaModel = never> =
export type NestedJsonFilterBase<$PrismaModel = never> = {
equals?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
path?: string
path?: string[]
mode?: Prisma.QueryMode | Prisma.EnumQueryModeFieldRefInput<$PrismaModel>
string_contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
string_starts_with?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -498,10 +496,10 @@ export type NestedJsonFilterBase<$PrismaModel = never> = {
array_starts_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_contains?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
lt?: runtime.InputJsonValue
lte?: runtime.InputJsonValue
gt?: runtime.InputJsonValue
gte?: runtime.InputJsonValue
lt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
lte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
}
@@ -520,8 +518,8 @@ export type NestedBoolWithAggregatesFilter<$PrismaModel = never> = {
export type NestedFloatWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel>
in?: number[]
notIn?: number[]
in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel>
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
@@ -536,8 +534,8 @@ export type NestedFloatWithAggregatesFilter<$PrismaModel = never> = {
export type NestedStringNullableFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -545,14 +543,13 @@ export type NestedStringNullableFilter<$PrismaModel = never> = {
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
search?: string
not?: Prisma.NestedStringNullableFilter<$PrismaModel> | string | null
}
export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: string | Prisma.StringFieldRefInput<$PrismaModel> | null
in?: string[] | null
notIn?: string[] | null
in?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null
notIn?: string[] | Prisma.ListStringFieldRefInput<$PrismaModel> | null
lt?: string | Prisma.StringFieldRefInput<$PrismaModel>
lte?: string | Prisma.StringFieldRefInput<$PrismaModel>
gt?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -560,7 +557,6 @@ export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = {
contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
startsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
endsWith?: string | Prisma.StringFieldRefInput<$PrismaModel>
search?: string
not?: Prisma.NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
_count?: Prisma.NestedIntNullableFilter<$PrismaModel>
_min?: Prisma.NestedStringNullableFilter<$PrismaModel>
@@ -569,8 +565,8 @@ export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = {
export type NestedIntNullableFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
@@ -580,8 +576,8 @@ export type NestedIntNullableFilter<$PrismaModel = never> = {
export type NestedBigIntFilter<$PrismaModel = never> = {
equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
in?: bigint[] | number[]
notIn?: bigint[] | number[]
in?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
notIn?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
@@ -591,8 +587,8 @@ export type NestedBigIntFilter<$PrismaModel = never> = {
export type NestedBigIntWithAggregatesFilter<$PrismaModel = never> = {
equals?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
in?: bigint[] | number[]
notIn?: bigint[] | number[]
in?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
notIn?: bigint[] | number[] | Prisma.ListBigIntFieldRefInput<$PrismaModel>
lt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
lte?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
gt?: bigint | number | Prisma.BigIntFieldRefInput<$PrismaModel>
@@ -614,7 +610,7 @@ export type NestedJsonNullableFilter<$PrismaModel = never> =
export type NestedJsonNullableFilterBase<$PrismaModel = never> = {
equals?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
path?: string
path?: string[]
mode?: Prisma.QueryMode | Prisma.EnumQueryModeFieldRefInput<$PrismaModel>
string_contains?: string | Prisma.StringFieldRefInput<$PrismaModel>
string_starts_with?: string | Prisma.StringFieldRefInput<$PrismaModel>
@@ -622,17 +618,17 @@ export type NestedJsonNullableFilterBase<$PrismaModel = never> = {
array_starts_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_ends_with?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
array_contains?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | null
lt?: runtime.InputJsonValue
lte?: runtime.InputJsonValue
gt?: runtime.InputJsonValue
gte?: runtime.InputJsonValue
lt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
lte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gt?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
gte?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel>
not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
}
export type NestedDateTimeNullableFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null
in?: Date[] | string[] | null
notIn?: Date[] | string[] | null
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
@@ -642,8 +638,8 @@ export type NestedDateTimeNullableFilter<$PrismaModel = never> = {
export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
in?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null
notIn?: number[] | Prisma.ListIntFieldRefInput<$PrismaModel> | null
lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
@@ -658,8 +654,8 @@ export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {
export type NestedFloatNullableFilter<$PrismaModel = never> = {
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel> | null
notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel> | null
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
@@ -669,8 +665,8 @@ export type NestedFloatNullableFilter<$PrismaModel = never> = {
export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null
in?: Date[] | string[] | null
notIn?: Date[] | string[] | null
in?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null
notIn?: Date[] | string[] | Prisma.ListDateTimeFieldRefInput<$PrismaModel> | null
lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
@@ -683,8 +679,8 @@ export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
export type NestedFloatNullableWithAggregatesFilter<$PrismaModel = never> = {
equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null
in?: number[] | null
notIn?: number[] | null
in?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel> | null
notIn?: number[] | Prisma.ListFloatFieldRefInput<$PrismaModel> | null
lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
File diff suppressed because one or more lines are too long
+287 -249
View File
@@ -464,6 +464,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.UserCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.UserCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>[]
}
delete: {
args: Prisma.UserDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
@@ -480,6 +484,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.UserUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.UserUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>[]
}
upsert: {
args: Prisma.UserUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$UserPayload>
@@ -530,6 +538,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ArticleCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.ArticleCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ArticlePayload>[]
}
delete: {
args: Prisma.ArticleDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ArticlePayload>
@@ -546,6 +558,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ArticleUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.ArticleUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ArticlePayload>[]
}
upsert: {
args: Prisma.ArticleUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ArticlePayload>
@@ -596,6 +612,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.StrategyCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.StrategyCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$StrategyPayload>[]
}
delete: {
args: Prisma.StrategyDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$StrategyPayload>
@@ -612,6 +632,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.StrategyUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.StrategyUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$StrategyPayload>[]
}
upsert: {
args: Prisma.StrategyUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$StrategyPayload>
@@ -662,6 +686,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.IndicatorCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.IndicatorCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$IndicatorPayload>[]
}
delete: {
args: Prisma.IndicatorDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$IndicatorPayload>
@@ -678,6 +706,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.IndicatorUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.IndicatorUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$IndicatorPayload>[]
}
upsert: {
args: Prisma.IndicatorUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$IndicatorPayload>
@@ -728,6 +760,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.IndicatorPointCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.IndicatorPointCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$IndicatorPointPayload>[]
}
delete: {
args: Prisma.IndicatorPointDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$IndicatorPointPayload>
@@ -744,6 +780,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.IndicatorPointUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.IndicatorPointUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$IndicatorPointPayload>[]
}
upsert: {
args: Prisma.IndicatorPointUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$IndicatorPointPayload>
@@ -794,6 +834,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.NewsCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.NewsCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$NewsPayload>[]
}
delete: {
args: Prisma.NewsDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$NewsPayload>
@@ -810,6 +854,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.NewsUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.NewsUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$NewsPayload>[]
}
upsert: {
args: Prisma.NewsUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$NewsPayload>
@@ -860,6 +908,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.AlertCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.AlertCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$AlertPayload>[]
}
delete: {
args: Prisma.AlertDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$AlertPayload>
@@ -876,6 +928,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.AlertUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.AlertUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$AlertPayload>[]
}
upsert: {
args: Prisma.AlertUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$AlertPayload>
@@ -926,6 +982,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ServerNodeCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.ServerNodeCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServerNodePayload>[]
}
delete: {
args: Prisma.ServerNodeDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServerNodePayload>
@@ -942,6 +1002,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ServerNodeUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.ServerNodeUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServerNodePayload>[]
}
upsert: {
args: Prisma.ServerNodeUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServerNodePayload>
@@ -992,6 +1056,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ServerNodeHistoryCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.ServerNodeHistoryCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServerNodeHistoryPayload>[]
}
delete: {
args: Prisma.ServerNodeHistoryDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServerNodeHistoryPayload>
@@ -1008,6 +1076,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ServerNodeHistoryUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.ServerNodeHistoryUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServerNodeHistoryPayload>[]
}
upsert: {
args: Prisma.ServerNodeHistoryUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServerNodeHistoryPayload>
@@ -1058,6 +1130,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ServiceCheckCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.ServiceCheckCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServiceCheckPayload>[]
}
delete: {
args: Prisma.ServiceCheckDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServiceCheckPayload>
@@ -1074,6 +1150,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ServiceCheckUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.ServiceCheckUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServiceCheckPayload>[]
}
upsert: {
args: Prisma.ServiceCheckUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ServiceCheckPayload>
@@ -1124,6 +1204,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.Econ_SowInventoryCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.Econ_SowInventoryCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$Econ_SowInventoryPayload>[]
}
delete: {
args: Prisma.Econ_SowInventoryDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$Econ_SowInventoryPayload>
@@ -1140,6 +1224,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.Econ_SowInventoryUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.Econ_SowInventoryUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$Econ_SowInventoryPayload>[]
}
upsert: {
args: Prisma.Econ_SowInventoryUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$Econ_SowInventoryPayload>
@@ -1190,6 +1278,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ScraperCacheCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.ScraperCacheCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ScraperCachePayload>[]
}
delete: {
args: Prisma.ScraperCacheDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ScraperCachePayload>
@@ -1206,6 +1298,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ScraperCacheUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.ScraperCacheUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ScraperCachePayload>[]
}
upsert: {
args: Prisma.ScraperCacheUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ScraperCachePayload>
@@ -1256,6 +1352,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.OilPriceHistoryCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.OilPriceHistoryCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OilPriceHistoryPayload>[]
}
delete: {
args: Prisma.OilPriceHistoryDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OilPriceHistoryPayload>
@@ -1272,6 +1372,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.OilPriceHistoryUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.OilPriceHistoryUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OilPriceHistoryPayload>[]
}
upsert: {
args: Prisma.OilPriceHistoryUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$OilPriceHistoryPayload>
@@ -1322,6 +1426,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeAccountCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.MihomeAccountCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeAccountPayload>[]
}
delete: {
args: Prisma.MihomeAccountDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeAccountPayload>
@@ -1338,6 +1446,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeAccountUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.MihomeAccountUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeAccountPayload>[]
}
upsert: {
args: Prisma.MihomeAccountUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeAccountPayload>
@@ -1388,6 +1500,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeHomeCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.MihomeHomeCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeHomePayload>[]
}
delete: {
args: Prisma.MihomeHomeDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeHomePayload>
@@ -1404,6 +1520,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeHomeUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.MihomeHomeUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeHomePayload>[]
}
upsert: {
args: Prisma.MihomeHomeUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeHomePayload>
@@ -1454,6 +1574,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeDeviceCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.MihomeDeviceCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeDevicePayload>[]
}
delete: {
args: Prisma.MihomeDeviceDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeDevicePayload>
@@ -1470,6 +1594,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeDeviceUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.MihomeDeviceUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeDevicePayload>[]
}
upsert: {
args: Prisma.MihomeDeviceUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeDevicePayload>
@@ -1520,6 +1648,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeEnvSampleCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.MihomeEnvSampleCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeEnvSamplePayload>[]
}
delete: {
args: Prisma.MihomeEnvSampleDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeEnvSamplePayload>
@@ -1536,6 +1668,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeEnvSampleUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.MihomeEnvSampleUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeEnvSamplePayload>[]
}
upsert: {
args: Prisma.MihomeEnvSampleUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeEnvSamplePayload>
@@ -1586,6 +1722,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeEnvHourCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.MihomeEnvHourCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeEnvHourPayload>[]
}
delete: {
args: Prisma.MihomeEnvHourDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeEnvHourPayload>
@@ -1602,6 +1742,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.MihomeEnvHourUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.MihomeEnvHourUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeEnvHourPayload>[]
}
upsert: {
args: Prisma.MihomeEnvHourUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$MihomeEnvHourPayload>
@@ -1652,6 +1796,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.HabitCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.HabitCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$HabitPayload>[]
}
delete: {
args: Prisma.HabitDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$HabitPayload>
@@ -1668,6 +1816,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.HabitUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.HabitUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$HabitPayload>[]
}
upsert: {
args: Prisma.HabitUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$HabitPayload>
@@ -1718,6 +1870,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.CheckInCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.CheckInCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckInPayload>[]
}
delete: {
args: Prisma.CheckInDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckInPayload>
@@ -1734,6 +1890,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.CheckInUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.CheckInUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckInPayload>[]
}
upsert: {
args: Prisma.CheckInUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckInPayload>
@@ -1784,6 +1944,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.CheckListCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.CheckListCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListPayload>[]
}
delete: {
args: Prisma.CheckListDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListPayload>
@@ -1800,6 +1964,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.CheckListUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.CheckListUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListPayload>[]
}
upsert: {
args: Prisma.CheckListUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListPayload>
@@ -1850,6 +2018,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.CheckListItemCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.CheckListItemCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListItemPayload>[]
}
delete: {
args: Prisma.CheckListItemDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListItemPayload>
@@ -1866,6 +2038,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.CheckListItemUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.CheckListItemUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListItemPayload>[]
}
upsert: {
args: Prisma.CheckListItemUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListItemPayload>
@@ -1916,6 +2092,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.CheckListTemplateCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.CheckListTemplateCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListTemplatePayload>[]
}
delete: {
args: Prisma.CheckListTemplateDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListTemplatePayload>
@@ -1932,6 +2112,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.CheckListTemplateUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.CheckListTemplateUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListTemplatePayload>[]
}
upsert: {
args: Prisma.CheckListTemplateUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$CheckListTemplatePayload>
@@ -1982,6 +2166,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ProjectCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.ProjectCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ProjectPayload>[]
}
delete: {
args: Prisma.ProjectDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ProjectPayload>
@@ -1998,6 +2186,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ProjectUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.ProjectUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ProjectPayload>[]
}
upsert: {
args: Prisma.ProjectUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ProjectPayload>
@@ -2048,6 +2240,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ProjectMemberCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.ProjectMemberCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ProjectMemberPayload>[]
}
delete: {
args: Prisma.ProjectMemberDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ProjectMemberPayload>
@@ -2064,6 +2260,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.ProjectMemberUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.ProjectMemberUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ProjectMemberPayload>[]
}
upsert: {
args: Prisma.ProjectMemberUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$ProjectMemberPayload>
@@ -2114,6 +2314,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.BoardColumnCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.BoardColumnCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$BoardColumnPayload>[]
}
delete: {
args: Prisma.BoardColumnDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$BoardColumnPayload>
@@ -2130,6 +2334,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.BoardColumnUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.BoardColumnUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$BoardColumnPayload>[]
}
upsert: {
args: Prisma.BoardColumnUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$BoardColumnPayload>
@@ -2180,6 +2388,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.TaskCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.TaskCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskPayload>[]
}
delete: {
args: Prisma.TaskDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskPayload>
@@ -2196,6 +2408,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.TaskUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.TaskUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskPayload>[]
}
upsert: {
args: Prisma.TaskUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskPayload>
@@ -2246,6 +2462,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.TaskMemberCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.TaskMemberCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskMemberPayload>[]
}
delete: {
args: Prisma.TaskMemberDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskMemberPayload>
@@ -2262,6 +2482,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.TaskMemberUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.TaskMemberUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskMemberPayload>[]
}
upsert: {
args: Prisma.TaskMemberUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskMemberPayload>
@@ -2312,6 +2536,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.TaskTagCreateManyArgs<ExtArgs>
result: BatchPayload
}
createManyAndReturn: {
args: Prisma.TaskTagCreateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskTagPayload>[]
}
delete: {
args: Prisma.TaskTagDeleteArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskTagPayload>
@@ -2328,6 +2556,10 @@ export type TypeMap<ExtArgs extends runtime.Types.Extensions.InternalArgs = runt
args: Prisma.TaskTagUpdateManyArgs<ExtArgs>
result: BatchPayload
}
updateManyAndReturn: {
args: Prisma.TaskTagUpdateManyAndReturnArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskTagPayload>[]
}
upsert: {
args: Prisma.TaskTagUpsertArgs<ExtArgs>
result: runtime.Types.Utils.PayloadToResult<Prisma.$TaskTagPayload>
@@ -2738,6 +2970,8 @@ export type CheckListTemplateScalarFieldEnum = (typeof CheckListTemplateScalarFi
export const ProjectScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
code: 'code',
name: 'name',
ownerId: 'ownerId',
isPersonal: 'isPersonal',
@@ -2755,6 +2989,8 @@ export type ProjectScalarFieldEnum = (typeof ProjectScalarFieldEnum)[keyof typeo
export const ProjectMemberScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
projectUuid: 'projectUuid',
projectId: 'projectId',
userId: 'userId',
permission: 'permission',
@@ -2766,6 +3002,8 @@ export type ProjectMemberScalarFieldEnum = (typeof ProjectMemberScalarFieldEnum)
export const BoardColumnScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
projectUuid: 'projectUuid',
projectId: 'projectId',
name: 'name',
sortOrder: 'sortOrder',
@@ -2780,6 +3018,10 @@ export type BoardColumnScalarFieldEnum = (typeof BoardColumnScalarFieldEnum)[key
export const TaskScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
projectUuid: 'projectUuid',
columnUuid: 'columnUuid',
parentUuid: 'parentUuid',
projectId: 'projectId',
columnId: 'columnId',
parentId: 'parentId',
@@ -2797,7 +3039,8 @@ export const TaskScalarFieldEnum = {
archivedAt: 'archivedAt',
archiveSource: 'archiveSource',
createdAt: 'createdAt',
updatedAt: 'updatedAt'
updatedAt: 'updatedAt',
number: 'number'
} as const
export type TaskScalarFieldEnum = (typeof TaskScalarFieldEnum)[keyof typeof TaskScalarFieldEnum]
@@ -2805,6 +3048,8 @@ export type TaskScalarFieldEnum = (typeof TaskScalarFieldEnum)[keyof typeof Task
export const TaskMemberScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
taskUuid: 'taskUuid',
taskId: 'taskId',
userId: 'userId'
} as const
@@ -2814,6 +3059,8 @@ export type TaskMemberScalarFieldEnum = (typeof TaskMemberScalarFieldEnum)[keyof
export const TaskTagScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
taskUuid: 'taskUuid',
taskId: 'taskId',
name: 'name'
} as const
@@ -2844,23 +3091,12 @@ export const NullableJsonNullValueInput = {
export type NullableJsonNullValueInput = (typeof NullableJsonNullValueInput)[keyof typeof NullableJsonNullValueInput]
export const UserOrderByRelevanceFieldEnum = {
name: 'name',
email: 'email',
password: 'password'
export const QueryMode = {
default: 'default',
insensitive: 'insensitive'
} as const
export type UserOrderByRelevanceFieldEnum = (typeof UserOrderByRelevanceFieldEnum)[keyof typeof UserOrderByRelevanceFieldEnum]
export const ArticleOrderByRelevanceFieldEnum = {
title: 'title',
slug: 'slug',
content: 'content',
date: 'date'
} as const
export type ArticleOrderByRelevanceFieldEnum = (typeof ArticleOrderByRelevanceFieldEnum)[keyof typeof ArticleOrderByRelevanceFieldEnum]
export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]
export const JsonNullValueFilter = {
@@ -2872,41 +3108,6 @@ export const JsonNullValueFilter = {
export type JsonNullValueFilter = (typeof JsonNullValueFilter)[keyof typeof JsonNullValueFilter]
export const QueryMode = {
default: 'default',
insensitive: 'insensitive'
} as const
export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]
export const StrategyOrderByRelevanceFieldEnum = {
name: 'name',
description: 'description'
} as const
export type StrategyOrderByRelevanceFieldEnum = (typeof StrategyOrderByRelevanceFieldEnum)[keyof typeof StrategyOrderByRelevanceFieldEnum]
export const IndicatorOrderByRelevanceFieldEnum = {
name: 'name',
groupName: 'groupName',
title: 'title',
unit: 'unit',
source: 'source',
frequency: 'frequency'
} as const
export type IndicatorOrderByRelevanceFieldEnum = (typeof IndicatorOrderByRelevanceFieldEnum)[keyof typeof IndicatorOrderByRelevanceFieldEnum]
export const IndicatorPointOrderByRelevanceFieldEnum = {
period: 'period'
} as const
export type IndicatorPointOrderByRelevanceFieldEnum = (typeof IndicatorPointOrderByRelevanceFieldEnum)[keyof typeof IndicatorPointOrderByRelevanceFieldEnum]
export const NullsOrder = {
first: 'first',
last: 'last'
@@ -2915,204 +3116,6 @@ export const NullsOrder = {
export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]
export const NewsOrderByRelevanceFieldEnum = {
title: 'title',
summary: 'summary',
content: 'content',
source: 'source',
url: 'url'
} as const
export type NewsOrderByRelevanceFieldEnum = (typeof NewsOrderByRelevanceFieldEnum)[keyof typeof NewsOrderByRelevanceFieldEnum]
export const AlertOrderByRelevanceFieldEnum = {
indicatorName: 'indicatorName',
period: 'period',
sourceA: 'sourceA',
sourceB: 'sourceB'
} as const
export type AlertOrderByRelevanceFieldEnum = (typeof AlertOrderByRelevanceFieldEnum)[keyof typeof AlertOrderByRelevanceFieldEnum]
export const ServerNodeOrderByRelevanceFieldEnum = {
uuid: 'uuid',
name: 'name',
cpuName: 'cpuName',
os: 'os',
region: 'region',
status: 'status'
} as const
export type ServerNodeOrderByRelevanceFieldEnum = (typeof ServerNodeOrderByRelevanceFieldEnum)[keyof typeof ServerNodeOrderByRelevanceFieldEnum]
export const ServerNodeHistoryOrderByRelevanceFieldEnum = {
uuid: 'uuid'
} as const
export type ServerNodeHistoryOrderByRelevanceFieldEnum = (typeof ServerNodeHistoryOrderByRelevanceFieldEnum)[keyof typeof ServerNodeHistoryOrderByRelevanceFieldEnum]
export const ServiceCheckOrderByRelevanceFieldEnum = {
name: 'name',
url: 'url',
status: 'status',
message: 'message'
} as const
export type ServiceCheckOrderByRelevanceFieldEnum = (typeof ServiceCheckOrderByRelevanceFieldEnum)[keyof typeof ServiceCheckOrderByRelevanceFieldEnum]
export const Econ_SowInventoryOrderByRelevanceFieldEnum = {
month: 'month'
} as const
export type Econ_SowInventoryOrderByRelevanceFieldEnum = (typeof Econ_SowInventoryOrderByRelevanceFieldEnum)[keyof typeof Econ_SowInventoryOrderByRelevanceFieldEnum]
export const ScraperCacheOrderByRelevanceFieldEnum = {
scraperName: 'scraperName',
lastDataHash: 'lastDataHash'
} as const
export type ScraperCacheOrderByRelevanceFieldEnum = (typeof ScraperCacheOrderByRelevanceFieldEnum)[keyof typeof ScraperCacheOrderByRelevanceFieldEnum]
export const OilPriceHistoryOrderByRelevanceFieldEnum = {
province: 'province',
fuel: 'fuel',
source: 'source'
} as const
export type OilPriceHistoryOrderByRelevanceFieldEnum = (typeof OilPriceHistoryOrderByRelevanceFieldEnum)[keyof typeof OilPriceHistoryOrderByRelevanceFieldEnum]
export const MihomeAccountOrderByRelevanceFieldEnum = {
key: 'key',
userId: 'userId',
status: 'status',
lastError: 'lastError'
} as const
export type MihomeAccountOrderByRelevanceFieldEnum = (typeof MihomeAccountOrderByRelevanceFieldEnum)[keyof typeof MihomeAccountOrderByRelevanceFieldEnum]
export const MihomeHomeOrderByRelevanceFieldEnum = {
homeId: 'homeId',
name: 'name'
} as const
export type MihomeHomeOrderByRelevanceFieldEnum = (typeof MihomeHomeOrderByRelevanceFieldEnum)[keyof typeof MihomeHomeOrderByRelevanceFieldEnum]
export const MihomeDeviceOrderByRelevanceFieldEnum = {
did: 'did',
homeId: 'homeId',
model: 'model',
name: 'name',
alias: 'alias'
} as const
export type MihomeDeviceOrderByRelevanceFieldEnum = (typeof MihomeDeviceOrderByRelevanceFieldEnum)[keyof typeof MihomeDeviceOrderByRelevanceFieldEnum]
export const MihomeEnvSampleOrderByRelevanceFieldEnum = {
origin: 'origin'
} as const
export type MihomeEnvSampleOrderByRelevanceFieldEnum = (typeof MihomeEnvSampleOrderByRelevanceFieldEnum)[keyof typeof MihomeEnvSampleOrderByRelevanceFieldEnum]
export const HabitOrderByRelevanceFieldEnum = {
name: 'name',
period: 'period',
color: 'color',
icon: 'icon',
note: 'note'
} as const
export type HabitOrderByRelevanceFieldEnum = (typeof HabitOrderByRelevanceFieldEnum)[keyof typeof HabitOrderByRelevanceFieldEnum]
export const CheckInOrderByRelevanceFieldEnum = {
date: 'date',
note: 'note',
source: 'source'
} as const
export type CheckInOrderByRelevanceFieldEnum = (typeof CheckInOrderByRelevanceFieldEnum)[keyof typeof CheckInOrderByRelevanceFieldEnum]
export const CheckListOrderByRelevanceFieldEnum = {
title: 'title',
scene: 'scene',
note: 'note'
} as const
export type CheckListOrderByRelevanceFieldEnum = (typeof CheckListOrderByRelevanceFieldEnum)[keyof typeof CheckListOrderByRelevanceFieldEnum]
export const CheckListItemOrderByRelevanceFieldEnum = {
title: 'title',
note: 'note'
} as const
export type CheckListItemOrderByRelevanceFieldEnum = (typeof CheckListItemOrderByRelevanceFieldEnum)[keyof typeof CheckListItemOrderByRelevanceFieldEnum]
export const CheckListTemplateOrderByRelevanceFieldEnum = {
name: 'name',
scene: 'scene'
} as const
export type CheckListTemplateOrderByRelevanceFieldEnum = (typeof CheckListTemplateOrderByRelevanceFieldEnum)[keyof typeof CheckListTemplateOrderByRelevanceFieldEnum]
export const ProjectOrderByRelevanceFieldEnum = {
name: 'name',
icon: 'icon',
autoArchive: 'autoArchive'
} as const
export type ProjectOrderByRelevanceFieldEnum = (typeof ProjectOrderByRelevanceFieldEnum)[keyof typeof ProjectOrderByRelevanceFieldEnum]
export const ProjectMemberOrderByRelevanceFieldEnum = {
permission: 'permission'
} as const
export type ProjectMemberOrderByRelevanceFieldEnum = (typeof ProjectMemberOrderByRelevanceFieldEnum)[keyof typeof ProjectMemberOrderByRelevanceFieldEnum]
export const BoardColumnOrderByRelevanceFieldEnum = {
name: 'name',
boundStatus: 'boundStatus',
retention: 'retention'
} as const
export type BoardColumnOrderByRelevanceFieldEnum = (typeof BoardColumnOrderByRelevanceFieldEnum)[keyof typeof BoardColumnOrderByRelevanceFieldEnum]
export const TaskOrderByRelevanceFieldEnum = {
title: 'title',
description: 'description',
kind: 'kind',
status: 'status',
archiveSource: 'archiveSource'
} as const
export type TaskOrderByRelevanceFieldEnum = (typeof TaskOrderByRelevanceFieldEnum)[keyof typeof TaskOrderByRelevanceFieldEnum]
export const TaskTagOrderByRelevanceFieldEnum = {
name: 'name'
} as const
export type TaskTagOrderByRelevanceFieldEnum = (typeof TaskTagOrderByRelevanceFieldEnum)[keyof typeof TaskTagOrderByRelevanceFieldEnum]
/**
* Field references
@@ -3126,6 +3129,13 @@ export type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'In
/**
* Reference to a field of type 'Int[]'
*/
export type ListIntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int[]'>
/**
* Reference to a field of type 'String'
*/
@@ -3133,6 +3143,13 @@ export type StringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel,
/**
* Reference to a field of type 'String[]'
*/
export type ListStringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String[]'>
/**
* Reference to a field of type 'DateTime'
*/
@@ -3140,6 +3157,13 @@ export type DateTimeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel
/**
* Reference to a field of type 'DateTime[]'
*/
export type ListDateTimeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DateTime[]'>
/**
* Reference to a field of type 'Json'
*/
@@ -3168,12 +3192,26 @@ export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, '
/**
* Reference to a field of type 'Float[]'
*/
export type ListFloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float[]'>
/**
* Reference to a field of type 'BigInt'
*/
export type BigIntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'BigInt'>
/**
* Reference to a field of type 'BigInt[]'
*/
export type ListBigIntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'BigInt[]'>
/**
* Batch Payload for updateMany & deleteMany & createMany
*/
@@ -451,6 +451,8 @@ export type CheckListTemplateScalarFieldEnum = (typeof CheckListTemplateScalarFi
export const ProjectScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
code: 'code',
name: 'name',
ownerId: 'ownerId',
isPersonal: 'isPersonal',
@@ -468,6 +470,8 @@ export type ProjectScalarFieldEnum = (typeof ProjectScalarFieldEnum)[keyof typeo
export const ProjectMemberScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
projectUuid: 'projectUuid',
projectId: 'projectId',
userId: 'userId',
permission: 'permission',
@@ -479,6 +483,8 @@ export type ProjectMemberScalarFieldEnum = (typeof ProjectMemberScalarFieldEnum)
export const BoardColumnScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
projectUuid: 'projectUuid',
projectId: 'projectId',
name: 'name',
sortOrder: 'sortOrder',
@@ -493,6 +499,10 @@ export type BoardColumnScalarFieldEnum = (typeof BoardColumnScalarFieldEnum)[key
export const TaskScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
projectUuid: 'projectUuid',
columnUuid: 'columnUuid',
parentUuid: 'parentUuid',
projectId: 'projectId',
columnId: 'columnId',
parentId: 'parentId',
@@ -510,7 +520,8 @@ export const TaskScalarFieldEnum = {
archivedAt: 'archivedAt',
archiveSource: 'archiveSource',
createdAt: 'createdAt',
updatedAt: 'updatedAt'
updatedAt: 'updatedAt',
number: 'number'
} as const
export type TaskScalarFieldEnum = (typeof TaskScalarFieldEnum)[keyof typeof TaskScalarFieldEnum]
@@ -518,6 +529,8 @@ export type TaskScalarFieldEnum = (typeof TaskScalarFieldEnum)[keyof typeof Task
export const TaskMemberScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
taskUuid: 'taskUuid',
taskId: 'taskId',
userId: 'userId'
} as const
@@ -527,6 +540,8 @@ export type TaskMemberScalarFieldEnum = (typeof TaskMemberScalarFieldEnum)[keyof
export const TaskTagScalarFieldEnum = {
id: 'id',
uuid: 'uuid',
taskUuid: 'taskUuid',
taskId: 'taskId',
name: 'name'
} as const
@@ -557,23 +572,12 @@ export const NullableJsonNullValueInput = {
export type NullableJsonNullValueInput = (typeof NullableJsonNullValueInput)[keyof typeof NullableJsonNullValueInput]
export const UserOrderByRelevanceFieldEnum = {
name: 'name',
email: 'email',
password: 'password'
export const QueryMode = {
default: 'default',
insensitive: 'insensitive'
} as const
export type UserOrderByRelevanceFieldEnum = (typeof UserOrderByRelevanceFieldEnum)[keyof typeof UserOrderByRelevanceFieldEnum]
export const ArticleOrderByRelevanceFieldEnum = {
title: 'title',
slug: 'slug',
content: 'content',
date: 'date'
} as const
export type ArticleOrderByRelevanceFieldEnum = (typeof ArticleOrderByRelevanceFieldEnum)[keyof typeof ArticleOrderByRelevanceFieldEnum]
export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]
export const JsonNullValueFilter = {
@@ -585,41 +589,6 @@ export const JsonNullValueFilter = {
export type JsonNullValueFilter = (typeof JsonNullValueFilter)[keyof typeof JsonNullValueFilter]
export const QueryMode = {
default: 'default',
insensitive: 'insensitive'
} as const
export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]
export const StrategyOrderByRelevanceFieldEnum = {
name: 'name',
description: 'description'
} as const
export type StrategyOrderByRelevanceFieldEnum = (typeof StrategyOrderByRelevanceFieldEnum)[keyof typeof StrategyOrderByRelevanceFieldEnum]
export const IndicatorOrderByRelevanceFieldEnum = {
name: 'name',
groupName: 'groupName',
title: 'title',
unit: 'unit',
source: 'source',
frequency: 'frequency'
} as const
export type IndicatorOrderByRelevanceFieldEnum = (typeof IndicatorOrderByRelevanceFieldEnum)[keyof typeof IndicatorOrderByRelevanceFieldEnum]
export const IndicatorPointOrderByRelevanceFieldEnum = {
period: 'period'
} as const
export type IndicatorPointOrderByRelevanceFieldEnum = (typeof IndicatorPointOrderByRelevanceFieldEnum)[keyof typeof IndicatorPointOrderByRelevanceFieldEnum]
export const NullsOrder = {
first: 'first',
last: 'last'
@@ -627,201 +596,3 @@ export const NullsOrder = {
export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]
export const NewsOrderByRelevanceFieldEnum = {
title: 'title',
summary: 'summary',
content: 'content',
source: 'source',
url: 'url'
} as const
export type NewsOrderByRelevanceFieldEnum = (typeof NewsOrderByRelevanceFieldEnum)[keyof typeof NewsOrderByRelevanceFieldEnum]
export const AlertOrderByRelevanceFieldEnum = {
indicatorName: 'indicatorName',
period: 'period',
sourceA: 'sourceA',
sourceB: 'sourceB'
} as const
export type AlertOrderByRelevanceFieldEnum = (typeof AlertOrderByRelevanceFieldEnum)[keyof typeof AlertOrderByRelevanceFieldEnum]
export const ServerNodeOrderByRelevanceFieldEnum = {
uuid: 'uuid',
name: 'name',
cpuName: 'cpuName',
os: 'os',
region: 'region',
status: 'status'
} as const
export type ServerNodeOrderByRelevanceFieldEnum = (typeof ServerNodeOrderByRelevanceFieldEnum)[keyof typeof ServerNodeOrderByRelevanceFieldEnum]
export const ServerNodeHistoryOrderByRelevanceFieldEnum = {
uuid: 'uuid'
} as const
export type ServerNodeHistoryOrderByRelevanceFieldEnum = (typeof ServerNodeHistoryOrderByRelevanceFieldEnum)[keyof typeof ServerNodeHistoryOrderByRelevanceFieldEnum]
export const ServiceCheckOrderByRelevanceFieldEnum = {
name: 'name',
url: 'url',
status: 'status',
message: 'message'
} as const
export type ServiceCheckOrderByRelevanceFieldEnum = (typeof ServiceCheckOrderByRelevanceFieldEnum)[keyof typeof ServiceCheckOrderByRelevanceFieldEnum]
export const Econ_SowInventoryOrderByRelevanceFieldEnum = {
month: 'month'
} as const
export type Econ_SowInventoryOrderByRelevanceFieldEnum = (typeof Econ_SowInventoryOrderByRelevanceFieldEnum)[keyof typeof Econ_SowInventoryOrderByRelevanceFieldEnum]
export const ScraperCacheOrderByRelevanceFieldEnum = {
scraperName: 'scraperName',
lastDataHash: 'lastDataHash'
} as const
export type ScraperCacheOrderByRelevanceFieldEnum = (typeof ScraperCacheOrderByRelevanceFieldEnum)[keyof typeof ScraperCacheOrderByRelevanceFieldEnum]
export const OilPriceHistoryOrderByRelevanceFieldEnum = {
province: 'province',
fuel: 'fuel',
source: 'source'
} as const
export type OilPriceHistoryOrderByRelevanceFieldEnum = (typeof OilPriceHistoryOrderByRelevanceFieldEnum)[keyof typeof OilPriceHistoryOrderByRelevanceFieldEnum]
export const MihomeAccountOrderByRelevanceFieldEnum = {
key: 'key',
userId: 'userId',
status: 'status',
lastError: 'lastError'
} as const
export type MihomeAccountOrderByRelevanceFieldEnum = (typeof MihomeAccountOrderByRelevanceFieldEnum)[keyof typeof MihomeAccountOrderByRelevanceFieldEnum]
export const MihomeHomeOrderByRelevanceFieldEnum = {
homeId: 'homeId',
name: 'name'
} as const
export type MihomeHomeOrderByRelevanceFieldEnum = (typeof MihomeHomeOrderByRelevanceFieldEnum)[keyof typeof MihomeHomeOrderByRelevanceFieldEnum]
export const MihomeDeviceOrderByRelevanceFieldEnum = {
did: 'did',
homeId: 'homeId',
model: 'model',
name: 'name',
alias: 'alias'
} as const
export type MihomeDeviceOrderByRelevanceFieldEnum = (typeof MihomeDeviceOrderByRelevanceFieldEnum)[keyof typeof MihomeDeviceOrderByRelevanceFieldEnum]
export const MihomeEnvSampleOrderByRelevanceFieldEnum = {
origin: 'origin'
} as const
export type MihomeEnvSampleOrderByRelevanceFieldEnum = (typeof MihomeEnvSampleOrderByRelevanceFieldEnum)[keyof typeof MihomeEnvSampleOrderByRelevanceFieldEnum]
export const HabitOrderByRelevanceFieldEnum = {
name: 'name',
period: 'period',
color: 'color',
icon: 'icon',
note: 'note'
} as const
export type HabitOrderByRelevanceFieldEnum = (typeof HabitOrderByRelevanceFieldEnum)[keyof typeof HabitOrderByRelevanceFieldEnum]
export const CheckInOrderByRelevanceFieldEnum = {
date: 'date',
note: 'note',
source: 'source'
} as const
export type CheckInOrderByRelevanceFieldEnum = (typeof CheckInOrderByRelevanceFieldEnum)[keyof typeof CheckInOrderByRelevanceFieldEnum]
export const CheckListOrderByRelevanceFieldEnum = {
title: 'title',
scene: 'scene',
note: 'note'
} as const
export type CheckListOrderByRelevanceFieldEnum = (typeof CheckListOrderByRelevanceFieldEnum)[keyof typeof CheckListOrderByRelevanceFieldEnum]
export const CheckListItemOrderByRelevanceFieldEnum = {
title: 'title',
note: 'note'
} as const
export type CheckListItemOrderByRelevanceFieldEnum = (typeof CheckListItemOrderByRelevanceFieldEnum)[keyof typeof CheckListItemOrderByRelevanceFieldEnum]
export const CheckListTemplateOrderByRelevanceFieldEnum = {
name: 'name',
scene: 'scene'
} as const
export type CheckListTemplateOrderByRelevanceFieldEnum = (typeof CheckListTemplateOrderByRelevanceFieldEnum)[keyof typeof CheckListTemplateOrderByRelevanceFieldEnum]
export const ProjectOrderByRelevanceFieldEnum = {
name: 'name',
icon: 'icon',
autoArchive: 'autoArchive'
} as const
export type ProjectOrderByRelevanceFieldEnum = (typeof ProjectOrderByRelevanceFieldEnum)[keyof typeof ProjectOrderByRelevanceFieldEnum]
export const ProjectMemberOrderByRelevanceFieldEnum = {
permission: 'permission'
} as const
export type ProjectMemberOrderByRelevanceFieldEnum = (typeof ProjectMemberOrderByRelevanceFieldEnum)[keyof typeof ProjectMemberOrderByRelevanceFieldEnum]
export const BoardColumnOrderByRelevanceFieldEnum = {
name: 'name',
boundStatus: 'boundStatus',
retention: 'retention'
} as const
export type BoardColumnOrderByRelevanceFieldEnum = (typeof BoardColumnOrderByRelevanceFieldEnum)[keyof typeof BoardColumnOrderByRelevanceFieldEnum]
export const TaskOrderByRelevanceFieldEnum = {
title: 'title',
description: 'description',
kind: 'kind',
status: 'status',
archiveSource: 'archiveSource'
} as const
export type TaskOrderByRelevanceFieldEnum = (typeof TaskOrderByRelevanceFieldEnum)[keyof typeof TaskOrderByRelevanceFieldEnum]
export const TaskTagOrderByRelevanceFieldEnum = {
name: 'name'
} as const
export type TaskTagOrderByRelevanceFieldEnum = (typeof TaskTagOrderByRelevanceFieldEnum)[keyof typeof TaskTagOrderByRelevanceFieldEnum]
+123 -7
View File
@@ -285,7 +285,6 @@ export type AlertOrderByWithRelationInput = {
diff?: Prisma.SortOrder
diffRatio?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
_relevance?: Prisma.AlertOrderByRelevanceInput
}
export type AlertWhereUniqueInput = Prisma.AtLeast<{
@@ -426,12 +425,6 @@ export type AlertUncheckedUpdateManyInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type AlertOrderByRelevanceInput = {
fields: Prisma.AlertOrderByRelevanceFieldEnum | Prisma.AlertOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type AlertCountOrderByAggregateInput = {
id?: Prisma.SortOrder
indicatorName?: Prisma.SortOrder
@@ -502,7 +495,31 @@ export type AlertSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs =
createdAt?: boolean
}, ExtArgs["result"]["alert"]>
export type AlertSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
indicatorName?: boolean
period?: boolean
valueA?: boolean
valueB?: boolean
sourceA?: boolean
sourceB?: boolean
diff?: boolean
diffRatio?: boolean
createdAt?: boolean
}, ExtArgs["result"]["alert"]>
export type AlertSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
indicatorName?: boolean
period?: boolean
valueA?: boolean
valueB?: boolean
sourceA?: boolean
sourceB?: boolean
diff?: boolean
diffRatio?: boolean
createdAt?: boolean
}, ExtArgs["result"]["alert"]>
export type AlertSelectScalar = {
id?: boolean
@@ -650,6 +667,30 @@ export interface AlertDelegate<ExtArgs extends runtime.Types.Extensions.Internal
*/
createMany<T extends AlertCreateManyArgs>(args?: Prisma.SelectSubset<T, AlertCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many Alerts and returns the data saved in the database.
* @param {AlertCreateManyAndReturnArgs} args - Arguments to create many Alerts.
* @example
* // Create many Alerts
* const alert = await prisma.alert.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many Alerts and only return the `id`
* const alertWithIdOnly = await prisma.alert.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends AlertCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, AlertCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$AlertPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a Alert.
* @param {AlertDeleteArgs} args - Arguments to delete one Alert.
@@ -714,6 +755,36 @@ export interface AlertDelegate<ExtArgs extends runtime.Types.Extensions.Internal
*/
updateMany<T extends AlertUpdateManyArgs>(args: Prisma.SelectSubset<T, AlertUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more Alerts and returns the data updated in the database.
* @param {AlertUpdateManyAndReturnArgs} args - Arguments to update many Alerts.
* @example
* // Update many Alerts
* const alert = await prisma.alert.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more Alerts and only return the `id`
* const alertWithIdOnly = await prisma.alert.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends AlertUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, AlertUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$AlertPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one Alert.
* @param {AlertUpsertArgs} args - Arguments to update or create a Alert.
@@ -1125,6 +1196,25 @@ export type AlertCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Interna
skipDuplicates?: boolean
}
/**
* Alert createManyAndReturn
*/
export type AlertCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Alert
*/
select?: Prisma.AlertSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Alert
*/
omit?: Prisma.AlertOmit<ExtArgs> | null
/**
* The data used to create many Alerts.
*/
data: Prisma.AlertCreateManyInput | Prisma.AlertCreateManyInput[]
skipDuplicates?: boolean
}
/**
* Alert update
*/
@@ -1165,6 +1255,32 @@ export type AlertUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Interna
limit?: number
}
/**
* Alert updateManyAndReturn
*/
export type AlertUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Alert
*/
select?: Prisma.AlertSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Alert
*/
omit?: Prisma.AlertOmit<ExtArgs> | null
/**
* The data used to update Alerts.
*/
data: Prisma.XOR<Prisma.AlertUpdateManyMutationInput, Prisma.AlertUncheckedUpdateManyInput>
/**
* Filter which Alerts to update
*/
where?: Prisma.AlertWhereInput
/**
* Limit how many Alerts to update.
*/
limit?: number
}
/**
* Alert upsert
*/
+117 -7
View File
@@ -242,7 +242,6 @@ export type ArticleOrderByWithRelationInput = {
date?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
_relevance?: Prisma.ArticleOrderByRelevanceInput
}
export type ArticleWhereUniqueInput = Prisma.AtLeast<{
@@ -353,12 +352,6 @@ export type ArticleUncheckedUpdateManyInput = {
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type ArticleOrderByRelevanceInput = {
fields: Prisma.ArticleOrderByRelevanceFieldEnum | Prisma.ArticleOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type ArticleCountOrderByAggregateInput = {
id?: Prisma.SortOrder
title?: Prisma.SortOrder
@@ -409,7 +402,25 @@ export type ArticleSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs
updatedAt?: boolean
}, ExtArgs["result"]["article"]>
export type ArticleSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
title?: boolean
slug?: boolean
content?: boolean
date?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["article"]>
export type ArticleSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
title?: boolean
slug?: boolean
content?: boolean
date?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["article"]>
export type ArticleSelectScalar = {
id?: boolean
@@ -551,6 +562,30 @@ export interface ArticleDelegate<ExtArgs extends runtime.Types.Extensions.Intern
*/
createMany<T extends ArticleCreateManyArgs>(args?: Prisma.SelectSubset<T, ArticleCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many Articles and returns the data saved in the database.
* @param {ArticleCreateManyAndReturnArgs} args - Arguments to create many Articles.
* @example
* // Create many Articles
* const article = await prisma.article.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many Articles and only return the `id`
* const articleWithIdOnly = await prisma.article.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends ArticleCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, ArticleCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ArticlePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a Article.
* @param {ArticleDeleteArgs} args - Arguments to delete one Article.
@@ -615,6 +650,36 @@ export interface ArticleDelegate<ExtArgs extends runtime.Types.Extensions.Intern
*/
updateMany<T extends ArticleUpdateManyArgs>(args: Prisma.SelectSubset<T, ArticleUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more Articles and returns the data updated in the database.
* @param {ArticleUpdateManyAndReturnArgs} args - Arguments to update many Articles.
* @example
* // Update many Articles
* const article = await prisma.article.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more Articles and only return the `id`
* const articleWithIdOnly = await prisma.article.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends ArticleUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, ArticleUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ArticlePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one Article.
* @param {ArticleUpsertArgs} args - Arguments to update or create a Article.
@@ -1023,6 +1088,25 @@ export type ArticleCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Inter
skipDuplicates?: boolean
}
/**
* Article createManyAndReturn
*/
export type ArticleCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Article
*/
select?: Prisma.ArticleSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Article
*/
omit?: Prisma.ArticleOmit<ExtArgs> | null
/**
* The data used to create many Articles.
*/
data: Prisma.ArticleCreateManyInput | Prisma.ArticleCreateManyInput[]
skipDuplicates?: boolean
}
/**
* Article update
*/
@@ -1063,6 +1147,32 @@ export type ArticleUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Inter
limit?: number
}
/**
* Article updateManyAndReturn
*/
export type ArticleUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Article
*/
select?: Prisma.ArticleSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Article
*/
omit?: Prisma.ArticleOmit<ExtArgs> | null
/**
* The data used to update Articles.
*/
data: Prisma.XOR<Prisma.ArticleUpdateManyMutationInput, Prisma.ArticleUncheckedUpdateManyInput>
/**
* Filter which Articles to update
*/
where?: Prisma.ArticleWhereInput
/**
* Limit how many Articles to update.
*/
limit?: number
}
/**
* Article upsert
*/
+215 -9
View File
@@ -40,6 +40,8 @@ export type BoardColumnSumAggregateOutputType = {
export type BoardColumnMinAggregateOutputType = {
id: number | null
uuid: string | null
projectUuid: string | null
projectId: number | null
name: string | null
sortOrder: number | null
@@ -51,6 +53,8 @@ export type BoardColumnMinAggregateOutputType = {
export type BoardColumnMaxAggregateOutputType = {
id: number | null
uuid: string | null
projectUuid: string | null
projectId: number | null
name: string | null
sortOrder: number | null
@@ -62,6 +66,8 @@ export type BoardColumnMaxAggregateOutputType = {
export type BoardColumnCountAggregateOutputType = {
id: number
uuid: number
projectUuid: number
projectId: number
name: number
sortOrder: number
@@ -87,6 +93,8 @@ export type BoardColumnSumAggregateInputType = {
export type BoardColumnMinAggregateInputType = {
id?: true
uuid?: true
projectUuid?: true
projectId?: true
name?: true
sortOrder?: true
@@ -98,6 +106,8 @@ export type BoardColumnMinAggregateInputType = {
export type BoardColumnMaxAggregateInputType = {
id?: true
uuid?: true
projectUuid?: true
projectId?: true
name?: true
sortOrder?: true
@@ -109,6 +119,8 @@ export type BoardColumnMaxAggregateInputType = {
export type BoardColumnCountAggregateInputType = {
id?: true
uuid?: true
projectUuid?: true
projectId?: true
name?: true
sortOrder?: true
@@ -207,6 +219,8 @@ export type BoardColumnGroupByArgs<ExtArgs extends runtime.Types.Extensions.Inte
export type BoardColumnGroupByOutputType = {
id: number
uuid: string
projectUuid: string | null
projectId: number
name: string
sortOrder: number
@@ -241,6 +255,8 @@ export type BoardColumnWhereInput = {
OR?: Prisma.BoardColumnWhereInput[]
NOT?: Prisma.BoardColumnWhereInput | Prisma.BoardColumnWhereInput[]
id?: Prisma.IntFilter<"BoardColumn"> | number
uuid?: Prisma.StringFilter<"BoardColumn"> | string
projectUuid?: Prisma.StringNullableFilter<"BoardColumn"> | string | null
projectId?: Prisma.IntFilter<"BoardColumn"> | number
name?: Prisma.StringFilter<"BoardColumn"> | string
sortOrder?: Prisma.IntFilter<"BoardColumn"> | number
@@ -254,6 +270,8 @@ export type BoardColumnWhereInput = {
export type BoardColumnOrderByWithRelationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrderInput | Prisma.SortOrder
projectId?: Prisma.SortOrder
name?: Prisma.SortOrder
sortOrder?: Prisma.SortOrder
@@ -263,15 +281,16 @@ export type BoardColumnOrderByWithRelationInput = {
updatedAt?: Prisma.SortOrder
project?: Prisma.ProjectOrderByWithRelationInput
tasks?: Prisma.TaskOrderByRelationAggregateInput
_relevance?: Prisma.BoardColumnOrderByRelevanceInput
}
export type BoardColumnWhereUniqueInput = Prisma.AtLeast<{
id?: number
uuid?: string
projectId_name?: Prisma.BoardColumnProjectIdNameCompoundUniqueInput
AND?: Prisma.BoardColumnWhereInput | Prisma.BoardColumnWhereInput[]
OR?: Prisma.BoardColumnWhereInput[]
NOT?: Prisma.BoardColumnWhereInput | Prisma.BoardColumnWhereInput[]
projectUuid?: Prisma.StringNullableFilter<"BoardColumn"> | string | null
projectId?: Prisma.IntFilter<"BoardColumn"> | number
name?: Prisma.StringFilter<"BoardColumn"> | string
sortOrder?: Prisma.IntFilter<"BoardColumn"> | number
@@ -281,10 +300,12 @@ export type BoardColumnWhereUniqueInput = Prisma.AtLeast<{
updatedAt?: Prisma.DateTimeFilter<"BoardColumn"> | Date | string
project?: Prisma.XOR<Prisma.ProjectScalarRelationFilter, Prisma.ProjectWhereInput>
tasks?: Prisma.TaskListRelationFilter
}, "id" | "projectId_name">
}, "id" | "uuid" | "projectId_name">
export type BoardColumnOrderByWithAggregationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrderInput | Prisma.SortOrder
projectId?: Prisma.SortOrder
name?: Prisma.SortOrder
sortOrder?: Prisma.SortOrder
@@ -304,6 +325,8 @@ export type BoardColumnScalarWhereWithAggregatesInput = {
OR?: Prisma.BoardColumnScalarWhereWithAggregatesInput[]
NOT?: Prisma.BoardColumnScalarWhereWithAggregatesInput | Prisma.BoardColumnScalarWhereWithAggregatesInput[]
id?: Prisma.IntWithAggregatesFilter<"BoardColumn"> | number
uuid?: Prisma.StringWithAggregatesFilter<"BoardColumn"> | string
projectUuid?: Prisma.StringNullableWithAggregatesFilter<"BoardColumn"> | string | null
projectId?: Prisma.IntWithAggregatesFilter<"BoardColumn"> | number
name?: Prisma.StringWithAggregatesFilter<"BoardColumn"> | string
sortOrder?: Prisma.IntWithAggregatesFilter<"BoardColumn"> | number
@@ -314,6 +337,8 @@ export type BoardColumnScalarWhereWithAggregatesInput = {
}
export type BoardColumnCreateInput = {
uuid: string
projectUuid?: string | null
name: string
sortOrder?: number
boundStatus?: string | null
@@ -326,6 +351,8 @@ export type BoardColumnCreateInput = {
export type BoardColumnUncheckedCreateInput = {
id?: number
uuid: string
projectUuid?: string | null
projectId: number
name: string
sortOrder?: number
@@ -337,6 +364,8 @@ export type BoardColumnUncheckedCreateInput = {
}
export type BoardColumnUpdateInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
sortOrder?: Prisma.IntFieldUpdateOperationsInput | number
boundStatus?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -349,6 +378,8 @@ export type BoardColumnUpdateInput = {
export type BoardColumnUncheckedUpdateInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
projectId?: Prisma.IntFieldUpdateOperationsInput | number
name?: Prisma.StringFieldUpdateOperationsInput | string
sortOrder?: Prisma.IntFieldUpdateOperationsInput | number
@@ -361,6 +392,8 @@ export type BoardColumnUncheckedUpdateInput = {
export type BoardColumnCreateManyInput = {
id?: number
uuid: string
projectUuid?: string | null
projectId: number
name: string
sortOrder?: number
@@ -371,6 +404,8 @@ export type BoardColumnCreateManyInput = {
}
export type BoardColumnUpdateManyMutationInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
sortOrder?: Prisma.IntFieldUpdateOperationsInput | number
boundStatus?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -381,6 +416,8 @@ export type BoardColumnUpdateManyMutationInput = {
export type BoardColumnUncheckedUpdateManyInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
projectId?: Prisma.IntFieldUpdateOperationsInput | number
name?: Prisma.StringFieldUpdateOperationsInput | string
sortOrder?: Prisma.IntFieldUpdateOperationsInput | number
@@ -400,12 +437,6 @@ export type BoardColumnOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type BoardColumnOrderByRelevanceInput = {
fields: Prisma.BoardColumnOrderByRelevanceFieldEnum | Prisma.BoardColumnOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type BoardColumnProjectIdNameCompoundUniqueInput = {
projectId: number
name: string
@@ -413,6 +444,8 @@ export type BoardColumnProjectIdNameCompoundUniqueInput = {
export type BoardColumnCountOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrder
projectId?: Prisma.SortOrder
name?: Prisma.SortOrder
sortOrder?: Prisma.SortOrder
@@ -430,6 +463,8 @@ export type BoardColumnAvgOrderByAggregateInput = {
export type BoardColumnMaxOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrder
projectId?: Prisma.SortOrder
name?: Prisma.SortOrder
sortOrder?: Prisma.SortOrder
@@ -441,6 +476,8 @@ export type BoardColumnMaxOrderByAggregateInput = {
export type BoardColumnMinOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrder
projectId?: Prisma.SortOrder
name?: Prisma.SortOrder
sortOrder?: Prisma.SortOrder
@@ -518,6 +555,8 @@ export type BoardColumnUpdateOneRequiredWithoutTasksNestedInput = {
}
export type BoardColumnCreateWithoutProjectInput = {
uuid: string
projectUuid?: string | null
name: string
sortOrder?: number
boundStatus?: string | null
@@ -529,6 +568,8 @@ export type BoardColumnCreateWithoutProjectInput = {
export type BoardColumnUncheckedCreateWithoutProjectInput = {
id?: number
uuid: string
projectUuid?: string | null
name: string
sortOrder?: number
boundStatus?: string | null
@@ -569,6 +610,8 @@ export type BoardColumnScalarWhereInput = {
OR?: Prisma.BoardColumnScalarWhereInput[]
NOT?: Prisma.BoardColumnScalarWhereInput | Prisma.BoardColumnScalarWhereInput[]
id?: Prisma.IntFilter<"BoardColumn"> | number
uuid?: Prisma.StringFilter<"BoardColumn"> | string
projectUuid?: Prisma.StringNullableFilter<"BoardColumn"> | string | null
projectId?: Prisma.IntFilter<"BoardColumn"> | number
name?: Prisma.StringFilter<"BoardColumn"> | string
sortOrder?: Prisma.IntFilter<"BoardColumn"> | number
@@ -579,6 +622,8 @@ export type BoardColumnScalarWhereInput = {
}
export type BoardColumnCreateWithoutTasksInput = {
uuid: string
projectUuid?: string | null
name: string
sortOrder?: number
boundStatus?: string | null
@@ -590,6 +635,8 @@ export type BoardColumnCreateWithoutTasksInput = {
export type BoardColumnUncheckedCreateWithoutTasksInput = {
id?: number
uuid: string
projectUuid?: string | null
projectId: number
name: string
sortOrder?: number
@@ -616,6 +663,8 @@ export type BoardColumnUpdateToOneWithWhereWithoutTasksInput = {
}
export type BoardColumnUpdateWithoutTasksInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
sortOrder?: Prisma.IntFieldUpdateOperationsInput | number
boundStatus?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -627,6 +676,8 @@ export type BoardColumnUpdateWithoutTasksInput = {
export type BoardColumnUncheckedUpdateWithoutTasksInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
projectId?: Prisma.IntFieldUpdateOperationsInput | number
name?: Prisma.StringFieldUpdateOperationsInput | string
sortOrder?: Prisma.IntFieldUpdateOperationsInput | number
@@ -638,6 +689,8 @@ export type BoardColumnUncheckedUpdateWithoutTasksInput = {
export type BoardColumnCreateManyProjectInput = {
id?: number
uuid: string
projectUuid?: string | null
name: string
sortOrder?: number
boundStatus?: string | null
@@ -647,6 +700,8 @@ export type BoardColumnCreateManyProjectInput = {
}
export type BoardColumnUpdateWithoutProjectInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
sortOrder?: Prisma.IntFieldUpdateOperationsInput | number
boundStatus?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -658,6 +713,8 @@ export type BoardColumnUpdateWithoutProjectInput = {
export type BoardColumnUncheckedUpdateWithoutProjectInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
sortOrder?: Prisma.IntFieldUpdateOperationsInput | number
boundStatus?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -669,6 +726,8 @@ export type BoardColumnUncheckedUpdateWithoutProjectInput = {
export type BoardColumnUncheckedUpdateManyWithoutProjectInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
sortOrder?: Prisma.IntFieldUpdateOperationsInput | number
boundStatus?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
@@ -710,6 +769,8 @@ export type BoardColumnCountOutputTypeCountTasksArgs<ExtArgs extends runtime.Typ
export type BoardColumnSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
projectUuid?: boolean
projectId?: boolean
name?: boolean
sortOrder?: boolean
@@ -722,10 +783,38 @@ export type BoardColumnSelect<ExtArgs extends runtime.Types.Extensions.InternalA
_count?: boolean | Prisma.BoardColumnCountOutputTypeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["boardColumn"]>
export type BoardColumnSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
projectUuid?: boolean
projectId?: boolean
name?: boolean
sortOrder?: boolean
boundStatus?: boolean
retention?: boolean
createdAt?: boolean
updatedAt?: boolean
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
}, ExtArgs["result"]["boardColumn"]>
export type BoardColumnSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
projectUuid?: boolean
projectId?: boolean
name?: boolean
sortOrder?: boolean
boundStatus?: boolean
retention?: boolean
createdAt?: boolean
updatedAt?: boolean
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
}, ExtArgs["result"]["boardColumn"]>
export type BoardColumnSelectScalar = {
id?: boolean
uuid?: boolean
projectUuid?: boolean
projectId?: boolean
name?: boolean
sortOrder?: boolean
@@ -735,12 +824,18 @@ export type BoardColumnSelectScalar = {
updatedAt?: boolean
}
export type BoardColumnOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "projectId" | "name" | "sortOrder" | "boundStatus" | "retention" | "createdAt" | "updatedAt", ExtArgs["result"]["boardColumn"]>
export type BoardColumnOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "uuid" | "projectUuid" | "projectId" | "name" | "sortOrder" | "boundStatus" | "retention" | "createdAt" | "updatedAt", ExtArgs["result"]["boardColumn"]>
export type BoardColumnInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
tasks?: boolean | Prisma.BoardColumn$tasksArgs<ExtArgs>
_count?: boolean | Prisma.BoardColumnCountOutputTypeDefaultArgs<ExtArgs>
}
export type BoardColumnIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
}
export type BoardColumnIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
}
export type $BoardColumnPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "BoardColumn"
@@ -750,6 +845,8 @@ export type $BoardColumnPayload<ExtArgs extends runtime.Types.Extensions.Interna
}
scalars: runtime.Types.Extensions.GetPayloadResult<{
id: number
uuid: string
projectUuid: string | null
projectId: number
name: string
sortOrder: number
@@ -874,6 +971,30 @@ export interface BoardColumnDelegate<ExtArgs extends runtime.Types.Extensions.In
*/
createMany<T extends BoardColumnCreateManyArgs>(args?: Prisma.SelectSubset<T, BoardColumnCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many BoardColumns and returns the data saved in the database.
* @param {BoardColumnCreateManyAndReturnArgs} args - Arguments to create many BoardColumns.
* @example
* // Create many BoardColumns
* const boardColumn = await prisma.boardColumn.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many BoardColumns and only return the `id`
* const boardColumnWithIdOnly = await prisma.boardColumn.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends BoardColumnCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, BoardColumnCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$BoardColumnPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a BoardColumn.
* @param {BoardColumnDeleteArgs} args - Arguments to delete one BoardColumn.
@@ -938,6 +1059,36 @@ export interface BoardColumnDelegate<ExtArgs extends runtime.Types.Extensions.In
*/
updateMany<T extends BoardColumnUpdateManyArgs>(args: Prisma.SelectSubset<T, BoardColumnUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more BoardColumns and returns the data updated in the database.
* @param {BoardColumnUpdateManyAndReturnArgs} args - Arguments to update many BoardColumns.
* @example
* // Update many BoardColumns
* const boardColumn = await prisma.boardColumn.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more BoardColumns and only return the `id`
* const boardColumnWithIdOnly = await prisma.boardColumn.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends BoardColumnUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, BoardColumnUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$BoardColumnPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one BoardColumn.
* @param {BoardColumnUpsertArgs} args - Arguments to update or create a BoardColumn.
@@ -1129,6 +1280,8 @@ export interface Prisma__BoardColumnClient<T, Null = never, ExtArgs extends runt
*/
export interface BoardColumnFieldRefs {
readonly id: Prisma.FieldRef<"BoardColumn", 'Int'>
readonly uuid: Prisma.FieldRef<"BoardColumn", 'String'>
readonly projectUuid: Prisma.FieldRef<"BoardColumn", 'String'>
readonly projectId: Prisma.FieldRef<"BoardColumn", 'Int'>
readonly name: Prisma.FieldRef<"BoardColumn", 'String'>
readonly sortOrder: Prisma.FieldRef<"BoardColumn", 'Int'>
@@ -1373,6 +1526,29 @@ export type BoardColumnCreateManyArgs<ExtArgs extends runtime.Types.Extensions.I
skipDuplicates?: boolean
}
/**
* BoardColumn createManyAndReturn
*/
export type BoardColumnCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the BoardColumn
*/
select?: Prisma.BoardColumnSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the BoardColumn
*/
omit?: Prisma.BoardColumnOmit<ExtArgs> | null
/**
* The data used to create many BoardColumns.
*/
data: Prisma.BoardColumnCreateManyInput | Prisma.BoardColumnCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.BoardColumnIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* BoardColumn update
*/
@@ -1417,6 +1593,36 @@ export type BoardColumnUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.I
limit?: number
}
/**
* BoardColumn updateManyAndReturn
*/
export type BoardColumnUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the BoardColumn
*/
select?: Prisma.BoardColumnSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the BoardColumn
*/
omit?: Prisma.BoardColumnOmit<ExtArgs> | null
/**
* The data used to update BoardColumns.
*/
data: Prisma.XOR<Prisma.BoardColumnUpdateManyMutationInput, Prisma.BoardColumnUncheckedUpdateManyInput>
/**
* Filter which BoardColumns to update
*/
where?: Prisma.BoardColumnWhereInput
/**
* Limit how many BoardColumns to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.BoardColumnIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* BoardColumn upsert
*/
+139 -7
View File
@@ -267,7 +267,6 @@ export type CheckInOrderByWithRelationInput = {
createdAt?: Prisma.SortOrder
habit?: Prisma.HabitOrderByWithRelationInput
user?: Prisma.UserOrderByWithRelationInput
_relevance?: Prisma.CheckInOrderByRelevanceInput
}
export type CheckInWhereUniqueInput = Prisma.AtLeast<{
@@ -399,12 +398,6 @@ export type CheckInOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type CheckInOrderByRelevanceInput = {
fields: Prisma.CheckInOrderByRelevanceFieldEnum | Prisma.CheckInOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type CheckInHabitIdDateSeqCompoundUniqueInput = {
habitId: number
date: string
@@ -739,7 +732,31 @@ export type CheckInSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["checkIn"]>
export type CheckInSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
habitId?: boolean
userId?: boolean
date?: boolean
seq?: boolean
note?: boolean
source?: boolean
createdAt?: boolean
habit?: boolean | Prisma.HabitDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["checkIn"]>
export type CheckInSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
habitId?: boolean
userId?: boolean
date?: boolean
seq?: boolean
note?: boolean
source?: boolean
createdAt?: boolean
habit?: boolean | Prisma.HabitDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["checkIn"]>
export type CheckInSelectScalar = {
id?: boolean
@@ -757,6 +774,14 @@ export type CheckInInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs
habit?: boolean | Prisma.HabitDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type CheckInIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
habit?: boolean | Prisma.HabitDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type CheckInIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
habit?: boolean | Prisma.HabitDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type $CheckInPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "CheckIn"
@@ -890,6 +915,30 @@ export interface CheckInDelegate<ExtArgs extends runtime.Types.Extensions.Intern
*/
createMany<T extends CheckInCreateManyArgs>(args?: Prisma.SelectSubset<T, CheckInCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many CheckIns and returns the data saved in the database.
* @param {CheckInCreateManyAndReturnArgs} args - Arguments to create many CheckIns.
* @example
* // Create many CheckIns
* const checkIn = await prisma.checkIn.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many CheckIns and only return the `id`
* const checkInWithIdOnly = await prisma.checkIn.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends CheckInCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, CheckInCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$CheckInPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a CheckIn.
* @param {CheckInDeleteArgs} args - Arguments to delete one CheckIn.
@@ -954,6 +1003,36 @@ export interface CheckInDelegate<ExtArgs extends runtime.Types.Extensions.Intern
*/
updateMany<T extends CheckInUpdateManyArgs>(args: Prisma.SelectSubset<T, CheckInUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more CheckIns and returns the data updated in the database.
* @param {CheckInUpdateManyAndReturnArgs} args - Arguments to update many CheckIns.
* @example
* // Update many CheckIns
* const checkIn = await prisma.checkIn.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more CheckIns and only return the `id`
* const checkInWithIdOnly = await prisma.checkIn.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends CheckInUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, CheckInUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$CheckInPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one CheckIn.
* @param {CheckInUpsertArgs} args - Arguments to update or create a CheckIn.
@@ -1389,6 +1468,29 @@ export type CheckInCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Inter
skipDuplicates?: boolean
}
/**
* CheckIn createManyAndReturn
*/
export type CheckInCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the CheckIn
*/
select?: Prisma.CheckInSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the CheckIn
*/
omit?: Prisma.CheckInOmit<ExtArgs> | null
/**
* The data used to create many CheckIns.
*/
data: Prisma.CheckInCreateManyInput | Prisma.CheckInCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.CheckInIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* CheckIn update
*/
@@ -1433,6 +1535,36 @@ export type CheckInUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Inter
limit?: number
}
/**
* CheckIn updateManyAndReturn
*/
export type CheckInUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the CheckIn
*/
select?: Prisma.CheckInSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the CheckIn
*/
omit?: Prisma.CheckInOmit<ExtArgs> | null
/**
* The data used to update CheckIns.
*/
data: Prisma.XOR<Prisma.CheckInUpdateManyMutationInput, Prisma.CheckInUncheckedUpdateManyInput>
/**
* Filter which CheckIns to update
*/
where?: Prisma.CheckInWhereInput
/**
* Limit how many CheckIns to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.CheckInIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* CheckIn upsert
*/
+135 -7
View File
@@ -259,7 +259,6 @@ export type CheckListOrderByWithRelationInput = {
updatedAt?: Prisma.SortOrder
user?: Prisma.UserOrderByWithRelationInput
items?: Prisma.CheckListItemOrderByRelationAggregateInput
_relevance?: Prisma.CheckListOrderByRelevanceInput
}
export type CheckListWhereUniqueInput = Prisma.AtLeast<{
@@ -395,12 +394,6 @@ export type CheckListOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type CheckListOrderByRelevanceInput = {
fields: Prisma.CheckListOrderByRelevanceFieldEnum | Prisma.CheckListOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type CheckListCountOrderByAggregateInput = {
id?: Prisma.SortOrder
userId?: Prisma.SortOrder
@@ -710,7 +703,29 @@ export type CheckListSelect<ExtArgs extends runtime.Types.Extensions.InternalArg
_count?: boolean | Prisma.CheckListCountOutputTypeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["checkList"]>
export type CheckListSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
userId?: boolean
title?: boolean
scene?: boolean
note?: boolean
archived?: boolean
createdAt?: boolean
updatedAt?: boolean
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["checkList"]>
export type CheckListSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
userId?: boolean
title?: boolean
scene?: boolean
note?: boolean
archived?: boolean
createdAt?: boolean
updatedAt?: boolean
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["checkList"]>
export type CheckListSelectScalar = {
id?: boolean
@@ -729,6 +744,12 @@ export type CheckListInclude<ExtArgs extends runtime.Types.Extensions.InternalAr
items?: boolean | Prisma.CheckList$itemsArgs<ExtArgs>
_count?: boolean | Prisma.CheckListCountOutputTypeDefaultArgs<ExtArgs>
}
export type CheckListIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type CheckListIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type $CheckListPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "CheckList"
@@ -862,6 +883,30 @@ export interface CheckListDelegate<ExtArgs extends runtime.Types.Extensions.Inte
*/
createMany<T extends CheckListCreateManyArgs>(args?: Prisma.SelectSubset<T, CheckListCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many CheckLists and returns the data saved in the database.
* @param {CheckListCreateManyAndReturnArgs} args - Arguments to create many CheckLists.
* @example
* // Create many CheckLists
* const checkList = await prisma.checkList.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many CheckLists and only return the `id`
* const checkListWithIdOnly = await prisma.checkList.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends CheckListCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, CheckListCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$CheckListPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a CheckList.
* @param {CheckListDeleteArgs} args - Arguments to delete one CheckList.
@@ -926,6 +971,36 @@ export interface CheckListDelegate<ExtArgs extends runtime.Types.Extensions.Inte
*/
updateMany<T extends CheckListUpdateManyArgs>(args: Prisma.SelectSubset<T, CheckListUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more CheckLists and returns the data updated in the database.
* @param {CheckListUpdateManyAndReturnArgs} args - Arguments to update many CheckLists.
* @example
* // Update many CheckLists
* const checkList = await prisma.checkList.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more CheckLists and only return the `id`
* const checkListWithIdOnly = await prisma.checkList.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends CheckListUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, CheckListUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$CheckListPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one CheckList.
* @param {CheckListUpsertArgs} args - Arguments to update or create a CheckList.
@@ -1361,6 +1436,29 @@ export type CheckListCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Int
skipDuplicates?: boolean
}
/**
* CheckList createManyAndReturn
*/
export type CheckListCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the CheckList
*/
select?: Prisma.CheckListSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the CheckList
*/
omit?: Prisma.CheckListOmit<ExtArgs> | null
/**
* The data used to create many CheckLists.
*/
data: Prisma.CheckListCreateManyInput | Prisma.CheckListCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.CheckListIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* CheckList update
*/
@@ -1405,6 +1503,36 @@ export type CheckListUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Int
limit?: number
}
/**
* CheckList updateManyAndReturn
*/
export type CheckListUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the CheckList
*/
select?: Prisma.CheckListSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the CheckList
*/
omit?: Prisma.CheckListOmit<ExtArgs> | null
/**
* The data used to update CheckLists.
*/
data: Prisma.XOR<Prisma.CheckListUpdateManyMutationInput, Prisma.CheckListUncheckedUpdateManyInput>
/**
* Filter which CheckLists to update
*/
where?: Prisma.CheckListWhereInput
/**
* Limit how many CheckLists to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.CheckListIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* CheckList upsert
*/
+137 -7
View File
@@ -270,7 +270,6 @@ export type CheckListItemOrderByWithRelationInput = {
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
list?: Prisma.CheckListOrderByWithRelationInput
_relevance?: Prisma.CheckListItemOrderByRelevanceInput
}
export type CheckListItemWhereUniqueInput = Prisma.AtLeast<{
@@ -411,12 +410,6 @@ export type CheckListItemOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type CheckListItemOrderByRelevanceInput = {
fields: Prisma.CheckListItemOrderByRelevanceFieldEnum | Prisma.CheckListItemOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type CheckListItemCountOrderByAggregateInput = {
id?: Prisma.SortOrder
listId?: Prisma.SortOrder
@@ -627,7 +620,31 @@ export type CheckListItemSelect<ExtArgs extends runtime.Types.Extensions.Interna
list?: boolean | Prisma.CheckListDefaultArgs<ExtArgs>
}, ExtArgs["result"]["checkListItem"]>
export type CheckListItemSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
listId?: boolean
title?: boolean
note?: boolean
done?: boolean
doneAt?: boolean
sortOrder?: boolean
createdAt?: boolean
updatedAt?: boolean
list?: boolean | Prisma.CheckListDefaultArgs<ExtArgs>
}, ExtArgs["result"]["checkListItem"]>
export type CheckListItemSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
listId?: boolean
title?: boolean
note?: boolean
done?: boolean
doneAt?: boolean
sortOrder?: boolean
createdAt?: boolean
updatedAt?: boolean
list?: boolean | Prisma.CheckListDefaultArgs<ExtArgs>
}, ExtArgs["result"]["checkListItem"]>
export type CheckListItemSelectScalar = {
id?: boolean
@@ -645,6 +662,12 @@ export type CheckListItemOmit<ExtArgs extends runtime.Types.Extensions.InternalA
export type CheckListItemInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
list?: boolean | Prisma.CheckListDefaultArgs<ExtArgs>
}
export type CheckListItemIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
list?: boolean | Prisma.CheckListDefaultArgs<ExtArgs>
}
export type CheckListItemIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
list?: boolean | Prisma.CheckListDefaultArgs<ExtArgs>
}
export type $CheckListItemPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "CheckListItem"
@@ -778,6 +801,30 @@ export interface CheckListItemDelegate<ExtArgs extends runtime.Types.Extensions.
*/
createMany<T extends CheckListItemCreateManyArgs>(args?: Prisma.SelectSubset<T, CheckListItemCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many CheckListItems and returns the data saved in the database.
* @param {CheckListItemCreateManyAndReturnArgs} args - Arguments to create many CheckListItems.
* @example
* // Create many CheckListItems
* const checkListItem = await prisma.checkListItem.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many CheckListItems and only return the `id`
* const checkListItemWithIdOnly = await prisma.checkListItem.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends CheckListItemCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, CheckListItemCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$CheckListItemPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a CheckListItem.
* @param {CheckListItemDeleteArgs} args - Arguments to delete one CheckListItem.
@@ -842,6 +889,36 @@ export interface CheckListItemDelegate<ExtArgs extends runtime.Types.Extensions.
*/
updateMany<T extends CheckListItemUpdateManyArgs>(args: Prisma.SelectSubset<T, CheckListItemUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more CheckListItems and returns the data updated in the database.
* @param {CheckListItemUpdateManyAndReturnArgs} args - Arguments to update many CheckListItems.
* @example
* // Update many CheckListItems
* const checkListItem = await prisma.checkListItem.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more CheckListItems and only return the `id`
* const checkListItemWithIdOnly = await prisma.checkListItem.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends CheckListItemUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, CheckListItemUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$CheckListItemPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one CheckListItem.
* @param {CheckListItemUpsertArgs} args - Arguments to update or create a CheckListItem.
@@ -1277,6 +1354,29 @@ export type CheckListItemCreateManyArgs<ExtArgs extends runtime.Types.Extensions
skipDuplicates?: boolean
}
/**
* CheckListItem createManyAndReturn
*/
export type CheckListItemCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the CheckListItem
*/
select?: Prisma.CheckListItemSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the CheckListItem
*/
omit?: Prisma.CheckListItemOmit<ExtArgs> | null
/**
* The data used to create many CheckListItems.
*/
data: Prisma.CheckListItemCreateManyInput | Prisma.CheckListItemCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.CheckListItemIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* CheckListItem update
*/
@@ -1321,6 +1421,36 @@ export type CheckListItemUpdateManyArgs<ExtArgs extends runtime.Types.Extensions
limit?: number
}
/**
* CheckListItem updateManyAndReturn
*/
export type CheckListItemUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the CheckListItem
*/
select?: Prisma.CheckListItemSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the CheckListItem
*/
omit?: Prisma.CheckListItemOmit<ExtArgs> | null
/**
* The data used to update CheckListItems.
*/
data: Prisma.XOR<Prisma.CheckListItemUpdateManyMutationInput, Prisma.CheckListItemUncheckedUpdateManyInput>
/**
* Filter which CheckListItems to update
*/
where?: Prisma.CheckListItemWhereInput
/**
* Limit how many CheckListItems to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.CheckListItemIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* CheckListItem upsert
*/
+135 -7
View File
@@ -253,7 +253,6 @@ export type CheckListTemplateOrderByWithRelationInput = {
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
user?: Prisma.UserOrderByWithRelationInput
_relevance?: Prisma.CheckListTemplateOrderByRelevanceInput
}
export type CheckListTemplateWhereUniqueInput = Prisma.AtLeast<{
@@ -384,12 +383,6 @@ export type CheckListTemplateOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type CheckListTemplateOrderByRelevanceInput = {
fields: Prisma.CheckListTemplateOrderByRelevanceFieldEnum | Prisma.CheckListTemplateOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type CheckListTemplateCountOrderByAggregateInput = {
id?: Prisma.SortOrder
userId?: Prisma.SortOrder
@@ -585,7 +578,29 @@ export type CheckListTemplateSelect<ExtArgs extends runtime.Types.Extensions.Int
user?: boolean | Prisma.CheckListTemplate$userArgs<ExtArgs>
}, ExtArgs["result"]["checkListTemplate"]>
export type CheckListTemplateSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
userId?: boolean
name?: boolean
scene?: boolean
items?: boolean
builtin?: boolean
createdAt?: boolean
updatedAt?: boolean
user?: boolean | Prisma.CheckListTemplate$userArgs<ExtArgs>
}, ExtArgs["result"]["checkListTemplate"]>
export type CheckListTemplateSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
userId?: boolean
name?: boolean
scene?: boolean
items?: boolean
builtin?: boolean
createdAt?: boolean
updatedAt?: boolean
user?: boolean | Prisma.CheckListTemplate$userArgs<ExtArgs>
}, ExtArgs["result"]["checkListTemplate"]>
export type CheckListTemplateSelectScalar = {
id?: boolean
@@ -602,6 +617,12 @@ export type CheckListTemplateOmit<ExtArgs extends runtime.Types.Extensions.Inter
export type CheckListTemplateInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
user?: boolean | Prisma.CheckListTemplate$userArgs<ExtArgs>
}
export type CheckListTemplateIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
user?: boolean | Prisma.CheckListTemplate$userArgs<ExtArgs>
}
export type CheckListTemplateIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
user?: boolean | Prisma.CheckListTemplate$userArgs<ExtArgs>
}
export type $CheckListTemplatePayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "CheckListTemplate"
@@ -734,6 +755,30 @@ export interface CheckListTemplateDelegate<ExtArgs extends runtime.Types.Extensi
*/
createMany<T extends CheckListTemplateCreateManyArgs>(args?: Prisma.SelectSubset<T, CheckListTemplateCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many CheckListTemplates and returns the data saved in the database.
* @param {CheckListTemplateCreateManyAndReturnArgs} args - Arguments to create many CheckListTemplates.
* @example
* // Create many CheckListTemplates
* const checkListTemplate = await prisma.checkListTemplate.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many CheckListTemplates and only return the `id`
* const checkListTemplateWithIdOnly = await prisma.checkListTemplate.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends CheckListTemplateCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, CheckListTemplateCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$CheckListTemplatePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a CheckListTemplate.
* @param {CheckListTemplateDeleteArgs} args - Arguments to delete one CheckListTemplate.
@@ -798,6 +843,36 @@ export interface CheckListTemplateDelegate<ExtArgs extends runtime.Types.Extensi
*/
updateMany<T extends CheckListTemplateUpdateManyArgs>(args: Prisma.SelectSubset<T, CheckListTemplateUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more CheckListTemplates and returns the data updated in the database.
* @param {CheckListTemplateUpdateManyAndReturnArgs} args - Arguments to update many CheckListTemplates.
* @example
* // Update many CheckListTemplates
* const checkListTemplate = await prisma.checkListTemplate.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more CheckListTemplates and only return the `id`
* const checkListTemplateWithIdOnly = await prisma.checkListTemplate.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends CheckListTemplateUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, CheckListTemplateUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$CheckListTemplatePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one CheckListTemplate.
* @param {CheckListTemplateUpsertArgs} args - Arguments to update or create a CheckListTemplate.
@@ -1232,6 +1307,29 @@ export type CheckListTemplateCreateManyArgs<ExtArgs extends runtime.Types.Extens
skipDuplicates?: boolean
}
/**
* CheckListTemplate createManyAndReturn
*/
export type CheckListTemplateCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the CheckListTemplate
*/
select?: Prisma.CheckListTemplateSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the CheckListTemplate
*/
omit?: Prisma.CheckListTemplateOmit<ExtArgs> | null
/**
* The data used to create many CheckListTemplates.
*/
data: Prisma.CheckListTemplateCreateManyInput | Prisma.CheckListTemplateCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.CheckListTemplateIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* CheckListTemplate update
*/
@@ -1276,6 +1374,36 @@ export type CheckListTemplateUpdateManyArgs<ExtArgs extends runtime.Types.Extens
limit?: number
}
/**
* CheckListTemplate updateManyAndReturn
*/
export type CheckListTemplateUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the CheckListTemplate
*/
select?: Prisma.CheckListTemplateSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the CheckListTemplate
*/
omit?: Prisma.CheckListTemplateOmit<ExtArgs> | null
/**
* The data used to update CheckListTemplates.
*/
data: Prisma.XOR<Prisma.CheckListTemplateUpdateManyMutationInput, Prisma.CheckListTemplateUncheckedUpdateManyInput>
/**
* Filter which CheckListTemplates to update
*/
where?: Prisma.CheckListTemplateWhereInput
/**
* Limit how many CheckListTemplates to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.CheckListTemplateIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* CheckListTemplate upsert
*/
+113 -7
View File
@@ -228,7 +228,6 @@ export type Econ_SowInventoryOrderByWithRelationInput = {
inventory?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
_relevance?: Prisma.Econ_SowInventoryOrderByRelevanceInput
}
export type Econ_SowInventoryWhereUniqueInput = Prisma.AtLeast<{
@@ -319,12 +318,6 @@ export type Econ_SowInventoryUncheckedUpdateManyInput = {
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type Econ_SowInventoryOrderByRelevanceInput = {
fields: Prisma.Econ_SowInventoryOrderByRelevanceFieldEnum | Prisma.Econ_SowInventoryOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type Econ_SowInventoryCountOrderByAggregateInput = {
id?: Prisma.SortOrder
month?: Prisma.SortOrder
@@ -369,7 +362,21 @@ export type Econ_SowInventorySelect<ExtArgs extends runtime.Types.Extensions.Int
updatedAt?: boolean
}, ExtArgs["result"]["econ_SowInventory"]>
export type Econ_SowInventorySelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
month?: boolean
inventory?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["econ_SowInventory"]>
export type Econ_SowInventorySelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
month?: boolean
inventory?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["econ_SowInventory"]>
export type Econ_SowInventorySelectScalar = {
id?: boolean
@@ -507,6 +514,30 @@ export interface Econ_SowInventoryDelegate<ExtArgs extends runtime.Types.Extensi
*/
createMany<T extends Econ_SowInventoryCreateManyArgs>(args?: Prisma.SelectSubset<T, Econ_SowInventoryCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many Econ_SowInventories and returns the data saved in the database.
* @param {Econ_SowInventoryCreateManyAndReturnArgs} args - Arguments to create many Econ_SowInventories.
* @example
* // Create many Econ_SowInventories
* const econ_SowInventory = await prisma.econ_SowInventory.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many Econ_SowInventories and only return the `id`
* const econ_SowInventoryWithIdOnly = await prisma.econ_SowInventory.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends Econ_SowInventoryCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, Econ_SowInventoryCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$Econ_SowInventoryPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a Econ_SowInventory.
* @param {Econ_SowInventoryDeleteArgs} args - Arguments to delete one Econ_SowInventory.
@@ -571,6 +602,36 @@ export interface Econ_SowInventoryDelegate<ExtArgs extends runtime.Types.Extensi
*/
updateMany<T extends Econ_SowInventoryUpdateManyArgs>(args: Prisma.SelectSubset<T, Econ_SowInventoryUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more Econ_SowInventories and returns the data updated in the database.
* @param {Econ_SowInventoryUpdateManyAndReturnArgs} args - Arguments to update many Econ_SowInventories.
* @example
* // Update many Econ_SowInventories
* const econ_SowInventory = await prisma.econ_SowInventory.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more Econ_SowInventories and only return the `id`
* const econ_SowInventoryWithIdOnly = await prisma.econ_SowInventory.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends Econ_SowInventoryUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, Econ_SowInventoryUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$Econ_SowInventoryPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one Econ_SowInventory.
* @param {Econ_SowInventoryUpsertArgs} args - Arguments to update or create a Econ_SowInventory.
@@ -977,6 +1038,25 @@ export type Econ_SowInventoryCreateManyArgs<ExtArgs extends runtime.Types.Extens
skipDuplicates?: boolean
}
/**
* Econ_SowInventory createManyAndReturn
*/
export type Econ_SowInventoryCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Econ_SowInventory
*/
select?: Prisma.Econ_SowInventorySelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Econ_SowInventory
*/
omit?: Prisma.Econ_SowInventoryOmit<ExtArgs> | null
/**
* The data used to create many Econ_SowInventories.
*/
data: Prisma.Econ_SowInventoryCreateManyInput | Prisma.Econ_SowInventoryCreateManyInput[]
skipDuplicates?: boolean
}
/**
* Econ_SowInventory update
*/
@@ -1017,6 +1097,32 @@ export type Econ_SowInventoryUpdateManyArgs<ExtArgs extends runtime.Types.Extens
limit?: number
}
/**
* Econ_SowInventory updateManyAndReturn
*/
export type Econ_SowInventoryUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Econ_SowInventory
*/
select?: Prisma.Econ_SowInventorySelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Econ_SowInventory
*/
omit?: Prisma.Econ_SowInventoryOmit<ExtArgs> | null
/**
* The data used to update Econ_SowInventories.
*/
data: Prisma.XOR<Prisma.Econ_SowInventoryUpdateManyMutationInput, Prisma.Econ_SowInventoryUncheckedUpdateManyInput>
/**
* Filter which Econ_SowInventories to update
*/
where?: Prisma.Econ_SowInventoryWhereInput
/**
* Limit how many Econ_SowInventories to update.
*/
limit?: number
}
/**
* Econ_SowInventory upsert
*/
+143 -7
View File
@@ -303,7 +303,6 @@ export type HabitOrderByWithRelationInput = {
updatedAt?: Prisma.SortOrder
user?: Prisma.UserOrderByWithRelationInput
records?: Prisma.CheckInOrderByRelationAggregateInput
_relevance?: Prisma.HabitOrderByRelevanceInput
}
export type HabitWhereUniqueInput = Prisma.AtLeast<{
@@ -479,12 +478,6 @@ export type HabitOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type HabitOrderByRelevanceInput = {
fields: Prisma.HabitOrderByRelevanceFieldEnum | Prisma.HabitOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type HabitCountOrderByAggregateInput = {
id?: Prisma.SortOrder
userId?: Prisma.SortOrder
@@ -858,7 +851,37 @@ export type HabitSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs =
_count?: boolean | Prisma.HabitCountOutputTypeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["habit"]>
export type HabitSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
userId?: boolean
name?: boolean
period?: boolean
target?: boolean
color?: boolean
icon?: boolean
note?: boolean
archived?: boolean
sortOrder?: boolean
createdAt?: boolean
updatedAt?: boolean
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["habit"]>
export type HabitSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
userId?: boolean
name?: boolean
period?: boolean
target?: boolean
color?: boolean
icon?: boolean
note?: boolean
archived?: boolean
sortOrder?: boolean
createdAt?: boolean
updatedAt?: boolean
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["habit"]>
export type HabitSelectScalar = {
id?: boolean
@@ -881,6 +904,12 @@ export type HabitInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs =
records?: boolean | Prisma.Habit$recordsArgs<ExtArgs>
_count?: boolean | Prisma.HabitCountOutputTypeDefaultArgs<ExtArgs>
}
export type HabitIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type HabitIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type $HabitPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "Habit"
@@ -1018,6 +1047,30 @@ export interface HabitDelegate<ExtArgs extends runtime.Types.Extensions.Internal
*/
createMany<T extends HabitCreateManyArgs>(args?: Prisma.SelectSubset<T, HabitCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many Habits and returns the data saved in the database.
* @param {HabitCreateManyAndReturnArgs} args - Arguments to create many Habits.
* @example
* // Create many Habits
* const habit = await prisma.habit.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many Habits and only return the `id`
* const habitWithIdOnly = await prisma.habit.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends HabitCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, HabitCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$HabitPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a Habit.
* @param {HabitDeleteArgs} args - Arguments to delete one Habit.
@@ -1082,6 +1135,36 @@ export interface HabitDelegate<ExtArgs extends runtime.Types.Extensions.Internal
*/
updateMany<T extends HabitUpdateManyArgs>(args: Prisma.SelectSubset<T, HabitUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more Habits and returns the data updated in the database.
* @param {HabitUpdateManyAndReturnArgs} args - Arguments to update many Habits.
* @example
* // Update many Habits
* const habit = await prisma.habit.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more Habits and only return the `id`
* const habitWithIdOnly = await prisma.habit.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends HabitUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, HabitUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$HabitPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one Habit.
* @param {HabitUpsertArgs} args - Arguments to update or create a Habit.
@@ -1521,6 +1604,29 @@ export type HabitCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Interna
skipDuplicates?: boolean
}
/**
* Habit createManyAndReturn
*/
export type HabitCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Habit
*/
select?: Prisma.HabitSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Habit
*/
omit?: Prisma.HabitOmit<ExtArgs> | null
/**
* The data used to create many Habits.
*/
data: Prisma.HabitCreateManyInput | Prisma.HabitCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.HabitIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* Habit update
*/
@@ -1565,6 +1671,36 @@ export type HabitUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Interna
limit?: number
}
/**
* Habit updateManyAndReturn
*/
export type HabitUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Habit
*/
select?: Prisma.HabitSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Habit
*/
omit?: Prisma.HabitOmit<ExtArgs> | null
/**
* The data used to update Habits.
*/
data: Prisma.XOR<Prisma.HabitUpdateManyMutationInput, Prisma.HabitUncheckedUpdateManyInput>
/**
* Filter which Habits to update
*/
where?: Prisma.HabitWhereInput
/**
* Limit how many Habits to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.HabitIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* Habit upsert
*/
+125 -7
View File
@@ -271,7 +271,6 @@ export type IndicatorOrderByWithRelationInput = {
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
points?: Prisma.IndicatorPointOrderByRelationAggregateInput
_relevance?: Prisma.IndicatorOrderByRelevanceInput
}
export type IndicatorWhereUniqueInput = Prisma.AtLeast<{
@@ -417,12 +416,6 @@ export type IndicatorUncheckedUpdateManyInput = {
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type IndicatorOrderByRelevanceInput = {
fields: Prisma.IndicatorOrderByRelevanceFieldEnum | Prisma.IndicatorOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type IndicatorCountOrderByAggregateInput = {
id?: Prisma.SortOrder
name?: Prisma.SortOrder
@@ -605,7 +598,31 @@ export type IndicatorSelect<ExtArgs extends runtime.Types.Extensions.InternalArg
_count?: boolean | Prisma.IndicatorCountOutputTypeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["indicator"]>
export type IndicatorSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
name?: boolean
groupName?: boolean
title?: boolean
unit?: boolean
source?: boolean
frequency?: boolean
hidden?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["indicator"]>
export type IndicatorSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
name?: boolean
groupName?: boolean
title?: boolean
unit?: boolean
source?: boolean
frequency?: boolean
hidden?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["indicator"]>
export type IndicatorSelectScalar = {
id?: boolean
@@ -625,6 +642,8 @@ export type IndicatorInclude<ExtArgs extends runtime.Types.Extensions.InternalAr
points?: boolean | Prisma.Indicator$pointsArgs<ExtArgs>
_count?: boolean | Prisma.IndicatorCountOutputTypeDefaultArgs<ExtArgs>
}
export type IndicatorIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {}
export type IndicatorIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {}
export type $IndicatorPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "Indicator"
@@ -759,6 +778,30 @@ export interface IndicatorDelegate<ExtArgs extends runtime.Types.Extensions.Inte
*/
createMany<T extends IndicatorCreateManyArgs>(args?: Prisma.SelectSubset<T, IndicatorCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many Indicators and returns the data saved in the database.
* @param {IndicatorCreateManyAndReturnArgs} args - Arguments to create many Indicators.
* @example
* // Create many Indicators
* const indicator = await prisma.indicator.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many Indicators and only return the `id`
* const indicatorWithIdOnly = await prisma.indicator.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends IndicatorCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, IndicatorCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$IndicatorPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a Indicator.
* @param {IndicatorDeleteArgs} args - Arguments to delete one Indicator.
@@ -823,6 +866,36 @@ export interface IndicatorDelegate<ExtArgs extends runtime.Types.Extensions.Inte
*/
updateMany<T extends IndicatorUpdateManyArgs>(args: Prisma.SelectSubset<T, IndicatorUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more Indicators and returns the data updated in the database.
* @param {IndicatorUpdateManyAndReturnArgs} args - Arguments to update many Indicators.
* @example
* // Update many Indicators
* const indicator = await prisma.indicator.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more Indicators and only return the `id`
* const indicatorWithIdOnly = await prisma.indicator.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends IndicatorUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, IndicatorUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$IndicatorPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one Indicator.
* @param {IndicatorUpsertArgs} args - Arguments to update or create a Indicator.
@@ -1259,6 +1332,25 @@ export type IndicatorCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Int
skipDuplicates?: boolean
}
/**
* Indicator createManyAndReturn
*/
export type IndicatorCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Indicator
*/
select?: Prisma.IndicatorSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Indicator
*/
omit?: Prisma.IndicatorOmit<ExtArgs> | null
/**
* The data used to create many Indicators.
*/
data: Prisma.IndicatorCreateManyInput | Prisma.IndicatorCreateManyInput[]
skipDuplicates?: boolean
}
/**
* Indicator update
*/
@@ -1303,6 +1395,32 @@ export type IndicatorUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Int
limit?: number
}
/**
* Indicator updateManyAndReturn
*/
export type IndicatorUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Indicator
*/
select?: Prisma.IndicatorSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Indicator
*/
omit?: Prisma.IndicatorOmit<ExtArgs> | null
/**
* The data used to update Indicators.
*/
data: Prisma.XOR<Prisma.IndicatorUpdateManyMutationInput, Prisma.IndicatorUncheckedUpdateManyInput>
/**
* Filter which Indicators to update
*/
where?: Prisma.IndicatorWhereInput
/**
* Limit how many Indicators to update.
*/
limit?: number
}
/**
* Indicator upsert
*/
+131 -7
View File
@@ -243,7 +243,6 @@ export type IndicatorPointOrderByWithRelationInput = {
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
indicator?: Prisma.IndicatorOrderByWithRelationInput
_relevance?: Prisma.IndicatorPointOrderByRelevanceInput
}
export type IndicatorPointWhereUniqueInput = Prisma.AtLeast<{
@@ -355,12 +354,6 @@ export type IndicatorPointOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type IndicatorPointOrderByRelevanceInput = {
fields: Prisma.IndicatorPointOrderByRelevanceFieldEnum | Prisma.IndicatorPointOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type IndicatorPointIndicatorIdPeriodCompoundUniqueInput = {
indicatorId: number
period: string
@@ -551,7 +544,25 @@ export type IndicatorPointSelect<ExtArgs extends runtime.Types.Extensions.Intern
indicator?: boolean | Prisma.IndicatorDefaultArgs<ExtArgs>
}, ExtArgs["result"]["indicatorPoint"]>
export type IndicatorPointSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
indicatorId?: boolean
period?: boolean
value?: boolean
createdAt?: boolean
updatedAt?: boolean
indicator?: boolean | Prisma.IndicatorDefaultArgs<ExtArgs>
}, ExtArgs["result"]["indicatorPoint"]>
export type IndicatorPointSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
indicatorId?: boolean
period?: boolean
value?: boolean
createdAt?: boolean
updatedAt?: boolean
indicator?: boolean | Prisma.IndicatorDefaultArgs<ExtArgs>
}, ExtArgs["result"]["indicatorPoint"]>
export type IndicatorPointSelectScalar = {
id?: boolean
@@ -566,6 +577,12 @@ export type IndicatorPointOmit<ExtArgs extends runtime.Types.Extensions.Internal
export type IndicatorPointInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
indicator?: boolean | Prisma.IndicatorDefaultArgs<ExtArgs>
}
export type IndicatorPointIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
indicator?: boolean | Prisma.IndicatorDefaultArgs<ExtArgs>
}
export type IndicatorPointIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
indicator?: boolean | Prisma.IndicatorDefaultArgs<ExtArgs>
}
export type $IndicatorPointPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "IndicatorPoint"
@@ -696,6 +713,30 @@ export interface IndicatorPointDelegate<ExtArgs extends runtime.Types.Extensions
*/
createMany<T extends IndicatorPointCreateManyArgs>(args?: Prisma.SelectSubset<T, IndicatorPointCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many IndicatorPoints and returns the data saved in the database.
* @param {IndicatorPointCreateManyAndReturnArgs} args - Arguments to create many IndicatorPoints.
* @example
* // Create many IndicatorPoints
* const indicatorPoint = await prisma.indicatorPoint.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many IndicatorPoints and only return the `id`
* const indicatorPointWithIdOnly = await prisma.indicatorPoint.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends IndicatorPointCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, IndicatorPointCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$IndicatorPointPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a IndicatorPoint.
* @param {IndicatorPointDeleteArgs} args - Arguments to delete one IndicatorPoint.
@@ -760,6 +801,36 @@ export interface IndicatorPointDelegate<ExtArgs extends runtime.Types.Extensions
*/
updateMany<T extends IndicatorPointUpdateManyArgs>(args: Prisma.SelectSubset<T, IndicatorPointUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more IndicatorPoints and returns the data updated in the database.
* @param {IndicatorPointUpdateManyAndReturnArgs} args - Arguments to update many IndicatorPoints.
* @example
* // Update many IndicatorPoints
* const indicatorPoint = await prisma.indicatorPoint.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more IndicatorPoints and only return the `id`
* const indicatorPointWithIdOnly = await prisma.indicatorPoint.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends IndicatorPointUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, IndicatorPointUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$IndicatorPointPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one IndicatorPoint.
* @param {IndicatorPointUpsertArgs} args - Arguments to update or create a IndicatorPoint.
@@ -1192,6 +1263,29 @@ export type IndicatorPointCreateManyArgs<ExtArgs extends runtime.Types.Extension
skipDuplicates?: boolean
}
/**
* IndicatorPoint createManyAndReturn
*/
export type IndicatorPointCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the IndicatorPoint
*/
select?: Prisma.IndicatorPointSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the IndicatorPoint
*/
omit?: Prisma.IndicatorPointOmit<ExtArgs> | null
/**
* The data used to create many IndicatorPoints.
*/
data: Prisma.IndicatorPointCreateManyInput | Prisma.IndicatorPointCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.IndicatorPointIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* IndicatorPoint update
*/
@@ -1236,6 +1330,36 @@ export type IndicatorPointUpdateManyArgs<ExtArgs extends runtime.Types.Extension
limit?: number
}
/**
* IndicatorPoint updateManyAndReturn
*/
export type IndicatorPointUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the IndicatorPoint
*/
select?: Prisma.IndicatorPointSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the IndicatorPoint
*/
omit?: Prisma.IndicatorPointOmit<ExtArgs> | null
/**
* The data used to update IndicatorPoints.
*/
data: Prisma.XOR<Prisma.IndicatorPointUpdateManyMutationInput, Prisma.IndicatorPointUncheckedUpdateManyInput>
/**
* Filter which IndicatorPoints to update
*/
where?: Prisma.IndicatorPointWhereInput
/**
* Limit how many IndicatorPoints to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.IndicatorPointIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* IndicatorPoint upsert
*/
+115 -7
View File
@@ -233,7 +233,6 @@ export type MihomeAccountOrderByWithRelationInput = {
status?: Prisma.SortOrder
lastError?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
_relevance?: Prisma.MihomeAccountOrderByRelevanceInput
}
export type MihomeAccountWhereUniqueInput = Prisma.AtLeast<{
@@ -334,12 +333,6 @@ export type MihomeAccountUncheckedUpdateManyInput = {
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type MihomeAccountOrderByRelevanceInput = {
fields: Prisma.MihomeAccountOrderByRelevanceFieldEnum | Prisma.MihomeAccountOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type MihomeAccountCountOrderByAggregateInput = {
id?: Prisma.SortOrder
key?: Prisma.SortOrder
@@ -386,7 +379,23 @@ export type MihomeAccountSelect<ExtArgs extends runtime.Types.Extensions.Interna
updatedAt?: boolean
}, ExtArgs["result"]["mihomeAccount"]>
export type MihomeAccountSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
key?: boolean
userId?: boolean
status?: boolean
lastError?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["mihomeAccount"]>
export type MihomeAccountSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
key?: boolean
userId?: boolean
status?: boolean
lastError?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["mihomeAccount"]>
export type MihomeAccountSelectScalar = {
id?: boolean
@@ -526,6 +535,30 @@ export interface MihomeAccountDelegate<ExtArgs extends runtime.Types.Extensions.
*/
createMany<T extends MihomeAccountCreateManyArgs>(args?: Prisma.SelectSubset<T, MihomeAccountCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many MihomeAccounts and returns the data saved in the database.
* @param {MihomeAccountCreateManyAndReturnArgs} args - Arguments to create many MihomeAccounts.
* @example
* // Create many MihomeAccounts
* const mihomeAccount = await prisma.mihomeAccount.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many MihomeAccounts and only return the `id`
* const mihomeAccountWithIdOnly = await prisma.mihomeAccount.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends MihomeAccountCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, MihomeAccountCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeAccountPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a MihomeAccount.
* @param {MihomeAccountDeleteArgs} args - Arguments to delete one MihomeAccount.
@@ -590,6 +623,36 @@ export interface MihomeAccountDelegate<ExtArgs extends runtime.Types.Extensions.
*/
updateMany<T extends MihomeAccountUpdateManyArgs>(args: Prisma.SelectSubset<T, MihomeAccountUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more MihomeAccounts and returns the data updated in the database.
* @param {MihomeAccountUpdateManyAndReturnArgs} args - Arguments to update many MihomeAccounts.
* @example
* // Update many MihomeAccounts
* const mihomeAccount = await prisma.mihomeAccount.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more MihomeAccounts and only return the `id`
* const mihomeAccountWithIdOnly = await prisma.mihomeAccount.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends MihomeAccountUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, MihomeAccountUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeAccountPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one MihomeAccount.
* @param {MihomeAccountUpsertArgs} args - Arguments to update or create a MihomeAccount.
@@ -997,6 +1060,25 @@ export type MihomeAccountCreateManyArgs<ExtArgs extends runtime.Types.Extensions
skipDuplicates?: boolean
}
/**
* MihomeAccount createManyAndReturn
*/
export type MihomeAccountCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeAccount
*/
select?: Prisma.MihomeAccountSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeAccount
*/
omit?: Prisma.MihomeAccountOmit<ExtArgs> | null
/**
* The data used to create many MihomeAccounts.
*/
data: Prisma.MihomeAccountCreateManyInput | Prisma.MihomeAccountCreateManyInput[]
skipDuplicates?: boolean
}
/**
* MihomeAccount update
*/
@@ -1037,6 +1119,32 @@ export type MihomeAccountUpdateManyArgs<ExtArgs extends runtime.Types.Extensions
limit?: number
}
/**
* MihomeAccount updateManyAndReturn
*/
export type MihomeAccountUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeAccount
*/
select?: Prisma.MihomeAccountSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeAccount
*/
omit?: Prisma.MihomeAccountOmit<ExtArgs> | null
/**
* The data used to update MihomeAccounts.
*/
data: Prisma.XOR<Prisma.MihomeAccountUpdateManyMutationInput, Prisma.MihomeAccountUncheckedUpdateManyInput>
/**
* Filter which MihomeAccounts to update
*/
where?: Prisma.MihomeAccountWhereInput
/**
* Limit how many MihomeAccounts to update.
*/
limit?: number
}
/**
* MihomeAccount upsert
*/
+153 -7
View File
@@ -366,7 +366,6 @@ export type MihomeDeviceOrderByWithRelationInput = {
home?: Prisma.MihomeHomeOrderByWithRelationInput
samples?: Prisma.MihomeEnvSampleOrderByRelationAggregateInput
hours?: Prisma.MihomeEnvHourOrderByRelationAggregateInput
_relevance?: Prisma.MihomeDeviceOrderByRelevanceInput
}
export type MihomeDeviceWhereUniqueInput = Prisma.AtLeast<{
@@ -597,12 +596,6 @@ export type MihomeDeviceOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type MihomeDeviceOrderByRelevanceInput = {
fields: Prisma.MihomeDeviceOrderByRelevanceFieldEnum | Prisma.MihomeDeviceOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type MihomeDeviceCountOrderByAggregateInput = {
id?: Prisma.SortOrder
did?: Prisma.SortOrder
@@ -1201,7 +1194,47 @@ export type MihomeDeviceSelect<ExtArgs extends runtime.Types.Extensions.Internal
_count?: boolean | Prisma.MihomeDeviceCountOutputTypeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeDevice"]>
export type MihomeDeviceSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
did?: boolean
homeId?: boolean
model?: boolean
name?: boolean
alias?: boolean
tempSiid?: boolean
tempPiid?: boolean
humSiid?: boolean
humPiid?: boolean
battSiid?: boolean
battPiid?: boolean
battery?: boolean
batteryAt?: boolean
enabled?: boolean
lastSyncAt?: boolean
createdAt?: boolean
home?: boolean | Prisma.MihomeHomeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeDevice"]>
export type MihomeDeviceSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
did?: boolean
homeId?: boolean
model?: boolean
name?: boolean
alias?: boolean
tempSiid?: boolean
tempPiid?: boolean
humSiid?: boolean
humPiid?: boolean
battSiid?: boolean
battPiid?: boolean
battery?: boolean
batteryAt?: boolean
enabled?: boolean
lastSyncAt?: boolean
createdAt?: boolean
home?: boolean | Prisma.MihomeHomeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeDevice"]>
export type MihomeDeviceSelectScalar = {
id?: boolean
@@ -1230,6 +1263,12 @@ export type MihomeDeviceInclude<ExtArgs extends runtime.Types.Extensions.Interna
hours?: boolean | Prisma.MihomeDevice$hoursArgs<ExtArgs>
_count?: boolean | Prisma.MihomeDeviceCountOutputTypeDefaultArgs<ExtArgs>
}
export type MihomeDeviceIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
home?: boolean | Prisma.MihomeHomeDefaultArgs<ExtArgs>
}
export type MihomeDeviceIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
home?: boolean | Prisma.MihomeHomeDefaultArgs<ExtArgs>
}
export type $MihomeDevicePayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "MihomeDevice"
@@ -1373,6 +1412,30 @@ export interface MihomeDeviceDelegate<ExtArgs extends runtime.Types.Extensions.I
*/
createMany<T extends MihomeDeviceCreateManyArgs>(args?: Prisma.SelectSubset<T, MihomeDeviceCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many MihomeDevices and returns the data saved in the database.
* @param {MihomeDeviceCreateManyAndReturnArgs} args - Arguments to create many MihomeDevices.
* @example
* // Create many MihomeDevices
* const mihomeDevice = await prisma.mihomeDevice.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many MihomeDevices and only return the `id`
* const mihomeDeviceWithIdOnly = await prisma.mihomeDevice.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends MihomeDeviceCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, MihomeDeviceCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeDevicePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a MihomeDevice.
* @param {MihomeDeviceDeleteArgs} args - Arguments to delete one MihomeDevice.
@@ -1437,6 +1500,36 @@ export interface MihomeDeviceDelegate<ExtArgs extends runtime.Types.Extensions.I
*/
updateMany<T extends MihomeDeviceUpdateManyArgs>(args: Prisma.SelectSubset<T, MihomeDeviceUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more MihomeDevices and returns the data updated in the database.
* @param {MihomeDeviceUpdateManyAndReturnArgs} args - Arguments to update many MihomeDevices.
* @example
* // Update many MihomeDevices
* const mihomeDevice = await prisma.mihomeDevice.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more MihomeDevices and only return the `id`
* const mihomeDeviceWithIdOnly = await prisma.mihomeDevice.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends MihomeDeviceUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, MihomeDeviceUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeDevicePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one MihomeDevice.
* @param {MihomeDeviceUpsertArgs} args - Arguments to update or create a MihomeDevice.
@@ -1882,6 +1975,29 @@ export type MihomeDeviceCreateManyArgs<ExtArgs extends runtime.Types.Extensions.
skipDuplicates?: boolean
}
/**
* MihomeDevice createManyAndReturn
*/
export type MihomeDeviceCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeDevice
*/
select?: Prisma.MihomeDeviceSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeDevice
*/
omit?: Prisma.MihomeDeviceOmit<ExtArgs> | null
/**
* The data used to create many MihomeDevices.
*/
data: Prisma.MihomeDeviceCreateManyInput | Prisma.MihomeDeviceCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.MihomeDeviceIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* MihomeDevice update
*/
@@ -1926,6 +2042,36 @@ export type MihomeDeviceUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.
limit?: number
}
/**
* MihomeDevice updateManyAndReturn
*/
export type MihomeDeviceUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeDevice
*/
select?: Prisma.MihomeDeviceSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeDevice
*/
omit?: Prisma.MihomeDeviceOmit<ExtArgs> | null
/**
* The data used to update MihomeDevices.
*/
data: Prisma.XOR<Prisma.MihomeDeviceUpdateManyMutationInput, Prisma.MihomeDeviceUncheckedUpdateManyInput>
/**
* Filter which MihomeDevices to update
*/
where?: Prisma.MihomeDeviceWhereInput
/**
* Limit how many MihomeDevices to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.MihomeDeviceIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* MihomeDevice upsert
*/
+133
View File
@@ -566,7 +566,27 @@ export type MihomeEnvHourSelect<ExtArgs extends runtime.Types.Extensions.Interna
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeEnvHour"]>
export type MihomeEnvHourSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
deviceId?: boolean
hour?: boolean
temperatureAvg?: boolean
humidityAvg?: boolean
raw?: boolean
createdAt?: boolean
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeEnvHour"]>
export type MihomeEnvHourSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
deviceId?: boolean
hour?: boolean
temperatureAvg?: boolean
humidityAvg?: boolean
raw?: boolean
createdAt?: boolean
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeEnvHour"]>
export type MihomeEnvHourSelectScalar = {
id?: boolean
@@ -582,6 +602,12 @@ export type MihomeEnvHourOmit<ExtArgs extends runtime.Types.Extensions.InternalA
export type MihomeEnvHourInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}
export type MihomeEnvHourIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}
export type MihomeEnvHourIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}
export type $MihomeEnvHourPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "MihomeEnvHour"
@@ -713,6 +739,30 @@ export interface MihomeEnvHourDelegate<ExtArgs extends runtime.Types.Extensions.
*/
createMany<T extends MihomeEnvHourCreateManyArgs>(args?: Prisma.SelectSubset<T, MihomeEnvHourCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many MihomeEnvHours and returns the data saved in the database.
* @param {MihomeEnvHourCreateManyAndReturnArgs} args - Arguments to create many MihomeEnvHours.
* @example
* // Create many MihomeEnvHours
* const mihomeEnvHour = await prisma.mihomeEnvHour.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many MihomeEnvHours and only return the `id`
* const mihomeEnvHourWithIdOnly = await prisma.mihomeEnvHour.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends MihomeEnvHourCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, MihomeEnvHourCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeEnvHourPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a MihomeEnvHour.
* @param {MihomeEnvHourDeleteArgs} args - Arguments to delete one MihomeEnvHour.
@@ -777,6 +827,36 @@ export interface MihomeEnvHourDelegate<ExtArgs extends runtime.Types.Extensions.
*/
updateMany<T extends MihomeEnvHourUpdateManyArgs>(args: Prisma.SelectSubset<T, MihomeEnvHourUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more MihomeEnvHours and returns the data updated in the database.
* @param {MihomeEnvHourUpdateManyAndReturnArgs} args - Arguments to update many MihomeEnvHours.
* @example
* // Update many MihomeEnvHours
* const mihomeEnvHour = await prisma.mihomeEnvHour.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more MihomeEnvHours and only return the `id`
* const mihomeEnvHourWithIdOnly = await prisma.mihomeEnvHour.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends MihomeEnvHourUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, MihomeEnvHourUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeEnvHourPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one MihomeEnvHour.
* @param {MihomeEnvHourUpsertArgs} args - Arguments to update or create a MihomeEnvHour.
@@ -1210,6 +1290,29 @@ export type MihomeEnvHourCreateManyArgs<ExtArgs extends runtime.Types.Extensions
skipDuplicates?: boolean
}
/**
* MihomeEnvHour createManyAndReturn
*/
export type MihomeEnvHourCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeEnvHour
*/
select?: Prisma.MihomeEnvHourSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeEnvHour
*/
omit?: Prisma.MihomeEnvHourOmit<ExtArgs> | null
/**
* The data used to create many MihomeEnvHours.
*/
data: Prisma.MihomeEnvHourCreateManyInput | Prisma.MihomeEnvHourCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.MihomeEnvHourIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* MihomeEnvHour update
*/
@@ -1254,6 +1357,36 @@ export type MihomeEnvHourUpdateManyArgs<ExtArgs extends runtime.Types.Extensions
limit?: number
}
/**
* MihomeEnvHour updateManyAndReturn
*/
export type MihomeEnvHourUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeEnvHour
*/
select?: Prisma.MihomeEnvHourSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeEnvHour
*/
omit?: Prisma.MihomeEnvHourOmit<ExtArgs> | null
/**
* The data used to update MihomeEnvHours.
*/
data: Prisma.XOR<Prisma.MihomeEnvHourUpdateManyMutationInput, Prisma.MihomeEnvHourUncheckedUpdateManyInput>
/**
* Filter which MihomeEnvHours to update
*/
where?: Prisma.MihomeEnvHourWhereInput
/**
* Limit how many MihomeEnvHours to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.MihomeEnvHourIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* MihomeEnvHour upsert
*/
+149 -7
View File
@@ -348,7 +348,6 @@ export type MihomeEnvSampleOrderByWithRelationInput = {
raw?: Prisma.SortOrderInput | Prisma.SortOrder
createdAt?: Prisma.SortOrder
device?: Prisma.MihomeDeviceOrderByWithRelationInput
_relevance?: Prisma.MihomeEnvSampleOrderByRelevanceInput
}
export type MihomeEnvSampleWhereUniqueInput = Prisma.AtLeast<{
@@ -550,12 +549,6 @@ export type MihomeEnvSampleOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type MihomeEnvSampleOrderByRelevanceInput = {
fields: Prisma.MihomeEnvSampleOrderByRelevanceFieldEnum | Prisma.MihomeEnvSampleOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type MihomeEnvSampleDeviceIdDateCompoundUniqueInput = {
deviceId: number
date: Date | string
@@ -857,7 +850,43 @@ export type MihomeEnvSampleSelect<ExtArgs extends runtime.Types.Extensions.Inter
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeEnvSample"]>
export type MihomeEnvSampleSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
deviceId?: boolean
date?: boolean
temperature?: boolean
humidity?: boolean
temperatureAvg?: boolean
humidityAvg?: boolean
temperatureMin?: boolean
temperatureMax?: boolean
humidityMin?: boolean
humidityMax?: boolean
origin?: boolean
sampledAt?: boolean
raw?: boolean
createdAt?: boolean
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeEnvSample"]>
export type MihomeEnvSampleSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
deviceId?: boolean
date?: boolean
temperature?: boolean
humidity?: boolean
temperatureAvg?: boolean
humidityAvg?: boolean
temperatureMin?: boolean
temperatureMax?: boolean
humidityMin?: boolean
humidityMax?: boolean
origin?: boolean
sampledAt?: boolean
raw?: boolean
createdAt?: boolean
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeEnvSample"]>
export type MihomeEnvSampleSelectScalar = {
id?: boolean
@@ -881,6 +910,12 @@ export type MihomeEnvSampleOmit<ExtArgs extends runtime.Types.Extensions.Interna
export type MihomeEnvSampleInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}
export type MihomeEnvSampleIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}
export type MihomeEnvSampleIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
device?: boolean | Prisma.MihomeDeviceDefaultArgs<ExtArgs>
}
export type $MihomeEnvSamplePayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "MihomeEnvSample"
@@ -1020,6 +1055,30 @@ export interface MihomeEnvSampleDelegate<ExtArgs extends runtime.Types.Extension
*/
createMany<T extends MihomeEnvSampleCreateManyArgs>(args?: Prisma.SelectSubset<T, MihomeEnvSampleCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many MihomeEnvSamples and returns the data saved in the database.
* @param {MihomeEnvSampleCreateManyAndReturnArgs} args - Arguments to create many MihomeEnvSamples.
* @example
* // Create many MihomeEnvSamples
* const mihomeEnvSample = await prisma.mihomeEnvSample.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many MihomeEnvSamples and only return the `id`
* const mihomeEnvSampleWithIdOnly = await prisma.mihomeEnvSample.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends MihomeEnvSampleCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, MihomeEnvSampleCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeEnvSamplePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a MihomeEnvSample.
* @param {MihomeEnvSampleDeleteArgs} args - Arguments to delete one MihomeEnvSample.
@@ -1084,6 +1143,36 @@ export interface MihomeEnvSampleDelegate<ExtArgs extends runtime.Types.Extension
*/
updateMany<T extends MihomeEnvSampleUpdateManyArgs>(args: Prisma.SelectSubset<T, MihomeEnvSampleUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more MihomeEnvSamples and returns the data updated in the database.
* @param {MihomeEnvSampleUpdateManyAndReturnArgs} args - Arguments to update many MihomeEnvSamples.
* @example
* // Update many MihomeEnvSamples
* const mihomeEnvSample = await prisma.mihomeEnvSample.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more MihomeEnvSamples and only return the `id`
* const mihomeEnvSampleWithIdOnly = await prisma.mihomeEnvSample.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends MihomeEnvSampleUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, MihomeEnvSampleUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeEnvSamplePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one MihomeEnvSample.
* @param {MihomeEnvSampleUpsertArgs} args - Arguments to update or create a MihomeEnvSample.
@@ -1525,6 +1614,29 @@ export type MihomeEnvSampleCreateManyArgs<ExtArgs extends runtime.Types.Extensio
skipDuplicates?: boolean
}
/**
* MihomeEnvSample createManyAndReturn
*/
export type MihomeEnvSampleCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeEnvSample
*/
select?: Prisma.MihomeEnvSampleSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeEnvSample
*/
omit?: Prisma.MihomeEnvSampleOmit<ExtArgs> | null
/**
* The data used to create many MihomeEnvSamples.
*/
data: Prisma.MihomeEnvSampleCreateManyInput | Prisma.MihomeEnvSampleCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.MihomeEnvSampleIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* MihomeEnvSample update
*/
@@ -1569,6 +1681,36 @@ export type MihomeEnvSampleUpdateManyArgs<ExtArgs extends runtime.Types.Extensio
limit?: number
}
/**
* MihomeEnvSample updateManyAndReturn
*/
export type MihomeEnvSampleUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeEnvSample
*/
select?: Prisma.MihomeEnvSampleSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeEnvSample
*/
omit?: Prisma.MihomeEnvSampleOmit<ExtArgs> | null
/**
* The data used to update MihomeEnvSamples.
*/
data: Prisma.XOR<Prisma.MihomeEnvSampleUpdateManyMutationInput, Prisma.MihomeEnvSampleUncheckedUpdateManyInput>
/**
* Filter which MihomeEnvSamples to update
*/
where?: Prisma.MihomeEnvSampleWhereInput
/**
* Limit how many MihomeEnvSamples to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.MihomeEnvSampleIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* MihomeEnvSample upsert
*/
+113 -7
View File
@@ -217,7 +217,6 @@ export type MihomeHomeOrderByWithRelationInput = {
name?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
devices?: Prisma.MihomeDeviceOrderByRelationAggregateInput
_relevance?: Prisma.MihomeHomeOrderByRelevanceInput
}
export type MihomeHomeWhereUniqueInput = Prisma.AtLeast<{
@@ -303,12 +302,6 @@ export type MihomeHomeUncheckedUpdateManyInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type MihomeHomeOrderByRelevanceInput = {
fields: Prisma.MihomeHomeOrderByRelevanceFieldEnum | Prisma.MihomeHomeOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type MihomeHomeCountOrderByAggregateInput = {
id?: Prisma.SortOrder
homeId?: Prisma.SortOrder
@@ -439,7 +432,19 @@ export type MihomeHomeSelect<ExtArgs extends runtime.Types.Extensions.InternalAr
_count?: boolean | Prisma.MihomeHomeCountOutputTypeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["mihomeHome"]>
export type MihomeHomeSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
homeId?: boolean
name?: boolean
createdAt?: boolean
}, ExtArgs["result"]["mihomeHome"]>
export type MihomeHomeSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
homeId?: boolean
name?: boolean
createdAt?: boolean
}, ExtArgs["result"]["mihomeHome"]>
export type MihomeHomeSelectScalar = {
id?: boolean
@@ -453,6 +458,8 @@ export type MihomeHomeInclude<ExtArgs extends runtime.Types.Extensions.InternalA
devices?: boolean | Prisma.MihomeHome$devicesArgs<ExtArgs>
_count?: boolean | Prisma.MihomeHomeCountOutputTypeDefaultArgs<ExtArgs>
}
export type MihomeHomeIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {}
export type MihomeHomeIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {}
export type $MihomeHomePayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "MihomeHome"
@@ -581,6 +588,30 @@ export interface MihomeHomeDelegate<ExtArgs extends runtime.Types.Extensions.Int
*/
createMany<T extends MihomeHomeCreateManyArgs>(args?: Prisma.SelectSubset<T, MihomeHomeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many MihomeHomes and returns the data saved in the database.
* @param {MihomeHomeCreateManyAndReturnArgs} args - Arguments to create many MihomeHomes.
* @example
* // Create many MihomeHomes
* const mihomeHome = await prisma.mihomeHome.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many MihomeHomes and only return the `id`
* const mihomeHomeWithIdOnly = await prisma.mihomeHome.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends MihomeHomeCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, MihomeHomeCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeHomePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a MihomeHome.
* @param {MihomeHomeDeleteArgs} args - Arguments to delete one MihomeHome.
@@ -645,6 +676,36 @@ export interface MihomeHomeDelegate<ExtArgs extends runtime.Types.Extensions.Int
*/
updateMany<T extends MihomeHomeUpdateManyArgs>(args: Prisma.SelectSubset<T, MihomeHomeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more MihomeHomes and returns the data updated in the database.
* @param {MihomeHomeUpdateManyAndReturnArgs} args - Arguments to update many MihomeHomes.
* @example
* // Update many MihomeHomes
* const mihomeHome = await prisma.mihomeHome.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more MihomeHomes and only return the `id`
* const mihomeHomeWithIdOnly = await prisma.mihomeHome.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends MihomeHomeUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, MihomeHomeUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$MihomeHomePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one MihomeHome.
* @param {MihomeHomeUpsertArgs} args - Arguments to update or create a MihomeHome.
@@ -1075,6 +1136,25 @@ export type MihomeHomeCreateManyArgs<ExtArgs extends runtime.Types.Extensions.In
skipDuplicates?: boolean
}
/**
* MihomeHome createManyAndReturn
*/
export type MihomeHomeCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeHome
*/
select?: Prisma.MihomeHomeSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeHome
*/
omit?: Prisma.MihomeHomeOmit<ExtArgs> | null
/**
* The data used to create many MihomeHomes.
*/
data: Prisma.MihomeHomeCreateManyInput | Prisma.MihomeHomeCreateManyInput[]
skipDuplicates?: boolean
}
/**
* MihomeHome update
*/
@@ -1119,6 +1199,32 @@ export type MihomeHomeUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.In
limit?: number
}
/**
* MihomeHome updateManyAndReturn
*/
export type MihomeHomeUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the MihomeHome
*/
select?: Prisma.MihomeHomeSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the MihomeHome
*/
omit?: Prisma.MihomeHomeOmit<ExtArgs> | null
/**
* The data used to update MihomeHomes.
*/
data: Prisma.XOR<Prisma.MihomeHomeUpdateManyMutationInput, Prisma.MihomeHomeUncheckedUpdateManyInput>
/**
* Filter which MihomeHomes to update
*/
where?: Prisma.MihomeHomeWhereInput
/**
* Limit how many MihomeHomes to update.
*/
limit?: number
}
/**
* MihomeHome upsert
*/
+121 -7
View File
@@ -264,7 +264,6 @@ export type NewsOrderByWithRelationInput = {
publishedAt?: Prisma.SortOrder
impactRank?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
_relevance?: Prisma.NewsOrderByRelevanceInput
}
export type NewsWhereUniqueInput = Prisma.AtLeast<{
@@ -396,12 +395,6 @@ export type NewsUncheckedUpdateManyInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type NewsOrderByRelevanceInput = {
fields: Prisma.NewsOrderByRelevanceFieldEnum | Prisma.NewsOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type NewsTitlePublishedAtCompoundUniqueInput = {
title: string
publishedAt: Date | string
@@ -471,7 +464,29 @@ export type NewsSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = r
createdAt?: boolean
}, ExtArgs["result"]["news"]>
export type NewsSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
title?: boolean
summary?: boolean
content?: boolean
source?: boolean
url?: boolean
publishedAt?: boolean
impactRank?: boolean
createdAt?: boolean
}, ExtArgs["result"]["news"]>
export type NewsSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
title?: boolean
summary?: boolean
content?: boolean
source?: boolean
url?: boolean
publishedAt?: boolean
impactRank?: boolean
createdAt?: boolean
}, ExtArgs["result"]["news"]>
export type NewsSelectScalar = {
id?: boolean
@@ -617,6 +632,30 @@ export interface NewsDelegate<ExtArgs extends runtime.Types.Extensions.InternalA
*/
createMany<T extends NewsCreateManyArgs>(args?: Prisma.SelectSubset<T, NewsCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many News and returns the data saved in the database.
* @param {NewsCreateManyAndReturnArgs} args - Arguments to create many News.
* @example
* // Create many News
* const news = await prisma.news.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many News and only return the `id`
* const newsWithIdOnly = await prisma.news.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends NewsCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, NewsCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$NewsPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a News.
* @param {NewsDeleteArgs} args - Arguments to delete one News.
@@ -681,6 +720,36 @@ export interface NewsDelegate<ExtArgs extends runtime.Types.Extensions.InternalA
*/
updateMany<T extends NewsUpdateManyArgs>(args: Prisma.SelectSubset<T, NewsUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more News and returns the data updated in the database.
* @param {NewsUpdateManyAndReturnArgs} args - Arguments to update many News.
* @example
* // Update many News
* const news = await prisma.news.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more News and only return the `id`
* const newsWithIdOnly = await prisma.news.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends NewsUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, NewsUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$NewsPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one News.
* @param {NewsUpsertArgs} args - Arguments to update or create a News.
@@ -1091,6 +1160,25 @@ export type NewsCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Internal
skipDuplicates?: boolean
}
/**
* News createManyAndReturn
*/
export type NewsCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the News
*/
select?: Prisma.NewsSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the News
*/
omit?: Prisma.NewsOmit<ExtArgs> | null
/**
* The data used to create many News.
*/
data: Prisma.NewsCreateManyInput | Prisma.NewsCreateManyInput[]
skipDuplicates?: boolean
}
/**
* News update
*/
@@ -1131,6 +1219,32 @@ export type NewsUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Internal
limit?: number
}
/**
* News updateManyAndReturn
*/
export type NewsUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the News
*/
select?: Prisma.NewsSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the News
*/
omit?: Prisma.NewsOmit<ExtArgs> | null
/**
* The data used to update News.
*/
data: Prisma.XOR<Prisma.NewsUpdateManyMutationInput, Prisma.NewsUncheckedUpdateManyInput>
/**
* Filter which News to update
*/
where?: Prisma.NewsWhereInput
/**
* Limit how many News to update.
*/
limit?: number
}
/**
* News upsert
*/
+117 -7
View File
@@ -246,7 +246,6 @@ export type OilPriceHistoryOrderByWithRelationInput = {
price?: Prisma.SortOrder
source?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
_relevance?: Prisma.OilPriceHistoryOrderByRelevanceInput
}
export type OilPriceHistoryWhereUniqueInput = Prisma.AtLeast<{
@@ -358,12 +357,6 @@ export type OilPriceHistoryUncheckedUpdateManyInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type OilPriceHistoryOrderByRelevanceInput = {
fields: Prisma.OilPriceHistoryOrderByRelevanceFieldEnum | Prisma.OilPriceHistoryOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type OilPriceHistoryDateProvinceFuelCompoundUniqueInput = {
date: Date | string
province: string
@@ -422,7 +415,25 @@ export type OilPriceHistorySelect<ExtArgs extends runtime.Types.Extensions.Inter
createdAt?: boolean
}, ExtArgs["result"]["oilPriceHistory"]>
export type OilPriceHistorySelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
date?: boolean
province?: boolean
fuel?: boolean
price?: boolean
source?: boolean
createdAt?: boolean
}, ExtArgs["result"]["oilPriceHistory"]>
export type OilPriceHistorySelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
date?: boolean
province?: boolean
fuel?: boolean
price?: boolean
source?: boolean
createdAt?: boolean
}, ExtArgs["result"]["oilPriceHistory"]>
export type OilPriceHistorySelectScalar = {
id?: boolean
@@ -564,6 +575,30 @@ export interface OilPriceHistoryDelegate<ExtArgs extends runtime.Types.Extension
*/
createMany<T extends OilPriceHistoryCreateManyArgs>(args?: Prisma.SelectSubset<T, OilPriceHistoryCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many OilPriceHistories and returns the data saved in the database.
* @param {OilPriceHistoryCreateManyAndReturnArgs} args - Arguments to create many OilPriceHistories.
* @example
* // Create many OilPriceHistories
* const oilPriceHistory = await prisma.oilPriceHistory.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many OilPriceHistories and only return the `id`
* const oilPriceHistoryWithIdOnly = await prisma.oilPriceHistory.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends OilPriceHistoryCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, OilPriceHistoryCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$OilPriceHistoryPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a OilPriceHistory.
* @param {OilPriceHistoryDeleteArgs} args - Arguments to delete one OilPriceHistory.
@@ -628,6 +663,36 @@ export interface OilPriceHistoryDelegate<ExtArgs extends runtime.Types.Extension
*/
updateMany<T extends OilPriceHistoryUpdateManyArgs>(args: Prisma.SelectSubset<T, OilPriceHistoryUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more OilPriceHistories and returns the data updated in the database.
* @param {OilPriceHistoryUpdateManyAndReturnArgs} args - Arguments to update many OilPriceHistories.
* @example
* // Update many OilPriceHistories
* const oilPriceHistory = await prisma.oilPriceHistory.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more OilPriceHistories and only return the `id`
* const oilPriceHistoryWithIdOnly = await prisma.oilPriceHistory.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends OilPriceHistoryUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, OilPriceHistoryUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$OilPriceHistoryPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one OilPriceHistory.
* @param {OilPriceHistoryUpsertArgs} args - Arguments to update or create a OilPriceHistory.
@@ -1036,6 +1101,25 @@ export type OilPriceHistoryCreateManyArgs<ExtArgs extends runtime.Types.Extensio
skipDuplicates?: boolean
}
/**
* OilPriceHistory createManyAndReturn
*/
export type OilPriceHistoryCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the OilPriceHistory
*/
select?: Prisma.OilPriceHistorySelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the OilPriceHistory
*/
omit?: Prisma.OilPriceHistoryOmit<ExtArgs> | null
/**
* The data used to create many OilPriceHistories.
*/
data: Prisma.OilPriceHistoryCreateManyInput | Prisma.OilPriceHistoryCreateManyInput[]
skipDuplicates?: boolean
}
/**
* OilPriceHistory update
*/
@@ -1076,6 +1160,32 @@ export type OilPriceHistoryUpdateManyArgs<ExtArgs extends runtime.Types.Extensio
limit?: number
}
/**
* OilPriceHistory updateManyAndReturn
*/
export type OilPriceHistoryUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the OilPriceHistory
*/
select?: Prisma.OilPriceHistorySelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the OilPriceHistory
*/
omit?: Prisma.OilPriceHistoryOmit<ExtArgs> | null
/**
* The data used to update OilPriceHistories.
*/
data: Prisma.XOR<Prisma.OilPriceHistoryUpdateManyMutationInput, Prisma.OilPriceHistoryUncheckedUpdateManyInput>
/**
* Filter which OilPriceHistories to update
*/
where?: Prisma.OilPriceHistoryWhereInput
/**
* Limit how many OilPriceHistories to update.
*/
limit?: number
}
/**
* OilPriceHistory upsert
*/
+237 -9
View File
@@ -38,6 +38,8 @@ export type ProjectSumAggregateOutputType = {
export type ProjectMinAggregateOutputType = {
id: number | null
uuid: string | null
code: string | null
name: string | null
ownerId: number | null
isPersonal: boolean | null
@@ -50,6 +52,8 @@ export type ProjectMinAggregateOutputType = {
export type ProjectMaxAggregateOutputType = {
id: number | null
uuid: string | null
code: string | null
name: string | null
ownerId: number | null
isPersonal: boolean | null
@@ -62,6 +66,8 @@ export type ProjectMaxAggregateOutputType = {
export type ProjectCountAggregateOutputType = {
id: number
uuid: number
code: number
name: number
ownerId: number
isPersonal: number
@@ -88,6 +94,8 @@ export type ProjectSumAggregateInputType = {
export type ProjectMinAggregateInputType = {
id?: true
uuid?: true
code?: true
name?: true
ownerId?: true
isPersonal?: true
@@ -100,6 +108,8 @@ export type ProjectMinAggregateInputType = {
export type ProjectMaxAggregateInputType = {
id?: true
uuid?: true
code?: true
name?: true
ownerId?: true
isPersonal?: true
@@ -112,6 +122,8 @@ export type ProjectMaxAggregateInputType = {
export type ProjectCountAggregateInputType = {
id?: true
uuid?: true
code?: true
name?: true
ownerId?: true
isPersonal?: true
@@ -213,6 +225,8 @@ export type ProjectGroupByArgs<ExtArgs extends runtime.Types.Extensions.Internal
export type ProjectGroupByOutputType = {
id: number
uuid: string
code: string
name: string
ownerId: number
isPersonal: boolean
@@ -250,6 +264,8 @@ export type ProjectWhereInput = {
OR?: Prisma.ProjectWhereInput[]
NOT?: Prisma.ProjectWhereInput | Prisma.ProjectWhereInput[]
id?: Prisma.IntFilter<"Project"> | number
uuid?: Prisma.StringFilter<"Project"> | string
code?: Prisma.StringFilter<"Project"> | string
name?: Prisma.StringFilter<"Project"> | string
ownerId?: Prisma.IntFilter<"Project"> | number
isPersonal?: Prisma.BoolFilter<"Project"> | boolean
@@ -268,6 +284,8 @@ export type ProjectWhereInput = {
export type ProjectOrderByWithRelationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
code?: Prisma.SortOrder
name?: Prisma.SortOrder
ownerId?: Prisma.SortOrder
isPersonal?: Prisma.SortOrder
@@ -282,11 +300,12 @@ export type ProjectOrderByWithRelationInput = {
members?: Prisma.ProjectMemberOrderByRelationAggregateInput
columns?: Prisma.BoardColumnOrderByRelationAggregateInput
tasks?: Prisma.TaskOrderByRelationAggregateInput
_relevance?: Prisma.ProjectOrderByRelevanceInput
}
export type ProjectWhereUniqueInput = Prisma.AtLeast<{
id?: number
uuid?: string
code?: string
AND?: Prisma.ProjectWhereInput | Prisma.ProjectWhereInput[]
OR?: Prisma.ProjectWhereInput[]
NOT?: Prisma.ProjectWhereInput | Prisma.ProjectWhereInput[]
@@ -304,10 +323,12 @@ export type ProjectWhereUniqueInput = Prisma.AtLeast<{
members?: Prisma.ProjectMemberListRelationFilter
columns?: Prisma.BoardColumnListRelationFilter
tasks?: Prisma.TaskListRelationFilter
}, "id">
}, "id" | "uuid" | "code">
export type ProjectOrderByWithAggregationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
code?: Prisma.SortOrder
name?: Prisma.SortOrder
ownerId?: Prisma.SortOrder
isPersonal?: Prisma.SortOrder
@@ -330,6 +351,8 @@ export type ProjectScalarWhereWithAggregatesInput = {
OR?: Prisma.ProjectScalarWhereWithAggregatesInput[]
NOT?: Prisma.ProjectScalarWhereWithAggregatesInput | Prisma.ProjectScalarWhereWithAggregatesInput[]
id?: Prisma.IntWithAggregatesFilter<"Project"> | number
uuid?: Prisma.StringWithAggregatesFilter<"Project"> | string
code?: Prisma.StringWithAggregatesFilter<"Project"> | string
name?: Prisma.StringWithAggregatesFilter<"Project"> | string
ownerId?: Prisma.IntWithAggregatesFilter<"Project"> | number
isPersonal?: Prisma.BoolWithAggregatesFilter<"Project"> | boolean
@@ -343,6 +366,8 @@ export type ProjectScalarWhereWithAggregatesInput = {
}
export type ProjectCreateInput = {
uuid: string
code: string
name: string
isPersonal?: boolean
archived?: boolean
@@ -360,6 +385,8 @@ export type ProjectCreateInput = {
export type ProjectUncheckedCreateInput = {
id?: number
uuid: string
code: string
name: string
ownerId: number
isPersonal?: boolean
@@ -376,6 +403,8 @@ export type ProjectUncheckedCreateInput = {
}
export type ProjectUpdateInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
archived?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -393,6 +422,8 @@ export type ProjectUpdateInput = {
export type ProjectUncheckedUpdateInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
ownerId?: Prisma.IntFieldUpdateOperationsInput | number
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -410,6 +441,8 @@ export type ProjectUncheckedUpdateInput = {
export type ProjectCreateManyInput = {
id?: number
uuid: string
code: string
name: string
ownerId: number
isPersonal?: boolean
@@ -423,6 +456,8 @@ export type ProjectCreateManyInput = {
}
export type ProjectUpdateManyMutationInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
archived?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -436,6 +471,8 @@ export type ProjectUpdateManyMutationInput = {
export type ProjectUncheckedUpdateManyInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
ownerId?: Prisma.IntFieldUpdateOperationsInput | number
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -458,14 +495,10 @@ export type ProjectOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type ProjectOrderByRelevanceInput = {
fields: Prisma.ProjectOrderByRelevanceFieldEnum | Prisma.ProjectOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type ProjectCountOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
code?: Prisma.SortOrder
name?: Prisma.SortOrder
ownerId?: Prisma.SortOrder
isPersonal?: Prisma.SortOrder
@@ -485,6 +518,8 @@ export type ProjectAvgOrderByAggregateInput = {
export type ProjectMaxOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
code?: Prisma.SortOrder
name?: Prisma.SortOrder
ownerId?: Prisma.SortOrder
isPersonal?: Prisma.SortOrder
@@ -497,6 +532,8 @@ export type ProjectMaxOrderByAggregateInput = {
export type ProjectMinOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
code?: Prisma.SortOrder
name?: Prisma.SortOrder
ownerId?: Prisma.SortOrder
isPersonal?: Prisma.SortOrder
@@ -602,6 +639,8 @@ export type ProjectUpdateOneRequiredWithoutTasksNestedInput = {
}
export type ProjectCreateWithoutOwnerInput = {
uuid: string
code: string
name: string
isPersonal?: boolean
archived?: boolean
@@ -618,6 +657,8 @@ export type ProjectCreateWithoutOwnerInput = {
export type ProjectUncheckedCreateWithoutOwnerInput = {
id?: number
uuid: string
code: string
name: string
isPersonal?: boolean
archived?: boolean
@@ -663,6 +704,8 @@ export type ProjectScalarWhereInput = {
OR?: Prisma.ProjectScalarWhereInput[]
NOT?: Prisma.ProjectScalarWhereInput | Prisma.ProjectScalarWhereInput[]
id?: Prisma.IntFilter<"Project"> | number
uuid?: Prisma.StringFilter<"Project"> | string
code?: Prisma.StringFilter<"Project"> | string
name?: Prisma.StringFilter<"Project"> | string
ownerId?: Prisma.IntFilter<"Project"> | number
isPersonal?: Prisma.BoolFilter<"Project"> | boolean
@@ -676,6 +719,8 @@ export type ProjectScalarWhereInput = {
}
export type ProjectCreateWithoutMembersInput = {
uuid: string
code: string
name: string
isPersonal?: boolean
archived?: boolean
@@ -692,6 +737,8 @@ export type ProjectCreateWithoutMembersInput = {
export type ProjectUncheckedCreateWithoutMembersInput = {
id?: number
uuid: string
code: string
name: string
ownerId: number
isPersonal?: boolean
@@ -723,6 +770,8 @@ export type ProjectUpdateToOneWithWhereWithoutMembersInput = {
}
export type ProjectUpdateWithoutMembersInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
archived?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -739,6 +788,8 @@ export type ProjectUpdateWithoutMembersInput = {
export type ProjectUncheckedUpdateWithoutMembersInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
ownerId?: Prisma.IntFieldUpdateOperationsInput | number
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -754,6 +805,8 @@ export type ProjectUncheckedUpdateWithoutMembersInput = {
}
export type ProjectCreateWithoutColumnsInput = {
uuid: string
code: string
name: string
isPersonal?: boolean
archived?: boolean
@@ -770,6 +823,8 @@ export type ProjectCreateWithoutColumnsInput = {
export type ProjectUncheckedCreateWithoutColumnsInput = {
id?: number
uuid: string
code: string
name: string
ownerId: number
isPersonal?: boolean
@@ -801,6 +856,8 @@ export type ProjectUpdateToOneWithWhereWithoutColumnsInput = {
}
export type ProjectUpdateWithoutColumnsInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
archived?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -817,6 +874,8 @@ export type ProjectUpdateWithoutColumnsInput = {
export type ProjectUncheckedUpdateWithoutColumnsInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
ownerId?: Prisma.IntFieldUpdateOperationsInput | number
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -832,6 +891,8 @@ export type ProjectUncheckedUpdateWithoutColumnsInput = {
}
export type ProjectCreateWithoutTasksInput = {
uuid: string
code: string
name: string
isPersonal?: boolean
archived?: boolean
@@ -848,6 +909,8 @@ export type ProjectCreateWithoutTasksInput = {
export type ProjectUncheckedCreateWithoutTasksInput = {
id?: number
uuid: string
code: string
name: string
ownerId: number
isPersonal?: boolean
@@ -879,6 +942,8 @@ export type ProjectUpdateToOneWithWhereWithoutTasksInput = {
}
export type ProjectUpdateWithoutTasksInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
archived?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -895,6 +960,8 @@ export type ProjectUpdateWithoutTasksInput = {
export type ProjectUncheckedUpdateWithoutTasksInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
ownerId?: Prisma.IntFieldUpdateOperationsInput | number
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -911,6 +978,8 @@ export type ProjectUncheckedUpdateWithoutTasksInput = {
export type ProjectCreateManyOwnerInput = {
id?: number
uuid: string
code: string
name: string
isPersonal?: boolean
archived?: boolean
@@ -923,6 +992,8 @@ export type ProjectCreateManyOwnerInput = {
}
export type ProjectUpdateWithoutOwnerInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
archived?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -939,6 +1010,8 @@ export type ProjectUpdateWithoutOwnerInput = {
export type ProjectUncheckedUpdateWithoutOwnerInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
archived?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -955,6 +1028,8 @@ export type ProjectUncheckedUpdateWithoutOwnerInput = {
export type ProjectUncheckedUpdateManyWithoutOwnerInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
code?: Prisma.StringFieldUpdateOperationsInput | string
name?: Prisma.StringFieldUpdateOperationsInput | string
isPersonal?: Prisma.BoolFieldUpdateOperationsInput | boolean
archived?: Prisma.BoolFieldUpdateOperationsInput | boolean
@@ -1017,6 +1092,8 @@ export type ProjectCountOutputTypeCountTasksArgs<ExtArgs extends runtime.Types.E
export type ProjectSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
code?: boolean
name?: boolean
ownerId?: boolean
isPersonal?: boolean
@@ -1034,10 +1111,44 @@ export type ProjectSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs
_count?: boolean | Prisma.ProjectCountOutputTypeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["project"]>
export type ProjectSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
code?: boolean
name?: boolean
ownerId?: boolean
isPersonal?: boolean
archived?: boolean
notes?: boolean
taskKinds?: boolean
icon?: boolean
autoArchive?: boolean
createdAt?: boolean
updatedAt?: boolean
owner?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["project"]>
export type ProjectSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
code?: boolean
name?: boolean
ownerId?: boolean
isPersonal?: boolean
archived?: boolean
notes?: boolean
taskKinds?: boolean
icon?: boolean
autoArchive?: boolean
createdAt?: boolean
updatedAt?: boolean
owner?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["project"]>
export type ProjectSelectScalar = {
id?: boolean
uuid?: boolean
code?: boolean
name?: boolean
ownerId?: boolean
isPersonal?: boolean
@@ -1050,7 +1161,7 @@ export type ProjectSelectScalar = {
updatedAt?: boolean
}
export type ProjectOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "name" | "ownerId" | "isPersonal" | "archived" | "notes" | "taskKinds" | "icon" | "autoArchive" | "createdAt" | "updatedAt", ExtArgs["result"]["project"]>
export type ProjectOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "uuid" | "code" | "name" | "ownerId" | "isPersonal" | "archived" | "notes" | "taskKinds" | "icon" | "autoArchive" | "createdAt" | "updatedAt", ExtArgs["result"]["project"]>
export type ProjectInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
owner?: boolean | Prisma.UserDefaultArgs<ExtArgs>
members?: boolean | Prisma.Project$membersArgs<ExtArgs>
@@ -1058,6 +1169,12 @@ export type ProjectInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs
tasks?: boolean | Prisma.Project$tasksArgs<ExtArgs>
_count?: boolean | Prisma.ProjectCountOutputTypeDefaultArgs<ExtArgs>
}
export type ProjectIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
owner?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type ProjectIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
owner?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type $ProjectPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "Project"
@@ -1069,6 +1186,8 @@ export type $ProjectPayload<ExtArgs extends runtime.Types.Extensions.InternalArg
}
scalars: runtime.Types.Extensions.GetPayloadResult<{
id: number
uuid: string
code: string
name: string
ownerId: number
isPersonal: boolean
@@ -1196,6 +1315,30 @@ export interface ProjectDelegate<ExtArgs extends runtime.Types.Extensions.Intern
*/
createMany<T extends ProjectCreateManyArgs>(args?: Prisma.SelectSubset<T, ProjectCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many Projects and returns the data saved in the database.
* @param {ProjectCreateManyAndReturnArgs} args - Arguments to create many Projects.
* @example
* // Create many Projects
* const project = await prisma.project.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many Projects and only return the `id`
* const projectWithIdOnly = await prisma.project.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends ProjectCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, ProjectCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ProjectPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a Project.
* @param {ProjectDeleteArgs} args - Arguments to delete one Project.
@@ -1260,6 +1403,36 @@ export interface ProjectDelegate<ExtArgs extends runtime.Types.Extensions.Intern
*/
updateMany<T extends ProjectUpdateManyArgs>(args: Prisma.SelectSubset<T, ProjectUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more Projects and returns the data updated in the database.
* @param {ProjectUpdateManyAndReturnArgs} args - Arguments to update many Projects.
* @example
* // Update many Projects
* const project = await prisma.project.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more Projects and only return the `id`
* const projectWithIdOnly = await prisma.project.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends ProjectUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, ProjectUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ProjectPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one Project.
* @param {ProjectUpsertArgs} args - Arguments to update or create a Project.
@@ -1453,6 +1626,8 @@ export interface Prisma__ProjectClient<T, Null = never, ExtArgs extends runtime.
*/
export interface ProjectFieldRefs {
readonly id: Prisma.FieldRef<"Project", 'Int'>
readonly uuid: Prisma.FieldRef<"Project", 'String'>
readonly code: Prisma.FieldRef<"Project", 'String'>
readonly name: Prisma.FieldRef<"Project", 'String'>
readonly ownerId: Prisma.FieldRef<"Project", 'Int'>
readonly isPersonal: Prisma.FieldRef<"Project", 'Boolean'>
@@ -1700,6 +1875,29 @@ export type ProjectCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Inter
skipDuplicates?: boolean
}
/**
* Project createManyAndReturn
*/
export type ProjectCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Project
*/
select?: Prisma.ProjectSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Project
*/
omit?: Prisma.ProjectOmit<ExtArgs> | null
/**
* The data used to create many Projects.
*/
data: Prisma.ProjectCreateManyInput | Prisma.ProjectCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.ProjectIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* Project update
*/
@@ -1744,6 +1942,36 @@ export type ProjectUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Inter
limit?: number
}
/**
* Project updateManyAndReturn
*/
export type ProjectUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Project
*/
select?: Prisma.ProjectSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Project
*/
omit?: Prisma.ProjectOmit<ExtArgs> | null
/**
* The data used to update Projects.
*/
data: Prisma.XOR<Prisma.ProjectUpdateManyMutationInput, Prisma.ProjectUncheckedUpdateManyInput>
/**
* Filter which Projects to update
*/
where?: Prisma.ProjectWhereInput
/**
* Limit how many Projects to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.ProjectIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* Project upsert
*/
+217 -9
View File
@@ -40,6 +40,8 @@ export type ProjectMemberSumAggregateOutputType = {
export type ProjectMemberMinAggregateOutputType = {
id: number | null
uuid: string | null
projectUuid: string | null
projectId: number | null
userId: number | null
permission: string | null
@@ -48,6 +50,8 @@ export type ProjectMemberMinAggregateOutputType = {
export type ProjectMemberMaxAggregateOutputType = {
id: number | null
uuid: string | null
projectUuid: string | null
projectId: number | null
userId: number | null
permission: string | null
@@ -56,6 +60,8 @@ export type ProjectMemberMaxAggregateOutputType = {
export type ProjectMemberCountAggregateOutputType = {
id: number
uuid: number
projectUuid: number
projectId: number
userId: number
permission: number
@@ -78,6 +84,8 @@ export type ProjectMemberSumAggregateInputType = {
export type ProjectMemberMinAggregateInputType = {
id?: true
uuid?: true
projectUuid?: true
projectId?: true
userId?: true
permission?: true
@@ -86,6 +94,8 @@ export type ProjectMemberMinAggregateInputType = {
export type ProjectMemberMaxAggregateInputType = {
id?: true
uuid?: true
projectUuid?: true
projectId?: true
userId?: true
permission?: true
@@ -94,6 +104,8 @@ export type ProjectMemberMaxAggregateInputType = {
export type ProjectMemberCountAggregateInputType = {
id?: true
uuid?: true
projectUuid?: true
projectId?: true
userId?: true
permission?: true
@@ -189,6 +201,8 @@ export type ProjectMemberGroupByArgs<ExtArgs extends runtime.Types.Extensions.In
export type ProjectMemberGroupByOutputType = {
id: number
uuid: string
projectUuid: string | null
projectId: number
userId: number
permission: string
@@ -220,6 +234,8 @@ export type ProjectMemberWhereInput = {
OR?: Prisma.ProjectMemberWhereInput[]
NOT?: Prisma.ProjectMemberWhereInput | Prisma.ProjectMemberWhereInput[]
id?: Prisma.IntFilter<"ProjectMember"> | number
uuid?: Prisma.StringFilter<"ProjectMember"> | string
projectUuid?: Prisma.StringNullableFilter<"ProjectMember"> | string | null
projectId?: Prisma.IntFilter<"ProjectMember"> | number
userId?: Prisma.IntFilter<"ProjectMember"> | number
permission?: Prisma.StringFilter<"ProjectMember"> | string
@@ -230,31 +246,36 @@ export type ProjectMemberWhereInput = {
export type ProjectMemberOrderByWithRelationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrderInput | Prisma.SortOrder
projectId?: Prisma.SortOrder
userId?: Prisma.SortOrder
permission?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
project?: Prisma.ProjectOrderByWithRelationInput
user?: Prisma.UserOrderByWithRelationInput
_relevance?: Prisma.ProjectMemberOrderByRelevanceInput
}
export type ProjectMemberWhereUniqueInput = Prisma.AtLeast<{
id?: number
uuid?: string
projectId_userId?: Prisma.ProjectMemberProjectIdUserIdCompoundUniqueInput
AND?: Prisma.ProjectMemberWhereInput | Prisma.ProjectMemberWhereInput[]
OR?: Prisma.ProjectMemberWhereInput[]
NOT?: Prisma.ProjectMemberWhereInput | Prisma.ProjectMemberWhereInput[]
projectUuid?: Prisma.StringNullableFilter<"ProjectMember"> | string | null
projectId?: Prisma.IntFilter<"ProjectMember"> | number
userId?: Prisma.IntFilter<"ProjectMember"> | number
permission?: Prisma.StringFilter<"ProjectMember"> | string
createdAt?: Prisma.DateTimeFilter<"ProjectMember"> | Date | string
project?: Prisma.XOR<Prisma.ProjectScalarRelationFilter, Prisma.ProjectWhereInput>
user?: Prisma.XOR<Prisma.UserScalarRelationFilter, Prisma.UserWhereInput>
}, "id" | "projectId_userId">
}, "id" | "uuid" | "projectId_userId">
export type ProjectMemberOrderByWithAggregationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrderInput | Prisma.SortOrder
projectId?: Prisma.SortOrder
userId?: Prisma.SortOrder
permission?: Prisma.SortOrder
@@ -271,6 +292,8 @@ export type ProjectMemberScalarWhereWithAggregatesInput = {
OR?: Prisma.ProjectMemberScalarWhereWithAggregatesInput[]
NOT?: Prisma.ProjectMemberScalarWhereWithAggregatesInput | Prisma.ProjectMemberScalarWhereWithAggregatesInput[]
id?: Prisma.IntWithAggregatesFilter<"ProjectMember"> | number
uuid?: Prisma.StringWithAggregatesFilter<"ProjectMember"> | string
projectUuid?: Prisma.StringNullableWithAggregatesFilter<"ProjectMember"> | string | null
projectId?: Prisma.IntWithAggregatesFilter<"ProjectMember"> | number
userId?: Prisma.IntWithAggregatesFilter<"ProjectMember"> | number
permission?: Prisma.StringWithAggregatesFilter<"ProjectMember"> | string
@@ -278,6 +301,8 @@ export type ProjectMemberScalarWhereWithAggregatesInput = {
}
export type ProjectMemberCreateInput = {
uuid: string
projectUuid?: string | null
permission?: string
createdAt?: Date | string
project: Prisma.ProjectCreateNestedOneWithoutMembersInput
@@ -286,6 +311,8 @@ export type ProjectMemberCreateInput = {
export type ProjectMemberUncheckedCreateInput = {
id?: number
uuid: string
projectUuid?: string | null
projectId: number
userId: number
permission?: string
@@ -293,6 +320,8 @@ export type ProjectMemberUncheckedCreateInput = {
}
export type ProjectMemberUpdateInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
permission?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
project?: Prisma.ProjectUpdateOneRequiredWithoutMembersNestedInput
@@ -301,6 +330,8 @@ export type ProjectMemberUpdateInput = {
export type ProjectMemberUncheckedUpdateInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
projectId?: Prisma.IntFieldUpdateOperationsInput | number
userId?: Prisma.IntFieldUpdateOperationsInput | number
permission?: Prisma.StringFieldUpdateOperationsInput | string
@@ -309,6 +340,8 @@ export type ProjectMemberUncheckedUpdateInput = {
export type ProjectMemberCreateManyInput = {
id?: number
uuid: string
projectUuid?: string | null
projectId: number
userId: number
permission?: string
@@ -316,12 +349,16 @@ export type ProjectMemberCreateManyInput = {
}
export type ProjectMemberUpdateManyMutationInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
permission?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type ProjectMemberUncheckedUpdateManyInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
projectId?: Prisma.IntFieldUpdateOperationsInput | number
userId?: Prisma.IntFieldUpdateOperationsInput | number
permission?: Prisma.StringFieldUpdateOperationsInput | string
@@ -338,12 +375,6 @@ export type ProjectMemberOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type ProjectMemberOrderByRelevanceInput = {
fields: Prisma.ProjectMemberOrderByRelevanceFieldEnum | Prisma.ProjectMemberOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type ProjectMemberProjectIdUserIdCompoundUniqueInput = {
projectId: number
userId: number
@@ -351,6 +382,8 @@ export type ProjectMemberProjectIdUserIdCompoundUniqueInput = {
export type ProjectMemberCountOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrder
projectId?: Prisma.SortOrder
userId?: Prisma.SortOrder
permission?: Prisma.SortOrder
@@ -365,6 +398,8 @@ export type ProjectMemberAvgOrderByAggregateInput = {
export type ProjectMemberMaxOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrder
projectId?: Prisma.SortOrder
userId?: Prisma.SortOrder
permission?: Prisma.SortOrder
@@ -373,6 +408,8 @@ export type ProjectMemberMaxOrderByAggregateInput = {
export type ProjectMemberMinOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
projectUuid?: Prisma.SortOrder
projectId?: Prisma.SortOrder
userId?: Prisma.SortOrder
permission?: Prisma.SortOrder
@@ -470,6 +507,8 @@ export type ProjectMemberUncheckedUpdateManyWithoutProjectNestedInput = {
}
export type ProjectMemberCreateWithoutUserInput = {
uuid: string
projectUuid?: string | null
permission?: string
createdAt?: Date | string
project: Prisma.ProjectCreateNestedOneWithoutMembersInput
@@ -477,6 +516,8 @@ export type ProjectMemberCreateWithoutUserInput = {
export type ProjectMemberUncheckedCreateWithoutUserInput = {
id?: number
uuid: string
projectUuid?: string | null
projectId: number
permission?: string
createdAt?: Date | string
@@ -513,6 +554,8 @@ export type ProjectMemberScalarWhereInput = {
OR?: Prisma.ProjectMemberScalarWhereInput[]
NOT?: Prisma.ProjectMemberScalarWhereInput | Prisma.ProjectMemberScalarWhereInput[]
id?: Prisma.IntFilter<"ProjectMember"> | number
uuid?: Prisma.StringFilter<"ProjectMember"> | string
projectUuid?: Prisma.StringNullableFilter<"ProjectMember"> | string | null
projectId?: Prisma.IntFilter<"ProjectMember"> | number
userId?: Prisma.IntFilter<"ProjectMember"> | number
permission?: Prisma.StringFilter<"ProjectMember"> | string
@@ -520,6 +563,8 @@ export type ProjectMemberScalarWhereInput = {
}
export type ProjectMemberCreateWithoutProjectInput = {
uuid: string
projectUuid?: string | null
permission?: string
createdAt?: Date | string
user: Prisma.UserCreateNestedOneWithoutProjectMembersInput
@@ -527,6 +572,8 @@ export type ProjectMemberCreateWithoutProjectInput = {
export type ProjectMemberUncheckedCreateWithoutProjectInput = {
id?: number
uuid: string
projectUuid?: string | null
userId: number
permission?: string
createdAt?: Date | string
@@ -560,12 +607,16 @@ export type ProjectMemberUpdateManyWithWhereWithoutProjectInput = {
export type ProjectMemberCreateManyUserInput = {
id?: number
uuid: string
projectUuid?: string | null
projectId: number
permission?: string
createdAt?: Date | string
}
export type ProjectMemberUpdateWithoutUserInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
permission?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
project?: Prisma.ProjectUpdateOneRequiredWithoutMembersNestedInput
@@ -573,6 +624,8 @@ export type ProjectMemberUpdateWithoutUserInput = {
export type ProjectMemberUncheckedUpdateWithoutUserInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
projectId?: Prisma.IntFieldUpdateOperationsInput | number
permission?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
@@ -580,6 +633,8 @@ export type ProjectMemberUncheckedUpdateWithoutUserInput = {
export type ProjectMemberUncheckedUpdateManyWithoutUserInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
projectId?: Prisma.IntFieldUpdateOperationsInput | number
permission?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
@@ -587,12 +642,16 @@ export type ProjectMemberUncheckedUpdateManyWithoutUserInput = {
export type ProjectMemberCreateManyProjectInput = {
id?: number
uuid: string
projectUuid?: string | null
userId: number
permission?: string
createdAt?: Date | string
}
export type ProjectMemberUpdateWithoutProjectInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
permission?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
user?: Prisma.UserUpdateOneRequiredWithoutProjectMembersNestedInput
@@ -600,6 +659,8 @@ export type ProjectMemberUpdateWithoutProjectInput = {
export type ProjectMemberUncheckedUpdateWithoutProjectInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
userId?: Prisma.IntFieldUpdateOperationsInput | number
permission?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
@@ -607,6 +668,8 @@ export type ProjectMemberUncheckedUpdateWithoutProjectInput = {
export type ProjectMemberUncheckedUpdateManyWithoutProjectInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
projectUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
userId?: Prisma.IntFieldUpdateOperationsInput | number
permission?: Prisma.StringFieldUpdateOperationsInput | string
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
@@ -616,6 +679,8 @@ export type ProjectMemberUncheckedUpdateManyWithoutProjectInput = {
export type ProjectMemberSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
projectUuid?: boolean
projectId?: boolean
userId?: boolean
permission?: boolean
@@ -624,21 +689,53 @@ export type ProjectMemberSelect<ExtArgs extends runtime.Types.Extensions.Interna
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["projectMember"]>
export type ProjectMemberSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
projectUuid?: boolean
projectId?: boolean
userId?: boolean
permission?: boolean
createdAt?: boolean
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["projectMember"]>
export type ProjectMemberSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
projectUuid?: boolean
projectId?: boolean
userId?: boolean
permission?: boolean
createdAt?: boolean
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["projectMember"]>
export type ProjectMemberSelectScalar = {
id?: boolean
uuid?: boolean
projectUuid?: boolean
projectId?: boolean
userId?: boolean
permission?: boolean
createdAt?: boolean
}
export type ProjectMemberOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "projectId" | "userId" | "permission" | "createdAt", ExtArgs["result"]["projectMember"]>
export type ProjectMemberOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "uuid" | "projectUuid" | "projectId" | "userId" | "permission" | "createdAt", ExtArgs["result"]["projectMember"]>
export type ProjectMemberInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type ProjectMemberIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type ProjectMemberIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
project?: boolean | Prisma.ProjectDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type $ProjectMemberPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "ProjectMember"
@@ -648,6 +745,8 @@ export type $ProjectMemberPayload<ExtArgs extends runtime.Types.Extensions.Inter
}
scalars: runtime.Types.Extensions.GetPayloadResult<{
id: number
uuid: string
projectUuid: string | null
projectId: number
userId: number
permission: string
@@ -769,6 +868,30 @@ export interface ProjectMemberDelegate<ExtArgs extends runtime.Types.Extensions.
*/
createMany<T extends ProjectMemberCreateManyArgs>(args?: Prisma.SelectSubset<T, ProjectMemberCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many ProjectMembers and returns the data saved in the database.
* @param {ProjectMemberCreateManyAndReturnArgs} args - Arguments to create many ProjectMembers.
* @example
* // Create many ProjectMembers
* const projectMember = await prisma.projectMember.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many ProjectMembers and only return the `id`
* const projectMemberWithIdOnly = await prisma.projectMember.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends ProjectMemberCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, ProjectMemberCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ProjectMemberPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a ProjectMember.
* @param {ProjectMemberDeleteArgs} args - Arguments to delete one ProjectMember.
@@ -833,6 +956,36 @@ export interface ProjectMemberDelegate<ExtArgs extends runtime.Types.Extensions.
*/
updateMany<T extends ProjectMemberUpdateManyArgs>(args: Prisma.SelectSubset<T, ProjectMemberUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more ProjectMembers and returns the data updated in the database.
* @param {ProjectMemberUpdateManyAndReturnArgs} args - Arguments to update many ProjectMembers.
* @example
* // Update many ProjectMembers
* const projectMember = await prisma.projectMember.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more ProjectMembers and only return the `id`
* const projectMemberWithIdOnly = await prisma.projectMember.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends ProjectMemberUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, ProjectMemberUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ProjectMemberPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one ProjectMember.
* @param {ProjectMemberUpsertArgs} args - Arguments to update or create a ProjectMember.
@@ -1024,6 +1177,8 @@ export interface Prisma__ProjectMemberClient<T, Null = never, ExtArgs extends ru
*/
export interface ProjectMemberFieldRefs {
readonly id: Prisma.FieldRef<"ProjectMember", 'Int'>
readonly uuid: Prisma.FieldRef<"ProjectMember", 'String'>
readonly projectUuid: Prisma.FieldRef<"ProjectMember", 'String'>
readonly projectId: Prisma.FieldRef<"ProjectMember", 'Int'>
readonly userId: Prisma.FieldRef<"ProjectMember", 'Int'>
readonly permission: Prisma.FieldRef<"ProjectMember", 'String'>
@@ -1265,6 +1420,29 @@ export type ProjectMemberCreateManyArgs<ExtArgs extends runtime.Types.Extensions
skipDuplicates?: boolean
}
/**
* ProjectMember createManyAndReturn
*/
export type ProjectMemberCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ProjectMember
*/
select?: Prisma.ProjectMemberSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ProjectMember
*/
omit?: Prisma.ProjectMemberOmit<ExtArgs> | null
/**
* The data used to create many ProjectMembers.
*/
data: Prisma.ProjectMemberCreateManyInput | Prisma.ProjectMemberCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.ProjectMemberIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* ProjectMember update
*/
@@ -1309,6 +1487,36 @@ export type ProjectMemberUpdateManyArgs<ExtArgs extends runtime.Types.Extensions
limit?: number
}
/**
* ProjectMember updateManyAndReturn
*/
export type ProjectMemberUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ProjectMember
*/
select?: Prisma.ProjectMemberSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ProjectMember
*/
omit?: Prisma.ProjectMemberOmit<ExtArgs> | null
/**
* The data used to update ProjectMembers.
*/
data: Prisma.XOR<Prisma.ProjectMemberUpdateManyMutationInput, Prisma.ProjectMemberUncheckedUpdateManyInput>
/**
* Filter which ProjectMembers to update
*/
where?: Prisma.ProjectMemberWhereInput
/**
* Limit how many ProjectMembers to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.ProjectMemberIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* ProjectMember upsert
*/
+117 -7
View File
@@ -238,7 +238,6 @@ export type ScraperCacheOrderByWithRelationInput = {
metadata?: Prisma.SortOrderInput | Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
_relevance?: Prisma.ScraperCacheOrderByRelevanceInput
}
export type ScraperCacheWhereUniqueInput = Prisma.AtLeast<{
@@ -349,12 +348,6 @@ export type ScraperCacheUncheckedUpdateManyInput = {
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type ScraperCacheOrderByRelevanceInput = {
fields: Prisma.ScraperCacheOrderByRelevanceFieldEnum | Prisma.ScraperCacheOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type ScraperCacheCountOrderByAggregateInput = {
id?: Prisma.SortOrder
scraperName?: Prisma.SortOrder
@@ -403,7 +396,25 @@ export type ScraperCacheSelect<ExtArgs extends runtime.Types.Extensions.Internal
updatedAt?: boolean
}, ExtArgs["result"]["scraperCache"]>
export type ScraperCacheSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
scraperName?: boolean
lastDataHash?: boolean
lastUpdateAt?: boolean
metadata?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["scraperCache"]>
export type ScraperCacheSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
scraperName?: boolean
lastDataHash?: boolean
lastUpdateAt?: boolean
metadata?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["scraperCache"]>
export type ScraperCacheSelectScalar = {
id?: boolean
@@ -545,6 +556,30 @@ export interface ScraperCacheDelegate<ExtArgs extends runtime.Types.Extensions.I
*/
createMany<T extends ScraperCacheCreateManyArgs>(args?: Prisma.SelectSubset<T, ScraperCacheCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many ScraperCaches and returns the data saved in the database.
* @param {ScraperCacheCreateManyAndReturnArgs} args - Arguments to create many ScraperCaches.
* @example
* // Create many ScraperCaches
* const scraperCache = await prisma.scraperCache.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many ScraperCaches and only return the `id`
* const scraperCacheWithIdOnly = await prisma.scraperCache.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends ScraperCacheCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, ScraperCacheCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ScraperCachePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a ScraperCache.
* @param {ScraperCacheDeleteArgs} args - Arguments to delete one ScraperCache.
@@ -609,6 +644,36 @@ export interface ScraperCacheDelegate<ExtArgs extends runtime.Types.Extensions.I
*/
updateMany<T extends ScraperCacheUpdateManyArgs>(args: Prisma.SelectSubset<T, ScraperCacheUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more ScraperCaches and returns the data updated in the database.
* @param {ScraperCacheUpdateManyAndReturnArgs} args - Arguments to update many ScraperCaches.
* @example
* // Update many ScraperCaches
* const scraperCache = await prisma.scraperCache.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more ScraperCaches and only return the `id`
* const scraperCacheWithIdOnly = await prisma.scraperCache.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends ScraperCacheUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, ScraperCacheUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ScraperCachePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one ScraperCache.
* @param {ScraperCacheUpsertArgs} args - Arguments to update or create a ScraperCache.
@@ -1017,6 +1082,25 @@ export type ScraperCacheCreateManyArgs<ExtArgs extends runtime.Types.Extensions.
skipDuplicates?: boolean
}
/**
* ScraperCache createManyAndReturn
*/
export type ScraperCacheCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ScraperCache
*/
select?: Prisma.ScraperCacheSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ScraperCache
*/
omit?: Prisma.ScraperCacheOmit<ExtArgs> | null
/**
* The data used to create many ScraperCaches.
*/
data: Prisma.ScraperCacheCreateManyInput | Prisma.ScraperCacheCreateManyInput[]
skipDuplicates?: boolean
}
/**
* ScraperCache update
*/
@@ -1057,6 +1141,32 @@ export type ScraperCacheUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.
limit?: number
}
/**
* ScraperCache updateManyAndReturn
*/
export type ScraperCacheUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ScraperCache
*/
select?: Prisma.ScraperCacheSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ScraperCache
*/
omit?: Prisma.ScraperCacheOmit<ExtArgs> | null
/**
* The data used to update ScraperCaches.
*/
data: Prisma.XOR<Prisma.ScraperCacheUpdateManyMutationInput, Prisma.ScraperCacheUncheckedUpdateManyInput>
/**
* Filter which ScraperCaches to update
*/
where?: Prisma.ScraperCacheWhereInput
/**
* Limit how many ScraperCaches to update.
*/
limit?: number
}
/**
* ScraperCache upsert
*/
+153 -7
View File
@@ -464,7 +464,6 @@ export type ServerNodeOrderByWithRelationInput = {
recordedAt?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
_relevance?: Prisma.ServerNodeOrderByRelevanceInput
}
export type ServerNodeWhereUniqueInput = Prisma.AtLeast<{
@@ -755,12 +754,6 @@ export type ServerNodeUncheckedUpdateManyInput = {
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type ServerNodeOrderByRelevanceInput = {
fields: Prisma.ServerNodeOrderByRelevanceFieldEnum | Prisma.ServerNodeOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type ServerNodeCountOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
@@ -921,7 +914,61 @@ export type ServerNodeSelect<ExtArgs extends runtime.Types.Extensions.InternalAr
updatedAt?: boolean
}, ExtArgs["result"]["serverNode"]>
export type ServerNodeSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
name?: boolean
cpuName?: boolean
os?: boolean
region?: boolean
memTotal?: boolean
diskTotal?: boolean
cpuCores?: boolean
cpuUsage?: boolean
ramUsed?: boolean
swapUsed?: boolean
load1?: boolean
load5?: boolean
load15?: boolean
diskUsed?: boolean
netIn?: boolean
netOut?: boolean
uptime?: boolean
process?: boolean
connections?: boolean
status?: boolean
recordedAt?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["serverNode"]>
export type ServerNodeSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
name?: boolean
cpuName?: boolean
os?: boolean
region?: boolean
memTotal?: boolean
diskTotal?: boolean
cpuCores?: boolean
cpuUsage?: boolean
ramUsed?: boolean
swapUsed?: boolean
load1?: boolean
load5?: boolean
load15?: boolean
diskUsed?: boolean
netIn?: boolean
netOut?: boolean
uptime?: boolean
process?: boolean
connections?: boolean
status?: boolean
recordedAt?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["serverNode"]>
export type ServerNodeSelectScalar = {
id?: boolean
@@ -1099,6 +1146,30 @@ export interface ServerNodeDelegate<ExtArgs extends runtime.Types.Extensions.Int
*/
createMany<T extends ServerNodeCreateManyArgs>(args?: Prisma.SelectSubset<T, ServerNodeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many ServerNodes and returns the data saved in the database.
* @param {ServerNodeCreateManyAndReturnArgs} args - Arguments to create many ServerNodes.
* @example
* // Create many ServerNodes
* const serverNode = await prisma.serverNode.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many ServerNodes and only return the `id`
* const serverNodeWithIdOnly = await prisma.serverNode.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends ServerNodeCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, ServerNodeCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ServerNodePayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a ServerNode.
* @param {ServerNodeDeleteArgs} args - Arguments to delete one ServerNode.
@@ -1163,6 +1234,36 @@ export interface ServerNodeDelegate<ExtArgs extends runtime.Types.Extensions.Int
*/
updateMany<T extends ServerNodeUpdateManyArgs>(args: Prisma.SelectSubset<T, ServerNodeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more ServerNodes and returns the data updated in the database.
* @param {ServerNodeUpdateManyAndReturnArgs} args - Arguments to update many ServerNodes.
* @example
* // Update many ServerNodes
* const serverNode = await prisma.serverNode.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more ServerNodes and only return the `id`
* const serverNodeWithIdOnly = await prisma.serverNode.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends ServerNodeUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, ServerNodeUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ServerNodePayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one ServerNode.
* @param {ServerNodeUpsertArgs} args - Arguments to update or create a ServerNode.
@@ -1589,6 +1690,25 @@ export type ServerNodeCreateManyArgs<ExtArgs extends runtime.Types.Extensions.In
skipDuplicates?: boolean
}
/**
* ServerNode createManyAndReturn
*/
export type ServerNodeCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ServerNode
*/
select?: Prisma.ServerNodeSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ServerNode
*/
omit?: Prisma.ServerNodeOmit<ExtArgs> | null
/**
* The data used to create many ServerNodes.
*/
data: Prisma.ServerNodeCreateManyInput | Prisma.ServerNodeCreateManyInput[]
skipDuplicates?: boolean
}
/**
* ServerNode update
*/
@@ -1629,6 +1749,32 @@ export type ServerNodeUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.In
limit?: number
}
/**
* ServerNode updateManyAndReturn
*/
export type ServerNodeUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ServerNode
*/
select?: Prisma.ServerNodeSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ServerNode
*/
omit?: Prisma.ServerNodeOmit<ExtArgs> | null
/**
* The data used to update ServerNodes.
*/
data: Prisma.XOR<Prisma.ServerNodeUpdateManyMutationInput, Prisma.ServerNodeUncheckedUpdateManyInput>
/**
* Filter which ServerNodes to update
*/
where?: Prisma.ServerNodeWhereInput
/**
* Limit how many ServerNodes to update.
*/
limit?: number
}
/**
* ServerNode upsert
*/
+127 -7
View File
@@ -319,7 +319,6 @@ export type ServerNodeHistoryOrderByWithRelationInput = {
process?: Prisma.SortOrder
connections?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
_relevance?: Prisma.ServerNodeHistoryOrderByRelevanceInput
}
export type ServerNodeHistoryWhereUniqueInput = Prisma.AtLeast<{
@@ -481,12 +480,6 @@ export type ServerNodeHistoryUncheckedUpdateManyInput = {
createdAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type ServerNodeHistoryOrderByRelevanceInput = {
fields: Prisma.ServerNodeHistoryOrderByRelevanceFieldEnum | Prisma.ServerNodeHistoryOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type ServerNodeHistoryUuidPeriodCompoundUniqueInput = {
uuid: string
period: Date | string
@@ -578,7 +571,35 @@ export type ServerNodeHistorySelect<ExtArgs extends runtime.Types.Extensions.Int
createdAt?: boolean
}, ExtArgs["result"]["serverNodeHistory"]>
export type ServerNodeHistorySelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
period?: boolean
cpu?: boolean
ram?: boolean
load?: boolean
disk?: boolean
netIn?: boolean
netOut?: boolean
process?: boolean
connections?: boolean
createdAt?: boolean
}, ExtArgs["result"]["serverNodeHistory"]>
export type ServerNodeHistorySelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
period?: boolean
cpu?: boolean
ram?: boolean
load?: boolean
disk?: boolean
netIn?: boolean
netOut?: boolean
process?: boolean
connections?: boolean
createdAt?: boolean
}, ExtArgs["result"]["serverNodeHistory"]>
export type ServerNodeHistorySelectScalar = {
id?: boolean
@@ -730,6 +751,30 @@ export interface ServerNodeHistoryDelegate<ExtArgs extends runtime.Types.Extensi
*/
createMany<T extends ServerNodeHistoryCreateManyArgs>(args?: Prisma.SelectSubset<T, ServerNodeHistoryCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many ServerNodeHistories and returns the data saved in the database.
* @param {ServerNodeHistoryCreateManyAndReturnArgs} args - Arguments to create many ServerNodeHistories.
* @example
* // Create many ServerNodeHistories
* const serverNodeHistory = await prisma.serverNodeHistory.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many ServerNodeHistories and only return the `id`
* const serverNodeHistoryWithIdOnly = await prisma.serverNodeHistory.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends ServerNodeHistoryCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, ServerNodeHistoryCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ServerNodeHistoryPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a ServerNodeHistory.
* @param {ServerNodeHistoryDeleteArgs} args - Arguments to delete one ServerNodeHistory.
@@ -794,6 +839,36 @@ export interface ServerNodeHistoryDelegate<ExtArgs extends runtime.Types.Extensi
*/
updateMany<T extends ServerNodeHistoryUpdateManyArgs>(args: Prisma.SelectSubset<T, ServerNodeHistoryUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more ServerNodeHistories and returns the data updated in the database.
* @param {ServerNodeHistoryUpdateManyAndReturnArgs} args - Arguments to update many ServerNodeHistories.
* @example
* // Update many ServerNodeHistories
* const serverNodeHistory = await prisma.serverNodeHistory.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more ServerNodeHistories and only return the `id`
* const serverNodeHistoryWithIdOnly = await prisma.serverNodeHistory.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends ServerNodeHistoryUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, ServerNodeHistoryUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ServerNodeHistoryPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one ServerNodeHistory.
* @param {ServerNodeHistoryUpsertArgs} args - Arguments to update or create a ServerNodeHistory.
@@ -1207,6 +1282,25 @@ export type ServerNodeHistoryCreateManyArgs<ExtArgs extends runtime.Types.Extens
skipDuplicates?: boolean
}
/**
* ServerNodeHistory createManyAndReturn
*/
export type ServerNodeHistoryCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ServerNodeHistory
*/
select?: Prisma.ServerNodeHistorySelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ServerNodeHistory
*/
omit?: Prisma.ServerNodeHistoryOmit<ExtArgs> | null
/**
* The data used to create many ServerNodeHistories.
*/
data: Prisma.ServerNodeHistoryCreateManyInput | Prisma.ServerNodeHistoryCreateManyInput[]
skipDuplicates?: boolean
}
/**
* ServerNodeHistory update
*/
@@ -1247,6 +1341,32 @@ export type ServerNodeHistoryUpdateManyArgs<ExtArgs extends runtime.Types.Extens
limit?: number
}
/**
* ServerNodeHistory updateManyAndReturn
*/
export type ServerNodeHistoryUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ServerNodeHistory
*/
select?: Prisma.ServerNodeHistorySelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ServerNodeHistory
*/
omit?: Prisma.ServerNodeHistoryOmit<ExtArgs> | null
/**
* The data used to update ServerNodeHistories.
*/
data: Prisma.XOR<Prisma.ServerNodeHistoryUpdateManyMutationInput, Prisma.ServerNodeHistoryUncheckedUpdateManyInput>
/**
* Filter which ServerNodeHistories to update
*/
where?: Prisma.ServerNodeHistoryWhereInput
/**
* Limit how many ServerNodeHistories to update.
*/
limit?: number
}
/**
* ServerNodeHistory upsert
*/
+121 -7
View File
@@ -264,7 +264,6 @@ export type ServiceCheckOrderByWithRelationInput = {
lastCheckAt?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
_relevance?: Prisma.ServiceCheckOrderByRelevanceInput
}
export type ServiceCheckWhereUniqueInput = Prisma.AtLeast<{
@@ -395,12 +394,6 @@ export type ServiceCheckUncheckedUpdateManyInput = {
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type ServiceCheckOrderByRelevanceInput = {
fields: Prisma.ServiceCheckOrderByRelevanceFieldEnum | Prisma.ServiceCheckOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type ServiceCheckCountOrderByAggregateInput = {
id?: Prisma.SortOrder
name?: Prisma.SortOrder
@@ -461,7 +454,29 @@ export type ServiceCheckSelect<ExtArgs extends runtime.Types.Extensions.Internal
updatedAt?: boolean
}, ExtArgs["result"]["serviceCheck"]>
export type ServiceCheckSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
name?: boolean
url?: boolean
status?: boolean
latencyMs?: boolean
message?: boolean
lastCheckAt?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["serviceCheck"]>
export type ServiceCheckSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
name?: boolean
url?: boolean
status?: boolean
latencyMs?: boolean
message?: boolean
lastCheckAt?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["serviceCheck"]>
export type ServiceCheckSelectScalar = {
id?: boolean
@@ -607,6 +622,30 @@ export interface ServiceCheckDelegate<ExtArgs extends runtime.Types.Extensions.I
*/
createMany<T extends ServiceCheckCreateManyArgs>(args?: Prisma.SelectSubset<T, ServiceCheckCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many ServiceChecks and returns the data saved in the database.
* @param {ServiceCheckCreateManyAndReturnArgs} args - Arguments to create many ServiceChecks.
* @example
* // Create many ServiceChecks
* const serviceCheck = await prisma.serviceCheck.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many ServiceChecks and only return the `id`
* const serviceCheckWithIdOnly = await prisma.serviceCheck.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends ServiceCheckCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, ServiceCheckCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ServiceCheckPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a ServiceCheck.
* @param {ServiceCheckDeleteArgs} args - Arguments to delete one ServiceCheck.
@@ -671,6 +710,36 @@ export interface ServiceCheckDelegate<ExtArgs extends runtime.Types.Extensions.I
*/
updateMany<T extends ServiceCheckUpdateManyArgs>(args: Prisma.SelectSubset<T, ServiceCheckUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more ServiceChecks and returns the data updated in the database.
* @param {ServiceCheckUpdateManyAndReturnArgs} args - Arguments to update many ServiceChecks.
* @example
* // Update many ServiceChecks
* const serviceCheck = await prisma.serviceCheck.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more ServiceChecks and only return the `id`
* const serviceCheckWithIdOnly = await prisma.serviceCheck.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends ServiceCheckUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, ServiceCheckUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$ServiceCheckPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one ServiceCheck.
* @param {ServiceCheckUpsertArgs} args - Arguments to update or create a ServiceCheck.
@@ -1081,6 +1150,25 @@ export type ServiceCheckCreateManyArgs<ExtArgs extends runtime.Types.Extensions.
skipDuplicates?: boolean
}
/**
* ServiceCheck createManyAndReturn
*/
export type ServiceCheckCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ServiceCheck
*/
select?: Prisma.ServiceCheckSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ServiceCheck
*/
omit?: Prisma.ServiceCheckOmit<ExtArgs> | null
/**
* The data used to create many ServiceChecks.
*/
data: Prisma.ServiceCheckCreateManyInput | Prisma.ServiceCheckCreateManyInput[]
skipDuplicates?: boolean
}
/**
* ServiceCheck update
*/
@@ -1121,6 +1209,32 @@ export type ServiceCheckUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.
limit?: number
}
/**
* ServiceCheck updateManyAndReturn
*/
export type ServiceCheckUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the ServiceCheck
*/
select?: Prisma.ServiceCheckSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the ServiceCheck
*/
omit?: Prisma.ServiceCheckOmit<ExtArgs> | null
/**
* The data used to update ServiceChecks.
*/
data: Prisma.XOR<Prisma.ServiceCheckUpdateManyMutationInput, Prisma.ServiceCheckUncheckedUpdateManyInput>
/**
* Filter which ServiceChecks to update
*/
where?: Prisma.ServiceCheckWhereInput
/**
* Limit how many ServiceChecks to update.
*/
limit?: number
}
/**
* ServiceCheck upsert
*/
+115 -7
View File
@@ -229,7 +229,6 @@ export type StrategyOrderByWithRelationInput = {
data?: Prisma.SortOrder
createdAt?: Prisma.SortOrder
updatedAt?: Prisma.SortOrder
_relevance?: Prisma.StrategyOrderByRelevanceInput
}
export type StrategyWhereUniqueInput = Prisma.AtLeast<{
@@ -330,12 +329,6 @@ export type StrategyUncheckedUpdateManyInput = {
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type StrategyOrderByRelevanceInput = {
fields: Prisma.StrategyOrderByRelevanceFieldEnum | Prisma.StrategyOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type StrategyCountOrderByAggregateInput = {
id?: Prisma.SortOrder
name?: Prisma.SortOrder
@@ -380,7 +373,23 @@ export type StrategySelect<ExtArgs extends runtime.Types.Extensions.InternalArgs
updatedAt?: boolean
}, ExtArgs["result"]["strategy"]>
export type StrategySelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
name?: boolean
description?: boolean
data?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["strategy"]>
export type StrategySelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
name?: boolean
description?: boolean
data?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["strategy"]>
export type StrategySelectScalar = {
id?: boolean
@@ -520,6 +529,30 @@ export interface StrategyDelegate<ExtArgs extends runtime.Types.Extensions.Inter
*/
createMany<T extends StrategyCreateManyArgs>(args?: Prisma.SelectSubset<T, StrategyCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many Strategies and returns the data saved in the database.
* @param {StrategyCreateManyAndReturnArgs} args - Arguments to create many Strategies.
* @example
* // Create many Strategies
* const strategy = await prisma.strategy.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many Strategies and only return the `id`
* const strategyWithIdOnly = await prisma.strategy.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends StrategyCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, StrategyCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$StrategyPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a Strategy.
* @param {StrategyDeleteArgs} args - Arguments to delete one Strategy.
@@ -584,6 +617,36 @@ export interface StrategyDelegate<ExtArgs extends runtime.Types.Extensions.Inter
*/
updateMany<T extends StrategyUpdateManyArgs>(args: Prisma.SelectSubset<T, StrategyUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more Strategies and returns the data updated in the database.
* @param {StrategyUpdateManyAndReturnArgs} args - Arguments to update many Strategies.
* @example
* // Update many Strategies
* const strategy = await prisma.strategy.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more Strategies and only return the `id`
* const strategyWithIdOnly = await prisma.strategy.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends StrategyUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, StrategyUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$StrategyPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one Strategy.
* @param {StrategyUpsertArgs} args - Arguments to update or create a Strategy.
@@ -991,6 +1054,25 @@ export type StrategyCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Inte
skipDuplicates?: boolean
}
/**
* Strategy createManyAndReturn
*/
export type StrategyCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Strategy
*/
select?: Prisma.StrategySelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Strategy
*/
omit?: Prisma.StrategyOmit<ExtArgs> | null
/**
* The data used to create many Strategies.
*/
data: Prisma.StrategyCreateManyInput | Prisma.StrategyCreateManyInput[]
skipDuplicates?: boolean
}
/**
* Strategy update
*/
@@ -1031,6 +1113,32 @@ export type StrategyUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Inte
limit?: number
}
/**
* Strategy updateManyAndReturn
*/
export type StrategyUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the Strategy
*/
select?: Prisma.StrategySelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the Strategy
*/
omit?: Prisma.StrategyOmit<ExtArgs> | null
/**
* The data used to update Strategies.
*/
data: Prisma.XOR<Prisma.StrategyUpdateManyMutationInput, Prisma.StrategyUncheckedUpdateManyInput>
/**
* Filter which Strategies to update
*/
where?: Prisma.StrategyWhereInput
/**
* Limit how many Strategies to update.
*/
limit?: number
}
/**
* Strategy upsert
*/
File diff suppressed because it is too large Load Diff
+213 -3
View File
@@ -40,18 +40,24 @@ export type TaskMemberSumAggregateOutputType = {
export type TaskMemberMinAggregateOutputType = {
id: number | null
uuid: string | null
taskUuid: string | null
taskId: number | null
userId: number | null
}
export type TaskMemberMaxAggregateOutputType = {
id: number | null
uuid: string | null
taskUuid: string | null
taskId: number | null
userId: number | null
}
export type TaskMemberCountAggregateOutputType = {
id: number
uuid: number
taskUuid: number
taskId: number
userId: number
_all: number
@@ -72,18 +78,24 @@ export type TaskMemberSumAggregateInputType = {
export type TaskMemberMinAggregateInputType = {
id?: true
uuid?: true
taskUuid?: true
taskId?: true
userId?: true
}
export type TaskMemberMaxAggregateInputType = {
id?: true
uuid?: true
taskUuid?: true
taskId?: true
userId?: true
}
export type TaskMemberCountAggregateInputType = {
id?: true
uuid?: true
taskUuid?: true
taskId?: true
userId?: true
_all?: true
@@ -177,6 +189,8 @@ export type TaskMemberGroupByArgs<ExtArgs extends runtime.Types.Extensions.Inter
export type TaskMemberGroupByOutputType = {
id: number
uuid: string
taskUuid: string | null
taskId: number
userId: number
_count: TaskMemberCountAggregateOutputType | null
@@ -206,6 +220,8 @@ export type TaskMemberWhereInput = {
OR?: Prisma.TaskMemberWhereInput[]
NOT?: Prisma.TaskMemberWhereInput | Prisma.TaskMemberWhereInput[]
id?: Prisma.IntFilter<"TaskMember"> | number
uuid?: Prisma.StringFilter<"TaskMember"> | string
taskUuid?: Prisma.StringNullableFilter<"TaskMember"> | string | null
taskId?: Prisma.IntFilter<"TaskMember"> | number
userId?: Prisma.IntFilter<"TaskMember"> | number
task?: Prisma.XOR<Prisma.TaskScalarRelationFilter, Prisma.TaskWhereInput>
@@ -214,6 +230,8 @@ export type TaskMemberWhereInput = {
export type TaskMemberOrderByWithRelationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrderInput | Prisma.SortOrder
taskId?: Prisma.SortOrder
userId?: Prisma.SortOrder
task?: Prisma.TaskOrderByWithRelationInput
@@ -222,18 +240,22 @@ export type TaskMemberOrderByWithRelationInput = {
export type TaskMemberWhereUniqueInput = Prisma.AtLeast<{
id?: number
uuid?: string
taskId_userId?: Prisma.TaskMemberTaskIdUserIdCompoundUniqueInput
AND?: Prisma.TaskMemberWhereInput | Prisma.TaskMemberWhereInput[]
OR?: Prisma.TaskMemberWhereInput[]
NOT?: Prisma.TaskMemberWhereInput | Prisma.TaskMemberWhereInput[]
taskUuid?: Prisma.StringNullableFilter<"TaskMember"> | string | null
taskId?: Prisma.IntFilter<"TaskMember"> | number
userId?: Prisma.IntFilter<"TaskMember"> | number
task?: Prisma.XOR<Prisma.TaskScalarRelationFilter, Prisma.TaskWhereInput>
user?: Prisma.XOR<Prisma.UserScalarRelationFilter, Prisma.UserWhereInput>
}, "id" | "taskId_userId">
}, "id" | "uuid" | "taskId_userId">
export type TaskMemberOrderByWithAggregationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrderInput | Prisma.SortOrder
taskId?: Prisma.SortOrder
userId?: Prisma.SortOrder
_count?: Prisma.TaskMemberCountOrderByAggregateInput
@@ -248,44 +270,59 @@ export type TaskMemberScalarWhereWithAggregatesInput = {
OR?: Prisma.TaskMemberScalarWhereWithAggregatesInput[]
NOT?: Prisma.TaskMemberScalarWhereWithAggregatesInput | Prisma.TaskMemberScalarWhereWithAggregatesInput[]
id?: Prisma.IntWithAggregatesFilter<"TaskMember"> | number
uuid?: Prisma.StringWithAggregatesFilter<"TaskMember"> | string
taskUuid?: Prisma.StringNullableWithAggregatesFilter<"TaskMember"> | string | null
taskId?: Prisma.IntWithAggregatesFilter<"TaskMember"> | number
userId?: Prisma.IntWithAggregatesFilter<"TaskMember"> | number
}
export type TaskMemberCreateInput = {
uuid: string
taskUuid?: string | null
task: Prisma.TaskCreateNestedOneWithoutMembersInput
user: Prisma.UserCreateNestedOneWithoutTaskMembersInput
}
export type TaskMemberUncheckedCreateInput = {
id?: number
uuid: string
taskUuid?: string | null
taskId: number
userId: number
}
export type TaskMemberUpdateInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
task?: Prisma.TaskUpdateOneRequiredWithoutMembersNestedInput
user?: Prisma.UserUpdateOneRequiredWithoutTaskMembersNestedInput
}
export type TaskMemberUncheckedUpdateInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
taskId?: Prisma.IntFieldUpdateOperationsInput | number
userId?: Prisma.IntFieldUpdateOperationsInput | number
}
export type TaskMemberCreateManyInput = {
id?: number
uuid: string
taskUuid?: string | null
taskId: number
userId: number
}
export type TaskMemberUpdateManyMutationInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
}
export type TaskMemberUncheckedUpdateManyInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
taskId?: Prisma.IntFieldUpdateOperationsInput | number
userId?: Prisma.IntFieldUpdateOperationsInput | number
}
@@ -307,6 +344,8 @@ export type TaskMemberTaskIdUserIdCompoundUniqueInput = {
export type TaskMemberCountOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrder
taskId?: Prisma.SortOrder
userId?: Prisma.SortOrder
}
@@ -319,12 +358,16 @@ export type TaskMemberAvgOrderByAggregateInput = {
export type TaskMemberMaxOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrder
taskId?: Prisma.SortOrder
userId?: Prisma.SortOrder
}
export type TaskMemberMinOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrder
taskId?: Prisma.SortOrder
userId?: Prisma.SortOrder
}
@@ -420,11 +463,15 @@ export type TaskMemberUncheckedUpdateManyWithoutTaskNestedInput = {
}
export type TaskMemberCreateWithoutUserInput = {
uuid: string
taskUuid?: string | null
task: Prisma.TaskCreateNestedOneWithoutMembersInput
}
export type TaskMemberUncheckedCreateWithoutUserInput = {
id?: number
uuid: string
taskUuid?: string | null
taskId: number
}
@@ -459,16 +506,22 @@ export type TaskMemberScalarWhereInput = {
OR?: Prisma.TaskMemberScalarWhereInput[]
NOT?: Prisma.TaskMemberScalarWhereInput | Prisma.TaskMemberScalarWhereInput[]
id?: Prisma.IntFilter<"TaskMember"> | number
uuid?: Prisma.StringFilter<"TaskMember"> | string
taskUuid?: Prisma.StringNullableFilter<"TaskMember"> | string | null
taskId?: Prisma.IntFilter<"TaskMember"> | number
userId?: Prisma.IntFilter<"TaskMember"> | number
}
export type TaskMemberCreateWithoutTaskInput = {
uuid: string
taskUuid?: string | null
user: Prisma.UserCreateNestedOneWithoutTaskMembersInput
}
export type TaskMemberUncheckedCreateWithoutTaskInput = {
id?: number
uuid: string
taskUuid?: string | null
userId: number
}
@@ -500,39 +553,55 @@ export type TaskMemberUpdateManyWithWhereWithoutTaskInput = {
export type TaskMemberCreateManyUserInput = {
id?: number
uuid: string
taskUuid?: string | null
taskId: number
}
export type TaskMemberUpdateWithoutUserInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
task?: Prisma.TaskUpdateOneRequiredWithoutMembersNestedInput
}
export type TaskMemberUncheckedUpdateWithoutUserInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
taskId?: Prisma.IntFieldUpdateOperationsInput | number
}
export type TaskMemberUncheckedUpdateManyWithoutUserInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
taskId?: Prisma.IntFieldUpdateOperationsInput | number
}
export type TaskMemberCreateManyTaskInput = {
id?: number
uuid: string
taskUuid?: string | null
userId: number
}
export type TaskMemberUpdateWithoutTaskInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
user?: Prisma.UserUpdateOneRequiredWithoutTaskMembersNestedInput
}
export type TaskMemberUncheckedUpdateWithoutTaskInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
userId?: Prisma.IntFieldUpdateOperationsInput | number
}
export type TaskMemberUncheckedUpdateManyWithoutTaskInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
userId?: Prisma.IntFieldUpdateOperationsInput | number
}
@@ -540,25 +609,55 @@ export type TaskMemberUncheckedUpdateManyWithoutTaskInput = {
export type TaskMemberSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
taskUuid?: boolean
taskId?: boolean
userId?: boolean
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["taskMember"]>
export type TaskMemberSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
taskUuid?: boolean
taskId?: boolean
userId?: boolean
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["taskMember"]>
export type TaskMemberSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
taskUuid?: boolean
taskId?: boolean
userId?: boolean
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}, ExtArgs["result"]["taskMember"]>
export type TaskMemberSelectScalar = {
id?: boolean
uuid?: boolean
taskUuid?: boolean
taskId?: boolean
userId?: boolean
}
export type TaskMemberOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "taskId" | "userId", ExtArgs["result"]["taskMember"]>
export type TaskMemberOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "uuid" | "taskUuid" | "taskId" | "userId", ExtArgs["result"]["taskMember"]>
export type TaskMemberInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type TaskMemberIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type TaskMemberIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
}
export type $TaskMemberPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "TaskMember"
@@ -568,6 +667,8 @@ export type $TaskMemberPayload<ExtArgs extends runtime.Types.Extensions.Internal
}
scalars: runtime.Types.Extensions.GetPayloadResult<{
id: number
uuid: string
taskUuid: string | null
taskId: number
userId: number
}, ExtArgs["result"]["taskMember"]>
@@ -687,6 +788,30 @@ export interface TaskMemberDelegate<ExtArgs extends runtime.Types.Extensions.Int
*/
createMany<T extends TaskMemberCreateManyArgs>(args?: Prisma.SelectSubset<T, TaskMemberCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many TaskMembers and returns the data saved in the database.
* @param {TaskMemberCreateManyAndReturnArgs} args - Arguments to create many TaskMembers.
* @example
* // Create many TaskMembers
* const taskMember = await prisma.taskMember.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many TaskMembers and only return the `id`
* const taskMemberWithIdOnly = await prisma.taskMember.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends TaskMemberCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, TaskMemberCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$TaskMemberPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a TaskMember.
* @param {TaskMemberDeleteArgs} args - Arguments to delete one TaskMember.
@@ -751,6 +876,36 @@ export interface TaskMemberDelegate<ExtArgs extends runtime.Types.Extensions.Int
*/
updateMany<T extends TaskMemberUpdateManyArgs>(args: Prisma.SelectSubset<T, TaskMemberUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more TaskMembers and returns the data updated in the database.
* @param {TaskMemberUpdateManyAndReturnArgs} args - Arguments to update many TaskMembers.
* @example
* // Update many TaskMembers
* const taskMember = await prisma.taskMember.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more TaskMembers and only return the `id`
* const taskMemberWithIdOnly = await prisma.taskMember.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends TaskMemberUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, TaskMemberUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$TaskMemberPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one TaskMember.
* @param {TaskMemberUpsertArgs} args - Arguments to update or create a TaskMember.
@@ -942,6 +1097,8 @@ export interface Prisma__TaskMemberClient<T, Null = never, ExtArgs extends runti
*/
export interface TaskMemberFieldRefs {
readonly id: Prisma.FieldRef<"TaskMember", 'Int'>
readonly uuid: Prisma.FieldRef<"TaskMember", 'String'>
readonly taskUuid: Prisma.FieldRef<"TaskMember", 'String'>
readonly taskId: Prisma.FieldRef<"TaskMember", 'Int'>
readonly userId: Prisma.FieldRef<"TaskMember", 'Int'>
}
@@ -1181,6 +1338,29 @@ export type TaskMemberCreateManyArgs<ExtArgs extends runtime.Types.Extensions.In
skipDuplicates?: boolean
}
/**
* TaskMember createManyAndReturn
*/
export type TaskMemberCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the TaskMember
*/
select?: Prisma.TaskMemberSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the TaskMember
*/
omit?: Prisma.TaskMemberOmit<ExtArgs> | null
/**
* The data used to create many TaskMembers.
*/
data: Prisma.TaskMemberCreateManyInput | Prisma.TaskMemberCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.TaskMemberIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* TaskMember update
*/
@@ -1225,6 +1405,36 @@ export type TaskMemberUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.In
limit?: number
}
/**
* TaskMember updateManyAndReturn
*/
export type TaskMemberUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the TaskMember
*/
select?: Prisma.TaskMemberSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the TaskMember
*/
omit?: Prisma.TaskMemberOmit<ExtArgs> | null
/**
* The data used to update TaskMembers.
*/
data: Prisma.XOR<Prisma.TaskMemberUpdateManyMutationInput, Prisma.TaskMemberUncheckedUpdateManyInput>
/**
* Filter which TaskMembers to update
*/
where?: Prisma.TaskMemberWhereInput
/**
* Limit how many TaskMembers to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.TaskMemberIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* TaskMember upsert
*/
+197 -9
View File
@@ -38,18 +38,24 @@ export type TaskTagSumAggregateOutputType = {
export type TaskTagMinAggregateOutputType = {
id: number | null
uuid: string | null
taskUuid: string | null
taskId: number | null
name: string | null
}
export type TaskTagMaxAggregateOutputType = {
id: number | null
uuid: string | null
taskUuid: string | null
taskId: number | null
name: string | null
}
export type TaskTagCountAggregateOutputType = {
id: number
uuid: number
taskUuid: number
taskId: number
name: number
_all: number
@@ -68,18 +74,24 @@ export type TaskTagSumAggregateInputType = {
export type TaskTagMinAggregateInputType = {
id?: true
uuid?: true
taskUuid?: true
taskId?: true
name?: true
}
export type TaskTagMaxAggregateInputType = {
id?: true
uuid?: true
taskUuid?: true
taskId?: true
name?: true
}
export type TaskTagCountAggregateInputType = {
id?: true
uuid?: true
taskUuid?: true
taskId?: true
name?: true
_all?: true
@@ -173,6 +185,8 @@ export type TaskTagGroupByArgs<ExtArgs extends runtime.Types.Extensions.Internal
export type TaskTagGroupByOutputType = {
id: number
uuid: string
taskUuid: string | null
taskId: number
name: string
_count: TaskTagCountAggregateOutputType | null
@@ -202,6 +216,8 @@ export type TaskTagWhereInput = {
OR?: Prisma.TaskTagWhereInput[]
NOT?: Prisma.TaskTagWhereInput | Prisma.TaskTagWhereInput[]
id?: Prisma.IntFilter<"TaskTag"> | number
uuid?: Prisma.StringFilter<"TaskTag"> | string
taskUuid?: Prisma.StringNullableFilter<"TaskTag"> | string | null
taskId?: Prisma.IntFilter<"TaskTag"> | number
name?: Prisma.StringFilter<"TaskTag"> | string
task?: Prisma.XOR<Prisma.TaskScalarRelationFilter, Prisma.TaskWhereInput>
@@ -209,24 +225,29 @@ export type TaskTagWhereInput = {
export type TaskTagOrderByWithRelationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrderInput | Prisma.SortOrder
taskId?: Prisma.SortOrder
name?: Prisma.SortOrder
task?: Prisma.TaskOrderByWithRelationInput
_relevance?: Prisma.TaskTagOrderByRelevanceInput
}
export type TaskTagWhereUniqueInput = Prisma.AtLeast<{
id?: number
uuid?: string
AND?: Prisma.TaskTagWhereInput | Prisma.TaskTagWhereInput[]
OR?: Prisma.TaskTagWhereInput[]
NOT?: Prisma.TaskTagWhereInput | Prisma.TaskTagWhereInput[]
taskUuid?: Prisma.StringNullableFilter<"TaskTag"> | string | null
taskId?: Prisma.IntFilter<"TaskTag"> | number
name?: Prisma.StringFilter<"TaskTag"> | string
task?: Prisma.XOR<Prisma.TaskScalarRelationFilter, Prisma.TaskWhereInput>
}, "id">
}, "id" | "uuid">
export type TaskTagOrderByWithAggregationInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrderInput | Prisma.SortOrder
taskId?: Prisma.SortOrder
name?: Prisma.SortOrder
_count?: Prisma.TaskTagCountOrderByAggregateInput
@@ -241,44 +262,60 @@ export type TaskTagScalarWhereWithAggregatesInput = {
OR?: Prisma.TaskTagScalarWhereWithAggregatesInput[]
NOT?: Prisma.TaskTagScalarWhereWithAggregatesInput | Prisma.TaskTagScalarWhereWithAggregatesInput[]
id?: Prisma.IntWithAggregatesFilter<"TaskTag"> | number
uuid?: Prisma.StringWithAggregatesFilter<"TaskTag"> | string
taskUuid?: Prisma.StringNullableWithAggregatesFilter<"TaskTag"> | string | null
taskId?: Prisma.IntWithAggregatesFilter<"TaskTag"> | number
name?: Prisma.StringWithAggregatesFilter<"TaskTag"> | string
}
export type TaskTagCreateInput = {
uuid: string
taskUuid?: string | null
name: string
task: Prisma.TaskCreateNestedOneWithoutTagsInput
}
export type TaskTagUncheckedCreateInput = {
id?: number
uuid: string
taskUuid?: string | null
taskId: number
name: string
}
export type TaskTagUpdateInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
task?: Prisma.TaskUpdateOneRequiredWithoutTagsNestedInput
}
export type TaskTagUncheckedUpdateInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
taskId?: Prisma.IntFieldUpdateOperationsInput | number
name?: Prisma.StringFieldUpdateOperationsInput | string
}
export type TaskTagCreateManyInput = {
id?: number
uuid: string
taskUuid?: string | null
taskId: number
name: string
}
export type TaskTagUpdateManyMutationInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
}
export type TaskTagUncheckedUpdateManyInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
taskId?: Prisma.IntFieldUpdateOperationsInput | number
name?: Prisma.StringFieldUpdateOperationsInput | string
}
@@ -293,14 +330,10 @@ export type TaskTagOrderByRelationAggregateInput = {
_count?: Prisma.SortOrder
}
export type TaskTagOrderByRelevanceInput = {
fields: Prisma.TaskTagOrderByRelevanceFieldEnum | Prisma.TaskTagOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type TaskTagCountOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrder
taskId?: Prisma.SortOrder
name?: Prisma.SortOrder
}
@@ -312,12 +345,16 @@ export type TaskTagAvgOrderByAggregateInput = {
export type TaskTagMaxOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrder
taskId?: Prisma.SortOrder
name?: Prisma.SortOrder
}
export type TaskTagMinOrderByAggregateInput = {
id?: Prisma.SortOrder
uuid?: Prisma.SortOrder
taskUuid?: Prisma.SortOrder
taskId?: Prisma.SortOrder
name?: Prisma.SortOrder
}
@@ -370,11 +407,15 @@ export type TaskTagUncheckedUpdateManyWithoutTaskNestedInput = {
}
export type TaskTagCreateWithoutTaskInput = {
uuid: string
taskUuid?: string | null
name: string
}
export type TaskTagUncheckedCreateWithoutTaskInput = {
id?: number
uuid: string
taskUuid?: string | null
name: string
}
@@ -409,26 +450,36 @@ export type TaskTagScalarWhereInput = {
OR?: Prisma.TaskTagScalarWhereInput[]
NOT?: Prisma.TaskTagScalarWhereInput | Prisma.TaskTagScalarWhereInput[]
id?: Prisma.IntFilter<"TaskTag"> | number
uuid?: Prisma.StringFilter<"TaskTag"> | string
taskUuid?: Prisma.StringNullableFilter<"TaskTag"> | string | null
taskId?: Prisma.IntFilter<"TaskTag"> | number
name?: Prisma.StringFilter<"TaskTag"> | string
}
export type TaskTagCreateManyTaskInput = {
id?: number
uuid: string
taskUuid?: string | null
name: string
}
export type TaskTagUpdateWithoutTaskInput = {
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
}
export type TaskTagUncheckedUpdateWithoutTaskInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
}
export type TaskTagUncheckedUpdateManyWithoutTaskInput = {
id?: Prisma.IntFieldUpdateOperationsInput | number
uuid?: Prisma.StringFieldUpdateOperationsInput | string
taskUuid?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
name?: Prisma.StringFieldUpdateOperationsInput | string
}
@@ -436,23 +487,49 @@ export type TaskTagUncheckedUpdateManyWithoutTaskInput = {
export type TaskTagSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
taskUuid?: boolean
taskId?: boolean
name?: boolean
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
}, ExtArgs["result"]["taskTag"]>
export type TaskTagSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
taskUuid?: boolean
taskId?: boolean
name?: boolean
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
}, ExtArgs["result"]["taskTag"]>
export type TaskTagSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
uuid?: boolean
taskUuid?: boolean
taskId?: boolean
name?: boolean
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
}, ExtArgs["result"]["taskTag"]>
export type TaskTagSelectScalar = {
id?: boolean
uuid?: boolean
taskUuid?: boolean
taskId?: boolean
name?: boolean
}
export type TaskTagOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "taskId" | "name", ExtArgs["result"]["taskTag"]>
export type TaskTagOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "uuid" | "taskUuid" | "taskId" | "name", ExtArgs["result"]["taskTag"]>
export type TaskTagInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
}
export type TaskTagIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
}
export type TaskTagIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
task?: boolean | Prisma.TaskDefaultArgs<ExtArgs>
}
export type $TaskTagPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "TaskTag"
@@ -461,6 +538,8 @@ export type $TaskTagPayload<ExtArgs extends runtime.Types.Extensions.InternalArg
}
scalars: runtime.Types.Extensions.GetPayloadResult<{
id: number
uuid: string
taskUuid: string | null
taskId: number
name: string
}, ExtArgs["result"]["taskTag"]>
@@ -580,6 +659,30 @@ export interface TaskTagDelegate<ExtArgs extends runtime.Types.Extensions.Intern
*/
createMany<T extends TaskTagCreateManyArgs>(args?: Prisma.SelectSubset<T, TaskTagCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many TaskTags and returns the data saved in the database.
* @param {TaskTagCreateManyAndReturnArgs} args - Arguments to create many TaskTags.
* @example
* // Create many TaskTags
* const taskTag = await prisma.taskTag.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many TaskTags and only return the `id`
* const taskTagWithIdOnly = await prisma.taskTag.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends TaskTagCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, TaskTagCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$TaskTagPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a TaskTag.
* @param {TaskTagDeleteArgs} args - Arguments to delete one TaskTag.
@@ -644,6 +747,36 @@ export interface TaskTagDelegate<ExtArgs extends runtime.Types.Extensions.Intern
*/
updateMany<T extends TaskTagUpdateManyArgs>(args: Prisma.SelectSubset<T, TaskTagUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more TaskTags and returns the data updated in the database.
* @param {TaskTagUpdateManyAndReturnArgs} args - Arguments to update many TaskTags.
* @example
* // Update many TaskTags
* const taskTag = await prisma.taskTag.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more TaskTags and only return the `id`
* const taskTagWithIdOnly = await prisma.taskTag.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends TaskTagUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, TaskTagUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$TaskTagPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one TaskTag.
* @param {TaskTagUpsertArgs} args - Arguments to update or create a TaskTag.
@@ -834,6 +967,8 @@ export interface Prisma__TaskTagClient<T, Null = never, ExtArgs extends runtime.
*/
export interface TaskTagFieldRefs {
readonly id: Prisma.FieldRef<"TaskTag", 'Int'>
readonly uuid: Prisma.FieldRef<"TaskTag", 'String'>
readonly taskUuid: Prisma.FieldRef<"TaskTag", 'String'>
readonly taskId: Prisma.FieldRef<"TaskTag", 'Int'>
readonly name: Prisma.FieldRef<"TaskTag", 'String'>
}
@@ -1073,6 +1208,29 @@ export type TaskTagCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Inter
skipDuplicates?: boolean
}
/**
* TaskTag createManyAndReturn
*/
export type TaskTagCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the TaskTag
*/
select?: Prisma.TaskTagSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the TaskTag
*/
omit?: Prisma.TaskTagOmit<ExtArgs> | null
/**
* The data used to create many TaskTags.
*/
data: Prisma.TaskTagCreateManyInput | Prisma.TaskTagCreateManyInput[]
skipDuplicates?: boolean
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.TaskTagIncludeCreateManyAndReturn<ExtArgs> | null
}
/**
* TaskTag update
*/
@@ -1117,6 +1275,36 @@ export type TaskTagUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Inter
limit?: number
}
/**
* TaskTag updateManyAndReturn
*/
export type TaskTagUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the TaskTag
*/
select?: Prisma.TaskTagSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the TaskTag
*/
omit?: Prisma.TaskTagOmit<ExtArgs> | null
/**
* The data used to update TaskTags.
*/
data: Prisma.XOR<Prisma.TaskTagUpdateManyMutationInput, Prisma.TaskTagUncheckedUpdateManyInput>
/**
* Filter which TaskTags to update
*/
where?: Prisma.TaskTagWhereInput
/**
* Limit how many TaskTags to update.
*/
limit?: number
/**
* Choose, which related nodes to fetch as well
*/
include?: Prisma.TaskTagIncludeUpdateManyAndReturn<ExtArgs> | null
}
/**
* TaskTag upsert
*/
+117 -7
View File
@@ -251,7 +251,6 @@ export type UserOrderByWithRelationInput = {
assignedTasks?: Prisma.TaskOrderByRelationAggregateInput
createdTasks?: Prisma.TaskOrderByRelationAggregateInput
taskMembers?: Prisma.TaskMemberOrderByRelationAggregateInput
_relevance?: Prisma.UserOrderByRelevanceInput
}
export type UserWhereUniqueInput = Prisma.AtLeast<{
@@ -397,12 +396,6 @@ export type UserUncheckedUpdateManyInput = {
updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
}
export type UserOrderByRelevanceInput = {
fields: Prisma.UserOrderByRelevanceFieldEnum | Prisma.UserOrderByRelevanceFieldEnum[]
sort: Prisma.SortOrder
search: string
}
export type UserCountOrderByAggregateInput = {
id?: Prisma.SortOrder
name?: Prisma.SortOrder
@@ -1454,7 +1447,23 @@ export type UserSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = r
_count?: boolean | Prisma.UserCountOutputTypeDefaultArgs<ExtArgs>
}, ExtArgs["result"]["user"]>
export type UserSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
name?: boolean
email?: boolean
password?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["user"]>
export type UserSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
id?: boolean
name?: boolean
email?: boolean
password?: boolean
createdAt?: boolean
updatedAt?: boolean
}, ExtArgs["result"]["user"]>
export type UserSelectScalar = {
id?: boolean
@@ -1478,6 +1487,8 @@ export type UserInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs =
taskMembers?: boolean | Prisma.User$taskMembersArgs<ExtArgs>
_count?: boolean | Prisma.UserCountOutputTypeDefaultArgs<ExtArgs>
}
export type UserIncludeCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {}
export type UserIncludeUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {}
export type $UserPayload<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
name: "User"
@@ -1616,6 +1627,30 @@ export interface UserDelegate<ExtArgs extends runtime.Types.Extensions.InternalA
*/
createMany<T extends UserCreateManyArgs>(args?: Prisma.SelectSubset<T, UserCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Create many Users and returns the data saved in the database.
* @param {UserCreateManyAndReturnArgs} args - Arguments to create many Users.
* @example
* // Create many Users
* const user = await prisma.user.createManyAndReturn({
* data: [
* // ... provide data here
* ]
* })
*
* // Create many Users and only return the `id`
* const userWithIdOnly = await prisma.user.createManyAndReturn({
* select: { id: true },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
createManyAndReturn<T extends UserCreateManyAndReturnArgs>(args?: Prisma.SelectSubset<T, UserCreateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "createManyAndReturn", GlobalOmitOptions>>
/**
* Delete a User.
* @param {UserDeleteArgs} args - Arguments to delete one User.
@@ -1680,6 +1715,36 @@ export interface UserDelegate<ExtArgs extends runtime.Types.Extensions.InternalA
*/
updateMany<T extends UserUpdateManyArgs>(args: Prisma.SelectSubset<T, UserUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<Prisma.BatchPayload>
/**
* Update zero or more Users and returns the data updated in the database.
* @param {UserUpdateManyAndReturnArgs} args - Arguments to update many Users.
* @example
* // Update many Users
* const user = await prisma.user.updateManyAndReturn({
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
*
* // Update zero or more Users and only return the `id`
* const userWithIdOnly = await prisma.user.updateManyAndReturn({
* select: { id: true },
* where: {
* // ... provide filter here
* },
* data: [
* // ... provide data here
* ]
* })
* Note, that providing `undefined` is treated as the value not being there.
* Read more here: https://pris.ly/d/null-undefined
*
*/
updateManyAndReturn<T extends UserUpdateManyAndReturnArgs>(args: Prisma.SelectSubset<T, UserUpdateManyAndReturnArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "updateManyAndReturn", GlobalOmitOptions>>
/**
* Create or update one User.
* @param {UserUpsertArgs} args - Arguments to update or create a User.
@@ -2120,6 +2185,25 @@ export type UserCreateManyArgs<ExtArgs extends runtime.Types.Extensions.Internal
skipDuplicates?: boolean
}
/**
* User createManyAndReturn
*/
export type UserCreateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the User
*/
select?: Prisma.UserSelectCreateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the User
*/
omit?: Prisma.UserOmit<ExtArgs> | null
/**
* The data used to create many Users.
*/
data: Prisma.UserCreateManyInput | Prisma.UserCreateManyInput[]
skipDuplicates?: boolean
}
/**
* User update
*/
@@ -2164,6 +2248,32 @@ export type UserUpdateManyArgs<ExtArgs extends runtime.Types.Extensions.Internal
limit?: number
}
/**
* User updateManyAndReturn
*/
export type UserUpdateManyAndReturnArgs<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
/**
* Select specific fields to fetch from the User
*/
select?: Prisma.UserSelectUpdateManyAndReturn<ExtArgs> | null
/**
* Omit specific fields from the User
*/
omit?: Prisma.UserOmit<ExtArgs> | null
/**
* The data used to update Users.
*/
data: Prisma.XOR<Prisma.UserUpdateManyMutationInput, Prisma.UserUncheckedUpdateManyInput>
/**
* Filter which Users to update
*/
where?: Prisma.UserWhereInput
/**
* Limit how many Users to update.
*/
limit?: number
}
/**
* User upsert
*/
+282 -65
View File
@@ -1,14 +1,17 @@
{
"name": "iboard",
"version": "1.0.0",
"version": "0.2.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "iboard",
"version": "1.0.0",
"version": "0.2.0",
"dependencies": {
"@prisma/adapter-mariadb": "^7.9.1",
"@journeyapps/wa-sqlite": "^2.0.7",
"@powersync/react": "^2.1.0",
"@powersync/web": "^2.5.0",
"@prisma/adapter-pg": "^7.9.1",
"@prisma/client": "^7.7.0",
"@zythum02/mijia-api": "^0.1.4",
"antd-mobile": "^5.42.3",
@@ -1187,6 +1190,11 @@
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@journeyapps/wa-sqlite": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/@journeyapps/wa-sqlite/-/wa-sqlite-2.0.8.tgz",
"integrity": "sha512-WRXEms2515S/0DFSWzmlggHu9hSJomhugDUO17rWkL6VpokV/hfjIDLs954Egx/eqrk3WADmiOMzOc7MuJbznQ=="
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.13",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
@@ -1615,64 +1623,91 @@
"node": "^22.20 || ^24.12 || >=25"
}
},
"node_modules/@prisma/adapter-mariadb": {
"version": "7.9.1",
"resolved": "https://registry.npmjs.org/@prisma/adapter-mariadb/-/adapter-mariadb-7.9.1.tgz",
"integrity": "sha512-4aZUbIg2av7XFSQyM9cQeAp9YP9HiPr8H7ehe2rDo375IZXILEzQrNXZ/zLetgRQ2ojlaUl/brArFdOVS3n1xA==",
"node_modules/@powersync/common": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/@powersync/common/-/common-2.4.0.tgz",
"integrity": "sha512-ngVogy+B8NQeI5l+0Es8qMxnGozUie8Q6R4+0/AHA3oBAhDG5UmeYw/LquTzZJSOPnCmvGgFSqovblV+JKzxKQ==",
"license": "Apache-2.0"
},
"node_modules/@powersync/react": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@powersync/react/-/react-2.1.0.tgz",
"integrity": "sha512-ADIpakSLhstv0F9xrUIF+oCArFnAQPrcB9mNql6xH0Nup9EgBug38Ks+mv3yqbc33z60pBm9tuHs8uSIbkhuqg==",
"license": "Apache-2.0",
"peerDependencies": {
"@powersync/common": "^2.4.0",
"react": "*"
}
},
"node_modules/@powersync/shared-internals": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/@powersync/shared-internals/-/shared-internals-1.4.0.tgz",
"integrity": "sha512-OiqqDuW6tePW4Ed7C5IWutBKrtcqKuTMlVMQNwUZtKtqr7ZrqKlb+YP5l4niuz8mpqDYo3/HNU0dpc+3mneSBQ==",
"license": "Apache-2.0",
"peerDependencies": {
"@powersync/common": "^2.4.0"
}
},
"node_modules/@powersync/web": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@powersync/web/-/web-2.5.0.tgz",
"integrity": "sha512-/K2ZUjIdqvtFeoLfPetPcE+uioShBWzrTrOa8hpoZ7i62S8wgj47i+VPnKTXI7WQmXuxTGGZFUFnahinf6wjPg==",
"license": "Apache-2.0",
"dependencies": {
"@prisma/driver-adapter-utils": "7.9.1",
"mariadb": "3.4.5"
"@journeyapps/wa-sqlite": "2.0.7",
"@powersync/common": "2.4.0",
"@powersync/shared-internals": "1.4.0",
"comlink": "^4.4.2",
"commander": "^12.1.0"
},
"bin": {
"powersync-web": "bin/powersync.cjs"
},
"peerDependencies": {
"@powersync/common": "^2.4.0",
"@powersync/shared-internals": "^1.4.0"
}
},
"node_modules/@prisma/adapter-mariadb/node_modules/@types/node": {
"version": "24.13.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz",
"integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==",
"node_modules/@powersync/web/node_modules/@journeyapps/wa-sqlite": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/@journeyapps/wa-sqlite/-/wa-sqlite-2.0.7.tgz",
"integrity": "sha512-mc6xUricl4QB2s8QTRGS+FofSr1cjwDtf6dPXAdMBuGWodjfEgkSJGDPWQ7zVqgc7hMfXYLT7WIfEBAxara8YA=="
},
"node_modules/@powersync/web/node_modules/commander": {
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
"license": "MIT",
"dependencies": {
"undici-types": "~7.18.0"
}
},
"node_modules/@prisma/adapter-mariadb/node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
"node": ">=18"
}
},
"node_modules/@prisma/adapter-mariadb/node_modules/lru-cache": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"license": "ISC"
},
"node_modules/@prisma/adapter-mariadb/node_modules/mariadb": {
"version": "3.4.5",
"resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.4.5.tgz",
"integrity": "sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==",
"license": "LGPL-2.1-or-later",
"node_modules/@prisma/adapter-pg": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.10.1.tgz",
"integrity": "sha512-EP9ruPYHjKP80WZlb5qVaEXKgZjJieBFjAxcBtQnDAHD6+16UN4keVmBh6L/RUpuDQT2FQRbvKNgq5d4Ix+IkQ==",
"license": "Apache-2.0",
"dependencies": {
"@types/geojson": "^7946.0.16",
"@types/node": "^24.0.13",
"denque": "^2.1.0",
"iconv-lite": "^0.6.3",
"lru-cache": "^10.4.3"
},
"engines": {
"node": ">= 14"
"@prisma/driver-adapter-utils": "7.10.1",
"@types/pg": "^8.16.0",
"pg": "^8.16.3",
"postgres-array": "3.0.4"
}
},
"node_modules/@prisma/adapter-mariadb/node_modules/undici-types": {
"version": "7.18.2",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
"integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
"license": "MIT"
"node_modules/@prisma/adapter-pg/node_modules/@prisma/debug": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.10.1.tgz",
"integrity": "sha512-eFCAkGZ13D/qPg48JBlG5IWi9cSBBOC7oG3abDPcAkYioDWlIjh0YJJLK2J7qo5S+xWWD8I6egAN/8KbCaiMCA==",
"license": "Apache-2.0"
},
"node_modules/@prisma/adapter-pg/node_modules/@prisma/driver-adapter-utils": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.10.1.tgz",
"integrity": "sha512-DJ4c6xvVnm3s9ZUyql9nCUicADSqyvH+CjXRCM9L6m5zJxCNmebCElG6X4irICq3rosBwlX+S19Dxq/4IrZk3A==",
"license": "Apache-2.0",
"dependencies": {
"@prisma/debug": "7.10.1"
}
},
"node_modules/@prisma/client": {
"version": "7.7.0",
@@ -1747,21 +1782,6 @@
"zeptomatch": "2.1.0"
}
},
"node_modules/@prisma/driver-adapter-utils": {
"version": "7.9.1",
"resolved": "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-7.9.1.tgz",
"integrity": "sha512-vmHehG7nn/heW32DXXpp13DxxAxVVe6n250oEt3dOL2E/4bt3olktKZN0mzSuxMMronyMSkbeW2uCOn3F4g8RQ==",
"license": "Apache-2.0",
"dependencies": {
"@prisma/debug": "7.9.1"
}
},
"node_modules/@prisma/driver-adapter-utils/node_modules/@prisma/debug": {
"version": "7.9.1",
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-7.9.1.tgz",
"integrity": "sha512-/cpVZ4itxtcgB8GHBvZtcmuEjq+lWsLrRJxFMbwZrT1RIdtuKmUm7PPGo/wzfbYpBrk+9WmmBE8CHJw2rybKDQ==",
"license": "Apache-2.0"
},
"node_modules/@prisma/engines": {
"version": "7.7.0",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-7.7.0.tgz",
@@ -2867,6 +2887,17 @@
"undici-types": "~8.3.0"
}
},
"node_modules/@types/pg": {
"version": "8.23.1",
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.23.1.tgz",
"integrity": "sha512-fKVHpikPdg4GKks3JuLEhvwSyvwzF23hnabPy6DD8ljVbC7+6J5dQzdv4arV6jqq57djnMgs1HKBxX4P8aBI3A==",
"license": "MIT",
"dependencies": {
"@types/node": "*",
"pg-protocol": "*",
"pg-types": "^2.2.0"
}
},
"node_modules/@types/react": {
"version": "19.2.14",
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz",
@@ -3193,6 +3224,20 @@
"integrity": "sha512-YOf0VSj5nUPI27doTtXF+BBnsiRq3qY7avHqfIWnppxTLGyvkLq1QV2RTxkwoZwJ60ywLfZ0raFF4J/G886i7A==",
"license": "MIT"
},
"node_modules/better-sqlite3": {
"version": "13.0.3",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-13.0.3.tgz",
"integrity": "sha512-RbOBxmLBG8uvFUc15X9+9SFemKcQ0WBuISBVkpuiaUB2qblC8UWlHEjdWVoZ8AdhSwmoEgsiXKfopX0CQxaACQ==",
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"node-addon-api": "^8.0.0"
},
"engines": {
"node": ">=22"
}
},
"node_modules/body-parser": {
"version": "1.20.6",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz",
@@ -3575,6 +3620,12 @@
"node": ">= 0.8"
}
},
"node_modules/comlink": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/comlink/-/comlink-4.4.2.tgz",
"integrity": "sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==",
"license": "Apache-2.0"
},
"node_modules/commander": {
"version": "13.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
@@ -5362,6 +5413,17 @@
"node": ">= 0.6"
}
},
"node_modules/node-addon-api": {
"version": "8.9.2",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.9.2.tgz",
"integrity": "sha512-VijLXbi3UACN69I0JVXJsX4tjACjNoQDgv2gTF6sx2wWEi8tkSg2eX8p5gSIFi8z2+DL3oHmY6OyKce38SDolg==",
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": "^18 || ^20 || >= 21"
}
},
"node_modules/node-cron": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz",
@@ -5579,6 +5641,104 @@
"integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
"license": "MIT"
},
"node_modules/pg": {
"version": "8.23.1",
"resolved": "https://registry.npmjs.org/pg/-/pg-8.23.1.tgz",
"integrity": "sha512-aL96AHANtWjPLDOLqnhx+ngp9+UK7ETEU8VJrDCGvsSSi/mGLcWYsS6Herg7lmaBJe4uwrfqsa7gTEFaSizDoQ==",
"license": "MIT",
"dependencies": {
"pg-connection-string": "^2.14.1",
"pg-pool": "^3.14.0",
"pg-protocol": "^1.16.1",
"pg-types": "2.2.0",
"pgpass": "1.0.5"
},
"engines": {
"node": ">= 16.0.0"
},
"optionalDependencies": {
"pg-cloudflare": "^1.4.1"
},
"peerDependencies": {
"pg-native": ">=3.0.1"
},
"peerDependenciesMeta": {
"pg-native": {
"optional": true
}
}
},
"node_modules/pg-cloudflare": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.1.tgz",
"integrity": "sha512-6PQbsFWZcp9EmJEwy5cGQ2La+AMWpP46lgbb8X+U/XsHIUweYDNCpeuKck5RxL2MdVFi7krbbEi5nX4Zh7JhrQ==",
"license": "MIT",
"optional": true
},
"node_modules/pg-connection-string": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.14.1.tgz",
"integrity": "sha512-qR3kGNPBLpCNtz0evbKA0Y/MRFXwSSdT+pTJvYp/bXTcReZbvX1kzF0IyTc1QnxqF7AZbOeBhNL8R5mYQZV/MA==",
"license": "MIT"
},
"node_modules/pg-int8": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
"license": "ISC",
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/pg-pool": {
"version": "3.14.0",
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz",
"integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==",
"license": "MIT",
"peerDependencies": {
"pg": ">=8.0"
}
},
"node_modules/pg-protocol": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.16.1.tgz",
"integrity": "sha512-p9VOFMiHB/ZbJATetbg+99PxssTVSQRnyuPSQ67mN1+1KBOjZaZ83ZQzltnxPhJwSsC3nwVjJ10DVJlerbFzLg==",
"license": "MIT"
},
"node_modules/pg-types": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
"integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
"license": "MIT",
"dependencies": {
"pg-int8": "1.0.1",
"postgres-array": "~2.0.0",
"postgres-bytea": "~1.0.0",
"postgres-date": "~1.0.4",
"postgres-interval": "^1.1.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/pg-types/node_modules/postgres-array": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
"integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/pgpass": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
"integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
"license": "MIT",
"dependencies": {
"split2": "^4.1.0"
}
},
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -5619,6 +5779,45 @@
"url": "https://github.com/sponsors/porsager"
}
},
"node_modules/postgres-array": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.4.tgz",
"integrity": "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==",
"license": "MIT",
"engines": {
"node": ">=12"
}
},
"node_modules/postgres-bytea": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz",
"integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/postgres-date": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
"integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/postgres-interval": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
"integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
"license": "MIT",
"dependencies": {
"xtend": "^4.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/prisma": {
"version": "7.7.0",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-7.7.0.tgz",
@@ -6470,6 +6669,15 @@
"node": ">=0.10.0"
}
},
"node_modules/split2": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
"integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
"license": "ISC",
"engines": {
"node": ">= 10.x"
}
},
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -6938,6 +7146,15 @@
}
}
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"license": "MIT",
"engines": {
"node": ">=0.4"
}
},
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+4 -1
View File
@@ -30,7 +30,10 @@
"publish": "bash scripts/wsl/build-apk.sh release"
},
"dependencies": {
"@prisma/adapter-mariadb": "^7.9.1",
"@journeyapps/wa-sqlite": "^2.0.7",
"@powersync/react": "^2.1.0",
"@powersync/web": "^2.5.0",
"@prisma/adapter-pg": "^7.9.1",
"@prisma/client": "^7.7.0",
"@zythum02/mijia-api": "^0.1.4",
"antd-mobile": "^5.42.3",
@@ -1,62 +0,0 @@
-- CreateTable
CREATE TABLE `User` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL,
`email` VARCHAR(191) NOT NULL,
`password` VARCHAR(191) NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `User_email_key`(`email`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `Article` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`title` VARCHAR(191) NOT NULL,
`slug` VARCHAR(191) NOT NULL,
`content` VARCHAR(191) NOT NULL,
`date` VARCHAR(191) NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `Article_slug_key`(`slug`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `Strategy` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL,
`description` VARCHAR(191) NOT NULL,
`data` JSON NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `Indicator` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL,
`groupName` VARCHAR(191) NOT NULL,
`data` JSON NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `SowInventory` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`month` VARCHAR(191) NOT NULL,
`inventory` INTEGER NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `SowInventory_month_key`(`month`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -1,20 +0,0 @@
/*
Warnings:
- You are about to drop the `SowInventory` table. If the table is not empty, all the data it contains will be lost.
*/
-- DropTable
DROP TABLE `SowInventory`;
-- CreateTable
CREATE TABLE `Econ_SowInventory` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`month` VARCHAR(191) NOT NULL,
`inventory` INTEGER NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `Econ_SowInventory_month_key`(`month`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -1,13 +0,0 @@
-- CreateTable
CREATE TABLE `ScraperCache` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`scraperName` VARCHAR(191) NOT NULL,
`lastDataHash` VARCHAR(191) NULL,
`lastUpdateAt` DATETIME(3) NOT NULL,
`metadata` JSON NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `ScraperCache_scraperName_key`(`scraperName`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -1,5 +0,0 @@
-- Add unique constraint on Strategy.name to enable idempotent upsert in seed script
ALTER TABLE `Strategy` ADD UNIQUE INDEX `Strategy_name_key`(`name`);
-- Add unique constraint on Indicator.name to enable idempotent upsert in seed script
ALTER TABLE `Indicator` ADD UNIQUE INDEX `Indicator_name_key`(`name`);
@@ -1,24 +0,0 @@
-- 经济指标: 明细数据拆到独立表, 兼容年/季/月/日频率
-- 第一步: 建 IndicatorPoint 表 + Indicator 加元数据列 (data 列暂保留, 由迁移脚本搬运后删除)
-- CreateTable
CREATE TABLE `IndicatorPoint` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`indicatorId` INTEGER NOT NULL,
`period` VARCHAR(191) NOT NULL,
`value` DOUBLE NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `IndicatorPoint_indicatorId_period_key`(`indicatorId`, `period`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AlterTable: 元数据列 (data JSON 拆出)
ALTER TABLE `Indicator` ADD COLUMN `title` VARCHAR(191) NOT NULL DEFAULT '',
ADD COLUMN `unit` VARCHAR(191) NOT NULL DEFAULT '',
ADD COLUMN `source` VARCHAR(191) NOT NULL DEFAULT '',
ADD COLUMN `frequency` VARCHAR(191) NOT NULL DEFAULT 'month';
-- AddForeignKey
ALTER TABLE `IndicatorPoint` ADD CONSTRAINT `IndicatorPoint_indicatorId_fkey` FOREIGN KEY (`indicatorId`) REFERENCES `Indicator`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
@@ -1,3 +0,0 @@
-- 第二步: 明细数据已迁移到 IndicatorPoint, 删除 Indicator.data JSON 列
-- AlterTable
ALTER TABLE `Indicator` DROP COLUMN `data`;
@@ -1,2 +0,0 @@
-- 指标隐藏标记: 数据与获取脚本保留, 前端展示过滤 hidden=true
ALTER TABLE `Indicator` ADD COLUMN `hidden` BOOLEAN NOT NULL DEFAULT false;
@@ -1,32 +0,0 @@
-- CreateTable
CREATE TABLE `News` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`title` VARCHAR(191) NOT NULL,
`summary` VARCHAR(191) NOT NULL DEFAULT '',
`source` VARCHAR(191) NOT NULL DEFAULT '',
`url` VARCHAR(191) NOT NULL DEFAULT '',
`publishedAt` DATETIME(3) NOT NULL,
`impactRank` INTEGER NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
UNIQUE INDEX `News_title_publishedAt_key`(`title`, `publishedAt`),
INDEX `News_publishedAt_idx`(`publishedAt`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `Alert` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`indicatorName` VARCHAR(191) NOT NULL,
`period` VARCHAR(191) NOT NULL,
`valueA` DOUBLE NOT NULL,
`valueB` DOUBLE NOT NULL,
`sourceA` VARCHAR(191) NOT NULL,
`sourceB` VARCHAR(191) NOT NULL,
`diff` DOUBLE NOT NULL,
`diffRatio` DOUBLE NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
INDEX `Alert_createdAt_idx`(`createdAt`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -1,68 +0,0 @@
-- 服务器监控 + 服务健康检查
-- CreateTable
CREATE TABLE `ServerNode` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`uuid` VARCHAR(191) NOT NULL,
`name` VARCHAR(191) NOT NULL,
`cpuName` VARCHAR(191) NOT NULL DEFAULT '',
`os` VARCHAR(191) NOT NULL DEFAULT '',
`region` VARCHAR(191) NOT NULL DEFAULT '',
`memTotal` BIGINT NOT NULL DEFAULT 0,
`diskTotal` BIGINT NOT NULL DEFAULT 0,
`cpuCores` INTEGER NOT NULL DEFAULT 0,
`cpuUsage` DOUBLE NOT NULL DEFAULT 0,
`ramUsed` BIGINT NOT NULL DEFAULT 0,
`swapUsed` BIGINT NOT NULL DEFAULT 0,
`load1` DOUBLE NOT NULL DEFAULT 0,
`load5` DOUBLE NOT NULL DEFAULT 0,
`load15` DOUBLE NOT NULL DEFAULT 0,
`diskUsed` BIGINT NOT NULL DEFAULT 0,
`netIn` BIGINT NOT NULL DEFAULT 0,
`netOut` BIGINT NOT NULL DEFAULT 0,
`uptime` BIGINT NOT NULL DEFAULT 0,
`process` INTEGER NOT NULL DEFAULT 0,
`connections` INTEGER NOT NULL DEFAULT 0,
`status` VARCHAR(191) NOT NULL DEFAULT 'unknown',
`recordedAt` DATETIME(3) NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `ServerNode_uuid_key`(`uuid`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `ServerNodeHistory` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`uuid` VARCHAR(191) NOT NULL,
`period` DATETIME(3) NOT NULL,
`cpu` DOUBLE NOT NULL DEFAULT 0,
`ram` BIGINT NOT NULL DEFAULT 0,
`load` DOUBLE NOT NULL DEFAULT 0,
`disk` BIGINT NOT NULL DEFAULT 0,
`netIn` BIGINT NOT NULL DEFAULT 0,
`netOut` BIGINT NOT NULL DEFAULT 0,
`process` INTEGER NOT NULL DEFAULT 0,
`connections` INTEGER NOT NULL DEFAULT 0,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
UNIQUE INDEX `ServerNodeHistory_uuid_period_key`(`uuid`, `period`),
INDEX `ServerNodeHistory_uuid_period_idx`(`uuid`, `period`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `ServiceCheck` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL,
`url` VARCHAR(191) NOT NULL,
`status` VARCHAR(191) NOT NULL DEFAULT 'unknown',
`latencyMs` INTEGER NOT NULL DEFAULT 0,
`message` VARCHAR(191) NOT NULL DEFAULT '',
`lastCheckAt` DATETIME(3) NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `ServiceCheck_name_key`(`name`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -1,2 +0,0 @@
-- AlterTable (news.content 全文, 须在 news_and_alerts 建表之后执行)
ALTER TABLE `News` ADD COLUMN `content` TEXT NULL;
@@ -1,17 +0,0 @@
-- 浙江省油价历史表
-- - date: 调价日次日 (即数据实际抓取日, 便于按时间排序)
-- - province + fuel: 浙江 / 92/95/0
-- - unique (date, province, fuel): 防 cron 重复入库
-- - DOUBLE 容纳 999.999 元/升
CREATE TABLE OilPriceHistory (
id INT NOT NULL AUTO_INCREMENT,
date DATETIME(3) NOT NULL,
province VARCHAR(191) NOT NULL,
fuel VARCHAR(8) NOT NULL,
price DOUBLE NOT NULL,
source VARCHAR(191) NOT NULL DEFAULT 'apizero',
createdAt DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE INDEX OilPriceHistory_date_province_fuel_key(date, province, fuel),
INDEX OilPriceHistory_province_fuel_date_idx(province, fuel, date)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -1,95 +0,0 @@
-- CreateTable
CREATE TABLE `MihomeAccount` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`key` VARCHAR(191) NOT NULL DEFAULT 'default',
`userId` VARCHAR(191) NOT NULL DEFAULT '',
`status` VARCHAR(191) NOT NULL DEFAULT 'unknown',
`lastError` VARCHAR(191) NOT NULL DEFAULT '',
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `MihomeAccount_key_key`(`key`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `MihomeHome` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`homeId` VARCHAR(191) NOT NULL,
`name` VARCHAR(191) NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
UNIQUE INDEX `MihomeHome_homeId_key`(`homeId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `MihomeDevice` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`did` VARCHAR(191) NOT NULL,
`homeId` VARCHAR(191) NOT NULL,
`model` VARCHAR(191) NOT NULL,
`name` VARCHAR(191) NOT NULL,
`alias` VARCHAR(191) NULL,
`tempSiid` INTEGER NOT NULL,
`tempPiid` INTEGER NOT NULL,
`humSiid` INTEGER NOT NULL,
`humPiid` INTEGER NOT NULL,
`battSiid` INTEGER NOT NULL,
`battPiid` INTEGER NOT NULL,
`battery` INTEGER NULL,
`batteryAt` DATETIME(3) NULL,
`enabled` BOOLEAN NOT NULL DEFAULT true,
`lastSyncAt` DATETIME(3) NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
UNIQUE INDEX `MihomeDevice_did_key`(`did`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `MihomeEnvSample` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`deviceId` INTEGER NOT NULL,
`date` DATETIME(3) NOT NULL,
`temperature` DOUBLE NULL,
`humidity` DOUBLE NULL,
`temperatureAvg` DOUBLE NULL,
`humidityAvg` DOUBLE NULL,
`temperatureMin` DOUBLE NULL,
`temperatureMax` DOUBLE NULL,
`humidityMin` DOUBLE NULL,
`humidityMax` DOUBLE NULL,
`origin` VARCHAR(191) NOT NULL DEFAULT 'live',
`sampledAt` DATETIME(3) NULL,
`raw` JSON NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
INDEX `MihomeEnvSample_deviceId_date_idx`(`deviceId`, `date`),
UNIQUE INDEX `MihomeEnvSample_deviceId_date_key`(`deviceId`, `date`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `MihomeEnvHour` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`deviceId` INTEGER NOT NULL,
`hour` DATETIME(3) NOT NULL,
`temperatureAvg` DOUBLE NULL,
`humidityAvg` DOUBLE NULL,
`raw` JSON NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
INDEX `MihomeEnvHour_deviceId_hour_idx`(`deviceId`, `hour`),
UNIQUE INDEX `MihomeEnvHour_deviceId_hour_key`(`deviceId`, `hour`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `MihomeDevice` ADD CONSTRAINT `MihomeDevice_homeId_fkey` FOREIGN KEY (`homeId`) REFERENCES `MihomeHome`(`homeId`) ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `MihomeEnvSample` ADD CONSTRAINT `MihomeEnvSample_deviceId_fkey` FOREIGN KEY (`deviceId`) REFERENCES `MihomeDevice`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `MihomeEnvHour` ADD CONSTRAINT `MihomeEnvHour_deviceId_fkey` FOREIGN KEY (`deviceId`) REFERENCES `MihomeDevice`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
@@ -1,99 +0,0 @@
-- CreateTable
CREATE TABLE `Habit` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`userId` INTEGER NOT NULL,
`name` VARCHAR(191) NOT NULL,
`period` VARCHAR(191) NOT NULL DEFAULT 'day',
`target` INTEGER NOT NULL DEFAULT 1,
`color` VARCHAR(191) NOT NULL DEFAULT '#1677ff',
`icon` VARCHAR(191) NOT NULL DEFAULT '',
`note` VARCHAR(191) NOT NULL DEFAULT '',
`archived` BOOLEAN NOT NULL DEFAULT false,
`sortOrder` INTEGER NOT NULL DEFAULT 0,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
INDEX `Habit_userId_archived_sortOrder_idx`(`userId`, `archived`, `sortOrder`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `CheckIn` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`habitId` INTEGER NOT NULL,
`userId` INTEGER NOT NULL,
`date` VARCHAR(10) NOT NULL,
`seq` INTEGER NOT NULL DEFAULT 1,
`note` VARCHAR(191) NOT NULL DEFAULT '',
`source` VARCHAR(191) NOT NULL DEFAULT 'user',
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
UNIQUE INDEX `CheckIn_habitId_date_seq_key`(`habitId`, `date`, `seq`),
INDEX `CheckIn_userId_date_idx`(`userId`, `date`),
INDEX `CheckIn_habitId_date_idx`(`habitId`, `date`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `CheckList` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`userId` INTEGER NOT NULL,
`title` VARCHAR(191) NOT NULL,
`scene` VARCHAR(191) NOT NULL DEFAULT '',
`note` VARCHAR(191) NOT NULL DEFAULT '',
`archived` BOOLEAN NOT NULL DEFAULT false,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
INDEX `CheckList_userId_archived_idx`(`userId`, `archived`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `CheckListItem` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`listId` INTEGER NOT NULL,
`title` VARCHAR(191) NOT NULL,
`note` VARCHAR(191) NOT NULL DEFAULT '',
`done` BOOLEAN NOT NULL DEFAULT false,
`doneAt` DATETIME(3) NULL,
`sortOrder` INTEGER NOT NULL DEFAULT 0,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
INDEX `CheckListItem_listId_sortOrder_idx`(`listId`, `sortOrder`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `CheckListTemplate` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`userId` INTEGER NULL,
`name` VARCHAR(191) NOT NULL,
`scene` VARCHAR(191) NOT NULL DEFAULT '',
`items` JSON NOT NULL,
`builtin` BOOLEAN NOT NULL DEFAULT false,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
INDEX `CheckListTemplate_userId_builtin_idx`(`userId`, `builtin`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `Habit` ADD CONSTRAINT `Habit_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `CheckIn` ADD CONSTRAINT `CheckIn_habitId_fkey` FOREIGN KEY (`habitId`) REFERENCES `Habit`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `CheckIn` ADD CONSTRAINT `CheckIn_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `CheckList` ADD CONSTRAINT `CheckList_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `CheckListItem` ADD CONSTRAINT `CheckListItem_listId_fkey` FOREIGN KEY (`listId`) REFERENCES `CheckList`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `CheckListTemplate` ADD CONSTRAINT `CheckListTemplate_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
@@ -1,126 +0,0 @@
-- 任务模块 (V0.2): 项目 / 成员 / 看板列 / 任务 / 任务成员 / 标签
-- 设计口径见 docs/V0.2/任务模块/任务模块数据库设计文档.md
-- CreateTable
CREATE TABLE `Project` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`ownerId` INTEGER NOT NULL,
`isPersonal` BOOLEAN NOT NULL DEFAULT false,
`archived` BOOLEAN NOT NULL DEFAULT false,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
INDEX `Project_ownerId_idx`(`ownerId`),
INDEX `Project_archived_idx`(`archived`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `ProjectMember` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`projectId` INTEGER NOT NULL,
`userId` INTEGER NOT NULL,
`permission` VARCHAR(191) NOT NULL DEFAULT 'member',
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
UNIQUE INDEX `ProjectMember_projectId_userId_key`(`projectId`, `userId`),
INDEX `ProjectMember_userId_idx`(`userId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `BoardColumn` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`projectId` INTEGER NOT NULL,
`name` VARCHAR(20) NOT NULL,
`sortOrder` INTEGER NOT NULL DEFAULT 0,
`boundStatus` VARCHAR(8) NULL,
`retention` VARCHAR(8) NOT NULL DEFAULT 'forever',
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
UNIQUE INDEX `BoardColumn_projectId_name_key`(`projectId`, `name`),
INDEX `BoardColumn_projectId_sortOrder_idx`(`projectId`, `sortOrder`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `Task` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`projectId` INTEGER NOT NULL,
`columnId` INTEGER NOT NULL,
`parentId` INTEGER NULL,
`title` VARCHAR(200) NOT NULL,
`description` TEXT NOT NULL,
`status` VARCHAR(8) NOT NULL DEFAULT 'todo',
`doneAt` DATETIME(3) NULL,
`assigneeId` INTEGER NULL,
`creatorId` INTEGER NOT NULL,
`extras` JSON NOT NULL,
`sortOrder` INTEGER NOT NULL DEFAULT 0,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
INDEX `Task_projectId_columnId_idx`(`projectId`, `columnId`),
INDEX `Task_projectId_status_idx`(`projectId`, `status`),
INDEX `Task_parentId_idx`(`parentId`),
INDEX `Task_projectId_doneAt_idx`(`projectId`, `doneAt`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `TaskMember` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`taskId` INTEGER NOT NULL,
`userId` INTEGER NOT NULL,
UNIQUE INDEX `TaskMember_taskId_userId_key`(`taskId`, `userId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `TaskTag` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`taskId` INTEGER NOT NULL,
`name` VARCHAR(20) NOT NULL,
INDEX `TaskTag_taskId_idx`(`taskId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `Project` ADD CONSTRAINT `Project_ownerId_fkey` FOREIGN KEY (`ownerId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `ProjectMember` ADD CONSTRAINT `ProjectMember_projectId_fkey` FOREIGN KEY (`projectId`) REFERENCES `Project`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `ProjectMember` ADD CONSTRAINT `ProjectMember_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `BoardColumn` ADD CONSTRAINT `BoardColumn_projectId_fkey` FOREIGN KEY (`projectId`) REFERENCES `Project`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `Task` ADD CONSTRAINT `Task_projectId_fkey` FOREIGN KEY (`projectId`) REFERENCES `Project`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `Task` ADD CONSTRAINT `Task_columnId_fkey` FOREIGN KEY (`columnId`) REFERENCES `BoardColumn`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `Task` ADD CONSTRAINT `Task_parentId_fkey` FOREIGN KEY (`parentId`) REFERENCES `Task`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `Task` ADD CONSTRAINT `Task_assigneeId_fkey` FOREIGN KEY (`assigneeId`) REFERENCES `User`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `Task` ADD CONSTRAINT `Task_creatorId_fkey` FOREIGN KEY (`creatorId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `TaskMember` ADD CONSTRAINT `TaskMember_taskId_fkey` FOREIGN KEY (`taskId`) REFERENCES `Task`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `TaskMember` ADD CONSTRAINT `TaskMember_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `TaskTag` ADD CONSTRAINT `TaskTag_taskId_fkey` FOREIGN KEY (`taskId`) REFERENCES `Task`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
@@ -1,7 +0,0 @@
-- 项目信息块 (T-PJ-13): Project 增加 notes JSON, 存 [{ title, content }] 任意多个长文本块
-- 分三步保证存量行安全: 先可空加列 -> 回填 '[]' -> 收紧为 NOT NULL
ALTER TABLE `Project` ADD COLUMN `notes` JSON NULL;
UPDATE `Project` SET `notes` = '[]' WHERE `notes` IS NULL;
ALTER TABLE `Project` MODIFY `notes` JSON NOT NULL;
@@ -1,3 +0,0 @@
-- 任务类型标签: 项目级自定义列表 + 任务上的类型
ALTER TABLE `Project` ADD COLUMN `taskKinds` JSON NULL;
ALTER TABLE `Task` ADD COLUMN `kind` VARCHAR(20) NULL;
@@ -1,2 +0,0 @@
-- 任务时间标记: 完整日期存储, 前端展示 MM-dd
ALTER TABLE `Task` ADD COLUMN `markDate` DATETIME(3) NULL;
@@ -1,2 +0,0 @@
-- 项目图标: data URL (客户端裁剪 96x96 JPEG, 约 10-20KB)
ALTER TABLE `Project` ADD COLUMN `icon` TEXT NULL;
@@ -0,0 +1,655 @@
-- CreateSchema
CREATE SCHEMA IF NOT EXISTS "public";
-- CreateTable
CREATE TABLE "User" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,
"email" TEXT NOT NULL,
"password" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Article" (
"id" SERIAL NOT NULL,
"title" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"content" TEXT NOT NULL,
"date" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Article_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Strategy" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT NOT NULL,
"data" JSONB NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Strategy_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Indicator" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,
"groupName" TEXT NOT NULL,
"title" TEXT NOT NULL DEFAULT '',
"unit" TEXT NOT NULL DEFAULT '',
"source" TEXT NOT NULL DEFAULT '',
"frequency" TEXT NOT NULL DEFAULT 'month',
"hidden" BOOLEAN NOT NULL DEFAULT false,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Indicator_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "IndicatorPoint" (
"id" SERIAL NOT NULL,
"indicatorId" INTEGER NOT NULL,
"period" TEXT NOT NULL,
"value" DOUBLE PRECISION NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "IndicatorPoint_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "News" (
"id" SERIAL NOT NULL,
"title" TEXT NOT NULL,
"summary" TEXT NOT NULL DEFAULT '',
"content" TEXT,
"source" TEXT NOT NULL DEFAULT '',
"url" TEXT NOT NULL DEFAULT '',
"publishedAt" TIMESTAMP(3) NOT NULL,
"impactRank" INTEGER NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "News_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Alert" (
"id" SERIAL NOT NULL,
"indicatorName" TEXT NOT NULL,
"period" TEXT NOT NULL,
"valueA" DOUBLE PRECISION NOT NULL,
"valueB" DOUBLE PRECISION NOT NULL,
"sourceA" TEXT NOT NULL,
"sourceB" TEXT NOT NULL,
"diff" DOUBLE PRECISION NOT NULL,
"diffRatio" DOUBLE PRECISION NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "Alert_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ServerNode" (
"id" SERIAL NOT NULL,
"uuid" TEXT NOT NULL,
"name" TEXT NOT NULL,
"cpuName" TEXT NOT NULL DEFAULT '',
"os" TEXT NOT NULL DEFAULT '',
"region" TEXT NOT NULL DEFAULT '',
"memTotal" BIGINT NOT NULL DEFAULT 0,
"diskTotal" BIGINT NOT NULL DEFAULT 0,
"cpuCores" INTEGER NOT NULL DEFAULT 0,
"cpuUsage" DOUBLE PRECISION NOT NULL DEFAULT 0,
"ramUsed" BIGINT NOT NULL DEFAULT 0,
"swapUsed" BIGINT NOT NULL DEFAULT 0,
"load1" DOUBLE PRECISION NOT NULL DEFAULT 0,
"load5" DOUBLE PRECISION NOT NULL DEFAULT 0,
"load15" DOUBLE PRECISION NOT NULL DEFAULT 0,
"diskUsed" BIGINT NOT NULL DEFAULT 0,
"netIn" BIGINT NOT NULL DEFAULT 0,
"netOut" BIGINT NOT NULL DEFAULT 0,
"uptime" BIGINT NOT NULL DEFAULT 0,
"process" INTEGER NOT NULL DEFAULT 0,
"connections" INTEGER NOT NULL DEFAULT 0,
"status" TEXT NOT NULL DEFAULT 'unknown',
"recordedAt" TIMESTAMP(3) NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ServerNode_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ServerNodeHistory" (
"id" SERIAL NOT NULL,
"uuid" TEXT NOT NULL,
"period" TIMESTAMP(3) NOT NULL,
"cpu" DOUBLE PRECISION NOT NULL DEFAULT 0,
"ram" BIGINT NOT NULL DEFAULT 0,
"load" DOUBLE PRECISION NOT NULL DEFAULT 0,
"disk" BIGINT NOT NULL DEFAULT 0,
"netIn" BIGINT NOT NULL DEFAULT 0,
"netOut" BIGINT NOT NULL DEFAULT 0,
"process" INTEGER NOT NULL DEFAULT 0,
"connections" INTEGER NOT NULL DEFAULT 0,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "ServerNodeHistory_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ServiceCheck" (
"id" SERIAL NOT NULL,
"name" TEXT NOT NULL,
"url" TEXT NOT NULL,
"status" TEXT NOT NULL DEFAULT 'unknown',
"latencyMs" INTEGER NOT NULL DEFAULT 0,
"message" TEXT NOT NULL DEFAULT '',
"lastCheckAt" TIMESTAMP(3) NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ServiceCheck_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Econ_SowInventory" (
"id" SERIAL NOT NULL,
"month" TEXT NOT NULL,
"inventory" INTEGER NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Econ_SowInventory_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ScraperCache" (
"id" SERIAL NOT NULL,
"scraperName" TEXT NOT NULL,
"lastDataHash" TEXT,
"lastUpdateAt" TIMESTAMP(3) NOT NULL,
"metadata" JSONB,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ScraperCache_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "OilPriceHistory" (
"id" SERIAL NOT NULL,
"date" TIMESTAMP(3) NOT NULL,
"province" TEXT NOT NULL,
"fuel" TEXT NOT NULL,
"price" DOUBLE PRECISION NOT NULL,
"source" TEXT NOT NULL DEFAULT 'apizero',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "OilPriceHistory_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "MihomeAccount" (
"id" SERIAL NOT NULL,
"key" TEXT NOT NULL DEFAULT 'default',
"userId" TEXT NOT NULL DEFAULT '',
"status" TEXT NOT NULL DEFAULT 'unknown',
"lastError" TEXT NOT NULL DEFAULT '',
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "MihomeAccount_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "MihomeHome" (
"id" SERIAL NOT NULL,
"homeId" TEXT NOT NULL,
"name" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "MihomeHome_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "MihomeDevice" (
"id" SERIAL NOT NULL,
"did" TEXT NOT NULL,
"homeId" TEXT NOT NULL,
"model" TEXT NOT NULL,
"name" TEXT NOT NULL,
"alias" TEXT,
"tempSiid" INTEGER NOT NULL,
"tempPiid" INTEGER NOT NULL,
"humSiid" INTEGER NOT NULL,
"humPiid" INTEGER NOT NULL,
"battSiid" INTEGER NOT NULL,
"battPiid" INTEGER NOT NULL,
"battery" INTEGER,
"batteryAt" TIMESTAMP(3),
"enabled" BOOLEAN NOT NULL DEFAULT true,
"lastSyncAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "MihomeDevice_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "MihomeEnvSample" (
"id" SERIAL NOT NULL,
"deviceId" INTEGER NOT NULL,
"date" TIMESTAMP(3) NOT NULL,
"temperature" DOUBLE PRECISION,
"humidity" DOUBLE PRECISION,
"temperatureAvg" DOUBLE PRECISION,
"humidityAvg" DOUBLE PRECISION,
"temperatureMin" DOUBLE PRECISION,
"temperatureMax" DOUBLE PRECISION,
"humidityMin" DOUBLE PRECISION,
"humidityMax" DOUBLE PRECISION,
"origin" TEXT NOT NULL DEFAULT 'live',
"sampledAt" TIMESTAMP(3),
"raw" JSONB,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "MihomeEnvSample_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "MihomeEnvHour" (
"id" SERIAL NOT NULL,
"deviceId" INTEGER NOT NULL,
"hour" TIMESTAMP(3) NOT NULL,
"temperatureAvg" DOUBLE PRECISION,
"humidityAvg" DOUBLE PRECISION,
"raw" JSONB,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "MihomeEnvHour_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Habit" (
"id" SERIAL NOT NULL,
"userId" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"period" TEXT NOT NULL DEFAULT 'day',
"target" INTEGER NOT NULL DEFAULT 1,
"color" TEXT NOT NULL DEFAULT '#1677ff',
"icon" TEXT NOT NULL DEFAULT '',
"note" TEXT NOT NULL DEFAULT '',
"archived" BOOLEAN NOT NULL DEFAULT false,
"sortOrder" INTEGER NOT NULL DEFAULT 0,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Habit_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "CheckIn" (
"id" SERIAL NOT NULL,
"habitId" INTEGER NOT NULL,
"userId" INTEGER NOT NULL,
"date" VARCHAR(10) NOT NULL,
"seq" INTEGER NOT NULL DEFAULT 1,
"note" TEXT NOT NULL DEFAULT '',
"source" TEXT NOT NULL DEFAULT 'user',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "CheckIn_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "CheckList" (
"id" SERIAL NOT NULL,
"userId" INTEGER NOT NULL,
"title" TEXT NOT NULL,
"scene" TEXT NOT NULL DEFAULT '',
"note" TEXT NOT NULL DEFAULT '',
"archived" BOOLEAN NOT NULL DEFAULT false,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "CheckList_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "CheckListItem" (
"id" SERIAL NOT NULL,
"listId" INTEGER NOT NULL,
"title" TEXT NOT NULL,
"note" TEXT NOT NULL DEFAULT '',
"done" BOOLEAN NOT NULL DEFAULT false,
"doneAt" TIMESTAMP(3),
"sortOrder" INTEGER NOT NULL DEFAULT 0,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "CheckListItem_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "CheckListTemplate" (
"id" SERIAL NOT NULL,
"userId" INTEGER,
"name" TEXT NOT NULL,
"scene" TEXT NOT NULL DEFAULT '',
"items" JSONB NOT NULL,
"builtin" BOOLEAN NOT NULL DEFAULT false,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "CheckListTemplate_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Project" (
"id" SERIAL NOT NULL,
"uuid" VARCHAR(36) NOT NULL,
"code" VARCHAR(8) NOT NULL,
"name" VARCHAR(50) NOT NULL,
"ownerId" INTEGER NOT NULL,
"isPersonal" BOOLEAN NOT NULL DEFAULT false,
"archived" BOOLEAN NOT NULL DEFAULT false,
"notes" JSONB NOT NULL DEFAULT '[]',
"taskKinds" JSONB,
"icon" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "Project_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ProjectMember" (
"id" SERIAL NOT NULL,
"uuid" VARCHAR(36) NOT NULL,
"projectId" INTEGER NOT NULL,
"userId" INTEGER NOT NULL,
"permission" TEXT NOT NULL DEFAULT 'member',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "ProjectMember_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "BoardColumn" (
"id" SERIAL NOT NULL,
"uuid" VARCHAR(36) NOT NULL,
"projectId" INTEGER NOT NULL,
"name" VARCHAR(20) NOT NULL,
"sortOrder" INTEGER NOT NULL DEFAULT 0,
"boundStatus" VARCHAR(8),
"retention" VARCHAR(8) NOT NULL DEFAULT 'forever',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "BoardColumn_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Task" (
"id" SERIAL NOT NULL,
"uuid" VARCHAR(36) NOT NULL,
"projectId" INTEGER NOT NULL,
"columnId" INTEGER NOT NULL,
"parentId" INTEGER,
"title" VARCHAR(200) NOT NULL,
"description" TEXT NOT NULL DEFAULT '',
"kind" VARCHAR(20),
"markDate" TIMESTAMP(3),
"status" VARCHAR(8) NOT NULL DEFAULT 'todo',
"doneAt" TIMESTAMP(3),
"assigneeId" INTEGER,
"creatorId" INTEGER NOT NULL,
"extras" JSONB NOT NULL DEFAULT '[]',
"sortOrder" INTEGER NOT NULL DEFAULT 0,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"number" INTEGER,
CONSTRAINT "Task_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "TaskMember" (
"id" SERIAL NOT NULL,
"uuid" VARCHAR(36) NOT NULL,
"taskId" INTEGER NOT NULL,
"userId" INTEGER NOT NULL,
CONSTRAINT "TaskMember_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "TaskTag" (
"id" SERIAL NOT NULL,
"uuid" VARCHAR(36) NOT NULL,
"taskId" INTEGER NOT NULL,
"name" VARCHAR(20) NOT NULL,
CONSTRAINT "TaskTag_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
-- CreateIndex
CREATE UNIQUE INDEX "Article_slug_key" ON "Article"("slug");
-- CreateIndex
CREATE UNIQUE INDEX "Indicator_name_key" ON "Indicator"("name");
-- CreateIndex
CREATE UNIQUE INDEX "IndicatorPoint_indicatorId_period_key" ON "IndicatorPoint"("indicatorId", "period");
-- CreateIndex
CREATE INDEX "News_publishedAt_idx" ON "News"("publishedAt");
-- CreateIndex
CREATE UNIQUE INDEX "News_title_publishedAt_key" ON "News"("title", "publishedAt");
-- CreateIndex
CREATE INDEX "Alert_createdAt_idx" ON "Alert"("createdAt");
-- CreateIndex
CREATE UNIQUE INDEX "ServerNode_uuid_key" ON "ServerNode"("uuid");
-- CreateIndex
CREATE INDEX "ServerNodeHistory_uuid_period_idx" ON "ServerNodeHistory"("uuid", "period");
-- CreateIndex
CREATE UNIQUE INDEX "ServerNodeHistory_uuid_period_key" ON "ServerNodeHistory"("uuid", "period");
-- CreateIndex
CREATE UNIQUE INDEX "ServiceCheck_name_key" ON "ServiceCheck"("name");
-- CreateIndex
CREATE UNIQUE INDEX "Econ_SowInventory_month_key" ON "Econ_SowInventory"("month");
-- CreateIndex
CREATE UNIQUE INDEX "ScraperCache_scraperName_key" ON "ScraperCache"("scraperName");
-- CreateIndex
CREATE INDEX "OilPriceHistory_province_fuel_date_idx" ON "OilPriceHistory"("province", "fuel", "date");
-- CreateIndex
CREATE UNIQUE INDEX "OilPriceHistory_date_province_fuel_key" ON "OilPriceHistory"("date", "province", "fuel");
-- CreateIndex
CREATE UNIQUE INDEX "MihomeAccount_key_key" ON "MihomeAccount"("key");
-- CreateIndex
CREATE UNIQUE INDEX "MihomeHome_homeId_key" ON "MihomeHome"("homeId");
-- CreateIndex
CREATE UNIQUE INDEX "MihomeDevice_did_key" ON "MihomeDevice"("did");
-- CreateIndex
CREATE INDEX "MihomeEnvSample_deviceId_date_idx" ON "MihomeEnvSample"("deviceId", "date");
-- CreateIndex
CREATE UNIQUE INDEX "MihomeEnvSample_deviceId_date_key" ON "MihomeEnvSample"("deviceId", "date");
-- CreateIndex
CREATE INDEX "MihomeEnvHour_deviceId_hour_idx" ON "MihomeEnvHour"("deviceId", "hour");
-- CreateIndex
CREATE UNIQUE INDEX "MihomeEnvHour_deviceId_hour_key" ON "MihomeEnvHour"("deviceId", "hour");
-- CreateIndex
CREATE INDEX "Habit_userId_archived_sortOrder_idx" ON "Habit"("userId", "archived", "sortOrder");
-- CreateIndex
CREATE INDEX "CheckIn_userId_date_idx" ON "CheckIn"("userId", "date");
-- CreateIndex
CREATE INDEX "CheckIn_habitId_date_idx" ON "CheckIn"("habitId", "date");
-- CreateIndex
CREATE UNIQUE INDEX "CheckIn_habitId_date_seq_key" ON "CheckIn"("habitId", "date", "seq");
-- CreateIndex
CREATE INDEX "CheckList_userId_archived_idx" ON "CheckList"("userId", "archived");
-- CreateIndex
CREATE INDEX "CheckListItem_listId_sortOrder_idx" ON "CheckListItem"("listId", "sortOrder");
-- CreateIndex
CREATE INDEX "CheckListTemplate_userId_builtin_idx" ON "CheckListTemplate"("userId", "builtin");
-- CreateIndex
CREATE UNIQUE INDEX "Project_uuid_key" ON "Project"("uuid");
-- CreateIndex
CREATE UNIQUE INDEX "Project_code_key" ON "Project"("code");
-- CreateIndex
CREATE INDEX "Project_ownerId_idx" ON "Project"("ownerId");
-- CreateIndex
CREATE INDEX "Project_archived_idx" ON "Project"("archived");
-- CreateIndex
CREATE UNIQUE INDEX "ProjectMember_uuid_key" ON "ProjectMember"("uuid");
-- CreateIndex
CREATE INDEX "ProjectMember_userId_idx" ON "ProjectMember"("userId");
-- CreateIndex
CREATE UNIQUE INDEX "ProjectMember_projectId_userId_key" ON "ProjectMember"("projectId", "userId");
-- CreateIndex
CREATE UNIQUE INDEX "BoardColumn_uuid_key" ON "BoardColumn"("uuid");
-- CreateIndex
CREATE INDEX "BoardColumn_projectId_sortOrder_idx" ON "BoardColumn"("projectId", "sortOrder");
-- CreateIndex
CREATE UNIQUE INDEX "BoardColumn_projectId_name_key" ON "BoardColumn"("projectId", "name");
-- CreateIndex
CREATE UNIQUE INDEX "Task_uuid_key" ON "Task"("uuid");
-- CreateIndex
CREATE INDEX "Task_projectId_columnId_idx" ON "Task"("projectId", "columnId");
-- CreateIndex
CREATE INDEX "Task_projectId_status_idx" ON "Task"("projectId", "status");
-- CreateIndex
CREATE INDEX "Task_parentId_idx" ON "Task"("parentId");
-- CreateIndex
CREATE INDEX "Task_projectId_doneAt_idx" ON "Task"("projectId", "doneAt");
-- CreateIndex
CREATE UNIQUE INDEX "Task_projectId_number_key" ON "Task"("projectId", "number");
-- CreateIndex
CREATE UNIQUE INDEX "TaskMember_uuid_key" ON "TaskMember"("uuid");
-- CreateIndex
CREATE UNIQUE INDEX "TaskMember_taskId_userId_key" ON "TaskMember"("taskId", "userId");
-- CreateIndex
CREATE UNIQUE INDEX "TaskTag_uuid_key" ON "TaskTag"("uuid");
-- CreateIndex
CREATE INDEX "TaskTag_taskId_idx" ON "TaskTag"("taskId");
-- AddForeignKey
ALTER TABLE "IndicatorPoint" ADD CONSTRAINT "IndicatorPoint_indicatorId_fkey" FOREIGN KEY ("indicatorId") REFERENCES "Indicator"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "MihomeDevice" ADD CONSTRAINT "MihomeDevice_homeId_fkey" FOREIGN KEY ("homeId") REFERENCES "MihomeHome"("homeId") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "MihomeEnvSample" ADD CONSTRAINT "MihomeEnvSample_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "MihomeDevice"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "MihomeEnvHour" ADD CONSTRAINT "MihomeEnvHour_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "MihomeDevice"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Habit" ADD CONSTRAINT "Habit_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "CheckIn" ADD CONSTRAINT "CheckIn_habitId_fkey" FOREIGN KEY ("habitId") REFERENCES "Habit"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "CheckIn" ADD CONSTRAINT "CheckIn_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "CheckList" ADD CONSTRAINT "CheckList_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "CheckListItem" ADD CONSTRAINT "CheckListItem_listId_fkey" FOREIGN KEY ("listId") REFERENCES "CheckList"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "CheckListTemplate" ADD CONSTRAINT "CheckListTemplate_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Project" ADD CONSTRAINT "Project_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ProjectMember" ADD CONSTRAINT "ProjectMember_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ProjectMember" ADD CONSTRAINT "ProjectMember_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "BoardColumn" ADD CONSTRAINT "BoardColumn_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Task" ADD CONSTRAINT "Task_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Task" ADD CONSTRAINT "Task_columnId_fkey" FOREIGN KEY ("columnId") REFERENCES "BoardColumn"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Task" ADD CONSTRAINT "Task_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "Task"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Task" ADD CONSTRAINT "Task_assigneeId_fkey" FOREIGN KEY ("assigneeId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Task" ADD CONSTRAINT "Task_creatorId_fkey" FOREIGN KEY ("creatorId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "TaskMember" ADD CONSTRAINT "TaskMember_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "Task"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "TaskMember" ADD CONSTRAINT "TaskMember_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "TaskTag" ADD CONSTRAINT "TaskTag_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "Task"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,96 @@
-- uuid 外键镜像 (PowerSync Sequential ID Mapping, 见 docs/V0.2/离线编辑模块/0.2.1实施方案.md §3)
-- 目的: 同步流以 uuid 作为客户端主键 (离线新建行同步回填后本地 id 稳定不变),
-- 外键列同步输出 uuid 镜像 (别名回 projectId/columnId/parentId/taskId), 客户端零改动。
-- 镜像列由触发器维护: REST/Prisma 写 int 外键 -> 触发器回填 uuid; upload 端在应用层解析 uuid -> int。
-- 1) 加列 (先可空)
ALTER TABLE "BoardColumn" ADD COLUMN "projectUuid" VARCHAR(36);
ALTER TABLE "Task" ADD COLUMN "projectUuid" VARCHAR(36), ADD COLUMN "columnUuid" VARCHAR(36), ADD COLUMN "parentUuid" VARCHAR(36);
ALTER TABLE "ProjectMember" ADD COLUMN "projectUuid" VARCHAR(36);
ALTER TABLE "TaskMember" ADD COLUMN "taskUuid" VARCHAR(36);
ALTER TABLE "TaskTag" ADD COLUMN "taskUuid" VARCHAR(36);
-- 2) 存量回填
UPDATE "BoardColumn" c SET "projectUuid" = p."uuid" FROM "Project" p WHERE c."projectId" = p."id";
UPDATE "Task" t SET "projectUuid" = p."uuid" FROM "Project" p WHERE t."projectId" = p."id";
UPDATE "Task" t SET "columnUuid" = c."uuid" FROM "BoardColumn" c WHERE t."columnId" = c."id";
UPDATE "Task" t SET "parentUuid" = pt."uuid" FROM "Task" pt WHERE t."parentId" = pt."id";
UPDATE "ProjectMember" pm SET "projectUuid" = p."uuid" FROM "Project" p WHERE pm."projectId" = p."id";
UPDATE "TaskMember" tm SET "taskUuid" = t."uuid" FROM "Task" t WHERE tm."taskId" = t."id";
UPDATE "TaskTag" tt SET "taskUuid" = t."uuid" FROM "Task" t WHERE tt."taskId" = t."id";
-- 3) 非空约束
ALTER TABLE "BoardColumn" ALTER COLUMN "projectUuid" SET NOT NULL;
ALTER TABLE "Task" ALTER COLUMN "projectUuid" SET NOT NULL;
ALTER TABLE "Task" ALTER COLUMN "columnUuid" SET NOT NULL;
ALTER TABLE "ProjectMember" ALTER COLUMN "projectUuid" SET NOT NULL;
ALTER TABLE "TaskMember" ALTER COLUMN "taskUuid" SET NOT NULL;
ALTER TABLE "TaskTag" ALTER COLUMN "taskUuid" SET NOT NULL;
-- 4) 外键 (级联与 int 外键一致)
ALTER TABLE "BoardColumn" ADD CONSTRAINT "BoardColumn_projectUuid_fkey" FOREIGN KEY ("projectUuid") REFERENCES "Project"("uuid") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "Task" ADD CONSTRAINT "Task_projectUuid_fkey" FOREIGN KEY ("projectUuid") REFERENCES "Project"("uuid") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "Task" ADD CONSTRAINT "Task_columnUuid_fkey" FOREIGN KEY ("columnUuid") REFERENCES "BoardColumn"("uuid") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "Task" ADD CONSTRAINT "Task_parentUuid_fkey" FOREIGN KEY ("parentUuid") REFERENCES "Task"("uuid") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "ProjectMember" ADD CONSTRAINT "ProjectMember_projectUuid_fkey" FOREIGN KEY ("projectUuid") REFERENCES "Project"("uuid") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "TaskMember" ADD CONSTRAINT "TaskMember_taskUuid_fkey" FOREIGN KEY ("taskUuid") REFERENCES "Task"("uuid") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "TaskTag" ADD CONSTRAINT "TaskTag_taskUuid_fkey" FOREIGN KEY ("taskUuid") REFERENCES "Task"("uuid") ON DELETE CASCADE ON UPDATE CASCADE;
-- 5) 触发器: 写入时按 int 外键回填 uuid 镜像
CREATE OR REPLACE FUNCTION "func_projectmember_uuid_map"() RETURNS TRIGGER AS $$
BEGIN
SELECT "uuid" INTO NEW."projectUuid" FROM "Project" WHERE "id" = NEW."projectId";
IF NOT FOUND THEN RAISE EXCEPTION 'Project % 不存在', NEW."projectId"; END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER "trg_projectmember_uuid_map" BEFORE INSERT OR UPDATE ON "ProjectMember"
FOR EACH ROW EXECUTE FUNCTION "func_projectmember_uuid_map"();
CREATE OR REPLACE FUNCTION "func_boardcolumn_uuid_map"() RETURNS TRIGGER AS $$
BEGIN
SELECT "uuid" INTO NEW."projectUuid" FROM "Project" WHERE "id" = NEW."projectId";
IF NOT FOUND THEN RAISE EXCEPTION 'Project % 不存在', NEW."projectId"; END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER "trg_boardcolumn_uuid_map" BEFORE INSERT OR UPDATE ON "BoardColumn"
FOR EACH ROW EXECUTE FUNCTION "func_boardcolumn_uuid_map"();
CREATE OR REPLACE FUNCTION "func_task_uuid_map"() RETURNS TRIGGER AS $$
BEGIN
SELECT "uuid" INTO NEW."projectUuid" FROM "Project" WHERE "id" = NEW."projectId";
IF NOT FOUND THEN RAISE EXCEPTION 'Project % 不存在', NEW."projectId"; END IF;
SELECT "uuid" INTO NEW."columnUuid" FROM "BoardColumn" WHERE "id" = NEW."columnId";
IF NOT FOUND THEN RAISE EXCEPTION 'BoardColumn % 不存在', NEW."columnId"; END IF;
IF NEW."parentId" IS NULL THEN
NEW."parentUuid" := NULL;
ELSE
SELECT "uuid" INTO NEW."parentUuid" FROM "Task" WHERE "id" = NEW."parentId";
IF NOT FOUND THEN RAISE EXCEPTION 'Task % 不存在', NEW."parentId"; END IF;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER "trg_task_uuid_map" BEFORE INSERT OR UPDATE ON "Task"
FOR EACH ROW EXECUTE FUNCTION "func_task_uuid_map"();
CREATE OR REPLACE FUNCTION "func_taskmember_uuid_map"() RETURNS TRIGGER AS $$
BEGIN
SELECT "uuid" INTO NEW."taskUuid" FROM "Task" WHERE "id" = NEW."taskId";
IF NOT FOUND THEN RAISE EXCEPTION 'Task % 不存在', NEW."taskId"; END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER "trg_taskmember_uuid_map" BEFORE INSERT OR UPDATE ON "TaskMember"
FOR EACH ROW EXECUTE FUNCTION "func_taskmember_uuid_map"();
CREATE OR REPLACE FUNCTION "func_tasktag_uuid_map"() RETURNS TRIGGER AS $$
BEGIN
SELECT "uuid" INTO NEW."taskUuid" FROM "Task" WHERE "id" = NEW."taskId";
IF NOT FOUND THEN RAISE EXCEPTION 'Task % 不存在', NEW."taskId"; END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER "trg_tasktag_uuid_map" BEFORE INSERT OR UPDATE ON "TaskTag"
FOR EACH ROW EXECUTE FUNCTION "func_tasktag_uuid_map"();
+1 -1
View File
@@ -1,3 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (e.g., Git)
provider = "mysql"
provider = "postgresql"
+18 -1
View File
@@ -9,7 +9,7 @@ generator client {
}
datasource db {
provider = "mysql"
provider = "postgresql"
}
model User {
@@ -388,6 +388,8 @@ model CheckListTemplate {
model Project {
id Int @id @default(autoincrement())
uuid String @unique @db.VarChar(36) // 同步标识: 客户端生成 (0.2.1 离线编辑, 见 docs/V0.2/离线编辑模块)
code String @unique @db.VarChar(8) // 项目短编号: 用户自拟 2~8 位前缀, 全局唯一, 服务端分配
name String @db.VarChar(50)
ownerId Int
owner User @relation("ProjectOwner", fields: [ownerId], references: [id], onDelete: Cascade)
@@ -410,6 +412,8 @@ model Project {
model ProjectMember {
id Int @id @default(autoincrement())
uuid String @unique @db.VarChar(36) // 同步标识: 客户端生成 (0.2.1 离线编辑)
projectUuid String? @db.VarChar(36) // 外键 uuid 镜像 (触发器维护, 库级 NOT NULL)
projectId Int
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
userId Int
@@ -423,6 +427,8 @@ model ProjectMember {
model BoardColumn {
id Int @id @default(autoincrement())
uuid String @unique @db.VarChar(36) // 同步标识: 客户端生成 (0.2.1 离线编辑)
projectUuid String? @db.VarChar(36) // projectId 的 uuid 镜像 (触发器维护, 库级 NOT NULL; Prisma 侧可空以便触发器填充)
projectId Int
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
name String @db.VarChar(20)
@@ -440,6 +446,10 @@ model BoardColumn {
model Task {
id Int @id @default(autoincrement())
uuid String @unique @db.VarChar(36) // 同步标识: 客户端生成 (0.2.1 离线编辑)
projectUuid String? @db.VarChar(36) // 外键 uuid 镜像 (触发器维护, 库级 NOT NULL)
columnUuid String? @db.VarChar(36)
parentUuid String? @db.VarChar(36)
projectId Int
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
columnId Int
@@ -471,6 +481,9 @@ model Task {
members TaskMember[]
tags TaskTag[]
number Int? // 项目内自增编号 (服务端分配, 展示为 `code-number`); 本地未定号的离线新建任务为空
@@unique([projectId, number])
@@index([projectId, columnId])
@@index([projectId, status])
@@index([parentId])
@@ -481,6 +494,8 @@ model Task {
model TaskMember {
id Int @id @default(autoincrement())
uuid String @unique @db.VarChar(36) // 同步标识: 客户端生成 (0.2.1 离线编辑)
taskUuid String? @db.VarChar(36) // 外键 uuid 镜像 (触发器维护, 库级 NOT NULL)
taskId Int
task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
userId Int
@@ -491,6 +506,8 @@ model TaskMember {
model TaskTag {
id Int @id @default(autoincrement())
uuid String @unique @db.VarChar(36) // 同步标识: 客户端生成 (0.2.1 离线编辑)
taskUuid String? @db.VarChar(36) // 外键 uuid 镜像 (触发器维护, 库级 NOT NULL)
taskId Int
task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
name String @db.VarChar(20)
+201
View File
@@ -0,0 +1,201 @@
// 一次性数据迁移: 现网 MariaDB 只读快照 -> 0.2.1 PostgreSQL
// 运行 (在 app 容器内, 具备 mariadb 驱动与 PG 客户端):
// SRC_DATABASE_URL=mysql://... node scripts/etl-mariadb-to-pg.mjs
// 约束: 源库仅 SELECT; 目标库须为空 (Project 计数为 0), 除非 ETL_FORCE=1
// 迁移内容见 docs/V0.2/离线编辑模块/0.2.1实施方案.md §6:
// - 任务域 6 表回填 uuid; Project 回填短编号 code; Task 按项目内 (createdAt,id) 顺序回填 number
// - 时序大表 (ServerNodeHistory/MihomeEnv*) 仅取最近 N 条
// - 显式 id 插入后逐表 setval 校准序列
import 'dotenv/config'
import crypto from 'node:crypto'
import mariadb from 'mariadb'
import { PrismaPg } from '@prisma/adapter-pg'
import { PrismaClient } from '../generated/prisma/client.ts'
// 顺序: 先父后子
const TABLES = [
['User', 'user'],
['Project', 'project'],
['ProjectMember', 'projectMember'],
['BoardColumn', 'boardColumn'],
['Habit', 'habit'],
['CheckList', 'checkList'],
['CheckListTemplate', 'checkListTemplate'],
['CheckListItem', 'checkListItem'],
['CheckIn', 'checkIn'],
['Task', 'task'],
['TaskMember', 'taskMember'],
['TaskTag', 'taskTag'],
['Article', 'article'],
['Strategy', 'strategy'],
['Indicator', 'indicator'],
['IndicatorPoint', 'indicatorPoint'],
['News', 'news'],
['Alert', 'alert'],
['ServerNode', 'serverNode'],
['ServerNodeHistory', 'serverNodeHistory'],
['ServiceCheck', 'serviceCheck'],
['Econ_SowInventory', 'econ_SowInventory'],
['ScraperCache', 'scraperCache'],
['OilPriceHistory', 'oilPriceHistory'],
['MihomeAccount', 'mihomeAccount'],
['MihomeHome', 'mihomeHome'],
['MihomeDevice', 'mihomeDevice'],
['MihomeEnvSample', 'mihomeEnvSample'],
['MihomeEnvHour', 'mihomeEnvHour'],
]
const ROW_CAP = { ServerNodeHistory: 20000, MihomeEnvSample: 20000, MihomeEnvHour: 20000 }
const UUID_TABLES = new Set(['Project', 'ProjectMember', 'BoardColumn', 'Task', 'TaskMember', 'TaskTag'])
function parseUrl(url) {
const u = new URL(url)
return {
host: u.hostname,
port: Number(u.port) || 3306,
user: decodeURIComponent(u.username),
password: decodeURIComponent(u.password),
database: u.pathname.replace(/^\//, ''),
}
}
function parseJson(v) {
if (v === null || v === undefined || typeof v !== 'string') return v
try { return JSON.parse(v) } catch { return v }
}
function toBigInt(v) {
if (v === null || v === undefined || typeof v === 'bigint') return v
return BigInt(v)
}
// MariaDB TINYINT(1) 返回 0/1, Prisma Boolean 需要 true/false
function toBoolean(v) {
if (v === null || v === undefined) return v
return !!v
}
function randCode(len) {
return crypto.randomBytes(len * 2).toString('hex').toUpperCase().replace(/[^A-Z0-9]/g, '').padEnd(len, 'X').slice(0, len)
}
async function main() {
const src = process.env.SRC_DATABASE_URL
if (!src) throw new Error('SRC_DATABASE_URL 未配置')
const cfg = parseUrl(src)
const conn = await mariadb.createConnection({
host: cfg.host, port: cfg.port, user: cfg.user, password: cfg.password, database: cfg.database, connectTimeout: 8000,
})
console.log('[etl] 源库已连接 (只读):', `${cfg.host}:${cfg.port}/${cfg.database}`)
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })
const existing = await prisma.project.count()
if (existing > 0 && process.env.ETL_FORCE !== '1') {
console.log(`[etl] 目标库已有 ${existing} 个项目, 跳过 (ETL_FORCE=1 可强制)`)
await conn.end()
return
}
// 目标 PG 列清单 (类型感知转换 + 源库多余列丢弃): 现网库可能比本分支 schema 新
const targetColumns = new Map()
for (const [table] of TABLES) {
const cols = await prisma.$queryRawUnsafe(
`SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = $1`,
table,
)
targetColumns.set(table, new Map(cols.map((c) => [c.column_name, c.data_type])))
}
function adaptRow(table, r) {
const cols = targetColumns.get(table)
const out = {}
for (const [name, dataType] of cols) {
let v = r[name]
if (v === undefined) v = null
if (dataType === 'boolean') v = toBoolean(v)
else if (dataType === 'bigint') v = toBigInt(v)
else if (dataType === 'json' || dataType === 'jsonb') v = parseJson(v)
out[name] = v
}
return out
}
// Project.code 回填: 优先按名称推导字母, 冲突加随机尾缀
const projectRows = await conn.query('SELECT * FROM `Project`')
const usedCodes = new Set()
for (const p of projectRows) {
const letters = String(p.name || '').toUpperCase().replace(/[^A-Z0-9]/g, '')
let cand = ''
for (let i = 0; i < 30 && !cand; i++) {
const base = i === 0
? (letters.length >= 2 ? letters.slice(0, 8) : ('P' + String(p.id) + randCode(4)).slice(0, 8))
: (letters.slice(0, 5) + randCode(3)).slice(0, 8)
if (base.length >= 2 && !usedCodes.has(base)) cand = base
}
if (!cand) cand = randCode(6)
usedCodes.add(cand)
p.code = cand
}
// Task.number 回填: 项目内按 (createdAt, id) 顺序 1..n
const taskRows = (await conn.query('SELECT * FROM `Task`')).sort((a, b) => {
if (a.projectId !== b.projectId) return a.projectId - b.projectId
const ta = a.createdAt ? new Date(a.createdAt).getTime() : 0
const tb = b.createdAt ? new Date(b.createdAt).getTime() : 0
if (ta !== tb) return ta - tb
return a.id - b.id
})
const taskNumber = new Map()
for (const r of taskRows) {
const key = String(r.projectId)
const next = (taskNumber.get(key) || 0) + 1
taskNumber.set(key, next)
r.number = next
}
const counts = {}
for (const [table, model] of TABLES) {
let rows
if (table === 'Project') rows = projectRows
else if (table === 'Task') rows = taskRows
else {
const cap = ROW_CAP[table]
rows = await conn.query(cap ? `SELECT * FROM \`${table}\` ORDER BY id DESC LIMIT ${cap}` : `SELECT * FROM \`${table}\``)
}
if (rows.length) {
const adapted = rows.map((r) => {
if (UUID_TABLES.has(table)) r.uuid = crypto.randomUUID()
return adaptRow(table, r)
})
const chunk = 500
for (let i = 0; i < adapted.length; i += chunk) {
await prisma[model].createMany({ data: adapted.slice(i, i + chunk) })
}
}
counts[table] = rows.length
console.log(`[etl] ${table}: ${rows.length}`)
}
// 序列校准: 显式插入 id 后必须 setval, 否则新插入主键冲突
for (const [table] of TABLES) {
await prisma.$executeRawUnsafe(
`SELECT setval(pg_get_serial_sequence('"${table}"', 'id'), COALESCE((SELECT MAX(id) FROM "${table}"), 0) + 1, false)`,
)
}
await conn.end()
const summary = {
users: await prisma.user.count(),
projects: await prisma.project.count(),
tasks: await prisma.task.count(),
checkIns: await prisma.checkIn.count(),
news: await prisma.news.count(),
}
console.log('[etl] 完成:', JSON.stringify(summary))
}
main().catch((e) => { console.error('[etl] 失败:', e); process.exit(1) })
+218
View File
@@ -0,0 +1,218 @@
// 0.2.1 闭环验证脚本 (Node 客户端): 同步下行 -> 本地离线写入 -> 上行 -> 服务端编号 -> 同步回填
// 用法: node scripts/verify-powersync-client.mjs [BASE_URL] [EMAIL] [PASSWORD]
// BASE_URL 默认 http://bh.vps.honor3.com:13001
// 依赖 (dev-only, 不进服务端镜像; 运行前补装): npm install --no-save @powersync/node better-sqlite3
// 流程:
// 1. REST 登录 -> /api/powersync/token
// 2. Node SDK 连接 PowerSync, 等待首次同步, 校验 ETL 数据 (项目/任务/编号)
// 3. 本地新建一条验证任务 (number 为空, 模拟离线写入)
// 4. 等待 upload 完成并同步回填 -> 本地行应获得服务端分配的 number
// 5. 清理: 本地删除该任务 (上行级联删除), 恢复数据原状
import 'dotenv/config'
import crypto from 'node:crypto'
import os from 'node:os'
import path from 'node:path'
import fs from 'node:fs'
import { column, Schema, Table, PowerSyncDatabase, createConsoleLogger, LogLevels } from '@powersync/node'
const BASE = (process.argv[2] || 'http://bh.vps.honor3.com:13001').replace(/\/+$/, '')
const EMAIL = process.argv[3] || 'admin@iboard.local'
const PASSWORD = process.argv[4] || 'admin123'
const uuid = () => crypto.randomUUID()
const sleep = (ms) => new Promise((r) => setTimeout(r, ms))
// 与 src/lib/powersync/schema.js 同构的最小 schema (验证只用到 Project/Task/TaskTag)
const AppSchema = new Schema({
Project: new Table({
uuid: column.text, code: column.text, name: column.text, ownerId: column.text,
isPersonal: column.integer, archived: column.integer, notes: column.text,
taskKinds: column.text, icon: column.text, createdAt: column.text, updatedAt: column.text,
}),
Task: new Table({
uuid: column.text, projectId: column.text, columnId: column.text, parentId: column.text,
title: column.text, description: column.text, kind: column.text, markDate: column.text,
status: column.text, doneAt: column.text, assigneeId: column.text, creatorId: column.text,
extras: column.text, sortOrder: column.integer, number: column.integer,
createdAt: column.text, updatedAt: column.text,
}),
TaskTag: new Table({ uuid: column.text, taskId: column.text, name: column.text }),
TaskMember: new Table({ uuid: column.text, taskId: column.text, userId: column.text }),
ProjectMember: new Table({ uuid: column.text, projectId: column.text, userId: column.text, permission: column.text, createdAt: column.text }),
BoardColumn: new Table({
uuid: column.text, projectId: column.text, name: column.text, sortOrder: column.integer,
boundStatus: column.text, retention: column.text, createdAt: column.text, updatedAt: column.text,
}),
User: new Table({ name: column.text, email: column.text }),
})
async function api(path, { method = 'GET', token, body } = {}) {
const res = await fetch(BASE + '/api' + path, {
method,
headers: { 'Content-Type': 'application/json', ...(token ? { Authorization: 'Bearer ' + token } : {}) },
body: body ? JSON.stringify(body) : undefined,
})
const data = await res.json().catch(() => ({}))
if (!res.ok) throw new Error(`${path} -> ${res.status}: ${data.error || '请求失败'}`)
return data
}
class Connector {
constructor(appToken, endpoint) {
// appToken: 应用 JWT (调业务 API 上行用); endpoint + sync JWT 由 fetchCredentials 提供
this.appToken = appToken
this.endpoint = endpoint
}
async fetchCredentials() {
const cred = await api('/powersync/token', { method: 'POST', token: this.appToken })
return { endpoint: cred.endpoint, token: cred.token }
}
async uploadData(database) {
const batch = await database.getCrudBatch()
if (!batch) return
const ops = []
for (let i = 0; i < batch.crud.length; i++) {
const op = batch.crud[i]
let data = op.opData || {}
if (op.op !== 'DELETE') {
const row = await database.getOptional(`SELECT * FROM "${op.table}" WHERE id = ?`, [op.id])
if (row) data = row
}
ops.push({ id: String(i), table: op.table, op: op.op === 'DELETE' ? 'DELETE' : 'PUT', uuid: op.id, data })
}
const res = await fetch(BASE + '/api/powersync/upload', {
method: 'POST',
headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + this.appToken },
body: JSON.stringify({ ops }),
})
const out = await res.json().catch(() => ({}))
if (!res.ok) throw new Error('upload failed: ' + JSON.stringify(out))
const failed = (out.results || []).filter((r) => !r.ok)
if (failed.length) console.log('[verify] upload 部分失败:', JSON.stringify(failed))
await batch.complete()
}
}
async function main() {
console.log(`[verify] BASE = ${BASE}`)
const login = await api('/auth/login', { method: 'POST', body: { email: EMAIL, password: PASSWORD } })
console.log('[verify] 1. 登录 OK, user:', login.user.email)
const cred = await api('/powersync/token', { method: 'POST', token: login.token })
if (!cred.endpoint) throw new Error('POWERSYNC_URL 未配置 (服务端 /powersync/token 返回空 endpoint)')
console.log('[verify] 2. 同步凭证 OK, endpoint:', cred.endpoint)
const dbFile = path.join(os.tmpdir(), `iboard-verify-${Date.now()}.db`)
const logger = createConsoleLogger({ minLevel: LogLevels.debug })
const db = new PowerSyncDatabase({
schema: AppSchema,
database: { dbFilename: dbFile, databaseWorkerLogLevel: LogLevels.debug },
sync: { logLevel: LogLevels.debug },
logger,
})
db.registerListener({
statusChanged: (s) => {
const c = s?.dataFlowStatus || {}
console.log(`[verify] sync status: connected=${s?.connected} connecting=${s?.connecting} err=${c.downloadError?.message || c.uploadError?.message || '-'}`)
},
})
try {
await db.connect(new Connector(login.token, cred.endpoint))
console.log('[verify] connect() 已建立')
} catch (e) {
console.error('[verify] connect 失败:', e?.message)
throw e
}
await Promise.race([
db.waitForFirstSync(),
sleep(45000).then(() => { throw new Error('waitForFirstSync 超时 (45s)') }),
]).catch(async (e) => {
console.log('[verify] waitForFirstSync 未完成, 轮询内部状态...')
for (let i = 0; i < 10; i++) {
await sleep(3000)
const st = db.currentStatus
const counts = {
projects: (await db.getOptional('SELECT COUNT(*) AS n FROM Project'))?.n,
tasks: (await db.getOptional('SELECT COUNT(*) AS n FROM Task'))?.n,
}
console.log(`[verify] poll#${i}:`, JSON.stringify({
connected: st?.connected, connecting: st?.connecting, hasSynced: st?.hasSynced,
lastSyncedAt: st?.lastSyncedAt, dl: st?.dataFlowStatus?.downloadError?.message,
ul: st?.dataFlowStatus?.uploadError?.message, ...counts,
}))
if (st?.hasSynced && counts.projects > 0) {
console.log('[verify] 轮询确认同步已完成')
return
}
}
throw e
})
console.log('[verify] 3. 首次同步完成')
const projects = await db.getAll('SELECT id, uuid, code, name FROM Project ORDER BY id')
console.log(`[verify] 项目 ${projects.length} 个:`, projects.map((p) => `${p.code || '?'}(${p.name})`).join(', '))
const tasks = await db.getAll('SELECT COUNT(*) AS n FROM Task')
const numbered = await db.getAll('SELECT COUNT(*) AS n FROM Task WHERE number IS NOT NULL')
console.log(`[verify] 任务 ${tasks[0].n} 条 (已有编号 ${numbered[0].n} 条)`)
if (!projects.length || tasks[0].n === 0) throw new Error('同步数据为空, ETL 未生效?')
// 本地新建验证任务 (模拟离线写入: number 为空, 等服务端分配)
const target = projects.find((p) => p.code) || projects[0]
const firstCol = await db.get(`SELECT id, boundStatus FROM BoardColumn WHERE projectId = ? ORDER BY sortOrder, id LIMIT 1`, [target.id])
const marker = `离线闭环验证-${Date.now()}`
const newId = uuid()
const ts = new Date().toISOString()
await db.writeTransaction(async (tx) => {
await tx.execute(
`INSERT INTO Task (id, uuid, projectId, columnId, parentId, title, description, kind, markDate, status, doneAt, assigneeId, creatorId, extras, sortOrder, number, createdAt, updatedAt)
VALUES (?, ?, ?, ?, NULL, ?, '', NULL, NULL, ?, NULL, NULL, ?, '[]', 0, NULL, ?, ?)`,
[newId, newId, target.id, firstCol.id, marker, firstCol.boundStatus || 'todo', String(login.user.id), ts, ts],
)
})
console.log(`[verify] 4. 本地写入任务 "${marker}" (number 为空), 等待上行 + 服务端定号 + 同步回填...`)
let syncedBack = null
for (let i = 0; i < 30; i++) {
await sleep(2000)
const row = await db.getOptional('SELECT number, updatedAt FROM Task WHERE id = ?', [newId])
const localCheck = await db.getOptional(`SELECT 1 AS x FROM ps_crud LIMIT 1`)
if (!localCheck) {
// 队列已清空 (上行完成); 等待下行回填 number
if (row && row.number != null) { syncedBack = row; break }
if (i > 10 && row && row.number == null) continue
}
}
if (!syncedBack) throw new Error('超时: 未观测到服务端编号回填')
console.log(`[verify] 5. 闭环 OK! 服务端分配编号: ${target.code}-${syncedBack.number} (项目 ${target.code})`)
// 直接从服务端核对 (REST 视角: REST 仍按 int id 寻址, 通过列表接口按 uuid 匹配)
const plist = await api('/projects', { token: login.token })
const pj = plist.items.find((p) => p.uuid === target.uuid)
if (!pj) throw new Error('服务端确认失败: 项目列表中找不到目标项目')
const tlist = await api(`/projects/${pj.id}/tasks`, { token: login.token })
const hit = tlist.items.find((t) => t.uuid === newId)
if (!hit || hit.number == null) throw new Error('服务端确认失败: 任务不存在或未定号')
console.log(`[verify] 6. 服务端确认: number=${hit.number}, uuid=${hit.uuid.slice(0, 13)}...`)
// 清理验证数据 (本地删除 -> 上行删除)
await db.execute('DELETE FROM Task WHERE id = ?', [newId])
for (let i = 0; i < 15; i++) {
await sleep(2000)
const left = await db.getOptional('SELECT 1 AS x FROM ps_crud LIMIT 1')
if (!left) break
}
const gone = await api(`/projects/${pj.id}/tasks`, { token: login.token })
if (!gone.items.some((t) => t.uuid === newId)) console.log('[verify] 7. 验证任务已从服务端清除')
else throw new Error('验证任务删除未同步到服务端')
db.close()
try {
fs.rmSync(dbFile, { force: true })
fs.rmSync(dbFile + '-journal', { force: true })
} catch { /* Windows 下可能被占用, 留在临时目录无害 */ }
console.log('[verify] 全部通过: 下行同步 / 离线写入 / 上行幂等 / 服务端编号 / 回填 / 删除同步')
}
main().catch((e) => {
console.error('[verify] 失败:', e.message)
process.exit(1)
})
+3 -14
View File
@@ -1,18 +1,7 @@
// 服务端 Prisma 单例, 使用 mariadb 适配器
// 服务端 Prisma 单例, 使用 pg 适配器 (0.2.1: 数据库迁移到 PostgreSQL)
import 'dotenv/config'
import { PrismaMariaDb } from '@prisma/adapter-mariadb'
import { PrismaPg } from '@prisma/adapter-pg'
import { PrismaClient } from '../generated/prisma/client.ts'
function parseDatabaseUrl(url) {
const u = new URL(url)
return {
host: u.hostname,
port: Number(u.port) || 3306,
user: decodeURIComponent(u.username),
password: decodeURIComponent(u.password),
database: u.pathname.replace(/^\//, ''),
}
}
const adapter = new PrismaMariaDb(parseDatabaseUrl(process.env.DATABASE_URL))
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
export const prisma = new PrismaClient({ adapter })
+6 -1
View File
@@ -16,6 +16,7 @@ import checkinRouter from './routes/checkin.js'
import checklistsRouter from './routes/checklists.js'
import projectsRouter, { columnRouter } from './routes/projects.js'
import tasksRouter from './routes/tasks.js'
import powersyncRouter from './routes/powersync.js'
const PORT = Number(process.env.PORT) || 3001
const DIST_DIR = path.join(process.cwd(), 'dist')
@@ -33,6 +34,8 @@ app.use('/api/auth', authRouter)
// OTA 接口是公开的 (检查/下载更新不需要登录), 必须挂载在带 authRequired 的 router 之前,
// 否则 /api/ota/* 请求会先进入 dataRouter 等并被 authRequired 以 401 拦截
app.use('/api', otaRouter)
// PowerSync: token 签发 + 离线上行队列 (自带 authRequired, 同样必须挂在带 authRequired 的业务 router 之前)
app.use('/api/powersync', powersyncRouter)
app.use('/api', dataRouter)
app.use('/api', newsRouter)
app.use('/api', alertsRouter)
@@ -66,11 +69,13 @@ app.use((err, _req, res, _next) => {
res.status(500).json({ error: err.message || '服务器内部错误' })
})
// 启动定时任务: 每天凌晨 3 点拉取新闻
// 启动定时任务: 每天凌晨 3 点拉取新闻; 0.2.1 验证部署以 DISABLE_CRON=1 关闭 (避免重复外呼)
if (process.env.DISABLE_CRON !== '1') {
import('./cron.js').catch((e) => console.error('[cron] 加载失败:', e.message))
// 米家环境监控定时调度 (独立注册, 不与 cron.js 绑定, 见 server/mihome/scheduler.js)
import('./mihome/scheduler.js').catch((e) => console.error('[cron] 米家调度注册失败:', e.message))
}
app.listen(PORT, () => {
console.log(`[iboard-api] listening on http://127.0.0.1:${PORT}`)
+386
View File
@@ -0,0 +1,386 @@
// PowerSync 接入: 同步 token 签发 + 客户端上传队列落地 (0.2.1, 见 docs/V0.2/离线编辑模块/0.2.1实施方案.md)
// 下行由 powersync-service 经 PG 逻辑复制完成; 本文件只负责:
// 1. /token 为已登录用户签发 powersync-service 接受的 JWT (aud=powersync, 独立密钥可选)
// 2. /upload 批量落地客户端离线写操作, 按 uuid 幂等 upsert, 服务端统一分配编号
import { Router } from 'express'
import jwt from 'jsonwebtoken'
import { prisma } from '../db.js'
import { JWT_SECRET, authRequired } from '../middleware.js'
import { genUuid, normProjectCode, allocProjectCode, withTaskNumber } from '../task-domain/identity.js'
const router = Router()
// ---------- 同步 token ----------
router.post('/token', authRequired, async (req, res, next) => {
try {
const user = await prisma.user.findUnique({
where: { id: req.user.sub },
select: { id: true, name: true, email: true },
})
if (!user) return res.status(401).json({ error: '用户不存在' })
const secret = process.env.POWERSYNC_JWT_SECRET || JWT_SECRET
const token = jwt.sign(
{ sub: String(user.id), aud: 'powersync', name: user.name, email: user.email },
secret,
{ expiresIn: '12h' },
)
res.json({ token, endpoint: process.env.POWERSYNC_URL || '' })
} catch (e) { next(e) }
})
// ---------- 上传队列 ----------
// 契约: POST { ops: [{ id, table, op: 'PUT'|'DELETE', uuid, data }] }
// table ∈ Project | BoardColumn | ProjectMember | Task | TaskMember | TaskTag
// data 为客户端本地全量行 (列名与客户端 schema 一致); 外键列 (projectId/columnId/parentId/taskId)
// 的值即父行的本地 id = uuid, 服务端据此解析为内部自增 id
// 返回 { results: [{ id, ok, skipped?, error? }] }, 单条失败不影响同批其它 op
const TABLES = ['Project', 'BoardColumn', 'ProjectMember', 'Task', 'TaskMember', 'TaskTag']
const TABLE_RANK = Object.fromEntries(TABLES.map((t, i) => [t, i]))
const COLUMN_RETENTIONS = ['never', 'today', '3d', 'week', 'month', 'forever']
const TASK_STATUSES = ['todo', 'doing', 'done']
const AUTO_ARCHIVE_OPTIONS = ['3d', '1w', '1m', 'never']
function isoTime(v) {
if (!v) return null
const d = new Date(v)
return Number.isNaN(d.getTime()) ? null : d
}
// LWW: 服务端已有行不早于客户端数据 => 跳过本次覆盖
function isStale(existing, data) {
const t = isoTime(data?.updatedAt)
if (!t) return false
return existing.updatedAt && existing.updatedAt.getTime() >= t.getTime()
}
function cleanExtras(v) {
if (!Array.isArray(v)) return []
return v.slice(0, 50).map((e) => ({
label: String(e?.label ?? '').slice(0, 40),
value: String(e?.value ?? ''),
url: e?.url ? String(e.url) : '',
}))
}
function cleanNotes(v) {
if (!Array.isArray(v)) return []
return v.slice(0, 50).map((n) => ({
title: String(n?.title ?? '').slice(0, 50),
content: String(n?.content ?? '').slice(0, 20000),
}))
}
async function applyPut(op, ctx) {
const { userId, assertMember } = ctx
const { table, uuid } = op
const d = op.data || {}
if (!uuid) throw new Error('缺少 uuid')
if (table === 'Project') {
const existing = await prisma.project.findUnique({ where: { uuid } })
if (existing) {
if (!(await assertMember(existing.id))) throw new Error('无项目权限')
if (isStale(existing, d)) return { skipped: true }
const data = {}
if (d.name !== undefined) {
const t = String(d.name).trim()
if (!t || t.length > 20) throw new Error('项目名称非法')
data.name = t
}
if (d.archived !== undefined) data.archived = !!d.archived
if (d.notes !== undefined) data.notes = cleanNotes(d.notes)
if (d.autoArchive !== undefined) {
data.autoArchive = AUTO_ARCHIVE_OPTIONS.includes(d.autoArchive) ? d.autoArchive : 'never'
}
if (d.taskKinds !== undefined) {
data.taskKinds = Array.isArray(d.taskKinds) ? d.taskKinds.map((k) => String(k).slice(0, 20)).filter(Boolean) : null
}
if (Object.keys(data).length) await prisma.project.update({ where: { uuid }, data })
return {}
}
const name = String(d.name || '').trim()
if (!name || name.length > 20) throw new Error('项目名称非法')
const code = normProjectCode(d.code) || (await allocProjectCode(name))
const row = await prisma.project.create({
data: { uuid, code, name, ownerId: userId, isPersonal: !!d.isPersonal, archived: !!d.archived },
})
return { rowId: row.id, code: row.code }
}
if (table === 'BoardColumn') {
const existing = await prisma.boardColumn.findUnique({ where: { uuid } })
if (existing) {
if (!(await assertMember(existing.projectId))) throw new Error('无项目权限')
if (isStale(existing, d)) return { skipped: true }
const data = {}
if (d.name !== undefined) {
const t = String(d.name).trim()
if (!t || t.length > 20) throw new Error('列名非法')
data.name = t
}
if (d.sortOrder !== undefined) data.sortOrder = Number(d.sortOrder) || 0
if (d.boundStatus !== undefined) data.boundStatus = TASK_STATUSES.includes(d.boundStatus) ? d.boundStatus : null
if (d.retention !== undefined && COLUMN_RETENTIONS.includes(d.retention)) data.retention = d.retention
if (Object.keys(data).length) await prisma.boardColumn.update({ where: { uuid }, data })
return {}
}
const project = await prisma.project.findUnique({ where: { uuid: d.projectId } })
if (!project || !(await assertMember(project.id))) throw new Error('项目不存在或无权限')
const name = String(d.name || '').trim()
if (!name || name.length > 20) throw new Error('列名非法')
await prisma.boardColumn.create({
data: {
uuid,
projectId: project.id,
name,
sortOrder: Number(d.sortOrder) || 0,
boundStatus: TASK_STATUSES.includes(d.boundStatus) ? d.boundStatus : null,
retention: COLUMN_RETENTIONS.includes(d.retention) ? d.retention : 'forever',
},
})
return {}
}
if (table === 'ProjectMember') {
const existing = await prisma.projectMember.findUnique({ where: { uuid } })
if (existing) {
// 成员关系只增不改: 已存在即视为完成 (幂等)
return { skipped: true }
}
const project = await prisma.project.findUnique({ where: { uuid: d.projectId } })
if (!project || !(await assertMember(project.id))) throw new Error('项目不存在或无权限')
const target = Number(d.userId)
if (!target) throw new Error('userId 非法')
const dup = await prisma.projectMember.findUnique({
where: { projectId_userId: { projectId: project.id, userId: target } },
})
if (dup) return { skipped: true }
await prisma.projectMember.create({
data: { uuid, projectId: project.id, userId: target, permission: d.permission === 'admin' ? 'admin' : 'member' },
})
return {}
}
if (table === 'Task') {
const existing = await prisma.task.findUnique({ where: { uuid } })
if (existing) {
if (!(await assertMember(existing.projectId))) throw new Error('无项目权限')
if (isStale(existing, d)) return { skipped: true }
const data = {}
if (d.title !== undefined) {
const t = String(d.title).trim()
if (!t || t.length > 30) throw new Error('任务标题非法')
data.title = t
}
if (d.description !== undefined) data.description = String(d.description || '')
if (d.kind !== undefined) data.kind = d.kind ? String(d.kind).trim().slice(0, 20) : null
if (d.markDate !== undefined) {
const m = isoTime(d.markDate)
if (d.markDate && !m) throw new Error('时间标记非法')
data.markDate = m
}
if (d.extras !== undefined) data.extras = cleanExtras(d.extras)
if (d.sortOrder !== undefined) data.sortOrder = Number(d.sortOrder) || 0
if (d.assigneeId !== undefined) data.assigneeId = d.assigneeId ? Number(d.assigneeId) : null
if (d.doneAt !== undefined) data.doneAt = isoTime(d.doneAt)
// 归档状态 (T-ARC): 客户端本地归档/恢复走这里
if (d.archived !== undefined) data.archived = !!d.archived
if (d.archivedAt !== undefined) data.archivedAt = isoTime(d.archivedAt)
if (d.archiveSource !== undefined) {
data.archiveSource = ['manual', 'auto'].includes(d.archiveSource) ? d.archiveSource : null
}
if (d.columnId !== undefined) {
const col = await prisma.boardColumn.findUnique({ where: { uuid: d.columnId } })
if (!col || col.projectId !== existing.projectId) throw new Error('看板列不存在')
data.columnId = col.id
}
if (d.parentId !== undefined) {
if (!d.parentId) {
data.parentId = null
} else {
const parent = await prisma.task.findUnique({ where: { uuid: d.parentId } })
if (!parent || parent.projectId !== existing.projectId) throw new Error('父任务不存在')
if (parent.parentId) throw new Error('仅支持一级子任务')
data.parentId = parent.id
}
}
if (Object.keys(data).length) await prisma.task.update({ where: { uuid }, data })
return {}
}
// 离线新建: 服务端解析父引用并分配项目内编号
const project = await prisma.project.findUnique({ where: { uuid: d.projectId } })
if (!project || !(await assertMember(project.id))) throw new Error('项目不存在或无权限')
const title = String(d.title || '').trim()
if (!title || title.length > 30) throw new Error('任务标题非法')
let columnId = null
if (d.columnId) {
const col = await prisma.boardColumn.findUnique({ where: { uuid: d.columnId } })
if (!col || col.projectId !== project.id) throw new Error('看板列不存在')
columnId = col.id
} else {
const first = await prisma.boardColumn.findFirst({
where: { projectId: project.id },
orderBy: { sortOrder: 'asc' },
})
if (!first) throw new Error('项目没有可用的看板列')
columnId = first.id
}
let parentId = null
if (d.parentId) {
const parent = await prisma.task.findUnique({ where: { uuid: d.parentId } })
if (!parent || parent.projectId !== project.id) throw new Error('父任务不存在')
if (parent.parentId) throw new Error('仅支持一级子任务')
parentId = parent.id
}
const status = TASK_STATUSES.includes(d.status) ? d.status : 'todo'
const base = {
uuid,
projectId: project.id,
columnId,
parentId,
title,
description: String(d.description || ''),
kind: d.kind ? String(d.kind).trim().slice(0, 20) : null,
markDate: isoTime(d.markDate),
status,
assigneeId: d.assigneeId ? Number(d.assigneeId) : null,
creatorId: userId,
extras: cleanExtras(d.extras),
doneAt: status === 'done' ? (isoTime(d.doneAt) || new Date()) : null,
sortOrder: Number(d.sortOrder) || 0,
}
const { value: row } = await withTaskNumber(project.id, (number) =>
prisma.task.create({ data: { ...base, number } }),
)
return { rowId: row.id, number: row.number }
}
if (table === 'TaskMember') {
const existing = await prisma.taskMember.findUnique({ where: { uuid } })
if (existing) return { skipped: true }
const task = await prisma.task.findUnique({ where: { uuid: d.taskId } })
if (!task || !(await assertMember(task.projectId))) throw new Error('任务不存在或无权限')
const uid = Number(d.userId)
if (!uid) throw new Error('userId 非法')
const dup = await prisma.taskMember.findUnique({
where: { taskId_userId: { taskId: task.id, userId: uid } },
})
if (dup) return { skipped: true }
await prisma.taskMember.create({ data: { uuid, taskId: task.id, userId: uid } })
return {}
}
if (table === 'TaskTag') {
const existing = await prisma.taskTag.findUnique({ where: { uuid } })
if (existing) return { skipped: true }
const task = await prisma.task.findUnique({ where: { uuid: d.taskId } })
if (!task || !(await assertMember(task.projectId))) throw new Error('任务不存在或无权限')
const name = String(d.name || '').trim().slice(0, 20)
if (!name) throw new Error('标签名非法')
const dup = await prisma.taskTag.findFirst({ where: { taskId: task.id, name } })
if (dup) return { skipped: true }
await prisma.taskTag.create({ data: { uuid, taskId: task.id, name } })
return {}
}
throw new Error('未知表: ' + table)
}
async function applyDelete(op, ctx) {
const { assertMember } = ctx
const { table, uuid } = op
if (!uuid) throw new Error('缺少 uuid')
if (table === 'Project') {
const row = await prisma.project.findUnique({ where: { uuid }, select: { id: true, isPersonal: true } })
if (!row) return { skipped: true }
if (!(await assertMember(row.id))) throw new Error('无项目权限')
if (row.isPersonal) throw new Error('个人默认项目不可删除')
await prisma.project.delete({ where: { uuid } })
return {}
}
if (table === 'BoardColumn') {
const row = await prisma.boardColumn.findUnique({ where: { uuid } })
if (!row) return { skipped: true }
if (!(await assertMember(row.projectId))) throw new Error('无项目权限')
await prisma.boardColumn.delete({ where: { uuid } })
return {}
}
if (table === 'ProjectMember') {
const row = await prisma.projectMember.findUnique({ where: { uuid } })
if (!row) return { skipped: true }
if (!(await assertMember(row.projectId))) throw new Error('无项目权限')
await prisma.projectMember.delete({ where: { uuid } })
return {}
}
if (table === 'Task') {
const row = await prisma.task.findUnique({ where: { uuid } })
if (!row) return { skipped: true }
if (!(await assertMember(row.projectId))) throw new Error('无项目权限')
await prisma.task.delete({ where: { uuid } })
return {}
}
if (table === 'TaskMember') {
const row = await prisma.taskMember.findUnique({ where: { uuid } })
if (!row) return { skipped: true }
const task = await prisma.task.findUnique({ where: { id: row.taskId }, select: { projectId: true } })
if (!task || !(await assertMember(task.projectId))) throw new Error('无项目权限')
await prisma.taskMember.delete({ where: { uuid } })
return {}
}
if (table === 'TaskTag') {
const row = await prisma.taskTag.findUnique({ where: { uuid } })
if (!row) return { skipped: true }
const task = await prisma.task.findUnique({ where: { id: row.taskId }, select: { projectId: true } })
if (!task || !(await assertMember(task.projectId))) throw new Error('无项目权限')
await prisma.taskTag.delete({ where: { uuid } })
return {}
}
throw new Error('未知表: ' + table)
}
router.post('/upload', authRequired, async (req, res, next) => {
try {
const userId = req.user.sub
const ops = Array.isArray(req.body?.ops) ? req.body.ops : []
if (!ops.length) return res.status(400).json({ error: 'ops 不能为空' })
if (ops.length > 500) return res.status(400).json({ error: '单批 ops 过多 (上限 500)' })
const memberCache = new Map()
const assertMember = async (projectId) => {
if (!projectId) return false
if (memberCache.has(projectId)) return memberCache.get(projectId)
const ok = !!(await prisma.projectMember.findFirst({ where: { projectId, userId } }))
memberCache.set(projectId, ok)
return ok
}
const ctx = { userId, assertMember }
// 依赖顺序: 父表先落地 (Project → BoardColumn → ProjectMember → Task → TaskMember/TaskTag); 删除反向
const rank = (o) => TABLE_RANK[o?.table] ?? 99
const puts = ops.filter((o) => o && o.op !== 'DELETE').sort((a, b) => rank(a) - rank(b))
const dels = ops.filter((o) => o && o.op === 'DELETE').sort((a, b) => rank(b) - rank(a))
const results = []
for (const op of puts) {
try {
const extra = await applyPut(op, ctx)
results.push({ id: op.id, ok: true, ...extra })
} catch (e) {
results.push({ id: op.id, ok: false, error: e.message })
}
}
for (const op of dels) {
try {
const extra = await applyDelete(op, ctx)
results.push({ id: op.id, ok: true, ...extra })
} catch (e) {
results.push({ id: op.id, ok: false, error: e.message })
}
}
res.json({ results })
} catch (e) { next(e) }
})
export default router
+44 -5
View File
@@ -3,6 +3,7 @@ import { Router } from 'express'
import { prisma } from '../db.js'
import { authRequired } from '../middleware.js'
import { loadProjectForUser, loadColumns, loadMemberIds } from '../task-domain/access.js'
import { genUuid, withUuid, normProjectCode, allocProjectCode } from '../task-domain/identity.js'
const router = Router()
router.use(authRequired)
@@ -21,7 +22,7 @@ const MAX_NAME = 20
/** 建 4 个默认列 */
async function createDefaultColumns(projectId) {
await prisma.boardColumn.createMany({
data: DEFAULT_COLUMNS.map((c) => ({ ...c, projectId, retention: 'forever' })),
data: withUuid(DEFAULT_COLUMNS.map((c) => ({ ...c, projectId, retention: 'forever' }))),
})
}
@@ -32,7 +33,14 @@ export async function ensurePersonalProject(userId) {
const user = await prisma.user.findUnique({ where: { id: userId }, select: { name: true } })
const name = `${user?.name || '我'}的任务`
const project = await prisma.project.create({
data: { name, ownerId: userId, isPersonal: true, members: { create: { userId } } },
data: {
name,
ownerId: userId,
isPersonal: true,
uuid: genUuid(),
code: await allocProjectCode(name),
members: { create: { uuid: genUuid(), userId } },
},
})
await createDefaultColumns(project.id)
return project
@@ -58,6 +66,8 @@ export function normTaskKinds(v) {
function projectSummary(p) {
return {
id: p.id,
uuid: p.uuid,
code: p.code,
name: p.name,
ownerId: p.ownerId,
isPersonal: p.isPersonal,
@@ -96,8 +106,27 @@ router.post('/', async (req, res, next) => {
if (!name) return res.status(400).json({ error: '项目名称不能为空' })
if (name.length > MAX_NAME) return res.status(400).json({ error: `项目名称不能超过 ${MAX_NAME} 字` })
// 项目短编号: 可由客户端自拟 (2~8 位字母数字, 全局唯一), 未提供时按名称自动分配
let code
const rawCode = req.body?.code
if (rawCode !== undefined && rawCode !== null && String(rawCode).trim() !== '') {
code = normProjectCode(rawCode)
if (!code) return res.status(400).json({ error: '项目编号须为 2~8 位字母数字' })
const dup = await prisma.project.findUnique({ where: { code } })
if (dup) return res.status(409).json({ error: `项目编号 ${code} 已被占用` })
} else {
code = await allocProjectCode(name)
}
const project = await prisma.project.create({
data: { name, ownerId: userId, isPersonal: false, members: { create: { userId } } },
data: {
name,
ownerId: userId,
isPersonal: false,
uuid: genUuid(),
code,
members: { create: { uuid: genUuid(), userId } },
},
})
await createDefaultColumns(project.id)
const full = await prisma.project.findUnique({
@@ -139,7 +168,7 @@ router.put('/:id', async (req, res, next) => {
const userId = req.user.sub
const project = await loadProjectForUser(req.params.id, userId)
if (!project) return res.status(404).json({ error: '项目不存在或无权限' })
const { name, archived, notes, taskKinds, icon, autoArchive } = req.body || {}
const { name, archived, notes, taskKinds, icon, autoArchive, code } = req.body || {}
const data = {}
if (name !== undefined) {
const t = String(name).trim()
@@ -147,6 +176,16 @@ router.put('/:id', async (req, res, next) => {
if (t.length > MAX_NAME) return res.status(400).json({ error: `项目名称不能超过 ${MAX_NAME} 字` })
data.name = t
}
// 项目短编号: 可修改 (2~8 位字母数字, 全局唯一)
if (code !== undefined) {
const c = normProjectCode(code)
if (!c) return res.status(400).json({ error: '项目编号须为 2~8 位字母数字' })
if (c !== project.code) {
const dup = await prisma.project.findUnique({ where: { code: c } })
if (dup) return res.status(409).json({ error: `项目编号 ${c} 已被占用` })
data.code = c
}
}
// 任务类型标签: 整体替换; 空数组回落默认
if (taskKinds !== undefined) {
if (!Array.isArray(taskKinds)) return res.status(400).json({ error: '任务类型格式非法' })
@@ -215,7 +254,7 @@ router.post('/:id/members', async (req, res, next) => {
})
if (exist) return res.status(409).json({ error: '该用户已是项目成员' })
await prisma.projectMember.create({ data: { projectId: project.id, userId: target.id } })
await prisma.projectMember.create({ data: { uuid: genUuid(), projectId: project.id, userId: target.id } })
res.json({ ok: true, member: { userId: target.id, name: target.name } })
} catch (e) { next(e) }
})
+13 -10
View File
@@ -9,6 +9,7 @@ import { resolveTaskWrite } from '../task-domain/resolveStatus.js'
import { filterVisible } from '../task-domain/retention.js'
import { copyTask } from '../task-domain/copyTask.js'
import { runAutoArchiveForProject } from '../task-domain/archive.js'
import { genUuid, withUuid, withTaskNumber } from '../task-domain/identity.js'
const router = Router()
router.use(authRequired)
@@ -184,8 +185,8 @@ router.post('/projects/:id/tasks', async (req, res, next) => {
}
const firstCol = columns[0]
const row = await prisma.task.create({
data: {
const taskData = {
uuid: req.body?.uuid || genUuid(),
projectId: project.id,
columnId: firstCol.id,
parentId: pid,
@@ -198,14 +199,16 @@ router.post('/projects/:id/tasks', async (req, res, next) => {
creatorId: userId,
extras: [],
members: {
create: (Array.isArray(memberIds) ? memberIds : [])
create: withUuid((Array.isArray(memberIds) ? memberIds : [])
.map(Number).filter((id) => memberSet.has(id))
.map((uid) => ({ userId: uid })),
.map((uid) => ({ userId: uid }))),
},
tags: { create: (Array.isArray(tags) ? tags : []).filter(Boolean).map((n) => ({ name: String(n).slice(0, 20) })) },
},
include: TASK_INCLUDE,
})
tags: { create: withUuid((Array.isArray(tags) ? tags : []).filter(Boolean).map((n) => ({ name: String(n).slice(0, 20) }))) },
}
// 项目内自增编号 (展示 `code-number`): 服务端分配, 并发冲突时重取 max+1 重试
const { value: row } = await withTaskNumber(project.id, (number) =>
prisma.task.create({ data: { ...taskData, number }, include: TASK_INCLUDE }),
)
res.json({ item: shape(row) })
} catch (e) { next(e) }
})
@@ -333,7 +336,7 @@ router.put('/tasks/:id', async (req, res, next) => {
await prisma.taskMember.deleteMany({ where: { taskId: task.id } })
if (ids.length) {
await prisma.taskMember.createMany({
data: ids.map((uid) => ({ taskId: task.id, userId: uid })),
data: withUuid(ids.map((uid) => ({ taskId: task.id, userId: uid }))),
})
}
}
@@ -341,7 +344,7 @@ router.put('/tasks/:id', async (req, res, next) => {
await prisma.taskTag.deleteMany({ where: { taskId: task.id } })
const names = body.tags.map((n) => String(n).trim()).filter(Boolean).slice(0, 10)
if (names.length) {
await prisma.taskTag.createMany({ data: names.map((name) => ({ taskId: task.id, name: name.slice(0, 20) })) })
await prisma.taskTag.createMany({ data: withUuid(names.map((name) => ({ taskId: task.id, name: name.slice(0, 20) }))) })
}
}
+15 -7
View File
@@ -1,6 +1,7 @@
// 任务模块: 跨项目拷贝 (T-CP-*)
// 拷贝而非移动: 新建记录 + 深拷贝子任务, 源任务零改动.
import { prisma } from '../db.js'
import { genUuid, withUuid, withTaskNumber } from './identity.js'
/**
* 拷贝一条任务(含子任务)到目标项目。
@@ -38,6 +39,7 @@ export async function copyTask({ source, targetProject, targetColumns, operatorI
const droppedAssignee = source.assigneeId && !memberSet.has(source.assigneeId) ? source.assignee : null
const baseData = (extra) => ({
uuid: genUuid(),
projectId: targetProject.id,
title: source.title,
description: source.description || '',
@@ -50,33 +52,39 @@ export async function copyTask({ source, targetProject, targetColumns, operatorI
doneAt: source.status === 'done' ? (source.doneAt || new Date()) : null,
sortOrder: source.sortOrder ?? 0,
tags: {
create: (source.tags || []).map((t) => ({ name: t.name })),
create: withUuid((source.tags || []).map((t) => ({ name: t.name }))),
},
})
const newTask = await prisma.task.create({
const { value: newTask } = await withTaskNumber(targetProject.id, (number) =>
prisma.task.create({
data: {
...baseData({ columnId: pickColumn(source.columnId) }),
number,
members: {
create: keptMemberIds.map((uid) => ({ userId: uid })),
create: withUuid(keptMemberIds.map((uid) => ({ userId: uid }))),
},
},
})
}),
)
// 子任务: 同法复制, parentId 指向新父任务
for (const child of source.children || []) {
const childMembers = (child.members || [])
.filter((m) => memberSet.has(m.userId))
.map((m) => m.userId)
await prisma.task.create({
await withTaskNumber(targetProject.id, (number) =>
prisma.task.create({
data: {
...baseData({
columnId: pickColumn(child.columnId),
parentId: newTask.id,
}),
members: { create: childMembers.map((uid) => ({ userId: uid })) },
number,
members: { create: withUuid(childMembers.map((uid) => ({ userId: uid }))) },
},
})
}),
)
}
return {
+74
View File
@@ -0,0 +1,74 @@
// 任务域同步标识与编号 (0.2.1 离线编辑, 见 docs/V0.2/离线编辑模块/0.2.1实施方案.md)
// 约定: 任务域 6 表均带 uuid(客户端/服务端创建时生成, 上行按 uuid 幂等);
// Project.code 为用户自拟 2~8 位字母数字短编号(存储大写, 全局唯一);
// Task.number 为项目内自增编号, 服务端分配, 展示 `code-number`。
import crypto from 'node:crypto'
import { prisma } from '../db.js'
/** 同步标识: 服务端创建行时统一生成 uuid */
export function genUuid() {
return crypto.randomUUID()
}
/** 为多行数据补 uuid (createMany 前用) */
export function withUuid(rows) {
return rows.map((r) => ({ ...r, uuid: r.uuid || genUuid() }))
}
// 项目编号: 2~8 位字母数字, 存储统一大写 (任务展示 `编号-序号`, 不允许连字符)
const CODE_RE = /^[A-Z0-9]{2,8}$/
/** 归一化项目编号; 非法返回 null */
export function normProjectCode(v) {
const s = String(v || '').trim().toUpperCase()
return CODE_RE.test(s) ? s : null
}
function randCode(len) {
return crypto.randomBytes(len * 2).toString('hex').toUpperCase().replace(/[^A-Z0-9]/g, '').padEnd(len, 'X').slice(0, len)
}
/** 从项目名推导候选编号: 取 ASCII 字母数字, 不足则随机补齐 */
function suggestCode(name) {
const letters = String(name || '').toUpperCase().replace(/[^A-Z0-9]/g, '')
if (letters.length >= 2) return letters.slice(0, 8)
return (letters + randCode(8)).slice(0, 8)
}
/** 分配一个未占用的项目编号: 优先按名称推导, 冲突则随机尾缀重试 */
export async function allocProjectCode(name) {
const base = suggestCode(name)
for (let i = 0; i < 20; i++) {
const cand = i === 0 ? base : (base.slice(0, 5) + randCode(3)).slice(0, 8)
if (cand.length < 2 || !CODE_RE.test(cand)) continue
const dup = await prisma.project.findUnique({ where: { code: cand } })
if (!dup) return cand
}
while (true) {
const cand = randCode(6)
const dup = await prisma.project.findUnique({ where: { code: cand } })
if (!dup) return cand
}
}
/** 任务项目内下一个编号 (max+1); 并发冲突由调用方捕获 P2002 重试 */
export async function nextTaskNumber(projectId) {
const agg = await prisma.task.aggregate({ where: { projectId }, _max: { number: true } })
return (agg._max.number ?? 0) + 1
}
/** Task.number 唯一冲突重试包装: fn(number) 返回 Promise; 冲突时重取编号, 最多 3 次 */
export async function withTaskNumber(projectId, fn) {
let lastErr = null
for (let attempt = 0; attempt < 3; attempt++) {
const number = await nextTaskNumber(projectId)
try {
return { number, value: await fn(number) }
} catch (e) {
const target = Array.isArray(e?.meta?.target) ? e.meta.target.join(',') : String(e?.meta?.target || '')
lastErr = e
if (!(e?.code === 'P2002' && target.includes('number'))) throw e
}
}
throw lastErr
}
+3
View File
@@ -8,6 +8,7 @@ import MePage from './pages/MePage.jsx'
import CheckinPage from './pages/checkin/CheckinPage.jsx'
import TaskPage from './pages/task/TaskPage.jsx'
import { useAuth } from './auth/AuthContext.jsx'
import { PowerSyncProvider } from './lib/powersync/react.jsx'
// 默认落地页: 打卡 (V0.2 起打卡是第一个 Tab 且为默认选中)
const HOME_PATH = '/checkin'
@@ -31,6 +32,7 @@ function RequireAuth({ children }) {
export default function App() {
return (
<PowerSyncProvider>
<Routes>
<Route path="/login" element={<RedirectIfAuthed><LoginPage /></RedirectIfAuthed>} />
<Route element={<RequireAuth><MobileShell /></RequireAuth>}>
@@ -50,5 +52,6 @@ export default function App() {
</Route>
<Route path="*" element={<Navigate to={HOME_PATH} replace />} />
</Routes>
</PowerSyncProvider>
)
}
+135 -2
View File
@@ -1,13 +1,121 @@
// API 调用封装: 自动带 JWT、401 自动清 token、抛统一错误
// 0.2.1 离线支持:
// - GET 请求成功后把响应写入本地缓存 (localStorage), 离线/网络失败时回退缓存 (界面仍有数据)
// - 写请求 (POST/PUT/DELETE) 仍要求在线 (任务模块的离线写走 PowerSync 上传队列)
// - 统一在线/离线状态订阅, 供 UI 显示离线标识
const TOKEN_KEY = 'iboard_token'
const REMEMBER_KEY = 'iboard_remember'
const UID_KEY = 'iboard_uid'
// API 基址:
// - 默认相对路径 `/api` (web dev: Vite 代理; web prod: 同源 Express 一起托管)
// - 打包 Android 时设 VITE_API_BASE=http://bh.vps.honor3.com:3001 走外网后端
// - 打包 Android / Windows 外壳时设 VITE_API_BASE=http://bh.vps.honor3.com:3001 走外网后端
const API_BASE = (import.meta.env.VITE_API_BASE || '').replace(/\/+$/, '')
const API_PREFIX = API_BASE ? API_BASE + '/api' : '/api'
// ---------- 在线/离线状态 (网络事件 + 请求结果联动) ----------
let offline = typeof navigator !== 'undefined' ? navigator.onLine === false : false
const offlineListeners = new Set()
export function isOffline() {
return offline
}
function setOffline(next) {
if (offline === next) return
offline = next
offlineListeners.forEach((cb) => {
try { cb(next) } catch { /* ignore */ }
})
}
if (typeof window !== 'undefined') {
window.addEventListener('online', () => setOffline(false))
window.addEventListener('offline', () => setOffline(true))
}
/** 订阅在线/离线变化, 返回取消函数 */
export function subscribeOffline(cb) {
offlineListeners.add(cb)
return () => offlineListeners.delete(cb)
}
// ---------- GET 响应本地缓存 ----------
// 目的: 任何界面只要成功访问过一次, 离线时都能展示上次的数据
const CACHE_PREFIX = 'iboard_cache:'
const CACHE_TOTAL_LIMIT = 3 * 1024 * 1024 // 约 3MB (localStorage 通常 5MB)
const CACHE_ENTRY_LIMIT = 512 * 1024 // 单条上限, 超大响应不缓存
function cacheKey(path) {
return CACHE_PREFIX + path
}
function readCache(path) {
try {
const raw = localStorage.getItem(cacheKey(path))
if (!raw) return null
const parsed = JSON.parse(raw)
if (!parsed || typeof parsed !== 'object' || !('data' in parsed)) return null
return parsed
} catch {
return null
}
}
function cacheSizeUsed() {
let total = 0
try {
for (let i = 0; i < localStorage.length; i++) {
const k = localStorage.key(i)
if (k && k.startsWith(CACHE_PREFIX)) total += (localStorage.getItem(k) || '').length
}
} catch { /* ignore */ }
return total
}
function evictOldest(needBytes) {
try {
const entries = []
for (let i = 0; i < localStorage.length; i++) {
const k = localStorage.key(i)
if (!k || !k.startsWith(CACHE_PREFIX)) continue
let ts = 0
try { ts = JSON.parse(localStorage.getItem(k) || '{}').ts || 0 } catch { /* ignore */ }
entries.push({ k, ts })
}
entries.sort((a, b) => a.ts - b.ts)
let used = cacheSizeUsed()
for (const e of entries) {
if (used + needBytes <= CACHE_TOTAL_LIMIT) break
used -= (localStorage.getItem(e.k) || '').length
localStorage.removeItem(e.k)
}
} catch { /* ignore */ }
}
function writeCache(path, data) {
try {
const payload = JSON.stringify({ ts: Date.now(), data })
if (payload.length > CACHE_ENTRY_LIMIT) return // 过大不缓存
evictOldest(payload.length)
localStorage.setItem(cacheKey(path), payload)
} catch {
// 配额满等异常: 静默失败, 不影响主流程
}
}
/** 清空所有 GET 缓存 (退出登录时调用) */
export function clearApiCache() {
try {
const keys = []
for (let i = 0; i < localStorage.length; i++) {
const k = localStorage.key(i)
if (k && k.startsWith(CACHE_PREFIX)) keys.push(k)
}
keys.forEach((k) => localStorage.removeItem(k))
} catch { /* ignore */ }
}
export function getToken() {
return localStorage.getItem(TOKEN_KEY) || ''
}
@@ -26,13 +134,25 @@ export function setRememberFlag(v) {
else localStorage.removeItem(REMEMBER_KEY)
}
// 当前用户 id (0.2.1 离线写入需要 ownerId/creatorId, 本地库无法即时从服务端获取)
export function getCurrentUserId() {
return localStorage.getItem(UID_KEY) || ''
}
export function setCurrentUserId(id) {
if (id !== null && id !== undefined && id !== '') localStorage.setItem(UID_KEY, String(id))
else localStorage.removeItem(UID_KEY)
}
export function getApiBase() {
return API_BASE
}
export async function api(path, { method = 'GET', body, headers = {} } = {}) {
const token = getToken()
const res = await fetch(API_PREFIX + path, {
const isRead = method === 'GET'
let res
try {
res = await fetch(API_PREFIX + path, {
method,
headers: {
'Content-Type': 'application/json',
@@ -41,6 +161,18 @@ export async function api(path, { method = 'GET', body, headers = {} } = {}) {
},
body: body ? JSON.stringify(body) : undefined,
})
} catch {
// 网络层失败: 离线 / 服务不可达
setOffline(true)
if (isRead) {
const cached = readCache(path)
if (cached) return cached.data
throw new Error('当前离线,且该界面尚无本地缓存')
}
throw new Error('当前离线,修改操作需要联网后重试')
}
setOffline(false)
if (res.status === 401) {
setToken('')
const data = await res.json().catch(() => ({}))
@@ -49,5 +181,6 @@ export async function api(path, { method = 'GET', body, headers = {} } = {}) {
}
const data = await res.json().catch(() => ({}))
if (!res.ok) throw new Error(data.error || '请求失败 (' + res.status + ')')
if (isRead) writeCache(path, data)
return data
}
+764 -33
View File
@@ -1,44 +1,775 @@
import { api } from './client.js'
// 任务模块数据层 (0.2.1): 已切换为 PowerSync 本地 SQLite
// - 读: 全部来自本地库 (离线可用); 写: 本地写入 -> upload queue -> /api/powersync/upload (按 uuid 幂等)
// - 对页面保持与原 REST 版一致的调用签名与响应形状 (projectApi / columnApi / taskApi)
// - 编号: Project.code / Task.number 由服务端统一分配, 本地新建行同步前分别为空 -> 展示占位
// 见 docs/V0.2/离线编辑模块/0.2.1实施方案.md
import { getPowersyncDb } from '../lib/powersync/db.js'
import { api, getCurrentUserId } from './client.js'
import { filterVisible } from '../pages/task/date.js'
const q = (params) => {
const s = new URLSearchParams()
Object.entries(params || {}).forEach(([k, v]) => {
if (v !== undefined && v !== null && v !== '') s.set(k, v)
})
const str = s.toString()
return str ? '?' + str : ''
const db = () => getPowersyncDb()
// crypto.randomUUID 仅在安全上下文 (https / localhost) 可用; 部署站为 http 明文, 用 getRandomValues 兜底生成 v4
const uuid = () => {
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') return crypto.randomUUID()
const b = crypto.getRandomValues(new Uint8Array(16))
b[6] = (b[6] & 0x0f) | 0x40
b[8] = (b[8] & 0x3f) | 0x80
const h = [...b].map((x) => x.toString(16).padStart(2, '0')).join('')
return `${h.slice(0, 8)}-${h.slice(8, 12)}-${h.slice(12, 16)}-${h.slice(16, 20)}-${h.slice(20)}`
}
const now = () => new Date().toISOString()
const parseJson = (v, fallback) => {
if (v === null || v === undefined || v === '') return fallback
if (typeof v !== 'string') return v
try { return JSON.parse(v) } catch { return fallback }
}
// 项目
// 新建项目时的默认 4 列 (与服务端 DEFAULT_COLUMNS 一致)
const DEFAULT_COLUMNS = [
{ name: 'Plan', sortOrder: 0, boundStatus: 'todo' },
{ name: 'Doing', sortOrder: 1, boundStatus: 'doing' },
{ name: 'Action', sortOrder: 2, boundStatus: null },
{ name: 'Done', sortOrder: 3, boundStatus: 'done' },
]
export const DEFAULT_TASK_KINDS = ['需求', 'Bug', 'FEATURE', '优化']
const MAX_NAME = 20
function normTaskKinds(v) {
if (!Array.isArray(v)) return null
const out = []
for (const k of v) {
const s = String(k || '').trim().slice(0, 20)
if (s && !out.includes(s)) out.push(s)
if (out.length >= 30) break
}
return out
}
// ---------- 查询助手 ----------
async function getColumns(projectId) {
return db().getAll(
'SELECT * FROM BoardColumn WHERE projectId = ? ORDER BY sortOrder, id',
[String(projectId)],
)
}
async function getProjectMembers(projectId) {
const rows = await db().getAll(
`SELECT pm.userId, pm.permission, u.name, u.email
FROM ProjectMember pm LEFT JOIN User u ON u.id = pm.userId
WHERE pm.projectId = ? ORDER BY pm.createdAt, pm.id`,
[String(projectId)],
)
return rows.map((r) => ({ userId: String(r.userId), name: r.name || String(r.userId), email: r.email || '', permission: r.permission || 'member' }))
}
function memberMapOf(members) {
return new Map(members.map((m) => [m.userId, { id: m.userId, name: m.name }]))
}
async function shapeTasks(rows, columns) {
const columnById = new Map(columns.map((c) => [String(c.id), c]))
const projectIds = [...new Set(rows.map((r) => String(r.projectId)))]
let membersByProject = new Map()
if (projectIds.length) {
const ph = projectIds.map(() => '?').join(',')
const pmRows = await db().getAll(
`SELECT pm.projectId, pm.userId, u.name FROM ProjectMember pm LEFT JOIN User u ON u.id = pm.userId WHERE pm.projectId IN (${ph})`,
projectIds,
)
membersByProject = new Map(projectIds.map((pid) => [pid, new Map()]))
for (const r of pmRows) {
membersByProject.get(String(r.projectId)).set(String(r.userId), { id: String(r.userId), name: r.name || String(r.userId) })
}
}
const taskIds = rows.map((r) => String(r.id))
const memberRows = taskIds.length
? await db().getAll(
`SELECT tm.taskId, tm.userId, u.name FROM TaskMember tm LEFT JOIN User u ON u.id = tm.userId WHERE tm.taskId IN (${taskIds.map(() => '?').join(',')})`,
taskIds,
)
: []
const tagRows = taskIds.length
? await db().getAll(`SELECT taskId, name FROM TaskTag WHERE taskId IN (${taskIds.map(() => '?').join(',')})`, taskIds)
: []
const membersByTask = new Map()
for (const r of memberRows) {
const k = String(r.taskId)
if (!membersByTask.has(k)) membersByTask.set(k, [])
membersByTask.get(k).push({ userId: String(r.userId), name: r.name || String(r.userId) })
}
const tagsByTask = new Map()
for (const r of tagRows) {
const k = String(r.taskId)
if (!tagsByTask.has(k)) tagsByTask.set(k, [])
tagsByTask.get(k).push(r.name)
}
const shapeOne = (t) => {
const members = membersByTask.get(String(t.id)) || []
const usersByProject = membersByProject.get(String(t.projectId)) || new Map()
return {
...t,
extras: parseJson(t.extras, []),
column: columnById.get(String(t.columnId)) || null,
assignee: t.assigneeId ? (usersByProject.get(String(t.assigneeId)) || { id: String(t.assigneeId), name: String(t.assigneeId) }) : null,
members,
tags: tagsByTask.get(String(t.id)) || [],
}
}
return shapeOne
}
function projectSummary(p, memberCount, taskCount) {
return {
id: String(p.id),
uuid: p.uuid,
code: p.code || null,
name: p.name,
ownerId: String(p.ownerId),
isPersonal: !!p.isPersonal,
archived: !!p.archived,
createdAt: p.createdAt,
updatedAt: p.updatedAt,
taskKinds: normTaskKinds(parseJson(p.taskKinds, null)) || DEFAULT_TASK_KINDS,
icon: p.icon || null,
memberCount,
taskCount,
}
}
function assertUser() {
const uid = getCurrentUserId()
if (!uid) throw new Error('未登录')
return String(uid)
}
// ---------- 项目 ----------
export const projectApi = {
list: () => api('/projects'),
detail: (id) => api(`/projects/${id}`),
create: (body) => api('/projects', { method: 'POST', body }),
update: (id, body) => api(`/projects/${id}`, { method: 'PUT', body }),
remove: (id) => api(`/projects/${id}`, { method: 'DELETE' }),
addMember: (id, body) => api(`/projects/${id}/members`, { method: 'POST', body }),
removeMember: (id, uid) => api(`/projects/${id}/members/${uid}`, { method: 'DELETE' }),
// 我参与的项目 (本地库; 个人默认项目缺失且在线时回源一次让服务端补建)
list: async () => {
const uid = assertUser()
let rows = await db().getAll(
`SELECT p.* FROM Project p WHERE p.id IN (SELECT pm.projectId FROM ProjectMember pm WHERE pm.userId = ?)
ORDER BY p.archived, p.updatedAt DESC`,
[uid],
)
if (!rows.some((r) => !!r.isPersonal && String(r.ownerId) === uid)) {
try {
await api('/projects')
await new Promise((r) => setTimeout(r, 1200))
rows = await db().getAll(
`SELECT p.* FROM Project p WHERE p.id IN (SELECT pm.projectId FROM ProjectMember pm WHERE pm.userId = ?)
ORDER BY p.archived, p.updatedAt DESC`,
[uid],
)
} catch { /* 离线: 无个人项目则跳过 */ }
}
const items = []
for (const p of rows) {
const memberCount = await db().getOptional('SELECT COUNT(*) AS n FROM ProjectMember WHERE projectId = ?', [String(p.id)])
const taskCount = await db().getOptional('SELECT COUNT(*) AS n FROM Task WHERE projectId = ?', [String(p.id)])
items.push(projectSummary(p, memberCount?.n || 0, taskCount?.n || 0))
}
return { items }
},
detail: async (id) => {
const p = await db().getOptional('SELECT * FROM Project WHERE id = ?', [String(id)])
if (!p) throw new Error('项目不存在或无权限')
const members = await getProjectMembers(p.id)
const columns = await getColumns(p.id)
const taskCount = await db().getOptional('SELECT COUNT(*) AS n FROM Task WHERE projectId = ?', [String(p.id)])
return {
item: {
...projectSummary(p, members.length, taskCount?.n || 0),
members,
columns,
notes: parseJson(p.notes, []),
},
}
},
create: async (body) => {
const uid = assertUser()
const name = String(body?.name || '').trim()
if (!name) throw new Error('项目名称不能为空')
if (name.length > MAX_NAME) throw new Error(`项目名称不能超过 ${MAX_NAME} 字`)
let code = null
const rawCode = body?.code
if (rawCode !== undefined && rawCode !== null && String(rawCode).trim() !== '') {
code = String(rawCode).trim().toUpperCase()
if (!/^[A-Z0-9]{2,8}$/.test(code)) throw new Error('项目编号须为 2~8 位字母数字')
const dup = await db().getOptional('SELECT id FROM Project WHERE code = ?', [code])
if (dup) throw new Error(`项目编号 ${code} 已被占用`)
}
const id = uuid()
const ts = now()
await db().writeTransaction(async (tx) => {
await tx.execute(
'INSERT INTO Project (id, uuid, code, name, ownerId, isPersonal, archived, notes, taskKinds, icon, createdAt, updatedAt) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
[id, id, code, name, uid, 0, 0, '[]', null, null, ts, ts],
)
await tx.execute(
'INSERT INTO ProjectMember (id, uuid, projectId, userId, permission, createdAt) VALUES (?, ?, ?, ?, ?, ?)',
[uuid(), uuid(), id, uid, 'member', ts],
)
for (const c of DEFAULT_COLUMNS) {
await tx.execute(
'INSERT INTO BoardColumn (id, uuid, projectId, name, sortOrder, boundStatus, retention, createdAt, updatedAt) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
[uuid(), uuid(), id, c.name, c.sortOrder, c.boundStatus, 'forever', ts, ts],
)
}
})
const p = await db().get('SELECT * FROM Project WHERE id = ?', [id])
return { item: projectSummary(p, 1, 0) }
},
update: async (id, body) => {
await db().getOptional('SELECT id FROM Project WHERE id = ?', [String(id)]).then((p) => {
if (!p) throw new Error('项目不存在或无权限')
})
const data = {}
if (body?.name !== undefined) {
const t = String(body.name).trim()
if (!t) throw new Error('项目名称不能为空')
if (t.length > MAX_NAME) throw new Error(`项目名称不能超过 ${MAX_NAME} 字`)
data.name = t
}
if (body?.code !== undefined) {
const c = String(body.code || '').trim().toUpperCase()
if (!/^[A-Z0-9]{2,8}$/.test(c)) throw new Error('项目编号须为 2~8 位字母数字')
const dup = await db().getOptional('SELECT id FROM Project WHERE code = ? AND id != ?', [c, String(id)])
if (dup) throw new Error(`项目编号 ${c} 已被占用`)
data.code = c
}
if (body?.taskKinds !== undefined) {
const kinds = normTaskKinds(body.taskKinds)
if (!kinds?.length) throw new Error('至少保留一个任务类型')
data.taskKinds = JSON.stringify(kinds)
}
if (body?.icon !== undefined) {
if (body.icon === null) data.icon = null
else {
const s = String(body.icon)
if (!s.startsWith('data:image/')) throw new Error('图标格式非法')
if (s.length > 300_000) throw new Error('图标过大')
data.icon = s
}
}
if (body?.archived !== undefined) data.archived = body.archived ? 1 : 0
if (body?.notes !== undefined) {
if (!Array.isArray(body.notes)) throw new Error('信息块格式非法')
data.notes = JSON.stringify(body.notes.slice(0, 50).map((n) => ({
title: String(n?.title ?? '').slice(0, 50),
content: String(n?.content ?? '').slice(0, 20000),
})))
}
const sets = Object.keys(data).map((k) => `"${k}" = ?`)
if (sets.length) {
await db().execute(
`UPDATE Project SET ${sets.join(', ')}, updatedAt = ? WHERE id = ?`,
[...Object.values(data), now(), String(id)],
)
}
const p = await db().get('SELECT * FROM Project WHERE id = ?', [String(id)])
const memberCount = await db().getOptional('SELECT COUNT(*) AS n FROM ProjectMember WHERE projectId = ?', [String(p.id)])
const taskCount = await db().getOptional('SELECT COUNT(*) AS n FROM Task WHERE projectId = ?', [String(p.id)])
return { item: projectSummary(p, memberCount?.n || 0, taskCount?.n || 0) }
},
remove: async (id) => {
const p = await db().getOptional('SELECT * FROM Project WHERE id = ?', [String(id)])
if (!p) throw new Error('项目不存在或无权限')
if (!!p.isPersonal) throw new Error('个人默认项目不可删除')
// 手动级联 (本地 SQLite 无外键级联)
await db().writeTransaction(async (tx) => {
const taskIds = (await tx.getAll('SELECT id FROM Task WHERE projectId = ?', [String(p.id)])).map((r) => String(r.id))
if (taskIds.length) {
const ph = taskIds.map(() => '?').join(',')
await tx.execute(`DELETE FROM TaskMember WHERE taskId IN (${ph})`, taskIds)
await tx.execute(`DELETE FROM TaskTag WHERE taskId IN (${ph})`, taskIds)
}
await tx.execute('DELETE FROM Task WHERE projectId = ?', [String(p.id)])
await tx.execute('DELETE FROM BoardColumn WHERE projectId = ?', [String(p.id)])
await tx.execute('DELETE FROM ProjectMember WHERE projectId = ?', [String(p.id)])
await tx.execute('DELETE FROM Project WHERE id = ?', [String(p.id)])
})
return { ok: true }
},
addMember: async (id, body) => {
const p = await db().getOptional('SELECT * FROM Project WHERE id = ?', [String(id)])
if (!p) throw new Error('项目不存在或无权限')
if (!!p.isPersonal) throw new Error('个人默认项目不可添加成员')
let target = null
if (body?.userId) target = await db().getOptional('SELECT id, name FROM User WHERE id = ?', [String(body.userId)])
else if (body?.email) target = await db().getOptional('SELECT id, name FROM User WHERE email = ?', [String(body.email).trim()])
if (!target) throw new Error('用户不存在')
const dup = await db().getOptional('SELECT id FROM ProjectMember WHERE projectId = ? AND userId = ?', [String(p.id), String(target.id)])
if (dup) throw new Error('该用户已是项目成员')
await db().execute(
'INSERT INTO ProjectMember (id, uuid, projectId, userId, permission, createdAt) VALUES (?, ?, ?, ?, ?, ?)',
[uuid(), uuid(), String(p.id), String(target.id), 'member', now()],
)
return { ok: true, member: { userId: String(target.id), name: target.name } }
},
removeMember: async (id, uid) => {
const p = await db().getOptional('SELECT * FROM Project WHERE id = ?', [String(id)])
if (!p) throw new Error('项目不存在或无权限')
if (!!p.isPersonal) throw new Error('个人默认项目不可移除成员')
const me = getCurrentUserId()
if (String(uid) !== me && String(p.ownerId) !== me) throw new Error('只能移除自己,或由创建人移除他人')
await db().execute('DELETE FROM ProjectMember WHERE projectId = ? AND userId = ?', [String(p.id), String(uid)])
return { ok: true }
},
}
// 看板列
// ---------- 看板列 ----------
export const columnApi = {
list: (projectId) => api(`/projects/${projectId}/columns`),
add: (projectId, body) => api(`/projects/${projectId}/columns`, { method: 'POST', body }),
update: (id, body) => api(`/columns/${id}`, { method: 'PUT', body }),
remove: (id, moveToColumnId) => api(`/columns/${id}${q({ moveToColumnId })}`, { method: 'DELETE' }),
order: (projectId, ids) => api(`/projects/${projectId}/columns/order`, { method: 'PUT', body: { ids } }),
list: async (projectId) => ({ items: await getColumns(projectId) }),
add: async (projectId, body) => {
const name = String(body?.name || '').trim()
if (!name) throw new Error('列名不能为空')
if (name.length > MAX_NAME) throw new Error(`列名不能超过 ${MAX_NAME} 字`)
const cols = await getColumns(projectId)
if (cols.length >= 10) throw new Error('最多 10 列')
if (cols.some((c) => c.name === name)) throw new Error('列名已存在')
const id = uuid()
const ts = now()
await db().execute(
'INSERT INTO BoardColumn (id, uuid, projectId, name, sortOrder, boundStatus, retention, createdAt, updatedAt) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
[id, id, String(projectId), name, cols.length ? Math.max(...cols.map((c) => Number(c.sortOrder))) + 1 : 0, null, 'forever', ts, ts],
)
return { item: await db().get('SELECT * FROM BoardColumn WHERE id = ?', [id]) }
},
update: async (id, body) => {
const col = await db().getOptional('SELECT * FROM BoardColumn WHERE id = ?', [String(id)])
if (!col) throw new Error('列不存在')
const data = {}
if (body?.name !== undefined) {
const t = String(body.name).trim()
if (!t) throw new Error('列名不能为空')
if (t.length > MAX_NAME) throw new Error(`列名不能超过 ${MAX_NAME} 字`)
const dup = await db().getOptional('SELECT id FROM BoardColumn WHERE projectId = ? AND name = ? AND id != ?', [String(col.projectId), t, String(id)])
if (dup) throw new Error('列名已存在')
data.name = t
}
if (body?.boundStatus !== undefined) {
if (body.boundStatus !== null && !['todo', 'doing', 'done'].includes(body.boundStatus)) throw new Error('绑定状态取值非法')
data.boundStatus = body.boundStatus
}
if (body?.retention !== undefined) {
if (!['never', 'today', '3d', 'week', 'month', 'forever'].includes(body.retention)) throw new Error('保留选项取值非法')
data.retention = body.retention
}
const sets = Object.keys(data).map((k) => `"${k}" = ?`)
if (sets.length) {
await db().execute(`UPDATE BoardColumn SET ${sets.join(', ')}, updatedAt = ? WHERE id = ?`, [...Object.values(data), now(), String(id)])
}
return { item: await db().get('SELECT * FROM BoardColumn WHERE id = ?', [String(id)]) }
},
remove: async (id, moveToColumnId) => {
const col = await db().getOptional('SELECT * FROM BoardColumn WHERE id = ?', [String(id)])
if (!col) throw new Error('列不存在')
const cols = await getColumns(col.projectId)
if (cols.length <= 1) throw new Error('至少保留一列')
let targetId = String(moveToColumnId || '')
if (!targetId) {
const idx = cols.findIndex((c) => String(c.id) === String(id))
targetId = String((cols[idx + 1] || cols[idx - 1]).id)
}
const target = cols.find((c) => String(c.id) === targetId)
if (!target || String(target.id) === String(id)) throw new Error('迁移目标列非法')
await db().writeTransaction(async (tx) => {
// 迁移任务: 状态按目标列绑定重新裁决 (与服务端同口径)
if (target.boundStatus) {
await tx.execute('UPDATE Task SET columnId = ?, status = ?, updatedAt = ? WHERE columnId = ?', [targetId, target.boundStatus, now(), String(id)])
} else {
await tx.execute('UPDATE Task SET columnId = ?, updatedAt = ? WHERE columnId = ?', [targetId, now(), String(id)])
}
await tx.execute('DELETE FROM BoardColumn WHERE id = ?', [String(id)])
})
return { ok: true, toColumnId: targetId }
},
order: async (projectId, ids) => {
const list = Array.isArray(ids) ? ids.map(String) : []
if (!list.length) throw new Error('ids 不能为空')
await db().writeTransaction(async (tx) => {
for (let i = 0; i < list.length; i++) {
await tx.execute('UPDATE BoardColumn SET sortOrder = ?, updatedAt = ? WHERE id = ?', [i, now(), list[i]])
}
})
return { items: await getColumns(projectId) }
},
}
// 任务
// ---------- 任务 ----------
function assertTitle(t) {
const s = String(t || '').trim()
if (!s) throw new Error('任务标题不能为空')
if (s.length > 30) throw new Error('任务标题不能超过 30 字')
return s
}
function parseMarkDate(v) {
if (v === null || v === undefined || v === '') return null
const d = new Date(v)
if (Number.isNaN(d.getTime())) throw new Error('时间标记格式非法')
return d.toISOString()
}
export const taskApi = {
list: (projectId) => api(`/projects/${projectId}/tasks`),
create: (projectId, body) => api(`/projects/${projectId}/tasks`, { method: 'POST', body }),
detail: (id) => api(`/tasks/${id}`),
update: (id, body) => api(`/tasks/${id}`, { method: 'PUT', body }),
reorder: (projectId, ids) => api(`/projects/${projectId}/tasks/reorder`, { method: 'POST', body: { ids } }),
remove: (id) => api(`/tasks/${id}`, { method: 'DELETE' }),
copy: (id, projectId) => api(`/tasks/${id}/copy`, { method: 'POST', body: { projectId } }),
archive: (id) => api(`/tasks/${id}/archive`, { method: 'POST', body: {} }),
unarchive: (id) => api(`/tasks/${id}/unarchive`, { method: 'POST', body: {} }),
archivedList: (projectId, params) => api(`/projects/${projectId}/tasks/archived` + q(params)),
list: async (projectId) => {
const columns = await getColumns(projectId)
const rows = await db().getAll(
'SELECT * FROM Task WHERE projectId = ? AND parentId IS NULL AND archived = 0 ORDER BY sortOrder, createdAt, id',
[String(projectId)],
)
const shape = await shapeTasks(rows, columns)
const shaped = rows.map(shape)
// 子任务挂载 (与服务端 TASK_INCLUDE.children 同构)
for (const t of shaped) {
const childRows = await db().getAll(
'SELECT * FROM Task WHERE parentId = ? ORDER BY sortOrder, id',
[String(t.id)],
)
const childShape = await shapeTasks(childRows, columns)
t.children = childRows.map(childShape)
}
const visible = filterVisible(shaped, columns)
return { items: visible, columns, total: shaped.length }
},
create: async (projectId, body) => {
const uid = assertUser()
const title = assertTitle(body?.title)
const columns = await getColumns(projectId)
if (!columns.length) throw new Error('项目没有可用的看板列')
let parentId = null
if (body?.parentId) {
const parent = await db().getOptional('SELECT * FROM Task WHERE id = ?', [String(body.parentId)])
if (!parent) throw new Error('父任务不存在')
if (String(parent.projectId) !== String(projectId)) throw new Error('子任务必须与父任务同项目')
if (parent.parentId) throw new Error('仅支持一级子任务')
parentId = String(parent.id)
}
const memberIds = await db().getAll('SELECT userId FROM ProjectMember WHERE projectId = ?', [String(projectId)])
const memberSet = new Set(memberIds.map((r) => String(r.userId)))
let finalAssignee = null
if (body?.assigneeId === undefined) finalAssignee = memberSet.has(uid) ? uid : null
else if (body?.assigneeId !== null) {
const aid = String(body.assigneeId)
if (!memberSet.has(aid)) throw new Error('负责人必须是项目成员')
finalAssignee = aid
}
const firstCol = columns[0]
const id = uuid()
const ts = now()
await db().writeTransaction(async (tx) => {
await tx.execute(
`INSERT INTO Task (id, uuid, projectId, columnId, parentId, title, description, kind, markDate, status, doneAt, assigneeId, creatorId, extras, sortOrder, number, archived, archivedAt, archiveSource, createdAt, updatedAt)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, NULL, NULL, ?, ?)`,
[id, id, String(projectId), String(firstCol.id), parentId, title, String(body?.description || ''),
body?.kind ? String(body.kind).trim().slice(0, 20) : null, parseMarkDate(body?.markDate),
firstCol.boundStatus || 'todo', null, finalAssignee, uid, '[]', 0, null, ts, ts],
)
for (const mid of (Array.isArray(body?.memberIds) ? body.memberIds : []).map(String).filter((x) => memberSet.has(x))) {
await tx.execute('INSERT INTO TaskMember (id, uuid, taskId, userId) VALUES (?, ?, ?, ?)', [uuid(), uuid(), id, mid])
}
for (const name of (Array.isArray(body?.tags) ? body.tags : []).filter(Boolean).map((n) => String(n).slice(0, 20))) {
await tx.execute('INSERT INTO TaskTag (id, uuid, taskId, name) VALUES (?, ?, ?, ?)', [uuid(), uuid(), id, name])
}
})
const row = await db().get('SELECT * FROM Task WHERE id = ?', [id])
const shape = await shapeTasks([row], columns)
return { item: shape(row) }
},
detail: async (id) => {
const row = await db().getOptional('SELECT * FROM Task WHERE id = ?', [String(id)])
if (!row) throw new Error('任务不存在或无权限')
const columns = await getColumns(row.projectId)
const shape = await shapeTasks([row], columns)
return { item: shape(row) }
},
update: async (id, body) => {
const task = await db().getOptional('SELECT * FROM Task WHERE id = ?', [String(id)])
if (!task) throw new Error('任务不存在或无权限')
const columns = await getColumns(task.projectId)
const data = {}
if (body?.title !== undefined) data.title = assertTitle(body.title)
if (body?.description !== undefined) data.description = String(body.description)
if (body?.kind !== undefined) data.kind = body.kind ? String(body.kind).trim().slice(0, 20) : null
if (body?.markDate !== undefined) data.markDate = parseMarkDate(body.markDate)
if (body?.extras !== undefined) {
if (!Array.isArray(body.extras)) throw new Error('扩展信息格式非法')
data.extras = JSON.stringify(body.extras.map((e) => ({
label: String(e?.label ?? '').slice(0, 40),
value: String(e?.value ?? ''),
url: e?.url ? String(e.url) : '',
})))
}
if (body?.sortOrder !== undefined) data.sortOrder = Number(body.sortOrder) || 0
const memberRows = await db().getAll('SELECT userId FROM ProjectMember WHERE projectId = ?', [String(task.projectId)])
const memberSet = new Set(memberRows.map((r) => String(r.userId)))
if (body?.assigneeId !== undefined) {
if (body.assigneeId === null || body.assigneeId === '') data.assigneeId = null
else {
const aid = String(body.assigneeId)
if (!memberSet.has(aid)) throw new Error('负责人必须是项目成员')
data.assigneeId = aid
}
}
// 列 / 状态联动裁决 (与 server/task-domain/resolveStatus.js 同口径)
let status = task.status
let columnId = String(task.columnId)
const patch = {}
if (body?.columnId !== undefined) patch.columnId = String(body.columnId)
if (body?.status !== undefined) {
if (!['todo', 'doing', 'done'].includes(body.status)) throw new Error('任务状态取值非法')
patch.status = body.status
}
if (patch.columnId !== undefined && !columns.some((c) => String(c.id) === patch.columnId)) {
throw new Error('看板列不存在')
}
if (Object.keys(patch).length) {
status = patch.status !== undefined ? patch.status : task.status
columnId = patch.columnId !== undefined ? patch.columnId : String(task.columnId)
if (!task.parentId) {
const ordered = [...columns].sort((a, b) => (Number(a.sortOrder) - Number(b.sortOrder)) || String(a.id).localeCompare(String(b.id)))
const targetColumn = ordered.find((c) => String(c.id) === columnId)
if (patch.columnId !== undefined && targetColumn) {
if (targetColumn.boundStatus) status = targetColumn.boundStatus
}
if (patch.status !== undefined) {
if (!(targetColumn && targetColumn.boundStatus === status)) {
const hit = ordered.find((c) => c.boundStatus === status)
if (hit) columnId = String(hit.id)
}
}
}
data.status = status
data.columnId = columnId
}
if (data.status === 'done' && task.status !== 'done') data.doneAt = now()
else if (data.status !== undefined && data.status !== 'done') data.doneAt = null
// 拖拽降为子任务
if (body?.parentId !== undefined) {
if (body.parentId === null) {
data.parentId = null
} else {
const pid = String(body.parentId)
if (pid === String(task.id)) throw new Error('不能成为自己的子任务')
const parent = await db().getOptional('SELECT * FROM Task WHERE id = ?', [pid])
if (!parent) throw new Error('目标任务不存在')
if (String(parent.projectId) !== String(task.projectId)) throw new Error('子任务必须与父任务同项目')
if (parent.parentId) throw new Error('仅支持一级子任务')
const childCount = await db().getOptional('SELECT COUNT(*) AS n FROM Task WHERE parentId = ?', [String(task.id)])
if ((childCount?.n || 0) > 0) throw new Error('该任务已有子任务,不能成为子任务')
data.parentId = pid
}
}
await db().writeTransaction(async (tx) => {
const sets = Object.keys(data).map((k) => `"${k}" = ?`)
if (sets.length) {
await tx.execute(`UPDATE Task SET ${sets.join(', ')}, updatedAt = ? WHERE id = ?`, [...Object.values(data), now(), String(task.id)])
}
if (Array.isArray(body?.memberIds)) {
const ids = body.memberIds.map(String).filter((x) => memberSet.has(x))
await tx.execute('DELETE FROM TaskMember WHERE taskId = ?', [String(task.id)])
for (const mid of ids) {
await tx.execute('INSERT INTO TaskMember (id, uuid, taskId, userId) VALUES (?, ?, ?, ?)', [uuid(), uuid(), String(task.id), mid])
}
}
if (Array.isArray(body?.tags)) {
await tx.execute('DELETE FROM TaskTag WHERE taskId = ?', [String(task.id)])
const names = body.tags.map((n) => String(n).trim()).filter(Boolean).slice(0, 10)
for (const name of names) {
await tx.execute('INSERT INTO TaskTag (id, uuid, taskId, name) VALUES (?, ?, ?, ?)', [uuid(), uuid(), String(task.id), name.slice(0, 20)])
}
}
})
const row = await db().get('SELECT * FROM Task WHERE id = ?', [String(task.id)])
const shape = await shapeTasks([row], columns)
return { item: shape(row) }
},
reorder: async (projectId, ids) => {
const list = Array.isArray(ids) ? ids.map(String).filter(Boolean) : []
if (!list.length) throw new Error('ids 不能为空')
await db().writeTransaction(async (tx) => {
for (let i = 0; i < list.length; i++) {
await tx.execute('UPDATE Task SET sortOrder = ?, updatedAt = ? WHERE id = ?', [i, now(), list[i]])
}
})
return { ok: true }
},
remove: async (id) => {
const task = await db().getOptional('SELECT * FROM Task WHERE id = ?', [String(id)])
if (!task) throw new Error('任务不存在或无权限')
const childCount = await db().getOptional('SELECT COUNT(*) AS n FROM Task WHERE parentId = ?', [String(task.id)])
await db().writeTransaction(async (tx) => {
const ids = [String(task.id), ...((await tx.getAll('SELECT id FROM Task WHERE parentId = ?', [String(task.id)])).map((r) => String(r.id)))]
const ph = ids.map(() => '?').join(',')
await tx.execute(`DELETE FROM TaskMember WHERE taskId IN (${ph})`, ids)
await tx.execute(`DELETE FROM TaskTag WHERE taskId IN (${ph})`, ids)
await tx.execute(`DELETE FROM Task WHERE id IN (${ph})`, ids)
})
return { ok: true, deletedSubtasks: childCount?.n || 0 }
},
copy: async (id, projectId) => {
const uid = assertUser()
const source = await db().getOptional('SELECT * FROM Task WHERE id = ?', [String(id)])
if (!source) throw new Error('任务不存在或无权限')
const targetProject = await db().getOptional('SELECT * FROM Project WHERE id = ?', [String(projectId)])
if (!targetProject) throw new Error('目标项目不存在或你不是其成员')
const targetColumns = await getColumns(targetProject.id)
if (!targetColumns.length) throw new Error('目标项目没有可用的看板列')
const sourceColumns = await getColumns(source.projectId)
const targetMemberIds = new Set((await db().getAll('SELECT userId FROM ProjectMember WHERE projectId = ?', [String(targetProject.id)])).map((r) => String(r.userId)))
const pickColumn = (sourceColumnId) => {
const src = sourceColumns.find((c) => String(c.id) === String(sourceColumnId))
if (src) {
const same = targetColumns.find((c) => c.name === src.name)
if (same) return String(same.id)
}
return String(targetColumns[0]?.id)
}
const copyOne = async (tx, s, parentId) => {
const newId = uuid()
const ts = now()
await tx.execute(
`INSERT INTO Task (id, uuid, projectId, columnId, parentId, title, description, kind, markDate, status, doneAt, assigneeId, creatorId, extras, sortOrder, number, createdAt, updatedAt)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
[newId, newId, String(targetProject.id), pickColumn(s.columnId), parentId, s.title, s.description || '', s.kind || null,
s.markDate || null, s.status, s.status === 'done' ? (s.doneAt || ts) : null,
s.assigneeId && targetMemberIds.has(String(s.assigneeId)) ? String(s.assigneeId) : null,
uid, s.extras || '[]', Number(s.sortOrder) || 0, null, ts, ts],
)
const tagRows = await tx.getAll('SELECT name FROM TaskTag WHERE taskId = ?', [String(s.id)])
for (const t of tagRows) {
await tx.execute('INSERT INTO TaskTag (id, uuid, taskId, name) VALUES (?, ?, ?, ?)', [uuid(), uuid(), newId, t.name])
}
const keptMembers = (await tx.getAll('SELECT userId FROM TaskMember WHERE taskId = ?', [String(s.id)])).map((r) => String(r.userId)).filter((x) => targetMemberIds.has(x))
for (const m of keptMembers) {
await tx.execute('INSERT INTO TaskMember (id, uuid, taskId, userId) VALUES (?, ?, ?, ?)', [uuid(), uuid(), newId, m])
}
return newId
}
const newId = await db().writeTransaction(async (tx) => {
const pid = await copyOne(tx, source, null)
const children = await tx.getAll('SELECT * FROM Task WHERE parentId = ?', [String(source.id)])
for (const child of children) await copyOne(tx, child, pid)
return pid
})
const row = await db().get('SELECT * FROM Task WHERE id = ?', [newId])
const shape = await shapeTasks([row], targetColumns)
return { item: shape(row), dropped: { assignee: null, members: [] } }
},
// ---------- 归档 (T-ARC, 本地实现: 写本地库 -> 上行) ----------
/** 手动归档: 连带全部子任务, 幂等 (T-ARC-01) */
archive: async (id) => {
const task = await db().getOptional('SELECT * FROM Task WHERE id = ?', [String(id)])
if (!task) throw new Error('任务不存在或无权限')
const now = now()
await db().writeTransaction(async (tx) => {
const kids = await tx.getAll('SELECT id FROM Task WHERE parentId = ?', [String(task.id)])
const ids = [String(task.id), ...kids.map((k) => String(k.id))]
const ph = ids.map(() => '?').join(',')
await tx.execute(
`UPDATE Task SET archived = 1, archivedAt = ?, archiveSource = 'manual', updatedAt = ? WHERE id IN (${ph})`,
[now, now, ...ids],
)
})
return { ok: true, count: 1 }
},
/** 恢复归档: 回原列, 状态不变, 连带子任务 (T-ARC-03) */
unarchive: async (id) => {
const task = await db().getOptional('SELECT * FROM Task WHERE id = ?', [String(id)])
if (!task) throw new Error('任务不存在或无权限')
const now = now()
await db().writeTransaction(async (tx) => {
const kids = await tx.getAll('SELECT id FROM Task WHERE parentId = ?', [String(task.id)])
const ids = [String(task.id), ...kids.map((k) => String(k.id))]
const ph = ids.map(() => '?').join(',')
await tx.execute(
`UPDATE Task SET archived = 0, archivedAt = NULL, archiveSource = NULL, updatedAt = ? WHERE id IN (${ph})`,
[now, ...ids],
)
})
return { ok: true, count: 1 }
},
/**
* 已归档查询: 关键词 / 类型 / 列 / 归档日期区间 + 游标分页 (T-ARC-04)
* 参数: { keyword, kind, columnId, from, to, limit, cursor }
* cursor 形如 "<archivedAt ISO>|<id>", 按 (archivedAt desc, id desc) 取下一页
*/
archivedList: async (projectId, params = {}) => {
const columns = await getColumns(projectId)
const p = params || {}
const limit = Math.min(100, Math.max(1, Number(p.limit) || 20))
const where = ['projectId = ?', 'archived = 1', 'parentId IS NULL']
const args = [String(projectId)]
if (p.keyword) {
where.push('title LIKE ?')
args.push(`%${String(p.keyword).trim()}%`)
}
if (p.kind) {
where.push('kind = ?')
args.push(String(p.kind))
}
if (p.columnId) {
where.push('columnId = ?')
args.push(String(p.columnId))
}
if (p.from) {
where.push('archivedAt >= ?')
args.push(String(p.from) + 'T00:00:00+08:00'.replace('+08:00', 'Z'))
}
if (p.to) {
where.push('archivedAt <= ?')
args.push(String(p.to) + 'T23:59:59.999Z')
}
if (p.cursor) {
const [ts, cid] = String(p.cursor).split('|')
where.push('(archivedAt < ? OR (archivedAt = ? AND id < ?))')
args.push(ts, ts, String(cid))
}
const rows = await db().getAll(
`SELECT * FROM Task WHERE ${where.join(' AND ')} ORDER BY archivedAt DESC, id DESC LIMIT ${limit + 1}`,
args,
)
const hasMore = rows.length > limit
const page = rows.slice(0, limit)
const shape = await shapeTasks(page, columns)
const items = page.map(shape)
const last = page[page.length - 1]
const nextCursor = hasMore && last ? `${last.archivedAt}|${last.id}` : null
return { items, nextCursor }
},
}
+13 -2
View File
@@ -1,5 +1,6 @@
import { createContext, useContext, useEffect, useState } from 'react'
import { api, getToken, setToken, setRememberFlag } from '../api/client.js'
import { api, getToken, setToken, setRememberFlag, setCurrentUserId, clearApiCache } from '../api/client.js'
import { disconnectAndClearPowersync } from '../lib/powersync/db.js'
const AuthContext = createContext(null)
@@ -17,10 +18,14 @@ export function AuthProvider({ children }) {
}
try {
const data = await api('/auth/me')
if (!cancelled) setUser(data.user)
if (!cancelled) {
setUser(data.user)
setCurrentUserId(data.user?.id)
}
} catch {
if (!cancelled) {
setToken('')
setCurrentUserId('')
setUser(null)
}
} finally {
@@ -36,6 +41,7 @@ export function AuthProvider({ children }) {
setToken(data.token)
setRememberFlag(!!remember)
setUser(data.user)
setCurrentUserId(data.user?.id)
return data.user
}
@@ -44,6 +50,11 @@ export function AuthProvider({ children }) {
setToken('')
setRememberFlag(false)
setUser(null)
setCurrentUserId('')
try { clearApiCache() } catch { /* ignore */ }
try { localStorage.removeItem('iboard_ps_cred') } catch { /* ignore */ }
// 断开同步并清空本地 SQLite (0.2.1 离线编辑)
try { await disconnectAndClearPowersync() } catch { /* ignore */ }
}
return (
+4 -1
View File
@@ -9,7 +9,7 @@ import { kindColor } from '../../pages/task/kind.js'
const MAX_SUB = 3
export default function TaskCard({
task, bindDrag, onClick, onToggleSub, onToggle, onMore, dragging = false, highlight = false,
task, codePrefix, bindDrag, onClick, onToggleSub, onToggle, onMore, dragging = false, highlight = false,
}) {
const children = task.children || []
const shown = children.slice(0, MAX_SUB)
@@ -47,6 +47,9 @@ export default function TaskCard({
</div>
<div className="bmeta">
{codePrefix && task.number != null && (
<span className="num-tag">{codePrefix}-{task.number}</span>
)}
{task.markDate && (
<span className="date-tag">{task.markDate.slice(5, 10).replace('-', '/')}</span>
)}
+4 -1
View File
@@ -10,7 +10,7 @@ const statusLabel = (s) => (s === 'done' ? '完成' : s === 'doing' ? '执行中
// 复选框 / ⋯ 是独立控件: pointerdown 不冒泡, 不发起拖动,
// 避免长按行后抬手时合成的 click 落在控件上误触状态切换
export default function TaskRow({
task, onToggle, onClick, onMore, bindDrag, bindDragHandle, dragging = false, dragOver, indent = false, children,
task, codePrefix, onToggle, onClick, onMore, bindDrag, bindDragHandle, dragging = false, dragOver, indent = false, children,
}) {
const done = task.status === 'done'
return (
@@ -52,6 +52,9 @@ export default function TaskRow({
<div className="task-title">{task.title}</div>
{/* 无类型/成员也保留该行, 与有标签的行等高 */}
<div className="task-meta">
{codePrefix && task.number != null && (
<span className="num-tag">{codePrefix}-{task.number}</span>
)}
{task.markDate && (
<span className="date-tag">{task.markDate.slice(5, 10).replace('-', '/')}</span>
)}
+12
View File
@@ -1,11 +1,13 @@
import { useEffect, useState } from 'react'
import { Outlet, useLocation } from 'react-router-dom'
import BottomNav from '../components/BottomNav.jsx'
import { isOffline, subscribeOffline } from '../api/client.js'
// 移动端应用外壳
// - 顶部安全区: 用 --safe-top 撑开 (由 main.jsx 的 calibrateSafeTop 实测校准)
// - 中间 <main>: flex:1 可滚动主区
// - 底部 TabBar: antd-mobile TabBar 自带底部安全区
// - 左上角离线标识 (0.2.1): 离线或服务不可达时显示, 请求恢复后自动隐藏
//
// 注意: 这里不再用 antd-mobile 的 <SafeArea position="top" />.
// 它只是一个空 div, 高度完全依赖 env(safe-area-inset-top); 而 Android WebView
@@ -22,9 +24,19 @@ export default function MobileShell() {
return () => clearTimeout(t)
}, [location.pathname])
// 离线状态 (窗口左上角标识)
const [offline, setOfflineState] = useState(isOffline())
useEffect(() => subscribeOffline(setOfflineState), [])
return (
<div className="app-root">
<div className="app-safe-top" aria-hidden="true" />
{offline && (
<div className="offline-badge" title="当前离线:显示本地缓存数据">
<span className="offline-dot" />
<span className="offline-text">离线</span>
</div>
)}
<main className="app-main">
<div className={'page-transition' + (animating ? ' active' : '')}>
<Outlet />
+74
View File
@@ -0,0 +1,74 @@
// PowerSync 后端连接器: 凭证获取 + 上传队列落地 (0.2.1)
// 契约见 server/routes/powersync.js: POST /api/powersync/upload { ops: [{ id, table, op, uuid, data }] }
// Web SDK 无需基类, 实现 fetchCredentials / uploadData 两个方法即可
import { api, getToken } from '../../api/client.js'
// 上次成功的同步凭证: 离线时复用, 避免 SDK 因"凭证不可用"清空本地库
const CRED_KEY = 'iboard_ps_cred'
export class IBoardConnector {
async fetchCredentials() {
// 未登录: 返回 null 让 SDK 保持断开 (登录后由页面触发 connect)
if (!getToken()) return null
try {
const { token, endpoint } = await api('/powersync/token', { method: 'POST' })
// VITE_POWERSYNC_URL: 打包端 (Tauri 外壳等) 可覆盖服务端下发的同步地址
const ep = import.meta.env.VITE_POWERSYNC_URL || endpoint || ''
if (ep && token) {
try { localStorage.setItem(CRED_KEY, JSON.stringify({ endpoint: ep, token, ts: Date.now() })) } catch { /* ignore */ }
}
return { endpoint: ep, token }
} catch {
// 离线 / 服务不可达: 复用上次凭证 (本地库数据继续可读, 联网后自动恢复同步)
try {
const cached = JSON.parse(localStorage.getItem(CRED_KEY) || 'null')
if (cached?.endpoint && cached?.token) return { endpoint: cached.endpoint, token: cached.token }
} catch { /* ignore */ }
return null
}
}
async invalidateCredentials() {
// 交给 SDK: 下次 fetchCredentials 会重新尝试取新凭证 (离线时回退缓存)
}
async uploadData(database) {
const batch = await database.getCrudBatch()
if (!batch) return
// 本地行的 id 即为 uuid (客户端创建时生成), 服务端按 uuid 幂等 upsert。
// PATCH 的 opData 只含变更列, 这里统一回读全行按 PUT 上行, 保证服务端整行 upsert 语义。
const ops = []
for (let i = 0; i < batch.crud.length; i++) {
const op = batch.crud[i]
let data = op.opData || {}
if (op.op !== 'DELETE') {
try {
const row = await database.get(`SELECT * FROM "${op.table}" WHERE id = ?`, [op.id])
if (row) data = row
} catch { /* 回读失败则用 opData 兜底 */ }
}
ops.push({
id: String(i),
table: op.table,
op: op.op === 'DELETE' ? 'DELETE' : 'PUT',
uuid: op.id,
data,
})
}
let res
try {
res = await api('/powersync/upload', { method: 'POST', body: { ops } })
} catch (e) {
// 网络失败/401: 抛出让 SDK 稍后重试本批
throw e
}
const failed = (res?.results || []).filter((r) => !r.ok)
if (failed.length) {
// 单条业务错误: 记录并放行 (重试也无法成功, 避免队列卡死); 服务端已尽力落地其余 op
console.error('[powersync] upload 部分失败:', failed)
}
await batch.complete()
}
}
+37
View File
@@ -0,0 +1,37 @@
// PowerSync 本地库单例 (0.2.1 离线编辑)
// 页面用法: usePowerSyncQuery 等见 src/lib/powersync/react.jsx; 写入用 db.execute/writeTransaction
import { PowerSyncDatabase } from '@powersync/web'
import { AppSchema } from './schema.js'
import { IBoardConnector } from './connector.js'
let dbInstance = null
export function getPowersyncDb() {
if (!dbInstance) {
dbInstance = new PowerSyncDatabase({
schema: AppSchema,
database: {
// 默认 IDBBatchAtomicVFS (IndexedDB), 兼容性最广; WebView2 (Chromium) 后续可切 OPFS 加速
dbFilename: 'iboard-powersync.db',
},
})
}
return dbInstance
}
/** 登录后调用: 建立同步连接 (幂等) */
export async function connectPowersync() {
const db = getPowersyncDb()
db.connect(new IBoardConnector())
return db
}
/** 退出登录时调用: 断开同步并清空本地库 */
export async function disconnectAndClearPowersync() {
if (!dbInstance) return
try {
await dbInstance.disconnectAndClear()
} catch {
/* ignore */
}
}
+26
View File
@@ -0,0 +1,26 @@
// PowerSync React 接入 (0.2.1 离线编辑)
// 用法: 在 App 外层包 <PowerSyncProvider>; 任务模块内用 re-export 的 useQuery/useStatus/usePowerSync
import React, { useEffect, useMemo } from 'react'
import { PowerSyncContext } from '@powersync/react'
import { getPowersyncDb, connectPowersync, disconnectAndClearPowersync } from './db.js'
import { useAuth } from '../../auth/AuthContext.jsx'
/**
* 登录后建立同步连接; 登出后断开并清空本地库 (避免下一用户读到残留数据)
*/
export function PowerSyncProvider({ children }) {
const { user } = useAuth()
const db = useMemo(() => getPowersyncDb(), [])
useEffect(() => {
if (user) {
connectPowersync().catch((e) => console.error('[powersync] connect 失败:', e))
} else {
disconnectAndClearPowersync()
}
}, [user])
return <PowerSyncContext.Provider value={db}>{children}</PowerSyncContext.Provider>
}
export { useQuery, useStatus, useSuspenseQuery, usePowerSync } from '@powersync/react'
+98
View File
@@ -0,0 +1,98 @@
// PowerSync 客户端 schema (0.2.1 离线编辑)
// 表名/列名与 deploy/0.2.1/powersync/sync-config.yaml 的输出严格一致 (PascalCase + text 型 id 由 SDK 自建)
// 见 docs/V0.2/离线编辑模块/0.2.1实施方案.md
import { column, Schema, Table } from '@powersync/web'
// 时间/JSON 列在同步流里以文本落地, 本地按字符串读写 (JSON 列为 JSON 字符串)
const project = new Table(
{
uuid: column.text,
code: column.text,
name: column.text,
ownerId: column.text,
isPersonal: column.integer,
archived: column.integer,
notes: column.text,
taskKinds: column.text,
icon: column.text,
autoArchive: column.text,
createdAt: column.text,
updatedAt: column.text,
},
{ indexes: { code: ['code'] } },
)
const projectMember = new Table({
uuid: column.text,
projectId: column.text,
userId: column.text,
permission: column.text,
createdAt: column.text,
})
const boardColumn = new Table(
{
uuid: column.text,
projectId: column.text,
name: column.text,
sortOrder: column.integer,
boundStatus: column.text,
retention: column.text,
createdAt: column.text,
updatedAt: column.text,
},
{ indexes: { project: ['projectId'] } },
)
const task = new Table(
{
uuid: column.text,
projectId: column.text,
columnId: column.text,
parentId: column.text,
title: column.text,
description: column.text,
kind: column.text,
markDate: column.text,
status: column.text,
doneAt: column.text,
assigneeId: column.text,
creatorId: column.text,
extras: column.text,
sortOrder: column.integer,
number: column.integer,
archived: column.integer,
archivedAt: column.text,
archiveSource: column.text,
createdAt: column.text,
updatedAt: column.text,
},
{ indexes: { project: ['projectId'], column: ['columnId'], number: ['projectId', 'number'] } },
)
const taskMember = new Table({
uuid: column.text,
taskId: column.text,
userId: column.text,
})
const taskTag = new Table({
uuid: column.text,
taskId: column.text,
name: column.text,
})
const user = new Table({
name: column.text,
email: column.text,
})
export const AppSchema = new Schema({
Project: project,
ProjectMember: projectMember,
BoardColumn: boardColumn,
Task: task,
TaskMember: taskMember,
TaskTag: taskTag,
User: user,
})
+2 -1
View File
@@ -36,7 +36,7 @@ function ScrollBody({ children }) {
// 横向滚列; 列内独立纵向滚动, 列头固定, 滚动时右缘显示滚动条
// 不做"拖到卡片上转子任务" —— 统一走详情页「转为子任务」
export default function BoardView({
tasks, columns, onMoveColumn, onOpen, onToggleSub, onToggle, onMore, onQuickAdd,
tasks, columns, codePrefix, onMoveColumn, onOpen, onToggleSub, onToggle, onMore, onQuickAdd,
}) {
const drag = useColumnDrag({ onDrop: onMoveColumn })
@@ -69,6 +69,7 @@ export default function BoardView({
<TaskCard
key={t.id}
task={t}
codePrefix={codePrefix}
dragging={drag.dragTask?.id === t.id}
bindDrag={drag.bind}
onClick={() => { if (!drag.dragTask && !drag.justEnded()) onOpen?.(t) }}
+2 -1
View File
@@ -7,7 +7,7 @@ import useRowDrag from '../../components/task/useRowDrag.js'
// 换列: 行/把手拖动, 跟手浮层, 手指划到哪个分组松手就落到哪 (与看板一致)
// (列表只展示有任务的列, 空列需到看板视图拖入)
export default function ListView({
tasks, columns, onToggle, onOpen, onMore, onMoveColumn, onReorder,
tasks, columns, codePrefix, onToggle, onOpen, onMore, onMoveColumn, onReorder,
}) {
const [collapsed, setCollapsed] = useState({})
const drag = useRowDrag({ columns, onDrop: onMoveColumn, onReorder })
@@ -49,6 +49,7 @@ export default function ListView({
<div key={t.id}>
<TaskRow
task={t}
codePrefix={codePrefix}
onToggle={onToggle}
onClick={() => { if (!drag.justEnded()) onOpen(t) }}
onMore={onMore}
+2
View File
@@ -276,6 +276,7 @@ export default function ProjectView({ projectId, onProjectChanged, onProjectExit
<ListView
tasks={visibleTasks}
columns={columns}
codePrefix={project?.code}
onToggle={toggleDone}
onOpen={(t) => setOpenTask(t)}
onMore={openTaskMenu}
@@ -286,6 +287,7 @@ export default function ProjectView({ projectId, onProjectChanged, onProjectExit
<BoardView
tasks={visibleTasks}
columns={columns}
codePrefix={project?.code}
onMoveColumn={moveToColumn}
onOpen={(t) => setOpenTask(t)}
onToggleSub={(c) => toggleDone(c)}
+36
View File
@@ -70,6 +70,35 @@ input, textarea, select { font: inherit; }
background: var(--color-bg);
}
/* 离线标识 (0.2.1): 窗口左上角, 仅在离线/服务不可达时出现 */
.offline-badge {
position: fixed;
top: calc(var(--safe-top) + 4px);
left: 6px;
z-index: 120;
display: inline-flex;
align-items: center;
gap: 4px;
padding: 2px 6px;
border-radius: 999px;
background: rgba(255, 77, 79, 0.12);
border: 1px solid rgba(255, 77, 79, 0.35);
color: #cf1322;
font-size: 10px;
line-height: 1;
font-weight: 600;
pointer-events: none;
user-select: none;
}
.offline-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: #ff4d4f;
box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.18);
}
.offline-text { letter-spacing: 1px; }
.app-main {
flex: 1 1 auto;
min-height: 0;
@@ -718,6 +747,13 @@ body.me-safe-top .app-safe-top { height: 0; }
font-size: 10px; line-height: 1; font-weight: 600; color: #fff;
border-radius: 4px; padding: 3px 5px; flex-shrink: 0; white-space: nowrap;
}
/* 任务编号 (0.2.1): `项目编号-序号`, 服务端分配 */
.num-tag {
display: inline-flex; align-items: center;
font-size: 10px; line-height: 1; font-weight: 600;
color: #5b6b7c; background: #eef2f6; border-radius: 4px; padding: 3px 5px;
flex-shrink: 0; white-space: nowrap; font-variant-numeric: tabular-nums;
}
/* 项目管理: 任务类型编辑 chips */
.kind-chip-row { display: flex; flex-wrap: wrap; gap: 8px; }
.kind-chip {
+4
View File
@@ -17,6 +17,10 @@ const BUILD_ID = makeBuildId()
// 注意: 不能设 hmr: false —— 那会连 WS 通道一起关掉, 文件变更不再触发任何刷新。
export default defineConfig({
plugins: [react()],
// PowerSync 的数据库/同步跑在 module worker 里, iife worker 不支持代码分包 (0.2.1)
worker: {
format: 'es',
},
define: {
__BUILD_ID__: JSON.stringify(BUILD_ID), // 构建时生成的唯一 build 号
},