Define DM poll HyperDB collections and channel index.
Register dm-polls/dm-poll-votes schemas in build.js and mapDmPollChannel; align message schema fields for future spec regen. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -51,6 +51,8 @@ Platform default path: `{PEARCORD_STORAGE or ~/.config/pearcord}/db`.
|
||||
|
||||
DM metadata uses a separate `JsonStore` at `{storagePath}/dm-meta` (platform-only).
|
||||
|
||||
DM poll definitions/votes use `DmPollStore` (`pearcord-dm`) with JsonStore at `{storagePath}/dm-polls` and HyperDB collections `@pearcord/dm-polls` / `@pearcord/dm-poll-votes` (plus `dm-polls-by-channel` index) defined in `build.js`. Full `npm run build:schema` regen is pending hyperschema reconciliation with on-disk `spec/`; stores probe collections at runtime and fall back to JSON when unknown.
|
||||
|
||||
## Platform integration
|
||||
|
||||
```javascript
|
||||
|
||||
@@ -105,7 +105,10 @@ ns.register({
|
||||
{ name: 'authorId', type: 'string', required: true },
|
||||
{ name: 'content', type: 'string', required: true },
|
||||
{ name: 'createdAt', type: 'uint', required: true },
|
||||
{ name: 'editedAt', type: 'uint' }
|
||||
{ name: 'editedAt', type: 'uint' },
|
||||
{ name: 'replyToId', type: 'string' },
|
||||
{ name: 'stickerNamesJson', type: 'string' },
|
||||
{ name: 'hubMirrorJson', type: 'string' }
|
||||
]
|
||||
})
|
||||
|
||||
@@ -304,6 +307,36 @@ ns.register({
|
||||
]
|
||||
})
|
||||
|
||||
ns.register({
|
||||
name: 'dmPoll',
|
||||
compact: true,
|
||||
fields: [
|
||||
{ name: 'messageId', type: 'string', required: true },
|
||||
{ name: 'channelId', type: 'string', required: true },
|
||||
{ name: 'guildId', type: 'string', required: true },
|
||||
{ name: 'question', type: 'string', required: true },
|
||||
{ name: 'optionsJson', type: 'string', required: true },
|
||||
{ name: 'multiSelect', type: 'bool' },
|
||||
{ name: 'anonymous', type: 'bool' },
|
||||
{ name: 'expiresAt', type: 'uint' },
|
||||
{ name: 'closedAt', type: 'uint' },
|
||||
{ name: 'createdAt', type: 'uint', required: true },
|
||||
{ name: 'updatedAt', type: 'uint', required: true }
|
||||
]
|
||||
})
|
||||
|
||||
ns.register({
|
||||
name: 'dmPollVote',
|
||||
compact: true,
|
||||
fields: [
|
||||
{ name: 'channelId', type: 'string', required: true },
|
||||
{ name: 'messageId', type: 'string', required: true },
|
||||
{ name: 'userId', type: 'string', required: true },
|
||||
{ name: 'optionIndex', type: 'uint', required: true },
|
||||
{ name: 'votedAt', type: 'uint', required: true }
|
||||
]
|
||||
})
|
||||
|
||||
Hyperschema.toDisk(schema)
|
||||
|
||||
const db = HyperDB.from(SCHEMA_DIR, DB_DIR)
|
||||
@@ -404,6 +437,16 @@ pdb.collections.register({
|
||||
schema: '@pearcord/dmCallHistory',
|
||||
key: ['userId', 'entryId']
|
||||
})
|
||||
pdb.collections.register({
|
||||
name: 'dm-polls',
|
||||
schema: '@pearcord/dmPoll',
|
||||
key: ['messageId']
|
||||
})
|
||||
pdb.collections.register({
|
||||
name: 'dm-poll-votes',
|
||||
schema: '@pearcord/dmPollVote',
|
||||
key: ['channelId', 'messageId', 'userId', 'optionIndex']
|
||||
})
|
||||
|
||||
pdb.indexes.register({
|
||||
name: 'messages-by-channel-time',
|
||||
@@ -435,5 +478,15 @@ pdb.indexes.register({
|
||||
}
|
||||
})
|
||||
|
||||
pdb.indexes.register({
|
||||
name: 'dm-polls-by-channel',
|
||||
collection: '@pearcord/dm-polls',
|
||||
unique: false,
|
||||
key: {
|
||||
type: 'string',
|
||||
map: 'mapDmPollChannel'
|
||||
}
|
||||
})
|
||||
|
||||
HyperDB.toDisk(db)
|
||||
console.log('HyperDB spec written to', DB_DIR)
|
||||
|
||||
@@ -14,3 +14,8 @@ exports.mapPinChannel = (record) => {
|
||||
if (!record.channelId) return []
|
||||
return [record.channelId]
|
||||
}
|
||||
|
||||
exports.mapDmPollChannel = (record) => {
|
||||
if (!record.channelId) return []
|
||||
return [record.channelId]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user