mirror of
https://github.com/beilunyang/moemail.git
synced 2025-09-27 03:46:03 +08:00
feat: Modify apikeys schema and README configuration files
This commit is contained in:
20
README.md
20
README.md
@@ -87,9 +87,9 @@ pnpm install
|
|||||||
|
|
||||||
3. 设置 wrangler:
|
3. 设置 wrangler:
|
||||||
```bash
|
```bash
|
||||||
cp wrangler.example.toml wrangler.toml
|
cp wrangler.example.json wrangler.json
|
||||||
cp wrangler.email.example.toml wrangler.email.toml
|
cp wrangler.email.example.json wrangler.email.json
|
||||||
cp wrangler.cleanup.example.toml wrangler.cleanup.toml
|
cp wrangler.cleanup.example.json wrangler.cleanup.json
|
||||||
```
|
```
|
||||||
设置 Cloudflare D1 数据库名以及数据库 ID
|
设置 Cloudflare D1 数据库名以及数据库 ID
|
||||||
|
|
||||||
@@ -441,17 +441,17 @@ const data = await res.json();
|
|||||||
|
|
||||||
## 交流
|
## 交流
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr style="max-width: 360px">
|
||||||
<td style="max-width: 360px">
|
<td>
|
||||||
<img src="https://pic.otaku.ren/20250309/AQADAcQxGxQjaVZ-.jpg" width="300" />
|
<img src="https://pic.otaku.ren/20250309/AQADAcQxGxQjaVZ-.jpg" />
|
||||||
</td>
|
</td>
|
||||||
<td style="max-width: 360px">
|
<td>
|
||||||
<img src="https://pic.otaku.ren/20250309/AQADCMQxGxQjaVZ-.jpg" width="300" />
|
<img src="https://pic.otaku.ren/20250309/AQADCMQxGxQjaVZ-.jpg" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr style="max-width: 360px">
|
||||||
<td>
|
<td>
|
||||||
关注公众号,了解更多项目进展以及AI, 区块链,独立开发资讯
|
关注公众号,了解更多项目进展以及AI,区块链,独立开发资讯
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
添加微信,备注 "MoeMail" 拉你进微信交流群
|
添加微信,备注 "MoeMail" 拉你进微信交流群
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { integer, sqliteTable, text, primaryKey } from "drizzle-orm/sqlite-core"
|
import { integer, sqliteTable, text, primaryKey, uniqueIndex } from "drizzle-orm/sqlite-core"
|
||||||
import type { AdapterAccountType } from "next-auth/adapters"
|
import type { AdapterAccountType } from "next-auth/adapters"
|
||||||
import { relations } from 'drizzle-orm';
|
import { relations } from 'drizzle-orm';
|
||||||
|
|
||||||
@@ -96,12 +96,14 @@ export const userRoles = sqliteTable("user_role", {
|
|||||||
export const apiKeys = sqliteTable('api_keys', {
|
export const apiKeys = sqliteTable('api_keys', {
|
||||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
||||||
userId: text('user_id').notNull().references(() => users.id),
|
userId: text('user_id').notNull().references(() => users.id),
|
||||||
name: text('name').notNull().unique(),
|
name: text('name').notNull(),
|
||||||
key: text('key').notNull().unique(),
|
key: text('key').notNull().unique(),
|
||||||
createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => new Date()),
|
createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => new Date()),
|
||||||
expiresAt: integer('expires_at', { mode: 'timestamp' }),
|
expiresAt: integer('expires_at', { mode: 'timestamp' }),
|
||||||
enabled: integer('enabled', { mode: 'boolean' }).notNull().default(true),
|
enabled: integer('enabled', { mode: 'boolean' }).notNull().default(true),
|
||||||
});
|
}, (table) => ({
|
||||||
|
nameUserIdUnique: uniqueIndex('name_user_id_unique').on(table.name, table.userId)
|
||||||
|
}));
|
||||||
|
|
||||||
export const apiKeysRelations = relations(apiKeys, ({ one }) => ({
|
export const apiKeysRelations = relations(apiKeys, ({ one }) => ({
|
||||||
user: one(users, {
|
user: one(users, {
|
||||||
|
Reference in New Issue
Block a user